(Part 3) Use new socket schema with statsd tests
Update last set of statsd tests to use new socket schema
Test: bit statsd_test:*
Bug: 149590301
Change-Id: I0fe2c219ad75813db54ff0cfbad50f55e29cb626
diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp
index 2de6377..6f4c8e4 100644
--- a/cmds/statsd/tests/LogEntryMatcher_test.cpp
+++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp
@@ -12,18 +12,19 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
-#include "matchers/matcher_util.h"
-#include "stats_log_util.h"
-#include "stats_util.h"
-
#include <gtest/gtest.h>
#include <log/log_event_list.h>
#include <log/log_read.h>
#include <log/logprint.h>
-
#include <stdio.h>
+#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
+#include "matchers/matcher_util.h"
+#include "stats_event.h"
+#include "stats_log_util.h"
+#include "stats_util.h"
+#include "statsd_test_util.h"
+
using namespace android::os::statsd;
using std::unordered_map;
using std::vector;
@@ -39,646 +40,691 @@
#ifdef __ANDROID__
-// TODO(b/149590301): Update these tests to use new socket schema.
-//TEST(AtomMatcherTest, TestSimpleMatcher) {
-// UidMap uidMap;
-//
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-//
-// LogEvent event(TAG_ID, 0);
-// EXPECT_TRUE(event.write(11));
-// event.init();
-//
-// // Test
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // Wrong tag id.
-// simpleMatcher->set_atom_id(TAG_ID + 1);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestAttributionMatcher) {
-// UidMap uidMap;
-// AttributionNodeInternal attribution_node1;
-// attribution_node1.set_uid(1111);
-// attribution_node1.set_tag("location1");
-//
-// AttributionNodeInternal attribution_node2;
-// attribution_node2.set_uid(2222);
-// attribution_node2.set_tag("location2");
-//
-// AttributionNodeInternal attribution_node3;
-// attribution_node3.set_uid(3333);
-// attribution_node3.set_tag("location3");
-// std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-// attribution_node3};
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write(attribution_nodes);
-// event.write("some value");
-// // Convert to a LogEvent
-// event.init();
-//
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-//
-// // Match first node.
-// auto attributionMatcher = simpleMatcher->add_field_value_matcher();
-// attributionMatcher->set_field(FIELD_ID_1);
-// attributionMatcher->set_position(Position::FIRST);
-// attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-// ATTRIBUTION_TAG_FIELD_ID);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string("tag");
-//
-// auto fieldMatcher = simpleMatcher->add_field_value_matcher();
-// fieldMatcher->set_field(FIELD_ID_2);
-// fieldMatcher->set_eq_string("some value");
-//
-// // Tag not matched.
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location3");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // Match last node.
-// attributionMatcher->set_position(Position::LAST);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // Match any node.
-// attributionMatcher->set_position(Position::ANY);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location2");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location4");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // Attribution match but primitive field not match.
-// attributionMatcher->set_position(Position::ANY);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("location2");
-// fieldMatcher->set_eq_string("wrong value");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// fieldMatcher->set_eq_string("some value");
-//
-// // Uid match.
-// attributionMatcher->set_position(Position::ANY);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_field(
-// ATTRIBUTION_UID_FIELD_ID);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string("pkg0");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// uidMap.updateMap(
-// 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-// {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-// android::String16("v1"), android::String16("v2")},
-// {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-// android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-// {android::String16(""), android::String16(""), android::String16(""),
-// android::String16(""), android::String16("")});
-//
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg2");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg0");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::FIRST);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg0");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg2");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::LAST);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg0");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg2");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // Uid + tag.
-// attributionMatcher->set_position(Position::ANY);
-// attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-// ATTRIBUTION_TAG_FIELD_ID);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg0");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location2");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg2");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::FIRST);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg0");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location2");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg2");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location3");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location3");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::LAST);
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg0");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg1");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location2");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg2");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)
-// ->set_eq_string("pkg3");
-// attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)
-// ->set_eq_string("location1");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestUidFieldMatcher) {
-// UidMap uidMap;
-// uidMap.updateMap(
-// 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-// {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-// android::String16("v1"), android::String16("v2")},
-// {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-// android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-// {android::String16(""), android::String16(""), android::String16(""),
-// android::String16(""), android::String16("")});
-//
-// // Set up matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-// simpleMatcher->add_field_value_matcher()->set_field(1);
-// simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("pkg0");
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write(1111);
-// event.init();
-//
-// LogEvent event2(TAG_ID_2, 0);
-// event2.write(1111);
-// event2.write("some value");
-// event2.init();
-//
-// // Tag not in kAtomsWithUidField
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // Tag found in kAtomsWithUidField and has matching uid
-// simpleMatcher->set_atom_id(TAG_ID_2);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
-//
-// // Tag found in kAtomsWithUidField but has non-matching uid
-// simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("Pkg2");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event2));
-//}
-//
-//TEST(AtomMatcherTest, TestNeqAnyStringMatcher) {
-// UidMap uidMap;
-// uidMap.updateMap(
-// 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-// {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-// android::String16("v1"), android::String16("v2")},
-// {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-// android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-// {android::String16(""), android::String16(""), android::String16(""),
-// android::String16(""), android::String16("")});
-//
-// AttributionNodeInternal attribution_node1;
-// attribution_node1.set_uid(1111);
-// attribution_node1.set_tag("location1");
-//
-// AttributionNodeInternal attribution_node2;
-// attribution_node2.set_uid(2222);
-// attribution_node2.set_tag("location2");
-//
-// AttributionNodeInternal attribution_node3;
-// attribution_node3.set_uid(3333);
-// attribution_node3.set_tag("location3");
-//
-// AttributionNodeInternal attribution_node4;
-// attribution_node4.set_uid(1066);
-// attribution_node4.set_tag("location3");
-// std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-// attribution_node3, attribution_node4};
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write(attribution_nodes);
-// event.write("some value");
-// // Convert to a LogEvent
-// event.init();
-//
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-//
-// // Match first node.
-// auto attributionMatcher = simpleMatcher->add_field_value_matcher();
-// attributionMatcher->set_field(FIELD_ID_1);
-// attributionMatcher->set_position(Position::FIRST);
-// attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-// ATTRIBUTION_UID_FIELD_ID);
-// auto neqStringList = attributionMatcher->mutable_matches_tuple()
-// ->mutable_field_value_matcher(0)
-// ->mutable_neq_any_string();
-// neqStringList->add_str_value("pkg2");
-// neqStringList->add_str_value("pkg3");
-//
-// auto fieldMatcher = simpleMatcher->add_field_value_matcher();
-// fieldMatcher->set_field(FIELD_ID_2);
-// fieldMatcher->set_eq_string("some value");
-//
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// neqStringList->Clear();
-// neqStringList->add_str_value("pkg1");
-// neqStringList->add_str_value("pkg3");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::ANY);
-// neqStringList->Clear();
-// neqStringList->add_str_value("maps.com");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// neqStringList->Clear();
-// neqStringList->add_str_value("PkG3");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::LAST);
-// neqStringList->Clear();
-// neqStringList->add_str_value("AID_STATSD");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestEqAnyStringMatcher) {
-// UidMap uidMap;
-// uidMap.updateMap(
-// 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
-// {android::String16("v1"), android::String16("v1"), android::String16("v2"),
-// android::String16("v1"), android::String16("v2")},
-// {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
-// android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
-// {android::String16(""), android::String16(""), android::String16(""),
-// android::String16(""), android::String16("")});
-//
-// AttributionNodeInternal attribution_node1;
-// attribution_node1.set_uid(1067);
-// attribution_node1.set_tag("location1");
-//
-// AttributionNodeInternal attribution_node2;
-// attribution_node2.set_uid(2222);
-// attribution_node2.set_tag("location2");
-//
-// AttributionNodeInternal attribution_node3;
-// attribution_node3.set_uid(3333);
-// attribution_node3.set_tag("location3");
-//
-// AttributionNodeInternal attribution_node4;
-// attribution_node4.set_uid(1066);
-// attribution_node4.set_tag("location3");
-// std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2,
-// attribution_node3, attribution_node4};
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write(attribution_nodes);
-// event.write("some value");
-// // Convert to a LogEvent
-// event.init();
-//
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-//
-// // Match first node.
-// auto attributionMatcher = simpleMatcher->add_field_value_matcher();
-// attributionMatcher->set_field(FIELD_ID_1);
-// attributionMatcher->set_position(Position::FIRST);
-// attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
-// ATTRIBUTION_UID_FIELD_ID);
-// auto eqStringList = attributionMatcher->mutable_matches_tuple()
-// ->mutable_field_value_matcher(0)
-// ->mutable_eq_any_string();
-// eqStringList->add_str_value("AID_ROOT");
-// eqStringList->add_str_value("AID_INCIDENTD");
-//
-// auto fieldMatcher = simpleMatcher->add_field_value_matcher();
-// fieldMatcher->set_field(FIELD_ID_2);
-// fieldMatcher->set_eq_string("some value");
-//
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// attributionMatcher->set_position(Position::ANY);
-// eqStringList->Clear();
-// eqStringList->add_str_value("AID_STATSD");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// eqStringList->Clear();
-// eqStringList->add_str_value("pkg1");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// auto normalStringField = fieldMatcher->mutable_eq_any_string();
-// normalStringField->add_str_value("some value123");
-// normalStringField->add_str_value("some value");
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// normalStringField->Clear();
-// normalStringField->add_str_value("AID_STATSD");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// eqStringList->Clear();
-// eqStringList->add_str_value("maps.com");
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestBoolMatcher) {
-// UidMap uidMap;
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-// auto keyValue1 = simpleMatcher->add_field_value_matcher();
-// keyValue1->set_field(FIELD_ID_1);
-// auto keyValue2 = simpleMatcher->add_field_value_matcher();
-// keyValue2->set_field(FIELD_ID_2);
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// EXPECT_TRUE(event.write(true));
-// EXPECT_TRUE(event.write(false));
-// // Convert to a LogEvent
-// event.init();
-//
-// // Test
-// keyValue1->set_eq_bool(true);
-// keyValue2->set_eq_bool(false);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// keyValue1->set_eq_bool(false);
-// keyValue2->set_eq_bool(false);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// keyValue1->set_eq_bool(false);
-// keyValue2->set_eq_bool(true);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// keyValue1->set_eq_bool(true);
-// keyValue2->set_eq_bool(true);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestStringMatcher) {
-// UidMap uidMap;
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-// auto keyValue = simpleMatcher->add_field_value_matcher();
-// keyValue->set_field(FIELD_ID_1);
-// keyValue->set_eq_string("some value");
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write("some value");
-// // Convert to a LogEvent
-// event.init();
-//
-// // Test
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestMultiFieldsMatcher) {
-// UidMap uidMap;
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-// auto keyValue1 = simpleMatcher->add_field_value_matcher();
-// keyValue1->set_field(FIELD_ID_1);
-// auto keyValue2 = simpleMatcher->add_field_value_matcher();
-// keyValue2->set_field(FIELD_ID_2);
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write(2);
-// event.write(3);
-//
-// // Convert to a LogEvent
-// event.init();
-//
-// // Test
-// keyValue1->set_eq_int(2);
-// keyValue2->set_eq_int(3);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// keyValue1->set_eq_int(2);
-// keyValue2->set_eq_int(4);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// keyValue1->set_eq_int(4);
-// keyValue2->set_eq_int(3);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestIntComparisonMatcher) {
-// UidMap uidMap;
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-//
-// simpleMatcher->set_atom_id(TAG_ID);
-// auto keyValue = simpleMatcher->add_field_value_matcher();
-// keyValue->set_field(FIELD_ID_1);
-//
-// // Set up the event
-// LogEvent event(TAG_ID, 0);
-// event.write(11);
-// event.init();
-//
-// // Test
-//
-// // eq_int
-// keyValue->set_eq_int(10);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_eq_int(11);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_eq_int(12);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // lt_int
-// keyValue->set_lt_int(10);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_lt_int(11);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_lt_int(12);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // lte_int
-// keyValue->set_lte_int(10);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_lte_int(11);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_lte_int(12);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // gt_int
-// keyValue->set_gt_int(10);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_gt_int(11);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_gt_int(12);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//
-// // gte_int
-// keyValue->set_gte_int(10);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_gte_int(11);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
-// keyValue->set_gte_int(12);
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
-//}
-//
-//TEST(AtomMatcherTest, TestFloatComparisonMatcher) {
-// UidMap uidMap;
-// // Set up the matcher
-// AtomMatcher matcher;
-// auto simpleMatcher = matcher.mutable_simple_atom_matcher();
-// simpleMatcher->set_atom_id(TAG_ID);
-//
-// auto keyValue = simpleMatcher->add_field_value_matcher();
-// keyValue->set_field(FIELD_ID_1);
-//
-// LogEvent event1(TAG_ID, 0);
-// keyValue->set_lt_float(10.0);
-// event1.write(10.1f);
-// event1.init();
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event1));
-//
-// LogEvent event2(TAG_ID, 0);
-// event2.write(9.9f);
-// event2.init();
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
-//
-// LogEvent event3(TAG_ID, 0);
-// event3.write(10.1f);
-// event3.init();
-// keyValue->set_gt_float(10.0);
-// EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event3));
-//
-// LogEvent event4(TAG_ID, 0);
-// event4.write(9.9f);
-// event4.init();
-// EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event4));
-//}
+
+namespace {
+
+void makeIntLogEvent(LogEvent* logEvent, const int32_t atomId, const int64_t timestamp,
+ const int32_t value) {
+ AStatsEvent* statsEvent = AStatsEvent_obtain();
+ AStatsEvent_setAtomId(statsEvent, atomId);
+ AStatsEvent_overwriteTimestamp(statsEvent, timestamp);
+
+ AStatsEvent_writeInt32(statsEvent, value);
+ AStatsEvent_build(statsEvent);
+
+ size_t size;
+ uint8_t* buf = AStatsEvent_getBuffer(statsEvent, &size);
+ logEvent->parseBuffer(buf, size);
+
+ AStatsEvent_release(statsEvent);
+}
+
+void makeFloatLogEvent(LogEvent* logEvent, const int32_t atomId, const int64_t timestamp,
+ const float floatValue) {
+ AStatsEvent* statsEvent = AStatsEvent_obtain();
+ AStatsEvent_setAtomId(statsEvent, atomId);
+ AStatsEvent_overwriteTimestamp(statsEvent, timestamp);
+
+ AStatsEvent_writeFloat(statsEvent, floatValue);
+ AStatsEvent_build(statsEvent);
+
+ size_t size;
+ uint8_t* buf = AStatsEvent_getBuffer(statsEvent, &size);
+ logEvent->parseBuffer(buf, size);
+
+ AStatsEvent_release(statsEvent);
+}
+
+void makeStringLogEvent(LogEvent* logEvent, const int32_t atomId, const int64_t timestamp,
+ const string& name) {
+ AStatsEvent* statsEvent = AStatsEvent_obtain();
+ AStatsEvent_setAtomId(statsEvent, atomId);
+ AStatsEvent_overwriteTimestamp(statsEvent, timestamp);
+
+ AStatsEvent_writeString(statsEvent, name.c_str());
+ AStatsEvent_build(statsEvent);
+
+ size_t size;
+ uint8_t* buf = AStatsEvent_getBuffer(statsEvent, &size);
+ logEvent->parseBuffer(buf, size);
+
+ AStatsEvent_release(statsEvent);
+}
+
+void makeIntStringLogEvent(LogEvent* logEvent, const int32_t atomId, const int64_t timestamp,
+ const int32_t value, const string& name) {
+ AStatsEvent* statsEvent = AStatsEvent_obtain();
+ AStatsEvent_setAtomId(statsEvent, atomId);
+ AStatsEvent_overwriteTimestamp(statsEvent, timestamp);
+
+ AStatsEvent_writeInt32(statsEvent, value);
+ AStatsEvent_writeString(statsEvent, name.c_str());
+ AStatsEvent_build(statsEvent);
+
+ size_t size;
+ uint8_t* buf = AStatsEvent_getBuffer(statsEvent, &size);
+ logEvent->parseBuffer(buf, size);
+
+ AStatsEvent_release(statsEvent);
+}
+
+void makeAttributionLogEvent(LogEvent* logEvent, const int32_t atomId, const int64_t timestamp,
+ const vector<int>& attributionUids,
+ const vector<string>& attributionTags, const string& name) {
+ AStatsEvent* statsEvent = AStatsEvent_obtain();
+ AStatsEvent_setAtomId(statsEvent, atomId);
+ AStatsEvent_overwriteTimestamp(statsEvent, timestamp);
+
+ vector<const char*> cTags(attributionTags.size());
+ for (int i = 0; i < cTags.size(); i++) {
+ cTags[i] = attributionTags[i].c_str();
+ }
+
+ AStatsEvent_writeAttributionChain(statsEvent,
+ reinterpret_cast<const uint32_t*>(attributionUids.data()),
+ cTags.data(), attributionUids.size());
+ AStatsEvent_writeString(statsEvent, name.c_str());
+ AStatsEvent_build(statsEvent);
+
+ size_t size;
+ uint8_t* buf = AStatsEvent_getBuffer(statsEvent, &size);
+ logEvent->parseBuffer(buf, size);
+
+ AStatsEvent_release(statsEvent);
+}
+
+void makeBoolLogEvent(LogEvent* logEvent, const int32_t atomId, const int64_t timestamp,
+ const bool bool1, const bool bool2) {
+ AStatsEvent* statsEvent = AStatsEvent_obtain();
+ AStatsEvent_setAtomId(statsEvent, atomId);
+ AStatsEvent_overwriteTimestamp(statsEvent, timestamp);
+
+ AStatsEvent_writeBool(statsEvent, bool1);
+ AStatsEvent_writeBool(statsEvent, bool2);
+ AStatsEvent_build(statsEvent);
+
+ size_t size;
+ uint8_t* buf = AStatsEvent_getBuffer(statsEvent, &size);
+ logEvent->parseBuffer(buf, size);
+
+ AStatsEvent_release(statsEvent);
+}
+
+} // anonymous namespace
+
+TEST(AtomMatcherTest, TestSimpleMatcher) {
+ UidMap uidMap;
+
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeIntLogEvent(&event, TAG_ID, 0, 11);
+
+ // Test
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // Wrong tag id.
+ simpleMatcher->set_atom_id(TAG_ID + 1);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestAttributionMatcher) {
+ UidMap uidMap;
+ std::vector<int> attributionUids = {1111, 2222, 3333};
+ std::vector<string> attributionTags = {"location1", "location2", "location3"};
+
+ // Set up the log event.
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeAttributionLogEvent(&event, TAG_ID, 0, attributionUids, attributionTags, "some value");
+
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+
+ // Match first node.
+ auto attributionMatcher = simpleMatcher->add_field_value_matcher();
+ attributionMatcher->set_field(FIELD_ID_1);
+ attributionMatcher->set_position(Position::FIRST);
+ attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+ ATTRIBUTION_TAG_FIELD_ID);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "tag");
+
+ auto fieldMatcher = simpleMatcher->add_field_value_matcher();
+ fieldMatcher->set_field(FIELD_ID_2);
+ fieldMatcher->set_eq_string("some value");
+
+ // Tag not matched.
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location3");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // Match last node.
+ attributionMatcher->set_position(Position::LAST);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // Match any node.
+ attributionMatcher->set_position(Position::ANY);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location2");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location4");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // Attribution match but primitive field not match.
+ attributionMatcher->set_position(Position::ANY);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "location2");
+ fieldMatcher->set_eq_string("wrong value");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ fieldMatcher->set_eq_string("some value");
+
+ // Uid match.
+ attributionMatcher->set_position(Position::ANY);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_field(
+ ATTRIBUTION_UID_FIELD_ID);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ uidMap.updateMap(
+ 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+ {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+ android::String16("v1"), android::String16("v2")},
+ {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+ android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+ {android::String16(""), android::String16(""), android::String16(""),
+ android::String16(""), android::String16("")});
+
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg2");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::FIRST);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg2");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::LAST);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg2");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // Uid + tag.
+ attributionMatcher->set_position(Position::ANY);
+ attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+ ATTRIBUTION_TAG_FIELD_ID);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location2");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg2");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::FIRST);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location2");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg2");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location3");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location3");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::LAST);
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg0");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg1");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location2");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg2");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(0)->set_eq_string(
+ "pkg3");
+ attributionMatcher->mutable_matches_tuple()->mutable_field_value_matcher(1)->set_eq_string(
+ "location1");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestUidFieldMatcher) {
+ UidMap uidMap;
+ uidMap.updateMap(
+ 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+ {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+ android::String16("v1"), android::String16("v2")},
+ {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+ android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+ {android::String16(""), android::String16(""), android::String16(""),
+ android::String16(""), android::String16("")});
+
+ // Set up matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+ simpleMatcher->add_field_value_matcher()->set_field(1);
+ simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("pkg0");
+
+ // Set up the event
+ LogEvent event1(/*uid=*/0, /*pid=*/0);
+ makeIntLogEvent(&event1, TAG_ID, 0, 1111);
+
+ LogEvent event2(/*uid=*/0, /*pid=*/0);
+ makeIntStringLogEvent(&event2, TAG_ID_2, 0, 1111, "some value");
+
+ // Tag not in kAtomsWithUidField
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event1));
+
+ // Tag found in kAtomsWithUidField and has matching uid
+ simpleMatcher->set_atom_id(TAG_ID_2);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
+
+ // Tag found in kAtomsWithUidField but has non-matching uid
+ simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("Pkg2");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event2));
+}
+
+TEST(AtomMatcherTest, TestNeqAnyStringMatcher) {
+ UidMap uidMap;
+ uidMap.updateMap(
+ 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+ {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+ android::String16("v1"), android::String16("v2")},
+ {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+ android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+ {android::String16(""), android::String16(""), android::String16(""),
+ android::String16(""), android::String16("")});
+
+ std::vector<int> attributionUids = {1111, 2222, 3333, 1066};
+ std::vector<string> attributionTags = {"location1", "location2", "location3", "location3"};
+
+ // Set up the event
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeAttributionLogEvent(&event, TAG_ID, 0, attributionUids, attributionTags, "some value");
+
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+
+ // Match first node.
+ auto attributionMatcher = simpleMatcher->add_field_value_matcher();
+ attributionMatcher->set_field(FIELD_ID_1);
+ attributionMatcher->set_position(Position::FIRST);
+ attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+ ATTRIBUTION_UID_FIELD_ID);
+ auto neqStringList = attributionMatcher->mutable_matches_tuple()
+ ->mutable_field_value_matcher(0)
+ ->mutable_neq_any_string();
+ neqStringList->add_str_value("pkg2");
+ neqStringList->add_str_value("pkg3");
+
+ auto fieldMatcher = simpleMatcher->add_field_value_matcher();
+ fieldMatcher->set_field(FIELD_ID_2);
+ fieldMatcher->set_eq_string("some value");
+
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ neqStringList->Clear();
+ neqStringList->add_str_value("pkg1");
+ neqStringList->add_str_value("pkg3");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::ANY);
+ neqStringList->Clear();
+ neqStringList->add_str_value("maps.com");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ neqStringList->Clear();
+ neqStringList->add_str_value("PkG3");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::LAST);
+ neqStringList->Clear();
+ neqStringList->add_str_value("AID_STATSD");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestEqAnyStringMatcher) {
+ UidMap uidMap;
+ uidMap.updateMap(
+ 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+ {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+ android::String16("v1"), android::String16("v2")},
+ {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+ android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+ {android::String16(""), android::String16(""), android::String16(""),
+ android::String16(""), android::String16("")});
+
+ std::vector<int> attributionUids = {1067, 2222, 3333, 1066};
+ std::vector<string> attributionTags = {"location1", "location2", "location3", "location3"};
+
+ // Set up the event
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeAttributionLogEvent(&event, TAG_ID, 0, attributionUids, attributionTags, "some value");
+
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+
+ // Match first node.
+ auto attributionMatcher = simpleMatcher->add_field_value_matcher();
+ attributionMatcher->set_field(FIELD_ID_1);
+ attributionMatcher->set_position(Position::FIRST);
+ attributionMatcher->mutable_matches_tuple()->add_field_value_matcher()->set_field(
+ ATTRIBUTION_UID_FIELD_ID);
+ auto eqStringList = attributionMatcher->mutable_matches_tuple()
+ ->mutable_field_value_matcher(0)
+ ->mutable_eq_any_string();
+ eqStringList->add_str_value("AID_ROOT");
+ eqStringList->add_str_value("AID_INCIDENTD");
+
+ auto fieldMatcher = simpleMatcher->add_field_value_matcher();
+ fieldMatcher->set_field(FIELD_ID_2);
+ fieldMatcher->set_eq_string("some value");
+
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ attributionMatcher->set_position(Position::ANY);
+ eqStringList->Clear();
+ eqStringList->add_str_value("AID_STATSD");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ eqStringList->Clear();
+ eqStringList->add_str_value("pkg1");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ auto normalStringField = fieldMatcher->mutable_eq_any_string();
+ normalStringField->add_str_value("some value123");
+ normalStringField->add_str_value("some value");
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ normalStringField->Clear();
+ normalStringField->add_str_value("AID_STATSD");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ eqStringList->Clear();
+ eqStringList->add_str_value("maps.com");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestBoolMatcher) {
+ UidMap uidMap;
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+ auto keyValue1 = simpleMatcher->add_field_value_matcher();
+ keyValue1->set_field(FIELD_ID_1);
+ auto keyValue2 = simpleMatcher->add_field_value_matcher();
+ keyValue2->set_field(FIELD_ID_2);
+
+ // Set up the event
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeBoolLogEvent(&event, TAG_ID, 0, true, false);
+
+ // Test
+ keyValue1->set_eq_bool(true);
+ keyValue2->set_eq_bool(false);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ keyValue1->set_eq_bool(false);
+ keyValue2->set_eq_bool(false);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ keyValue1->set_eq_bool(false);
+ keyValue2->set_eq_bool(true);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ keyValue1->set_eq_bool(true);
+ keyValue2->set_eq_bool(true);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestStringMatcher) {
+ UidMap uidMap;
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+ auto keyValue = simpleMatcher->add_field_value_matcher();
+ keyValue->set_field(FIELD_ID_1);
+ keyValue->set_eq_string("some value");
+
+ // Set up the event
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeStringLogEvent(&event, TAG_ID, 0, "some value");
+
+ // Test
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestMultiFieldsMatcher) {
+ UidMap uidMap;
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+ auto keyValue1 = simpleMatcher->add_field_value_matcher();
+ keyValue1->set_field(FIELD_ID_1);
+ auto keyValue2 = simpleMatcher->add_field_value_matcher();
+ keyValue2->set_field(FIELD_ID_2);
+
+ // Set up the event
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ CreateTwoValueLogEvent(&event, TAG_ID, 0, 2, 3);
+
+ // Test
+ keyValue1->set_eq_int(2);
+ keyValue2->set_eq_int(3);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ keyValue1->set_eq_int(2);
+ keyValue2->set_eq_int(4);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ keyValue1->set_eq_int(4);
+ keyValue2->set_eq_int(3);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestIntComparisonMatcher) {
+ UidMap uidMap;
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+
+ simpleMatcher->set_atom_id(TAG_ID);
+ auto keyValue = simpleMatcher->add_field_value_matcher();
+ keyValue->set_field(FIELD_ID_1);
+
+ // Set up the event
+ LogEvent event(/*uid=*/0, /*pid=*/0);
+ makeIntLogEvent(&event, TAG_ID, 0, 11);
+
+ // Test
+
+ // eq_int
+ keyValue->set_eq_int(10);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_eq_int(11);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_eq_int(12);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // lt_int
+ keyValue->set_lt_int(10);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_lt_int(11);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_lt_int(12);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // lte_int
+ keyValue->set_lte_int(10);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_lte_int(11);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_lte_int(12);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // gt_int
+ keyValue->set_gt_int(10);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_gt_int(11);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_gt_int(12);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // gte_int
+ keyValue->set_gte_int(10);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_gte_int(11);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event));
+ keyValue->set_gte_int(12);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+}
+
+TEST(AtomMatcherTest, TestFloatComparisonMatcher) {
+ UidMap uidMap;
+ // Set up the matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+
+ auto keyValue = simpleMatcher->add_field_value_matcher();
+ keyValue->set_field(FIELD_ID_1);
+
+ LogEvent event1(/*uid=*/0, /*pid=*/0);
+ makeFloatLogEvent(&event1, TAG_ID, 0, 10.1f);
+ keyValue->set_lt_float(10.0);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event1));
+
+ LogEvent event2(/*uid=*/0, /*pid=*/0);
+ makeFloatLogEvent(&event2, TAG_ID, 0, 9.9f);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
+
+ LogEvent event3(/*uid=*/0, /*pid=*/0);
+ makeFloatLogEvent(&event3, TAG_ID, 0, 10.1f);
+ keyValue->set_gt_float(10.0);
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event3));
+
+ LogEvent event4(/*uid=*/0, /*pid=*/0);
+ makeFloatLogEvent(&event4, TAG_ID, 0, 9.9f);
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event4));
+}
// Helper for the composite matchers.
void addSimpleMatcher(SimpleAtomMatcher* simpleMatcher, int tag, int key, int val) {