blob: f8184d8aa14c5624d3465a593de4e7a82c8e2cde [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 Chen5154a372017-10-30 22:57:06 -0700190StatsdConfig buildDimensionMetricsWithMultiTags() {
191 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800192 config.set_id(12345);
Yao Chen5154a372017-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 Chen5154a372017-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 Chen5154a372017-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 Chen5154a372017-10-30 22:57:06 -0700206
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800207 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chen5154a372017-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 Chen5154a372017-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 Chen5154a372017-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 Chen5154a372017-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-mac849dfdc22018-10-12 15:41:45 -0700285 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
286 vector<int> metricsWithLifeSpan;
Yangster-mac94e197c2018-01-02 16:03:03 -0800287 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700288
Chenjie Yue2219202018-06-08 10:07:51 -0700289 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
290 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
291 allAtomMatchers, allConditionTrackers, allMetricProducers,
292 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700293 trackerToMetricMap, trackerToConditionMap,
294 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
295 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800296 EXPECT_EQ(1u, allMetricProducers.size());
297 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yangster-mac94e197c2018-01-02 16:03:03 -0800298 EXPECT_EQ(1u, noReportMetricIds.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700299}
300
Yao Chen5154a372017-10-30 22:57:06 -0700301TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800302 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700303 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800304 sp<AlarmMonitor> anomalyAlarmMonitor;
305 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chen5154a372017-10-30 22:57:06 -0700306 StatsdConfig config = buildDimensionMetricsWithMultiTags();
307 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800308 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a372017-10-30 22:57:06 -0700309 vector<sp<ConditionTracker>> allConditionTrackers;
310 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800311 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800312 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen5154a372017-10-30 22:57:06 -0700313 unordered_map<int, std::vector<int>> conditionToMetricMap;
314 unordered_map<int, std::vector<int>> trackerToMetricMap;
315 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac849dfdc22018-10-12 15:41:45 -0700316 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
317 vector<int> metricsWithLifeSpan;
Yangster-mac94e197c2018-01-02 16:03:03 -0800318 std::set<int64_t> noReportMetricIds;
Yao Chen5154a372017-10-30 22:57:06 -0700319
Chenjie Yue2219202018-06-08 10:07:51 -0700320 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
321 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
322 allAtomMatchers, allConditionTrackers, allMetricProducers,
323 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700324 trackerToMetricMap, trackerToConditionMap,
325 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
326 noReportMetricIds));
Yao Chen5154a372017-10-30 22:57:06 -0700327}
328
Yao Chencaf339d2017-10-06 16:01:10 -0700329TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800330 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700331 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800332 sp<AlarmMonitor> anomalyAlarmMonitor;
333 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700334 StatsdConfig config = buildCircleMatchers();
335 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800336 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700337 vector<sp<ConditionTracker>> allConditionTrackers;
338 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800339 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800340 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700341 unordered_map<int, std::vector<int>> conditionToMetricMap;
342 unordered_map<int, std::vector<int>> trackerToMetricMap;
343 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac849dfdc22018-10-12 15:41:45 -0700344 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
345 vector<int> metricsWithLifeSpan;
Yangster-mac94e197c2018-01-02 16:03:03 -0800346 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700347
Chenjie Yue2219202018-06-08 10:07:51 -0700348 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
349 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
350 allAtomMatchers, allConditionTrackers, allMetricProducers,
351 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700352 trackerToMetricMap, trackerToConditionMap,
353 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
354 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700355}
356
357TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800358 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700359 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800360 sp<AlarmMonitor> anomalyAlarmMonitor;
361 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700362 StatsdConfig config = buildMissingMatchers();
363 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800364 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700365 vector<sp<ConditionTracker>> allConditionTrackers;
366 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800367 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800368 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700369 unordered_map<int, std::vector<int>> conditionToMetricMap;
370 unordered_map<int, std::vector<int>> trackerToMetricMap;
371 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac849dfdc22018-10-12 15:41:45 -0700372 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
373 vector<int> metricsWithLifeSpan;
Yangster-mac94e197c2018-01-02 16:03:03 -0800374 std::set<int64_t> noReportMetricIds;
Chenjie Yue2219202018-06-08 10:07:51 -0700375 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
376 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
377 allAtomMatchers, allConditionTrackers, allMetricProducers,
378 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700379 trackerToMetricMap, trackerToConditionMap,
380 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
381 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700382}
383
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800384TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800385 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700386 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800387 sp<AlarmMonitor> anomalyAlarmMonitor;
388 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800389 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800390 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800391 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800392 vector<sp<ConditionTracker>> allConditionTrackers;
393 vector<sp<MetricProducer>> allMetricProducers;
394 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800395 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen10535b92017-11-27 11:31:55 -0800396 unordered_map<int, std::vector<int>> conditionToMetricMap;
397 unordered_map<int, std::vector<int>> trackerToMetricMap;
398 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac849dfdc22018-10-12 15:41:45 -0700399 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
400 vector<int> metricsWithLifeSpan;
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,
407 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
408 noReportMetricIds));
Yao Chen10535b92017-11-27 11:31:55 -0800409}
410
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800411TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800412 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700413 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800414 sp<AlarmMonitor> anomalyAlarmMonitor;
415 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800416 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700417 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800418 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700419 vector<sp<ConditionTracker>> allConditionTrackers;
420 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800421 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800422 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700423 unordered_map<int, std::vector<int>> conditionToMetricMap;
424 unordered_map<int, std::vector<int>> trackerToMetricMap;
425 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac849dfdc22018-10-12 15:41:45 -0700426 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
427 vector<int> metricsWithLifeSpan;
Yangster-mac94e197c2018-01-02 16:03:03 -0800428 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700429
Chenjie Yue2219202018-06-08 10:07:51 -0700430 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
431 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
432 allAtomMatchers, allConditionTrackers, allMetricProducers,
433 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700434 trackerToMetricMap, trackerToConditionMap,
435 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
436 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800437}
438
439TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800440 UidMap uidMap;
Chenjie Yue2219202018-06-08 10:07:51 -0700441 sp<StatsPullerManager> pullerManager = new StatsPullerManager();
Yangster-mac932ecec2018-02-01 10:23:52 -0800442 sp<AlarmMonitor> anomalyAlarmMonitor;
443 sp<AlarmMonitor> periodicAlarmMonitor;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800444 StatsdConfig config = buildAlertWithUnknownMetric();
445 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800446 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800447 vector<sp<ConditionTracker>> allConditionTrackers;
448 vector<sp<MetricProducer>> allMetricProducers;
449 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800450 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800451 unordered_map<int, std::vector<int>> conditionToMetricMap;
452 unordered_map<int, std::vector<int>> trackerToMetricMap;
453 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac849dfdc22018-10-12 15:41:45 -0700454 unordered_map<int, std::vector<int>> lifeSpanEventTrackerToMetricMap;
455 vector<int> metricsWithLifeSpan;
Yangster-mac94e197c2018-01-02 16:03:03 -0800456 std::set<int64_t> noReportMetricIds;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800457
Chenjie Yue2219202018-06-08 10:07:51 -0700458 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
459 periodicAlarmMonitor, timeBaseSec, timeBaseSec, allTagIds,
460 allAtomMatchers, allConditionTrackers, allMetricProducers,
461 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
Yangster-mac849dfdc22018-10-12 15:41:45 -0700462 trackerToMetricMap, trackerToConditionMap,
463 lifeSpanEventTrackerToMetricMap, metricsWithLifeSpan,
464 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700465}
466
467#else
468GTEST_LOG_(INFO) << "This test does nothing.\n";
469#endif