diff options
author | Divya Sharma <divyash@codeaurora.org> | 2018-02-27 08:32:05 -0800 |
---|---|---|
committer | Divya Sharma <divyash@codeaurora.org> | 2018-02-27 08:32:05 -0800 |
commit | 4e4914b22b779e6376bb00ae20636175b2a70d8c (patch) | |
tree | f4ebc5eae2c99e20aceefcc9ffc3de19782f0fbe /cmds/statsd/tests/LogEvent_test.cpp | |
parent | dbed40a3cd31af821ea99c605664908d67df2747 (diff) | |
parent | ed5d4d06907844e1c87a6ee17c4f2868a8cc6d56 (diff) |
PPR1.180219.001_AOSP_Merge
Conflicts:
core/res/res/values/config.xml
core/res/res/values/symbols.xml
packages/SystemUI/res/values/config.xml
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
telecomm/java/android/telecom/Call.java
telecomm/java/android/telecom/Connection.java
telecomm/java/android/telecom/ConnectionService.java
Change-Id: I524d38a61608069028b3496a189118d8eff75f4b
Diffstat (limited to 'cmds/statsd/tests/LogEvent_test.cpp')
-rw-r--r-- | cmds/statsd/tests/LogEvent_test.cpp | 670 |
1 files changed, 132 insertions, 538 deletions
diff --git a/cmds/statsd/tests/LogEvent_test.cpp b/cmds/statsd/tests/LogEvent_test.cpp index fd28460e8e01..b64921501275 100644 --- a/cmds/statsd/tests/LogEvent_test.cpp +++ b/cmds/statsd/tests/LogEvent_test.cpp @@ -22,548 +22,142 @@ namespace android { namespace os { namespace statsd { -TEST(LogEventTest, testEmptyEvent) { - const int32_t TAG_ID = 123; - LogEvent event(TAG_ID, 0); - event.init(); - - DimensionsValue dimensionsValue; - EXPECT_FALSE(event.GetSimpleAtomDimensionsValueProto(234, &dimensionsValue)); - FieldMatcher dimensions; - dimensions.set_field(event.GetTagId()); - EXPECT_FALSE(event.GetAtomDimensionsValueProto(dimensions, &dimensionsValue)); - - dimensions.add_child()->set_field(3); - dimensions.mutable_child(0)->set_position(Position::FIRST); - EXPECT_FALSE(event.GetAtomDimensionsValueProto(dimensions, &dimensionsValue)); - - dimensions.mutable_child(0)->set_position(Position::ANY); - EXPECT_FALSE(event.GetAtomDimensionsValueProto(dimensions, &dimensionsValue)); - - dimensions.mutable_child(0)->set_position(Position::LAST); - EXPECT_FALSE(event.GetAtomDimensionsValueProto(dimensions, &dimensionsValue)); +TEST(LogEventTest, TestLogParsing) { + LogEvent event1(1, 2000); + + std::vector<AttributionNode> nodes; + + AttributionNode node1; + node1.set_uid(1000); + node1.set_tag("tag1"); + nodes.push_back(node1); + + AttributionNode node2; + node2.set_uid(2000); + node2.set_tag("tag2"); + nodes.push_back(node2); + + event1.write(nodes); + event1.write("hello"); + event1.write((int32_t)10); + event1.write((int64_t)20); + event1.write((float)1.1); + event1.init(); + + const auto& items = event1.getValues(); + EXPECT_EQ((size_t)8, items.size()); + EXPECT_EQ(1, event1.GetTagId()); + + const FieldValue& item0 = event1.getValues()[0]; + EXPECT_EQ(0x2010101, item0.mField.getField()); + EXPECT_EQ(Type::INT, item0.mValue.getType()); + EXPECT_EQ(1000, item0.mValue.int_value); + + const FieldValue& item1 = event1.getValues()[1]; + EXPECT_EQ(0x2010182, item1.mField.getField()); + EXPECT_EQ(Type::STRING, item1.mValue.getType()); + EXPECT_EQ("tag1", item1.mValue.str_value); + + const FieldValue& item2 = event1.getValues()[2]; + EXPECT_EQ(0x2018201, item2.mField.getField()); + EXPECT_EQ(Type::INT, item2.mValue.getType()); + EXPECT_EQ(2000, item2.mValue.int_value); + + const FieldValue& item3 = event1.getValues()[3]; + EXPECT_EQ(0x2018282, item3.mField.getField()); + EXPECT_EQ(Type::STRING, item3.mValue.getType()); + EXPECT_EQ("tag2", item3.mValue.str_value); + + const FieldValue& item4 = event1.getValues()[4]; + EXPECT_EQ(0x20000, item4.mField.getField()); + EXPECT_EQ(Type::STRING, item4.mValue.getType()); + EXPECT_EQ("hello", item4.mValue.str_value); + + const FieldValue& item5 = event1.getValues()[5]; + EXPECT_EQ(0x30000, item5.mField.getField()); + EXPECT_EQ(Type::INT, item5.mValue.getType()); + EXPECT_EQ(10, item5.mValue.int_value); + + const FieldValue& item6 = event1.getValues()[6]; + EXPECT_EQ(0x40000, item6.mField.getField()); + EXPECT_EQ(Type::LONG, item6.mValue.getType()); + EXPECT_EQ((int64_t)20, item6.mValue.long_value); + + const FieldValue& item7 = event1.getValues()[7]; + EXPECT_EQ(0x50000, item7.mField.getField()); + EXPECT_EQ(Type::FLOAT, item7.mValue.getType()); + EXPECT_EQ((float)1.1, item7.mValue.float_value); } -TEST(LogEventTest, testRepeatedAttributionNode) { - const int32_t TAG_ID = 123; - LogEvent event(TAG_ID, 0); - AttributionNode attribution_node1; - attribution_node1.set_uid(1111); - attribution_node1.set_tag("locationService"); - - AttributionNode attribution_node2; - attribution_node2.set_uid(2222); - attribution_node2.set_tag("locationService2"); - - AttributionNode attribution_node3; - attribution_node3.set_uid(3333); - attribution_node3.set_tag("locationService3"); - std::vector<AttributionNode> attribution_nodes = - {attribution_node1, attribution_node2, attribution_node3}; - - // 1nd field: int32. - EXPECT_TRUE(event.write(int32_t(11))); - // 2rd field: float. - EXPECT_TRUE(event.write(3.45f)); - // Here it assume that the atom proto contains a repeated AttributionNode field. - // 3rd field: attribution node. This is repeated field. - EXPECT_TRUE(event.write(attribution_nodes)); - // 4th field: bool. - EXPECT_TRUE(event.write(true)); - // 5th field: long. - EXPECT_TRUE(event.write(uint64_t(1234))); - - event.init(); - - DimensionsValue dimensionsValue; - // Query single primitive fields. - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(1, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), 11); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(2, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_float(), 3.45f); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(4, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 4); - // The bool value is stored in value_int field as logD does not support bool. - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), true); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(5, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 5); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_long(), long(1234)); - - // First attribution. - FieldMatcher first_uid_dimensions; - first_uid_dimensions.set_field(event.GetTagId()); - first_uid_dimensions.add_child()->set_field(3); - first_uid_dimensions.mutable_child(0)->set_position(Position::FIRST); - first_uid_dimensions.mutable_child(0)->add_child()->set_field(1); - EXPECT_TRUE(event.GetAtomDimensionsValueProto(first_uid_dimensions, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 1111); - - FieldMatcher first_tag_dimensions = first_uid_dimensions; - first_tag_dimensions.mutable_child(0)->mutable_child(0)->set_field(2); - EXPECT_TRUE(event.GetAtomDimensionsValueProto(first_tag_dimensions, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_str(), "locationService"); - - FieldMatcher first_attribution_dimensions = first_uid_dimensions; - first_attribution_dimensions.mutable_child(0)->add_child()->set_field(2); - EXPECT_TRUE(event.GetAtomDimensionsValueProto(first_attribution_dimensions, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 1111); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService"); - - FieldMatcher last_attribution_dimensions = first_attribution_dimensions; - last_attribution_dimensions.mutable_child(0)->set_position(Position::LAST); - EXPECT_TRUE(event.GetAtomDimensionsValueProto(last_attribution_dimensions, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 3333); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService3"); - - FieldMatcher any_attribution_dimensions = first_attribution_dimensions; - any_attribution_dimensions.mutable_child(0)->set_position(Position::ANY); - std::vector<DimensionsValue> dimensionsValues; - event.GetAtomDimensionsValueProtos(any_attribution_dimensions, &dimensionsValues); - EXPECT_EQ(dimensionsValues.size(), 3u); - EXPECT_EQ(dimensionsValues[0].field(), event.GetTagId()); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 1111); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService"); - EXPECT_EQ(dimensionsValues[1].field(), event.GetTagId()); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 2222); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService2"); - EXPECT_EQ(dimensionsValues[2].field(), event.GetTagId()); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 3333); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService3"); - - FieldMatcher mixed_dimensions = any_attribution_dimensions; - mixed_dimensions.add_child()->set_field(1000); - mixed_dimensions.add_child()->set_field(6); // missing field. - mixed_dimensions.add_child()->set_field(3); // position not set. - mixed_dimensions.add_child()->set_field(5); - mixed_dimensions.add_child()->set_field(1); - dimensionsValues.clear(); - event.GetAtomDimensionsValueProtos(mixed_dimensions, &dimensionsValues); - EXPECT_EQ(dimensionsValues.size(), 3u); - EXPECT_EQ(dimensionsValues[0].field(), event.GetTagId()); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value_size(), 3); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple().dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple().dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple().dimensions_value(0).value_int(), - 1111); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple().dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(0).value_tuple().dimensions_value(1).value_str(), - "locationService"); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(1).field(), 5); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(1).value_long(), long(1234)); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(2).field(), 1); - EXPECT_EQ(dimensionsValues[0].value_tuple().dimensions_value(2).value_int(), 11); - - EXPECT_EQ(dimensionsValues[1].field(), event.GetTagId()); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value_size(), 3); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple().dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple().dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple().dimensions_value(0).value_int(), - 2222); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple().dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(0).value_tuple().dimensions_value(1).value_str(), - "locationService2"); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(1).field(), 5); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(1).value_long(), long(1234)); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(2).field(), 1); - EXPECT_EQ(dimensionsValues[1].value_tuple().dimensions_value(2).value_int(), 11); - - EXPECT_EQ(dimensionsValues[2].field(), event.GetTagId()); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value_size(), 3); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple().dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple().dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple().dimensions_value(0).value_int(), - 3333); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple().dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(0).value_tuple().dimensions_value(1).value_str(), - "locationService3"); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(1).field(), 5); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(1).value_long(), long(1234)); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(2).field(), 1); - EXPECT_EQ(dimensionsValues[2].value_tuple().dimensions_value(2).value_int(), 11); - - FieldMatcher wrong_dimensions = mixed_dimensions; - // Wrong tagId. - wrong_dimensions.set_field(event.GetTagId() + 100); - dimensionsValues.clear(); - event.GetAtomDimensionsValueProtos(wrong_dimensions, &dimensionsValues); - EXPECT_TRUE(dimensionsValues.empty()); +TEST(LogEventTest, TestLogParsing2) { + LogEvent event1(1, 2000); + + std::vector<AttributionNode> nodes; + + event1.write("hello"); + + // repeated msg can be in the middle + AttributionNode node1; + node1.set_uid(1000); + node1.set_tag("tag1"); + nodes.push_back(node1); + + AttributionNode node2; + node2.set_uid(2000); + node2.set_tag("tag2"); + nodes.push_back(node2); + event1.write(nodes); + + event1.write((int32_t)10); + event1.write((int64_t)20); + event1.write((float)1.1); + event1.init(); + + const auto& items = event1.getValues(); + EXPECT_EQ((size_t)8, items.size()); + EXPECT_EQ(1, event1.GetTagId()); + + const FieldValue& item = event1.getValues()[0]; + EXPECT_EQ(0x00010000, item.mField.getField()); + EXPECT_EQ(Type::STRING, item.mValue.getType()); + EXPECT_EQ("hello", item.mValue.str_value); + + const FieldValue& item0 = event1.getValues()[1]; + EXPECT_EQ(0x2020101, item0.mField.getField()); + EXPECT_EQ(Type::INT, item0.mValue.getType()); + EXPECT_EQ(1000, item0.mValue.int_value); + + const FieldValue& item1 = event1.getValues()[2]; + EXPECT_EQ(0x2020182, item1.mField.getField()); + EXPECT_EQ(Type::STRING, item1.mValue.getType()); + EXPECT_EQ("tag1", item1.mValue.str_value); + + const FieldValue& item2 = event1.getValues()[3]; + EXPECT_EQ(0x2028201, item2.mField.getField()); + EXPECT_EQ(Type::INT, item2.mValue.getType()); + EXPECT_EQ(2000, item2.mValue.int_value); + + const FieldValue& item3 = event1.getValues()[4]; + EXPECT_EQ(0x2028282, item3.mField.getField()); + EXPECT_EQ(Type::STRING, item3.mValue.getType()); + EXPECT_EQ("tag2", item3.mValue.str_value); + + const FieldValue& item5 = event1.getValues()[5]; + EXPECT_EQ(0x30000, item5.mField.getField()); + EXPECT_EQ(Type::INT, item5.mValue.getType()); + EXPECT_EQ(10, item5.mValue.int_value); + + const FieldValue& item6 = event1.getValues()[6]; + EXPECT_EQ(0x40000, item6.mField.getField()); + EXPECT_EQ(Type::LONG, item6.mValue.getType()); + EXPECT_EQ((int64_t)20, item6.mValue.long_value); + + const FieldValue& item7 = event1.getValues()[7]; + EXPECT_EQ(0x50000, item7.mField.getField()); + EXPECT_EQ(Type::FLOAT, item7.mValue.getType()); + EXPECT_EQ((float)1.1, item7.mValue.float_value); } -TEST(LogEventTest, testMessageField) { - const int32_t TAG_ID = 123; - LogEvent event(TAG_ID, 0); - AttributionNode attribution_node1; - attribution_node1.set_uid(1111); - attribution_node1.set_tag("locationService"); - - AttributionNode attribution_node2; - attribution_node2.set_uid(2222); - attribution_node2.set_tag("locationService2"); - - // 1nd field: int32. - EXPECT_TRUE(event.write(int32_t(11))); - // 2rd field: float. - EXPECT_TRUE(event.write(3.45f)); - // Here it assume that the atom proto contains two optional AttributionNode fields. - // 3rd field: attribution node. This is not repeated field. - EXPECT_TRUE(event.write(attribution_node1)); - // 4th field: another attribution field. This is not repeated field. - EXPECT_TRUE(event.write(attribution_node2)); - // 5th field: bool. - EXPECT_TRUE(event.write(true)); - // 6th field: long. - EXPECT_TRUE(event.write(uint64_t(1234))); - - event.init(); - - FieldMatcher uid_dimensions1; - uid_dimensions1.set_field(event.GetTagId()); - uid_dimensions1.add_child()->set_field(3); - uid_dimensions1.mutable_child(0)->add_child()->set_field(1); - - FieldMatcher tag_dimensions1; - tag_dimensions1.set_field(event.GetTagId()); - tag_dimensions1.add_child()->set_field(3); - tag_dimensions1.mutable_child(0)->add_child()->set_field(2); - - FieldMatcher attribution_dimensions1; - attribution_dimensions1.set_field(event.GetTagId()); - attribution_dimensions1.add_child()->set_field(3); - attribution_dimensions1.mutable_child(0)->add_child()->set_field(1); - attribution_dimensions1.mutable_child(0)->add_child()->set_field(2); - - FieldMatcher uid_dimensions2 = uid_dimensions1; - uid_dimensions2.mutable_child(0)->set_field(4); - - FieldMatcher tag_dimensions2 = tag_dimensions1; - tag_dimensions2.mutable_child(0)->set_field(4); - - FieldMatcher attribution_dimensions2 = attribution_dimensions1; - attribution_dimensions2.mutable_child(0)->set_field(4); - - FieldMatcher mixed_dimensions = attribution_dimensions1; - mixed_dimensions.add_child()->set_field(4); - mixed_dimensions.mutable_child(1)->add_child()->set_field(1); - mixed_dimensions.add_child()->set_field(1000); - mixed_dimensions.add_child()->set_field(5); - mixed_dimensions.add_child()->set_field(1); - - DimensionsValue dimensionsValue; - - // Query single primitive fields. - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(1, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), 11); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(2, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_float(), 3.45f); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(5, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 5); - // The bool value is stored in value_int field as logD does not support bool. - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), true); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(6, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 6); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_long(), long(1234)); - - // Query atom field 3: attribution node uid field only. - EXPECT_TRUE(event.GetAtomDimensionsValueProto(uid_dimensions1, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 1111); - - // Query atom field 3: attribution node tag field only. - EXPECT_TRUE(event.GetAtomDimensionsValueProto(tag_dimensions1, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_str(), "locationService"); - - // Query atom field 3: attribution node uid + tag fields. - EXPECT_TRUE(event.GetAtomDimensionsValueProto(attribution_dimensions1, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 1111); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService"); - - // Query atom field 4: attribution node uid field only. - EXPECT_TRUE(event.GetAtomDimensionsValueProto(uid_dimensions2, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 4); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 2222); - - // Query atom field 4: attribution node tag field only. - EXPECT_TRUE(event.GetAtomDimensionsValueProto(tag_dimensions2, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 4); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_str(), "locationService2"); - - // Query atom field 4: attribution node uid + tag fields. - EXPECT_TRUE(event.GetAtomDimensionsValueProto(attribution_dimensions2, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 4); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 2222); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService2"); - - // Query multiple fields: - // 1/ Field 3: attribution uid + tag. - // 2/ Field 4: attribution uid only. - // 3/ Field not exist. - // 4/ Primitive fields #5 - // 5/ Primitive fields #1 - EXPECT_TRUE(event.GetAtomDimensionsValueProto(mixed_dimensions, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 4); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value_size(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(0).value_int(), 1111); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_tuple() - .dimensions_value(1).value_str(), "locationService"); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(1).field(), 4); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(1).value_tuple() - .dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(1).value_tuple() - .dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(1).value_tuple() - .dimensions_value(0).value_int(), 2222); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(2).field(), 5); - // The bool value is stored in value_int field as logD does not support bool. - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(2).value_int(), true); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(3).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(3).value_int(), 11); -} - -TEST(LogEventTest, testAllPrimitiveFields) { - const int32_t TAG_ID = 123; - LogEvent event(TAG_ID, 0); - - // 1nd field: int32. - EXPECT_TRUE(event.write(int32_t(11))); - // 2rd field: float. - EXPECT_TRUE(event.write(3.45f)); - // 3th field: string. - EXPECT_TRUE(event.write("test")); - // 4th field: bool. - EXPECT_TRUE(event.write(true)); - // 5th field: bool. - EXPECT_TRUE(event.write(false)); - // 6th field: long. - EXPECT_TRUE(event.write(uint64_t(1234))); - - event.init(); - - DimensionsValue dimensionsValue; - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(1, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), 11); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(2, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 2); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_float(), 3.45f); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(3, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 3); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_str(), "test"); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(4, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 4); - // The bool value is stored in value_int field as logD does not support bool. - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), true); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(5, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 5); - // The bool value is stored in value_int field as logD does not support bool. - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_int(), false); - - EXPECT_TRUE(event.GetSimpleAtomDimensionsValueProto(6, &dimensionsValue)); - EXPECT_EQ(dimensionsValue.field(), event.GetTagId()); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value_size(), 1); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).field(), 6); - EXPECT_EQ(dimensionsValue.value_tuple().dimensions_value(0).value_long(), long(1234)); - - // Field not exist. - EXPECT_FALSE(event.GetSimpleAtomDimensionsValueProto(7, &dimensionsValue)); -} - -TEST(LogEventTest, testWriteAtomProtoToStream) { - AttributionNode attribution_node1; - attribution_node1.set_uid(1111); - attribution_node1.set_tag("locationService"); - - AttributionNode attribution_node2; - attribution_node2.set_uid(2222); - attribution_node2.set_tag("locationService2"); - - AttributionNode attribution_node3; - attribution_node3.set_uid(3333); - attribution_node3.set_tag("locationService3"); - std::vector<AttributionNode> attribution_nodes = - {attribution_node1, attribution_node2, attribution_node3}; - - LogEvent event(1, 0); - EXPECT_TRUE(event.write("222")); - EXPECT_TRUE(event.write(attribution_nodes)); - EXPECT_TRUE(event.write(345)); - EXPECT_TRUE(event.write(attribution_node3)); - EXPECT_TRUE(event.write("hello")); - event.init(); - - util::ProtoOutputStream protoOutput; - // For now only see whether it will crash. - // TODO(yanglu): test parsing from stream. - event.ToProto(protoOutput); -} } // namespace statsd } // namespace os |