FieldValue_test.cpp revision 5caaa9d8542585e537ac762c35879eb42dd6bbb4
18a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen/* 28a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * Copyright (C) 2017 The Android Open Source Project 38a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * 48a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * Licensed under the Apache License, Version 2.0 (the "License"); 58a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * you may not use this file except in compliance with the License. 68a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * You may obtain a copy of the License at 78a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * 88a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * http://www.apache.org/licenses/LICENSE-2.0 98a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * 108a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * Unless required by applicable law or agreed to in writing, software 118a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * distributed under the License is distributed on an "AS IS" BASIS, 128a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * See the License for the specific language governing permissions and 148a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen * limitations under the License. 158a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen */ 168a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#include <gtest/gtest.h> 179c1debe330006b2b4d5c08a55905789c57369609Yao Chen#include "frameworks/base/cmds/statsd/src/stats_log.pb.h" 188a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h" 198a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#include "matchers/matcher_util.h" 209c1debe330006b2b4d5c08a55905789c57369609Yao Chen#include "src/logd/LogEvent.h" 218a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#include "stats_log_util.h" 228a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#include "stats_util.h" 238a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#include "subscriber/SubscriberReporter.h" 248a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 258a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#ifdef __ANDROID__ 268a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 278a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chennamespace android { 288a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chennamespace os { 298a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chennamespace statsd { 308a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 318a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenTEST(AtomMatcherTest, TestFieldTranslation) { 328a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher matcher1; 338a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen matcher1.set_field(10); 348a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher* child = matcher1.add_child(); 358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child->set_field(1); 368a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child->set_position(Position::ANY); 378a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 388a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child = child->add_child(); 398a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child->set_field(1); 408a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 418a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen vector<Matcher> output; 428a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen translateFieldMatcher(matcher1, &output); 438a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 448a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((size_t)1, output.size()); 458a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 468a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& matcher12 = output[0]; 478a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)10, matcher12.mMatcher.getTag()); 48e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010001, matcher12.mMatcher.getField()); 498a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)0xff7f007f, matcher12.mMask); 508a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 518a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 52e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macTEST(AtomMatcherTest, TestFieldTranslation_ALL) { 538a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher matcher1; 548a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen matcher1.set_field(10); 558a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher* child = matcher1.add_child(); 568a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child->set_field(1); 57e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac child->set_position(Position::ALL); 588a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 598a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child = child->add_child(); 608a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child->set_field(1); 618a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 62e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac vector<Matcher> output; 63e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac translateFieldMatcher(matcher1, &output); 64e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 65e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((size_t)1, output.size()); 66e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 67e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac const auto& matcher12 = output[0]; 68e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)10, matcher12.mMatcher.getTag()); 69e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010001, matcher12.mMatcher.getField()); 70e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0xff7f7f7f, matcher12.mMask); 71e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac} 72e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 73e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macTEST(AtomMatcherTest, TestFilter_ALL) { 74e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac FieldMatcher matcher1; 75e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac matcher1.set_field(10); 76e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac FieldMatcher* child = matcher1.add_child(); 77e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac child->set_field(1); 78e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac child->set_position(Position::ALL); 79e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 80e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac child->add_child()->set_field(1); 81e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac child->add_child()->set_field(2); 82e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 838a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child = matcher1.add_child(); 848a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child->set_field(2); 858a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 868a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen vector<Matcher> matchers; 878a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen translateFieldMatcher(matcher1, &matchers); 888a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 899c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node1; 908a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node1.set_uid(1111); 918a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node1.set_tag("location1"); 928a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 939c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node2; 948a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node2.set_uid(2222); 958a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node2.set_tag("location2"); 968a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 979c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node3; 988a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node3.set_uid(3333); 998a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node3.set_tag("location3"); 1009c1debe330006b2b4d5c08a55905789c57369609Yao Chen std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2, 1019c1debe330006b2b4d5c08a55905789c57369609Yao Chen attribution_node3}; 1028a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1038a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Set up the event 1048a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen LogEvent event(10, 12345); 1058a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.write(attribution_nodes); 1068a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.write("some value"); 1078a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Convert to a LogEvent 1088a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.init(); 109e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac HashableDimensionKey output; 1108a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1118a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen filterValues(matchers, event.getValues(), &output); 1128a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 113e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((size_t)7, output.getValues().size()); 114e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010101, output.getValues()[0].mField.getField()); 115e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)1111, output.getValues()[0].mValue.int_value); 116e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010102, output.getValues()[1].mField.getField()); 117e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ("location1", output.getValues()[1].mValue.str_value); 118e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 119e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010201, output.getValues()[2].mField.getField()); 120e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)2222, output.getValues()[2].mValue.int_value); 121e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010202, output.getValues()[3].mField.getField()); 122e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ("location2", output.getValues()[3].mValue.str_value); 123e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 124e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010301, output.getValues()[4].mField.getField()); 125e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)3333, output.getValues()[4].mValue.int_value); 126e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x02010302, output.getValues()[5].mField.getField()); 127e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ("location3", output.getValues()[5].mValue.str_value); 128e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac 129e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ((int32_t)0x00020000, output.getValues()[6].mField.getField()); 130e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-mac EXPECT_EQ("some value", output.getValues()[6].mValue.str_value); 1318a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 1328a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1338a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenTEST(AtomMatcherTest, TestSubDimension) { 1348a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey dim; 1358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1368a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos1[] = {1, 1, 1}; 1378a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos2[] = {1, 1, 2}; 1388a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos3[] = {1, 1, 3}; 1398a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos4[] = {2, 0, 0}; 1408a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field1(10, pos1, 2); 1418a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field2(10, pos2, 2); 1428a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1438a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field3(10, pos3, 2); 1448a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field4(10, pos4, 0); 1458a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1468a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value1((int32_t)10025); 1478a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value2("tag"); 1488a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1498a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value11((int32_t)10026); 1508a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value22("tag2"); 1518a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1528a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field1, value1)); 1538a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field2, value2)); 1548a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1558a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey subDim1; 1568a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen subDim1.addValue(FieldValue(field1, value1)); 1578a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1588a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey subDim2; 1598a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen subDim1.addValue(FieldValue(field2, value2)); 1608a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1618a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_TRUE(dim.contains(dim)); 1628a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_TRUE(dim.contains(subDim1)); 1638a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_TRUE(dim.contains(subDim2)); 1648a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1658a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey subDim3; 1668a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen subDim3.addValue(FieldValue(field1, value11)); 1678a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_FALSE(dim.contains(subDim3)); 1688a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1698a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey subDim4; 1708a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Empty dimension is always a sub dimension of other dimensions 1718a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_TRUE(dim.contains(subDim4)); 1728a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 1738a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1748a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenTEST(AtomMatcherTest, TestMetric2ConditionLink) { 1759c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node1; 1768a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node1.set_uid(1111); 1778a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node1.set_tag("location1"); 1788a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1799c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node2; 1808a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node2.set_uid(2222); 1818a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node2.set_tag("location2"); 1828a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1839c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node3; 1848a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node3.set_uid(3333); 1858a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node3.set_tag("location3"); 1869c1debe330006b2b4d5c08a55905789c57369609Yao Chen std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2, 1879c1debe330006b2b4d5c08a55905789c57369609Yao Chen attribution_node3}; 1888a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1898a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Set up the event 1908a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen LogEvent event(10, 12345); 1918a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.write(attribution_nodes); 1928a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.write("some value"); 1938a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Convert to a LogEvent 1948a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.init(); 1958a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 1968a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher whatMatcher; 1978a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen whatMatcher.set_field(10); 1988a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher* child11 = whatMatcher.add_child(); 1998a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child11->set_field(1); 2008a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child11->set_position(Position::ANY); 2018a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child11 = child11->add_child(); 2028a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child11->set_field(1); 2038a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2048a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher conditionMatcher; 2058a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen conditionMatcher.set_field(27); 2068a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen FieldMatcher* child2 = conditionMatcher.add_child(); 2078a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child2->set_field(2); 2088a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child2->set_position(Position::LAST); 2098a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2108a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child2 = child2->add_child(); 2118a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen child2->set_field(2); 2128a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2138a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Metric2Condition link; 2148a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2158a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen translateFieldMatcher(whatMatcher, &link.metricFields); 2168a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen translateFieldMatcher(conditionMatcher, &link.conditionFields); 2178a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2188a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((size_t)1, link.metricFields.size()); 2198a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)0x02010001, link.metricFields[0].mMatcher.getField()); 2208a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)0xff7f007f, link.metricFields[0].mMask); 2218a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)10, link.metricFields[0].mMatcher.getTag()); 2228a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2238a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((size_t)1, link.conditionFields.size()); 2248a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)0x02028002, link.conditionFields[0].mMatcher.getField()); 2258a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)0xff7f807f, link.conditionFields[0].mMask); 2268a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ((int32_t)27, link.conditionFields[0].mMatcher.getTag()); 2278a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 2288a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2298a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenTEST(AtomMatcherTest, TestSubscriberDimensionWrite) { 2308a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey dim; 2318a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2328a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos1[] = {1, 1, 1}; 2338a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos2[] = {1, 1, 2}; 2348a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos3[] = {1, 1, 3}; 2358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos4[] = {2, 0, 0}; 2368a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2378a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field1(10, pos1, 2); 2388a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field2(10, pos2, 2); 2398a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field3(10, pos3, 2); 2408a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field4(10, pos4, 0); 2418a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2428a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value1((int32_t)10025); 2438a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value2("tag"); 2448a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value3((int32_t)987654); 2458a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value4((int32_t)99999); 2468a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2478a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field1, value1)); 2488a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field2, value2)); 2498a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field3, value3)); 2508a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field4, value4)); 2518a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2528a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen SubscriberReporter::getStatsDimensionsValue(dim); 2538a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // TODO: can't test anything here because SubscriberReport class doesn't have any read api. 2548a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 2558a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2568a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenTEST(AtomMatcherTest, TestWriteDimensionToProto) { 2578a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen HashableDimensionKey dim; 2588a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos1[] = {1, 1, 1}; 2598a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos2[] = {1, 1, 2}; 2608a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos3[] = {1, 1, 3}; 2618a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen int pos4[] = {2, 0, 0}; 2628a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field1(10, pos1, 2); 2638a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field2(10, pos2, 2); 2648a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field3(10, pos3, 2); 2658a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Field field4(10, pos4, 0); 2668a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2678a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value1((int32_t)10025); 2688a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value2("tag"); 2698a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value3((int32_t)987654); 2708a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Value value4((int32_t)99999); 2718a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2728a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field1, value1)); 2738a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field2, value2)); 2748a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field3, value3)); 2758a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen dim.addValue(FieldValue(field4, value4)); 2768a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2778a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen android::util::ProtoOutputStream protoOut; 2788a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen writeDimensionToProto(dim, &protoOut); 2798a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2808a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen vector<uint8_t> outData; 2818a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen outData.resize(protoOut.size()); 2828a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen size_t pos = 0; 2838a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen auto iter = protoOut.data(); 2848a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen while (iter.readBuffer() != NULL) { 2858a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen size_t toRead = iter.currentToRead(); 2868a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen std::memcpy(&(outData[pos]), iter.readBuffer(), toRead); 2878a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen pos += toRead; 2888a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen iter.rp()->move(toRead); 2898a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 2908a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2918a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen DimensionsValue result; 2928a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(true, result.ParseFromArray(&outData[0], outData.size())); 2938a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(10, result.field()); 2948a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(DimensionsValue::ValueCase::kValueTuple, result.value_case()); 2958a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(2, result.value_tuple().dimensions_value_size()); 2968a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 2978a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& dim1 = result.value_tuple().dimensions_value(0); 2988a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(DimensionsValue::ValueCase::kValueTuple, dim1.value_case()); 2998a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(3, dim1.value_tuple().dimensions_value_size()); 3008a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3018a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& dim11 = dim1.value_tuple().dimensions_value(0); 3028a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(DimensionsValue::ValueCase::kValueInt, dim11.value_case()); 3038a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(10025, dim11.value_int()); 3048a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3058a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& dim12 = dim1.value_tuple().dimensions_value(1); 3068a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(DimensionsValue::ValueCase::kValueStr, dim12.value_case()); 3078a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ("tag", dim12.value_str()); 3088a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3098a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& dim13 = dim1.value_tuple().dimensions_value(2); 3108a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(DimensionsValue::ValueCase::kValueInt, dim13.value_case()); 3118a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(987654, dim13.value_int()); 3128a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3138a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& dim2 = result.value_tuple().dimensions_value(1); 3148a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(DimensionsValue::ValueCase::kValueInt, dim2.value_case()); 3158a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(99999, dim2.value_int()); 3168a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 3178a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3188a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenTEST(AtomMatcherTest, TestWriteAtomToProto) { 3199c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node1; 3208a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node1.set_uid(1111); 3218a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node1.set_tag("location1"); 3228a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3239c1debe330006b2b4d5c08a55905789c57369609Yao Chen AttributionNodeInternal attribution_node2; 3248a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node2.set_uid(2222); 3258a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen attribution_node2.set_tag("location2"); 3268a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3279c1debe330006b2b4d5c08a55905789c57369609Yao Chen std::vector<AttributionNodeInternal> attribution_nodes = {attribution_node1, attribution_node2}; 3288a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3298a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Set up the event 3308a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen LogEvent event(4, 12345); 3318a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.write(attribution_nodes); 3328a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.write((int32_t)999); 3338a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen // Convert to a LogEvent 3348a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen event.init(); 3358a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3368a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen android::util::ProtoOutputStream protoOutput; 3378a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen writeFieldValueTreeToStream(event.GetTagId(), event.getValues(), &protoOutput); 3388a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3398a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen vector<uint8_t> outData; 3408a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen outData.resize(protoOutput.size()); 3418a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen size_t pos = 0; 3428a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen auto iter = protoOutput.data(); 3438a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen while (iter.readBuffer() != NULL) { 3448a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen size_t toRead = iter.currentToRead(); 3458a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen std::memcpy(&(outData[pos]), iter.readBuffer(), toRead); 3468a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen pos += toRead; 3478a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen iter.rp()->move(toRead); 3488a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen } 3498a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3508a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen Atom result; 3518a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(true, result.ParseFromArray(&outData[0], outData.size())); 3528a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(Atom::PushedCase::kBleScanResultReceived, result.pushed_case()); 3538a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen const auto& atom = result.ble_scan_result_received(); 3548a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(2, atom.attribution_node_size()); 3558a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(1111, atom.attribution_node(0).uid()); 3568a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ("location1", atom.attribution_node(0).tag()); 3578a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ(2222, atom.attribution_node(1).uid()); 3588a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen EXPECT_EQ("location2", atom.attribution_node(1).tag()); 3595caaa9d8542585e537ac762c35879eb42dd6bbb4Chenjie Yu EXPECT_EQ(999, atom.num_results()); 3608a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} 3618a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3628a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen 3638a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} // namespace statsd 3648a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} // namespace os 3658a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen} // namespace android 3668a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#else 3678a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao ChenGTEST_LOG_(INFO) << "This test does nothing.\n"; 3688a8d16ceea1e5b7a2f8c41e17b5d993035f50f5dYao Chen#endif