blob: a44541dddf538acd0b8c95e4dbe01f9798fb95eb [file] [log] [blame]
Yao Chencaf339d2017-10-06 16:01:10 -07001// Copyright (C) 2017 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Yao Chencaf339d2017-10-06 16:01:10 -070015#include <gtest/gtest.h>
Tej Singh3be093b2020-03-04 20:08:38 -080016#include <private/android_filesystem_config.h>
17#include <stdio.h>
Joe Onorato9fc9edf2017-10-15 20:08:52 -070018
Tej Singh3be093b2020-03-04 20:08:38 -080019#include <set>
20#include <unordered_map>
21#include <vector>
22
23#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
24#include "metrics/metrics_test_helper.h"
Joe Onorato9fc9edf2017-10-15 20:08:52 -070025#include "src/condition/ConditionTracker.h"
26#include "src/matchers/LogMatchingTracker.h"
27#include "src/metrics/CountMetricProducer.h"
Yangster1d4d6862017-10-31 12:58:51 -070028#include "src/metrics/GaugeMetricProducer.h"
Joe Onorato9fc9edf2017-10-15 20:08:52 -070029#include "src/metrics/MetricProducer.h"
Chenjie Yub3dda412017-10-24 13:41:59 -070030#include "src/metrics/ValueMetricProducer.h"
Joe Onorato9fc9edf2017-10-15 20:08:52 -070031#include "src/metrics/metrics_manager_util.h"
Yangster-mac94e197c2018-01-02 16:03:03 -080032#include "statsd_test_util.h"
Yao Chencaf339d2017-10-06 16:01:10 -070033
Tej Singh3be093b2020-03-04 20:08:38 -080034using namespace testing;
Yao Chencaf339d2017-10-06 16:01:10 -070035using android::sp;
Tej Singh3be093b2020-03-04 20:08:38 -080036using android::os::statsd::Predicate;
37using std::map;
Yao Chencaf339d2017-10-06 16:01:10 -070038using std::set;
39using std::unordered_map;
40using std::vector;
41
42#ifdef __ANDROID__
43
Tej Singh3be093b2020-03-04 20:08:38 -080044namespace android {
45namespace os {
46namespace statsd {
47
48namespace {
Yangster-mac94e197c2018-01-02 16:03:03 -080049const ConfigKey kConfigKey(0, 12345);
Jeffrey Huang38d70262020-03-19 17:28:59 -070050const long kAlertId = 3;
Yao Chenb3561512017-11-21 18:07:17 -080051
Chenjie Yu85ed8382017-12-14 16:48:54 -080052const long timeBaseSec = 1000;
53
Yao Chencaf339d2017-10-06 16:01:10 -070054StatsdConfig buildGoodConfig() {
55 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -080056 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -070057
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080058 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080059 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -070060
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080061 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080062 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
63 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070064 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080065 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070066 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
67
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080068 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080069 eventMatcher->set_id(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070070
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080071 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080072 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
73 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070074 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080075 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070076 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
77
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080078 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080079 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070080
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080081 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -070082 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -080083 combination->add_matcher(StringToId("SCREEN_IS_ON"));
84 combination->add_matcher(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070085
Yangster-mace2cd6d52017-11-09 20:38:30 -080086 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -080087 metric->set_id(3);
88 metric->set_what(StringToId("SCREEN_IS_ON"));
Yangster-macb8144812018-01-04 10:56:23 -080089 metric->set_bucket(ONE_MINUTE);
Yangster-mac468ff042018-01-17 12:26:34 -080090 metric->mutable_dimensions_in_what()->set_field(2 /*SCREEN_STATE_CHANGE*/);
91 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -080092
Yangster-mac94e197c2018-01-02 16:03:03 -080093 config.add_no_report_metric(3);
94
Yangster-mace2cd6d52017-11-09 20:38:30 -080095 auto alert = config.add_alert();
Jeffrey Huang38d70262020-03-19 17:28:59 -070096 alert->set_id(kAlertId);
Yangster-mac94e197c2018-01-02 16:03:03 -080097 alert->set_metric_id(3);
Yangster-maca7fb12d2018-01-03 17:17:20 -080098 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -080099 alert->set_refractory_period_secs(100);
100 alert->set_trigger_if_sum_gt(100);
Yao Chencaf339d2017-10-06 16:01:10 -0700101 return config;
102}
103
104StatsdConfig buildCircleMatchers() {
105 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800106 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700107
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800108 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800109 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700110
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800111 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800112 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
113 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700114 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800115 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700116 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
117
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800118 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800119 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700120
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800121 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700122 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800123 combination->add_matcher(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700124 // Circle dependency
Yangster-mac94e197c2018-01-02 16:03:03 -0800125 combination->add_matcher(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700126
127 return config;
128}
129
Yangster-mace2cd6d52017-11-09 20:38:30 -0800130StatsdConfig buildAlertWithUnknownMetric() {
131 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800132 config.set_id(12345);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800133
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800134 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800135 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800136
137 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800138 metric->set_id(3);
139 metric->set_what(StringToId("SCREEN_IS_ON"));
Yangster-macb8144812018-01-04 10:56:23 -0800140 metric->set_bucket(ONE_MINUTE);
Yangster-mac468ff042018-01-17 12:26:34 -0800141 metric->mutable_dimensions_in_what()->set_field(2 /*SCREEN_STATE_CHANGE*/);
142 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800143
144 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -0800145 alert->set_id(3);
146 alert->set_metric_id(2);
Yangster-maca7fb12d2018-01-03 17:17:20 -0800147 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800148 alert->set_refractory_period_secs(100);
149 alert->set_trigger_if_sum_gt(100);
150 return config;
151}
152
Yao Chencaf339d2017-10-06 16:01:10 -0700153StatsdConfig buildMissingMatchers() {
154 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800155 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700156
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800157 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800158 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700159
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800160 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800161 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
162 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700163 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800164 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700165 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
166
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800167 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800168 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700169
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800170 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700171 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800172 combination->add_matcher(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700173 // undefined matcher
Yangster-mac94e197c2018-01-02 16:03:03 -0800174 combination->add_matcher(StringToId("ABC"));
Yao Chencaf339d2017-10-06 16:01:10 -0700175
176 return config;
177}
178
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800179StatsdConfig buildMissingPredicate() {
Yao Chen10535b92017-11-27 11:31:55 -0800180 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800181 config.set_id(12345);
Yao Chen10535b92017-11-27 11:31:55 -0800182
183 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800184 metric->set_id(3);
185 metric->set_what(StringToId("SCREEN_EVENT"));
Yangster-macb8144812018-01-04 10:56:23 -0800186 metric->set_bucket(ONE_MINUTE);
Yangster-mac94e197c2018-01-02 16:03:03 -0800187 metric->set_condition(StringToId("SOME_CONDITION"));
Yao Chen10535b92017-11-27 11:31:55 -0800188
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800189 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800190 eventMatcher->set_id(StringToId("SCREEN_EVENT"));
Yao Chen10535b92017-11-27 11:31:55 -0800191
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800192 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800193 simpleAtomMatcher->set_atom_id(2);
Yao Chen10535b92017-11-27 11:31:55 -0800194
195 return config;
196}
197
Yao Chen5154a372017-10-30 22:57:06 -0700198StatsdConfig buildDimensionMetricsWithMultiTags() {
199 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800200 config.set_id(12345);
Yao Chen5154a372017-10-30 22:57:06 -0700201
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800202 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800203 eventMatcher->set_id(StringToId("BATTERY_VERY_LOW"));
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800204 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800205 simpleAtomMatcher->set_atom_id(2);
Yao Chen5154a372017-10-30 22:57:06 -0700206
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800207 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800208 eventMatcher->set_id(StringToId("BATTERY_VERY_VERY_LOW"));
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800209 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800210 simpleAtomMatcher->set_atom_id(3);
Yao Chen5154a372017-10-30 22:57:06 -0700211
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800212 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800213 eventMatcher->set_id(StringToId("BATTERY_LOW"));
Yao Chen5154a372017-10-30 22:57:06 -0700214
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800215 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chen5154a372017-10-30 22:57:06 -0700216 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800217 combination->add_matcher(StringToId("BATTERY_VERY_LOW"));
218 combination->add_matcher(StringToId("BATTERY_VERY_VERY_LOW"));
Yao Chen5154a372017-10-30 22:57:06 -0700219
220 // Count process state changes, slice by uid, while SCREEN_IS_OFF
221 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800222 metric->set_id(3);
223 metric->set_what(StringToId("BATTERY_LOW"));
Yangster-macb8144812018-01-04 10:56:23 -0800224 metric->set_bucket(ONE_MINUTE);
Yangster-mac20877162017-12-22 17:19:39 -0800225 // This case is interesting. We want to dimension across two atoms.
Yangster-mac468ff042018-01-17 12:26:34 -0800226 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yao Chen5154a372017-10-30 22:57:06 -0700227
Yangster-mace2cd6d52017-11-09 20:38:30 -0800228 auto alert = config.add_alert();
Jeffrey Huang38d70262020-03-19 17:28:59 -0700229 alert->set_id(kAlertId);
Yangster-mac94e197c2018-01-02 16:03:03 -0800230 alert->set_metric_id(3);
Yangster-maca7fb12d2018-01-03 17:17:20 -0800231 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800232 alert->set_refractory_period_secs(100);
233 alert->set_trigger_if_sum_gt(100);
Yao Chen5154a372017-10-30 22:57:06 -0700234 return config;
235}
236
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800237StatsdConfig buildCirclePredicates() {
Yao Chencaf339d2017-10-06 16:01:10 -0700238 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800239 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700240
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800241 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800242 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700243
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800244 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800245 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
246 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700247 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800248 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700249 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
250
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800251 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800252 eventMatcher->set_id(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700253
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800254 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800255 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
256 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700257 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800258 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700259 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
260
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800261 auto condition = config.add_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800262 condition->set_id(StringToId("SCREEN_IS_ON"));
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800263 SimplePredicate* simplePredicate = condition->mutable_simple_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800264 simplePredicate->set_start(StringToId("SCREEN_IS_ON"));
265 simplePredicate->set_stop(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700266
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800267 condition = config.add_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800268 condition->set_id(StringToId("SCREEN_IS_EITHER_ON_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700269
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800270 Predicate_Combination* combination = condition->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700271 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800272 combination->add_predicate(StringToId("SCREEN_IS_ON"));
273 combination->add_predicate(StringToId("SCREEN_IS_EITHER_ON_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700274
275 return config;
276}
277
Tej Singh3be093b2020-03-04 20:08:38 -0800278bool isSubset(const set<int32_t>& set1, const set<int32_t>& set2) {
279 return std::includes(set2.begin(), set2.end(), set1.begin(), set1.end());
280}
281} // anonymous namespace
282
Yao Chencaf339d2017-10-06 16:01:10 -0700283TEST(MetricsManagerTest, TestGoodConfig) {
Yangster-mac20877162017-12-22 17:19:39 -0800284 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700285 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800286 sp<AlarmMonitor> anomalyAlarmMonitor;
287 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700288 StatsdConfig config = buildGoodConfig();
289 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800290 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700291 vector<sp<ConditionTracker>> allConditionTrackers;
292 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800293 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800294 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700295 unordered_map<int, std::vector<int>> conditionToMetricMap;
296 unordered_map<int, std::vector<int>> trackerToMetricMap;
297 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700298 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
299 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700300 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700301 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800302 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700303
Chenjie Yue2219202018-06-08 10:07:51 -0700304 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
305 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
306 allAtomMatchers, allConditionTrackers, allMetricProducers,
307 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700308 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700309 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700310 alertTrackerMap, metricsWithActivation,
311 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800312 EXPECT_EQ(1u, allMetricProducers.size());
313 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yangster-mac94e197c2018-01-02 16:03:03 -0800314 EXPECT_EQ(1u, noReportMetricIds.size());
Jeffrey Huang38d70262020-03-19 17:28:59 -0700315 EXPECT_EQ(1u, alertTrackerMap.size());
316 EXPECT_NE(alertTrackerMap.find(kAlertId), alertTrackerMap.end());
317 EXPECT_EQ(alertTrackerMap.find(kAlertId)->second, 0);
Yao Chencaf339d2017-10-06 16:01:10 -0700318}
319
Yao Chen5154a372017-10-30 22:57:06 -0700320TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800321 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700322 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800323 sp<AlarmMonitor> anomalyAlarmMonitor;
324 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chen5154a372017-10-30 22:57:06 -0700325 StatsdConfig config = buildDimensionMetricsWithMultiTags();
326 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800327 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a372017-10-30 22:57:06 -0700328 vector<sp<ConditionTracker>> allConditionTrackers;
329 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800330 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800331 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen5154a372017-10-30 22:57:06 -0700332 unordered_map<int, std::vector<int>> conditionToMetricMap;
333 unordered_map<int, std::vector<int>> trackerToMetricMap;
334 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700335 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
336 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700337 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700338 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800339 std::set<int64_t> noReportMetricIds;
Yao Chen5154a372017-10-30 22:57:06 -0700340
Chenjie Yue2219202018-06-08 10:07:51 -0700341 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
342 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
343 allAtomMatchers, allConditionTrackers, allMetricProducers,
344 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700345 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700346 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700347 alertTrackerMap, metricsWithActivation,
348 noReportMetricIds));
Yao Chen5154a372017-10-30 22:57:06 -0700349}
350
Yao Chencaf339d2017-10-06 16:01:10 -0700351TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800352 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700353 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800354 sp<AlarmMonitor> anomalyAlarmMonitor;
355 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700356 StatsdConfig config = buildCircleMatchers();
357 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800358 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700359 vector<sp<ConditionTracker>> allConditionTrackers;
360 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800361 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800362 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700363 unordered_map<int, std::vector<int>> conditionToMetricMap;
364 unordered_map<int, std::vector<int>> trackerToMetricMap;
365 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700366 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
367 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700368 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700369 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800370 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700371
Chenjie Yue2219202018-06-08 10:07:51 -0700372 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
373 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
374 allAtomMatchers, allConditionTrackers, allMetricProducers,
375 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700376 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700377 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700378 alertTrackerMap, metricsWithActivation,
379 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700380}
381
382TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800383 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700384 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800385 sp<AlarmMonitor> anomalyAlarmMonitor;
386 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700387 StatsdConfig config = buildMissingMatchers();
388 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800389 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700390 vector<sp<ConditionTracker>> allConditionTrackers;
391 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800392 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800393 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700394 unordered_map<int, std::vector<int>> conditionToMetricMap;
395 unordered_map<int, std::vector<int>> trackerToMetricMap;
396 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700397 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
398 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700399 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700400 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800401 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700402 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
403 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
404 allAtomMatchers, allConditionTrackers, allMetricProducers,
405 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700406 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700407 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700408 alertTrackerMap, metricsWithActivation,
409 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700410}
411
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800412TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800413 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700414 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800415 sp<AlarmMonitor> anomalyAlarmMonitor;
416 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800417 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800418 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800419 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800420 vector<sp<ConditionTracker>> allConditionTrackers;
421 vector<sp<MetricProducer>> allMetricProducers;
422 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800423 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen10535b92017-11-27 11:31:55 -0800424 unordered_map<int, std::vector<int>> conditionToMetricMap;
425 unordered_map<int, std::vector<int>> trackerToMetricMap;
426 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700427 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
428 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700429 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700430 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800431 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700432 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
433 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
434 allAtomMatchers, allConditionTrackers, allMetricProducers,
435 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700436 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700437 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700438 alertTrackerMap, metricsWithActivation, noReportMetricIds));
Yao Chen10535b92017-11-27 11:31:55 -0800439}
440
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800441TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800442 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700443 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800444 sp<AlarmMonitor> anomalyAlarmMonitor;
445 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800446 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700447 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800448 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700449 vector<sp<ConditionTracker>> allConditionTrackers;
450 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800451 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800452 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700453 unordered_map<int, std::vector<int>> conditionToMetricMap;
454 unordered_map<int, std::vector<int>> trackerToMetricMap;
455 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700456 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
457 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700458 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700459 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800460 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700461
Chenjie Yue2219202018-06-08 10:07:51 -0700462 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
463 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
464 allAtomMatchers, allConditionTrackers, allMetricProducers,
465 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700466 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700467 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700468 alertTrackerMap, metricsWithActivation,
469 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800470}
471
472TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800473 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700474 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800475 sp<AlarmMonitor> anomalyAlarmMonitor;
476 sp<AlarmMonitor> periodicAlarmMonitor;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800477 StatsdConfig config = buildAlertWithUnknownMetric();
478 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800479 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800480 vector<sp<ConditionTracker>> allConditionTrackers;
481 vector<sp<MetricProducer>> allMetricProducers;
482 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800483 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800484 unordered_map<int, std::vector<int>> conditionToMetricMap;
485 unordered_map<int, std::vector<int>> trackerToMetricMap;
486 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700487 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
488 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
Jeffrey Huang38d70262020-03-19 17:28:59 -0700489 unordered_map<int64_t, int> alertTrackerMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700490 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800491 std::set<int64_t> noReportMetricIds;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800492
Chenjie Yue2219202018-06-08 10:07:51 -0700493 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
494 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
495 allAtomMatchers, allConditionTrackers, allMetricProducers,
496 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700497 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700498 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
Jeffrey Huang38d70262020-03-19 17:28:59 -0700499 alertTrackerMap, metricsWithActivation,
500 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700501}
502
Tej Singh3be093b2020-03-04 20:08:38 -0800503TEST(MetricsManagerTest, TestLogSources) {
504 string app1 = "app1";
505 set<int32_t> app1Uids = {1111, 11111};
506 string app2 = "app2";
507 set<int32_t> app2Uids = {2222};
508 string app3 = "app3";
509 set<int32_t> app3Uids = {3333, 1111};
510
511 map<string, set<int32_t>> pkgToUids;
512 pkgToUids[app1] = app1Uids;
513 pkgToUids[app2] = app2Uids;
514 pkgToUids[app3] = app3Uids;
515
516 int32_t atom1 = 10;
517 int32_t atom2 = 20;
518 int32_t atom3 = 30;
519 sp<MockUidMap> uidMap = new StrictMock<MockUidMap>();
520 EXPECT_CALL(*uidMap, getAppUid(_))
521 .Times(4)
522 .WillRepeatedly(Invoke([&pkgToUids](const string& pkg) {
523 const auto& it = pkgToUids.find(pkg);
524 if (it != pkgToUids.end()) {
525 return it->second;
526 }
527 return set<int32_t>();
528 }));
529 sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
530 EXPECT_CALL(*pullerManager, RegisterPullUidProvider(kConfigKey, _)).Times(1);
Tej Singh3eb9ced2020-04-20 22:04:38 -0700531 EXPECT_CALL(*pullerManager, UnregisterPullUidProvider(kConfigKey, _)).Times(1);
Tej Singh3be093b2020-03-04 20:08:38 -0800532
533 sp<AlarmMonitor> anomalyAlarmMonitor;
534 sp<AlarmMonitor> periodicAlarmMonitor;
535
536 StatsdConfig config = buildGoodConfig();
537 config.add_allowed_log_source("AID_SYSTEM");
538 config.add_allowed_log_source(app1);
539 config.add_default_pull_packages("AID_SYSTEM");
540 config.add_default_pull_packages("AID_ROOT");
541
542 const set<int32_t> defaultPullUids = {AID_SYSTEM, AID_ROOT};
543
544 PullAtomPackages* pullAtomPackages = config.add_pull_atom_packages();
545 pullAtomPackages->set_atom_id(atom1);
546 pullAtomPackages->add_packages(app1);
547 pullAtomPackages->add_packages(app3);
548
549 pullAtomPackages = config.add_pull_atom_packages();
550 pullAtomPackages->set_atom_id(atom2);
551 pullAtomPackages->add_packages(app2);
552 pullAtomPackages->add_packages("AID_STATSD");
553
554 MetricsManager metricsManager(kConfigKey, config, timeBaseSec, timeBaseSec, uidMap,
555 pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor);
556
557 EXPECT_TRUE(metricsManager.isConfigValid());
558
559 ASSERT_EQ(metricsManager.mAllowedUid.size(), 1);
560 EXPECT_EQ(metricsManager.mAllowedUid[0], AID_SYSTEM);
561
562 ASSERT_EQ(metricsManager.mAllowedPkg.size(), 1);
563 EXPECT_EQ(metricsManager.mAllowedPkg[0], app1);
564
565 ASSERT_EQ(metricsManager.mAllowedLogSources.size(), 3);
566 EXPECT_TRUE(isSubset({AID_SYSTEM}, metricsManager.mAllowedLogSources));
567 EXPECT_TRUE(isSubset(app1Uids, metricsManager.mAllowedLogSources));
568
569 ASSERT_EQ(metricsManager.mDefaultPullUids.size(), 2);
570 EXPECT_TRUE(isSubset(defaultPullUids, metricsManager.mDefaultPullUids));
571 ;
572
573 vector<int32_t> atom1Uids = metricsManager.getPullAtomUids(atom1);
574 ASSERT_EQ(atom1Uids.size(), 5);
575 set<int32_t> expectedAtom1Uids;
576 expectedAtom1Uids.insert(defaultPullUids.begin(), defaultPullUids.end());
577 expectedAtom1Uids.insert(app1Uids.begin(), app1Uids.end());
578 expectedAtom1Uids.insert(app3Uids.begin(), app3Uids.end());
579 EXPECT_TRUE(isSubset(expectedAtom1Uids, set<int32_t>(atom1Uids.begin(), atom1Uids.end())));
580
581 vector<int32_t> atom2Uids = metricsManager.getPullAtomUids(atom2);
582 ASSERT_EQ(atom2Uids.size(), 4);
583 set<int32_t> expectedAtom2Uids;
584 expectedAtom1Uids.insert(defaultPullUids.begin(), defaultPullUids.end());
585 expectedAtom1Uids.insert(app2Uids.begin(), app2Uids.end());
586 expectedAtom1Uids.insert(AID_STATSD);
587 EXPECT_TRUE(isSubset(expectedAtom2Uids, set<int32_t>(atom2Uids.begin(), atom2Uids.end())));
588
589 vector<int32_t> atom3Uids = metricsManager.getPullAtomUids(atom3);
590 ASSERT_EQ(atom3Uids.size(), 2);
591 EXPECT_TRUE(isSubset(defaultPullUids, set<int32_t>(atom3Uids.begin(), atom3Uids.end())));
592}
593
594} // namespace statsd
595} // namespace os
596} // namespace android
597
Yao Chencaf339d2017-10-06 16:01:10 -0700598#else
599GTEST_LOG_(INFO) << "This test does nothing.\n";
600#endif