blob: 8fbb58a956d5ea35095f0283b363b178f0ed196c [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;
Yangster-mac94e197c2018-01-02 16:03:03 -0800285 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700286
Chenjie Yue2219202018-06-08 10:07:51 -0700287 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
288 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
289 allAtomMatchers, allConditionTrackers, allMetricProducers,
290 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
291 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800292 EXPECT_EQ(1u, allMetricProducers.size());
293 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yangster-mac94e197c2018-01-02 16:03:03 -0800294 EXPECT_EQ(1u, noReportMetricIds.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700295}
296
Yao Chen5154a3792017-10-30 22:57:06 -0700297TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800298 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700299 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800300 sp<AlarmMonitor> anomalyAlarmMonitor;
301 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chen5154a3792017-10-30 22:57:06 -0700302 StatsdConfig config = buildDimensionMetricsWithMultiTags();
303 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800304 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a3792017-10-30 22:57:06 -0700305 vector<sp<ConditionTracker>> allConditionTrackers;
306 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800307 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800308 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen5154a3792017-10-30 22:57:06 -0700309 unordered_map<int, std::vector<int>> conditionToMetricMap;
310 unordered_map<int, std::vector<int>> trackerToMetricMap;
311 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800312 std::set<int64_t> noReportMetricIds;
Yao Chen5154a3792017-10-30 22:57:06 -0700313
Chenjie Yue2219202018-06-08 10:07:51 -0700314 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
315 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
316 allAtomMatchers, allConditionTrackers, allMetricProducers,
317 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
318 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yao Chen5154a3792017-10-30 22:57:06 -0700319}
320
Yao Chencaf339d2017-10-06 16:01:10 -0700321TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800322 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700323 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800324 sp<AlarmMonitor> anomalyAlarmMonitor;
325 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700326 StatsdConfig config = buildCircleMatchers();
327 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800328 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700329 vector<sp<ConditionTracker>> allConditionTrackers;
330 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800331 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800332 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700333 unordered_map<int, std::vector<int>> conditionToMetricMap;
334 unordered_map<int, std::vector<int>> trackerToMetricMap;
335 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800336 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700337
Chenjie Yue2219202018-06-08 10:07:51 -0700338 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
339 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
340 allAtomMatchers, allConditionTrackers, allMetricProducers,
341 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
342 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700343}
344
345TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800346 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700347 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800348 sp<AlarmMonitor> anomalyAlarmMonitor;
349 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700350 StatsdConfig config = buildMissingMatchers();
351 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800352 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700353 vector<sp<ConditionTracker>> allConditionTrackers;
354 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800355 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800356 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700357 unordered_map<int, std::vector<int>> conditionToMetricMap;
358 unordered_map<int, std::vector<int>> trackerToMetricMap;
359 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800360 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700361 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
362 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
363 allAtomMatchers, allConditionTrackers, allMetricProducers,
364 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
365 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700366}
367
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800368TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800369 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700370 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800371 sp<AlarmMonitor> anomalyAlarmMonitor;
372 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800373 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800374 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800375 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800376 vector<sp<ConditionTracker>> allConditionTrackers;
377 vector<sp<MetricProducer>> allMetricProducers;
378 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800379 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen10535b92017-11-27 11:31:55 -0800380 unordered_map<int, std::vector<int>> conditionToMetricMap;
381 unordered_map<int, std::vector<int>> trackerToMetricMap;
382 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800383 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700384 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
385 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
386 allAtomMatchers, allConditionTrackers, allMetricProducers,
387 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
388 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yao Chen10535b92017-11-27 11:31:55 -0800389}
390
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800391TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800392 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700393 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800394 sp<AlarmMonitor> anomalyAlarmMonitor;
395 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800396 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700397 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800398 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700399 vector<sp<ConditionTracker>> allConditionTrackers;
400 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800401 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800402 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700403 unordered_map<int, std::vector<int>> conditionToMetricMap;
404 unordered_map<int, std::vector<int>> trackerToMetricMap;
405 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800406 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700407
Chenjie Yue2219202018-06-08 10:07:51 -0700408 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
409 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
410 allAtomMatchers, allConditionTrackers, allMetricProducers,
411 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
412 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800413}
414
415TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800416 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700417 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800418 sp<AlarmMonitor> anomalyAlarmMonitor;
419 sp<AlarmMonitor> periodicAlarmMonitor;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800420 StatsdConfig config = buildAlertWithUnknownMetric();
421 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800422 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800423 vector<sp<ConditionTracker>> allConditionTrackers;
424 vector<sp<MetricProducer>> allMetricProducers;
425 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800426 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800427 unordered_map<int, std::vector<int>> conditionToMetricMap;
428 unordered_map<int, std::vector<int>> trackerToMetricMap;
429 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800430 std::set<int64_t> noReportMetricIds;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800431
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,
436 trackerToMetricMap, trackerToConditionMap, noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700437}
438
439#else
440GTEST_LOG_(INFO) << "This test does nothing.\n";
441#endif