blob: 71adc5789d920ea80d8b443c19326cb540e14d0f [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>
Joe Onorato9fc9edf2017-10-15 20:08:52 -070016
17#include "src/condition/ConditionTracker.h"
18#include "src/matchers/LogMatchingTracker.h"
19#include "src/metrics/CountMetricProducer.h"
Yangster1d4d6862017-10-31 12:58:51 -070020#include "src/metrics/GaugeMetricProducer.h"
Joe Onorato9fc9edf2017-10-15 20:08:52 -070021#include "src/metrics/MetricProducer.h"
Chenjie Yub3dda412017-10-24 13:41:59 -070022#include "src/metrics/ValueMetricProducer.h"
Joe Onorato9fc9edf2017-10-15 20:08:52 -070023#include "src/metrics/metrics_manager_util.h"
Yangster-mac94e197c2018-01-02 16:03:03 -080024#include "statsd_test_util.h"
Yao Chencaf339d2017-10-06 16:01:10 -070025
26#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
27
28#include <stdio.h>
29#include <set>
30#include <unordered_map>
31#include <vector>
32
33using namespace android::os::statsd;
34using android::sp;
35using std::set;
36using std::unordered_map;
37using std::vector;
Stefan Lafon12d01fa2017-12-04 20:56:09 -080038using android::os::statsd::Predicate;
Yao Chencaf339d2017-10-06 16:01:10 -070039
40#ifdef __ANDROID__
41
Yangster-mac94e197c2018-01-02 16:03:03 -080042const ConfigKey kConfigKey(0, 12345);
Yao Chenb3561512017-11-21 18:07:17 -080043
Chenjie Yu85ed8382017-12-14 16:48:54 -080044const long timeBaseSec = 1000;
45
Yao Chencaf339d2017-10-06 16:01:10 -070046StatsdConfig buildGoodConfig() {
47 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -080048 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -070049
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080050 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080051 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -070052
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080053 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080054 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
55 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070056 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080057 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070058 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
59
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080060 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080061 eventMatcher->set_id(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070062
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080063 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080064 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
65 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070066 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080067 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070068 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
69
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080070 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080071 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070072
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080073 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -070074 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -080075 combination->add_matcher(StringToId("SCREEN_IS_ON"));
76 combination->add_matcher(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070077
Yangster-mace2cd6d52017-11-09 20:38:30 -080078 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -080079 metric->set_id(3);
80 metric->set_what(StringToId("SCREEN_IS_ON"));
Yangster-macb8144812018-01-04 10:56:23 -080081 metric->set_bucket(ONE_MINUTE);
Yangster-mac468ff042018-01-17 12:26:34 -080082 metric->mutable_dimensions_in_what()->set_field(2 /*SCREEN_STATE_CHANGE*/);
83 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -080084
Yangster-mac94e197c2018-01-02 16:03:03 -080085 config.add_no_report_metric(3);
86
Yangster-mace2cd6d52017-11-09 20:38:30 -080087 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -080088 alert->set_id(3);
89 alert->set_metric_id(3);
Yangster-maca7fb12d2018-01-03 17:17:20 -080090 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -080091 alert->set_refractory_period_secs(100);
92 alert->set_trigger_if_sum_gt(100);
Yao Chencaf339d2017-10-06 16:01:10 -070093 return config;
94}
95
96StatsdConfig buildCircleMatchers() {
97 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -080098 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -070099
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800100 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800101 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700102
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800103 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800104 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
105 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700106 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800107 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700108 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
109
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800110 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800111 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700112
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800113 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700114 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800115 combination->add_matcher(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700116 // Circle dependency
Yangster-mac94e197c2018-01-02 16:03:03 -0800117 combination->add_matcher(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700118
119 return config;
120}
121
Yangster-mace2cd6d52017-11-09 20:38:30 -0800122StatsdConfig buildAlertWithUnknownMetric() {
123 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800124 config.set_id(12345);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800125
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800126 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800127 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800128
129 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800130 metric->set_id(3);
131 metric->set_what(StringToId("SCREEN_IS_ON"));
Yangster-macb8144812018-01-04 10:56:23 -0800132 metric->set_bucket(ONE_MINUTE);
Yangster-mac468ff042018-01-17 12:26:34 -0800133 metric->mutable_dimensions_in_what()->set_field(2 /*SCREEN_STATE_CHANGE*/);
134 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800135
136 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -0800137 alert->set_id(3);
138 alert->set_metric_id(2);
Yangster-maca7fb12d2018-01-03 17:17:20 -0800139 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800140 alert->set_refractory_period_secs(100);
141 alert->set_trigger_if_sum_gt(100);
142 return config;
143}
144
Yao Chencaf339d2017-10-06 16:01:10 -0700145StatsdConfig buildMissingMatchers() {
146 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800147 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700148
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800149 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800150 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700151
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800152 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800153 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
154 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700155 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800156 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700157 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
158
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800159 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800160 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700161
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800162 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700163 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800164 combination->add_matcher(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700165 // undefined matcher
Yangster-mac94e197c2018-01-02 16:03:03 -0800166 combination->add_matcher(StringToId("ABC"));
Yao Chencaf339d2017-10-06 16:01:10 -0700167
168 return config;
169}
170
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800171StatsdConfig buildMissingPredicate() {
Yao Chen10535b92017-11-27 11:31:55 -0800172 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800173 config.set_id(12345);
Yao Chen10535b92017-11-27 11:31:55 -0800174
175 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800176 metric->set_id(3);
177 metric->set_what(StringToId("SCREEN_EVENT"));
Yangster-macb8144812018-01-04 10:56:23 -0800178 metric->set_bucket(ONE_MINUTE);
Yangster-mac94e197c2018-01-02 16:03:03 -0800179 metric->set_condition(StringToId("SOME_CONDITION"));
Yao Chen10535b92017-11-27 11:31:55 -0800180
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800181 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800182 eventMatcher->set_id(StringToId("SCREEN_EVENT"));
Yao Chen10535b92017-11-27 11:31:55 -0800183
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800184 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800185 simpleAtomMatcher->set_atom_id(2);
Yao Chen10535b92017-11-27 11:31:55 -0800186
187 return config;
188}
189
Yao Chen5154a3792017-10-30 22:57:06 -0700190StatsdConfig buildDimensionMetricsWithMultiTags() {
191 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800192 config.set_id(12345);
Yao Chen5154a3792017-10-30 22:57:06 -0700193
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800194 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800195 eventMatcher->set_id(StringToId("BATTERY_VERY_LOW"));
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800196 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800197 simpleAtomMatcher->set_atom_id(2);
Yao Chen5154a3792017-10-30 22:57:06 -0700198
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800199 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800200 eventMatcher->set_id(StringToId("BATTERY_VERY_VERY_LOW"));
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800201 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800202 simpleAtomMatcher->set_atom_id(3);
Yao Chen5154a3792017-10-30 22:57:06 -0700203
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800204 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800205 eventMatcher->set_id(StringToId("BATTERY_LOW"));
Yao Chen5154a3792017-10-30 22:57:06 -0700206
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800207 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chen5154a3792017-10-30 22:57:06 -0700208 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800209 combination->add_matcher(StringToId("BATTERY_VERY_LOW"));
210 combination->add_matcher(StringToId("BATTERY_VERY_VERY_LOW"));
Yao Chen5154a3792017-10-30 22:57:06 -0700211
212 // Count process state changes, slice by uid, while SCREEN_IS_OFF
213 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800214 metric->set_id(3);
215 metric->set_what(StringToId("BATTERY_LOW"));
Yangster-macb8144812018-01-04 10:56:23 -0800216 metric->set_bucket(ONE_MINUTE);
Yangster-mac20877162017-12-22 17:19:39 -0800217 // This case is interesting. We want to dimension across two atoms.
Yangster-mac468ff042018-01-17 12:26:34 -0800218 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yao Chen5154a3792017-10-30 22:57:06 -0700219
Yangster-mace2cd6d52017-11-09 20:38:30 -0800220 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -0800221 alert->set_id(103);
222 alert->set_metric_id(3);
Yangster-maca7fb12d2018-01-03 17:17:20 -0800223 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800224 alert->set_refractory_period_secs(100);
225 alert->set_trigger_if_sum_gt(100);
Yao Chen5154a3792017-10-30 22:57:06 -0700226 return config;
227}
228
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800229StatsdConfig buildCirclePredicates() {
Yao Chencaf339d2017-10-06 16:01:10 -0700230 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800231 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700232
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800233 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800234 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700235
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800236 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800237 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
238 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700239 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800240 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700241 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
242
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800243 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800244 eventMatcher->set_id(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700245
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800246 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800247 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
248 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700249 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800250 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700251 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
252
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800253 auto condition = config.add_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800254 condition->set_id(StringToId("SCREEN_IS_ON"));
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800255 SimplePredicate* simplePredicate = condition->mutable_simple_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800256 simplePredicate->set_start(StringToId("SCREEN_IS_ON"));
257 simplePredicate->set_stop(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700258
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800259 condition = config.add_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800260 condition->set_id(StringToId("SCREEN_IS_EITHER_ON_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700261
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800262 Predicate_Combination* combination = condition->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700263 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800264 combination->add_predicate(StringToId("SCREEN_IS_ON"));
265 combination->add_predicate(StringToId("SCREEN_IS_EITHER_ON_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700266
267 return config;
268}
269
270TEST(MetricsManagerTest, TestGoodConfig) {
Yangster-mac20877162017-12-22 17:19:39 -0800271 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700272 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800273 sp<AlarmMonitor> anomalyAlarmMonitor;
274 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700275 StatsdConfig config = buildGoodConfig();
276 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800277 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700278 vector<sp<ConditionTracker>> allConditionTrackers;
279 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800280 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800281 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700282 unordered_map<int, std::vector<int>> conditionToMetricMap;
283 unordered_map<int, std::vector<int>> trackerToMetricMap;
284 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700285 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
286 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
287 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800288 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700289
Chenjie Yue2219202018-06-08 10:07:51 -0700290 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
291 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
292 allAtomMatchers, allConditionTrackers, allMetricProducers,
293 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700294 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700295 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
296 metricsWithActivation, noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800297 EXPECT_EQ(1u, allMetricProducers.size());
298 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yangster-mac94e197c2018-01-02 16:03:03 -0800299 EXPECT_EQ(1u, noReportMetricIds.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700300}
301
Yao Chen5154a3792017-10-30 22:57:06 -0700302TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800303 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700304 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800305 sp<AlarmMonitor> anomalyAlarmMonitor;
306 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chen5154a3792017-10-30 22:57:06 -0700307 StatsdConfig config = buildDimensionMetricsWithMultiTags();
308 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800309 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a3792017-10-30 22:57:06 -0700310 vector<sp<ConditionTracker>> allConditionTrackers;
311 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800312 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800313 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen5154a3792017-10-30 22:57:06 -0700314 unordered_map<int, std::vector<int>> conditionToMetricMap;
315 unordered_map<int, std::vector<int>> trackerToMetricMap;
316 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700317 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
318 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
319 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800320 std::set<int64_t> noReportMetricIds;
Yao Chen5154a3792017-10-30 22:57:06 -0700321
Chenjie Yue2219202018-06-08 10:07:51 -0700322 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
323 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
324 allAtomMatchers, allConditionTrackers, allMetricProducers,
325 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700326 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700327 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
328 metricsWithActivation, noReportMetricIds));
Yao Chen5154a3792017-10-30 22:57:06 -0700329}
330
Yao Chencaf339d2017-10-06 16:01:10 -0700331TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800332 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700333 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800334 sp<AlarmMonitor> anomalyAlarmMonitor;
335 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700336 StatsdConfig config = buildCircleMatchers();
337 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800338 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700339 vector<sp<ConditionTracker>> allConditionTrackers;
340 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800341 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800342 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700343 unordered_map<int, std::vector<int>> conditionToMetricMap;
344 unordered_map<int, std::vector<int>> trackerToMetricMap;
345 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700346 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
347 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
348 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800349 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700350
Chenjie Yue2219202018-06-08 10:07:51 -0700351 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
352 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
353 allAtomMatchers, allConditionTrackers, allMetricProducers,
354 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700355 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700356 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
357 metricsWithActivation, noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700358}
359
360TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800361 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700362 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800363 sp<AlarmMonitor> anomalyAlarmMonitor;
364 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700365 StatsdConfig config = buildMissingMatchers();
366 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800367 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700368 vector<sp<ConditionTracker>> allConditionTrackers;
369 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800370 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800371 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700372 unordered_map<int, std::vector<int>> conditionToMetricMap;
373 unordered_map<int, std::vector<int>> trackerToMetricMap;
374 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700375 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
376 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
377 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800378 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700379 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
380 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
381 allAtomMatchers, allConditionTrackers, allMetricProducers,
382 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700383 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700384 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
385 metricsWithActivation, noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700386}
387
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800388TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800389 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700390 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800391 sp<AlarmMonitor> anomalyAlarmMonitor;
392 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800393 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800394 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800395 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800396 vector<sp<ConditionTracker>> allConditionTrackers;
397 vector<sp<MetricProducer>> allMetricProducers;
398 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800399 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen10535b92017-11-27 11:31:55 -0800400 unordered_map<int, std::vector<int>> conditionToMetricMap;
401 unordered_map<int, std::vector<int>> trackerToMetricMap;
402 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700403 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
404 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
405 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800406 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700407 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
408 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
409 allAtomMatchers, allConditionTrackers, allMetricProducers,
410 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700411 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700412 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
413 metricsWithActivation, noReportMetricIds));
Yao Chen10535b92017-11-27 11:31:55 -0800414}
415
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800416TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800417 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700418 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800419 sp<AlarmMonitor> anomalyAlarmMonitor;
420 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800421 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700422 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800423 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700424 vector<sp<ConditionTracker>> allConditionTrackers;
425 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800426 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800427 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700428 unordered_map<int, std::vector<int>> conditionToMetricMap;
429 unordered_map<int, std::vector<int>> trackerToMetricMap;
430 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700431 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
432 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
433 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800434 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700435
Chenjie Yue2219202018-06-08 10:07:51 -0700436 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
437 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
438 allAtomMatchers, allConditionTrackers, allMetricProducers,
439 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700440 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700441 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
442 metricsWithActivation, noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800443}
444
445TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800446 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700447 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800448 sp<AlarmMonitor> anomalyAlarmMonitor;
449 sp<AlarmMonitor> periodicAlarmMonitor;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800450 StatsdConfig config = buildAlertWithUnknownMetric();
451 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800452 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800453 vector<sp<ConditionTracker>> allConditionTrackers;
454 vector<sp<MetricProducer>> allMetricProducers;
455 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800456 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800457 unordered_map<int, std::vector<int>> conditionToMetricMap;
458 unordered_map<int, std::vector<int>> trackerToMetricMap;
459 unordered_map<int, std::vector<int>> trackerToConditionMap;
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700460 unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
461 unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
462 vector<int> metricsWithActivation;
Yangster-mac94e197c2018-01-02 16:03:03 -0800463 std::set<int64_t> noReportMetricIds;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800464
Chenjie Yue2219202018-06-08 10:07:51 -0700465 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
466 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
467 allAtomMatchers, allConditionTrackers, allMetricProducers,
468 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700469 trackerToMetricMap, trackerToConditionMap,
Muhammad Qureshi3a5ebf52019-03-28 12:38:21 -0700470 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
471 metricsWithActivation, noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700472}
473
474#else
475GTEST_LOG_(INFO) << "This test does nothing.\n";
476#endif