blob: 5d8c3f72551e038501049045f65325fc0824eb91 [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
42// TODO: ADD MORE TEST CASES.
43
Yangster-mac94e197c2018-01-02 16:03:03 -080044const ConfigKey kConfigKey(0, 12345);
Yao Chenb3561512017-11-21 18:07:17 -080045
Chenjie Yu85ed8382017-12-14 16:48:54 -080046const long timeBaseSec = 1000;
47
Yao Chencaf339d2017-10-06 16:01:10 -070048StatsdConfig buildGoodConfig() {
49 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -080050 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -070051
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080052 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080053 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -070054
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080055 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080056 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
57 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070058 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080059 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070060 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
61
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080062 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080063 eventMatcher->set_id(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070064
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080065 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080066 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
67 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070068 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080069 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070070 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
71
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080072 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -080073 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070074
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080075 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -070076 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -080077 combination->add_matcher(StringToId("SCREEN_IS_ON"));
78 combination->add_matcher(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -070079
Yangster-mace2cd6d52017-11-09 20:38:30 -080080 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -080081 metric->set_id(3);
82 metric->set_what(StringToId("SCREEN_IS_ON"));
Yangster-macb8144812018-01-04 10:56:23 -080083 metric->set_bucket(ONE_MINUTE);
Yangster-mac468ff042018-01-17 12:26:34 -080084 metric->mutable_dimensions_in_what()->set_field(2 /*SCREEN_STATE_CHANGE*/);
85 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -080086
Yangster-mac94e197c2018-01-02 16:03:03 -080087 config.add_no_report_metric(3);
88
Yangster-mace2cd6d52017-11-09 20:38:30 -080089 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -080090 alert->set_id(3);
91 alert->set_metric_id(3);
Yangster-maca7fb12d2018-01-03 17:17:20 -080092 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -080093 alert->set_refractory_period_secs(100);
94 alert->set_trigger_if_sum_gt(100);
Yao Chencaf339d2017-10-06 16:01:10 -070095 return config;
96}
97
98StatsdConfig buildCircleMatchers() {
99 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800100 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700101
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800102 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800103 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700104
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800105 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800106 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
107 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700108 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800109 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700110 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
111
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800112 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800113 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700114
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800115 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700116 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800117 combination->add_matcher(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700118 // Circle dependency
Yangster-mac94e197c2018-01-02 16:03:03 -0800119 combination->add_matcher(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700120
121 return config;
122}
123
Yangster-mace2cd6d52017-11-09 20:38:30 -0800124StatsdConfig buildAlertWithUnknownMetric() {
125 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800126 config.set_id(12345);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800127
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800128 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800129 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800130
131 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800132 metric->set_id(3);
133 metric->set_what(StringToId("SCREEN_IS_ON"));
Yangster-macb8144812018-01-04 10:56:23 -0800134 metric->set_bucket(ONE_MINUTE);
Yangster-mac468ff042018-01-17 12:26:34 -0800135 metric->mutable_dimensions_in_what()->set_field(2 /*SCREEN_STATE_CHANGE*/);
136 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800137
138 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -0800139 alert->set_id(3);
140 alert->set_metric_id(2);
Yangster-maca7fb12d2018-01-03 17:17:20 -0800141 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800142 alert->set_refractory_period_secs(100);
143 alert->set_trigger_if_sum_gt(100);
144 return config;
145}
146
Yao Chencaf339d2017-10-06 16:01:10 -0700147StatsdConfig buildMissingMatchers() {
148 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800149 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700150
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800151 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800152 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700153
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800154 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800155 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
156 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700157 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800158 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700159 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
160
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800161 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800162 eventMatcher->set_id(StringToId("SCREEN_ON_OR_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700163
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800164 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700165 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800166 combination->add_matcher(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700167 // undefined matcher
Yangster-mac94e197c2018-01-02 16:03:03 -0800168 combination->add_matcher(StringToId("ABC"));
Yao Chencaf339d2017-10-06 16:01:10 -0700169
170 return config;
171}
172
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800173StatsdConfig buildMissingPredicate() {
Yao Chen10535b92017-11-27 11:31:55 -0800174 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800175 config.set_id(12345);
Yao Chen10535b92017-11-27 11:31:55 -0800176
177 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800178 metric->set_id(3);
179 metric->set_what(StringToId("SCREEN_EVENT"));
Yangster-macb8144812018-01-04 10:56:23 -0800180 metric->set_bucket(ONE_MINUTE);
Yangster-mac94e197c2018-01-02 16:03:03 -0800181 metric->set_condition(StringToId("SOME_CONDITION"));
Yao Chen10535b92017-11-27 11:31:55 -0800182
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800183 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800184 eventMatcher->set_id(StringToId("SCREEN_EVENT"));
Yao Chen10535b92017-11-27 11:31:55 -0800185
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800186 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800187 simpleAtomMatcher->set_atom_id(2);
Yao Chen10535b92017-11-27 11:31:55 -0800188
189 return config;
190}
191
Yao Chen5154a3792017-10-30 22:57:06 -0700192StatsdConfig buildDimensionMetricsWithMultiTags() {
193 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800194 config.set_id(12345);
Yao Chen5154a3792017-10-30 22:57:06 -0700195
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800196 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800197 eventMatcher->set_id(StringToId("BATTERY_VERY_LOW"));
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800198 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800199 simpleAtomMatcher->set_atom_id(2);
Yao Chen5154a3792017-10-30 22:57:06 -0700200
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800201 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800202 eventMatcher->set_id(StringToId("BATTERY_VERY_VERY_LOW"));
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800203 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800204 simpleAtomMatcher->set_atom_id(3);
Yao Chen5154a3792017-10-30 22:57:06 -0700205
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800206 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800207 eventMatcher->set_id(StringToId("BATTERY_LOW"));
Yao Chen5154a3792017-10-30 22:57:06 -0700208
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800209 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chen5154a3792017-10-30 22:57:06 -0700210 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800211 combination->add_matcher(StringToId("BATTERY_VERY_LOW"));
212 combination->add_matcher(StringToId("BATTERY_VERY_VERY_LOW"));
Yao Chen5154a3792017-10-30 22:57:06 -0700213
214 // Count process state changes, slice by uid, while SCREEN_IS_OFF
215 CountMetric* metric = config.add_count_metric();
Yangster-mac94e197c2018-01-02 16:03:03 -0800216 metric->set_id(3);
217 metric->set_what(StringToId("BATTERY_LOW"));
Yangster-macb8144812018-01-04 10:56:23 -0800218 metric->set_bucket(ONE_MINUTE);
Yangster-mac20877162017-12-22 17:19:39 -0800219 // This case is interesting. We want to dimension across two atoms.
Yangster-mac468ff042018-01-17 12:26:34 -0800220 metric->mutable_dimensions_in_what()->add_child()->set_field(1);
Yao Chen5154a3792017-10-30 22:57:06 -0700221
Yangster-mace2cd6d52017-11-09 20:38:30 -0800222 auto alert = config.add_alert();
Yangster-mac94e197c2018-01-02 16:03:03 -0800223 alert->set_id(103);
224 alert->set_metric_id(3);
Yangster-maca7fb12d2018-01-03 17:17:20 -0800225 alert->set_num_buckets(10);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800226 alert->set_refractory_period_secs(100);
227 alert->set_trigger_if_sum_gt(100);
Yao Chen5154a3792017-10-30 22:57:06 -0700228 return config;
229}
230
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800231StatsdConfig buildCirclePredicates() {
Yao Chencaf339d2017-10-06 16:01:10 -0700232 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800233 config.set_id(12345);
Yao Chencaf339d2017-10-06 16:01:10 -0700234
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800235 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800236 eventMatcher->set_id(StringToId("SCREEN_IS_ON"));
Yao Chencaf339d2017-10-06 16:01:10 -0700237
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800238 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800239 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
240 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700241 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800242 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700243 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
244
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800245 eventMatcher = config.add_atom_matcher();
Yangster-mac94e197c2018-01-02 16:03:03 -0800246 eventMatcher->set_id(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700247
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800248 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800249 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
250 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700251 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800252 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700253 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
254
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800255 auto condition = config.add_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800256 condition->set_id(StringToId("SCREEN_IS_ON"));
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800257 SimplePredicate* simplePredicate = condition->mutable_simple_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800258 simplePredicate->set_start(StringToId("SCREEN_IS_ON"));
259 simplePredicate->set_stop(StringToId("SCREEN_IS_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700260
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800261 condition = config.add_predicate();
Yangster-mac94e197c2018-01-02 16:03:03 -0800262 condition->set_id(StringToId("SCREEN_IS_EITHER_ON_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700263
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800264 Predicate_Combination* combination = condition->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700265 combination->set_operation(LogicalOperation::OR);
Yangster-mac94e197c2018-01-02 16:03:03 -0800266 combination->add_predicate(StringToId("SCREEN_IS_ON"));
267 combination->add_predicate(StringToId("SCREEN_IS_EITHER_ON_OFF"));
Yao Chencaf339d2017-10-06 16:01:10 -0700268
269 return config;
270}
271
272TEST(MetricsManagerTest, TestGoodConfig) {
Yangster-mac20877162017-12-22 17:19:39 -0800273 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800274 sp<AlarmMonitor> anomalyAlarmMonitor;
275 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700276 StatsdConfig config = buildGoodConfig();
277 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800278 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700279 vector<sp<ConditionTracker>> allConditionTrackers;
280 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800281 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800282 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700283 unordered_map<int, std::vector<int>> conditionToMetricMap;
284 unordered_map<int, std::vector<int>> trackerToMetricMap;
285 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800286 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700287
Yangster-mac932ecec2018-02-01 10:23:52 -0800288 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap,
289 anomalyAlarmMonitor, periodicAlarmMonitor,
290 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800291 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800292 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800293 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
294 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800295 EXPECT_EQ(1u, allMetricProducers.size());
296 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yangster-mac94e197c2018-01-02 16:03:03 -0800297 EXPECT_EQ(1u, noReportMetricIds.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700298}
299
Yao Chen5154a3792017-10-30 22:57:06 -0700300TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800301 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800302 sp<AlarmMonitor> anomalyAlarmMonitor;
303 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chen5154a3792017-10-30 22:57:06 -0700304 StatsdConfig config = buildDimensionMetricsWithMultiTags();
305 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800306 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a3792017-10-30 22:57:06 -0700307 vector<sp<ConditionTracker>> allConditionTrackers;
308 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800309 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800310 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen5154a3792017-10-30 22:57:06 -0700311 unordered_map<int, std::vector<int>> conditionToMetricMap;
312 unordered_map<int, std::vector<int>> trackerToMetricMap;
313 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800314 std::set<int64_t> noReportMetricIds;
Yao Chen5154a3792017-10-30 22:57:06 -0700315
Yangster-mac932ecec2018-02-01 10:23:52 -0800316 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap,
317 anomalyAlarmMonitor, periodicAlarmMonitor,
318 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800319 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800320 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800321 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
322 noReportMetricIds));
Yao Chen5154a3792017-10-30 22:57:06 -0700323}
324
Yao Chencaf339d2017-10-06 16:01:10 -0700325TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800326 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800327 sp<AlarmMonitor> anomalyAlarmMonitor;
328 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700329 StatsdConfig config = buildCircleMatchers();
330 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800331 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700332 vector<sp<ConditionTracker>> allConditionTrackers;
333 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800334 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800335 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700336 unordered_map<int, std::vector<int>> conditionToMetricMap;
337 unordered_map<int, std::vector<int>> trackerToMetricMap;
338 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800339 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700340
Yangster-mac932ecec2018-02-01 10:23:52 -0800341 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap,
342 anomalyAlarmMonitor, periodicAlarmMonitor,
343 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800344 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800345 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800346 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
347 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700348}
349
350TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800351 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800352 sp<AlarmMonitor> anomalyAlarmMonitor;
353 sp<AlarmMonitor> periodicAlarmMonitor;
Yao Chencaf339d2017-10-06 16:01:10 -0700354 StatsdConfig config = buildMissingMatchers();
355 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800356 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700357 vector<sp<ConditionTracker>> allConditionTrackers;
358 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800359 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800360 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700361 unordered_map<int, std::vector<int>> conditionToMetricMap;
362 unordered_map<int, std::vector<int>> trackerToMetricMap;
363 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800364 std::set<int64_t> noReportMetricIds;
Yangster-mac932ecec2018-02-01 10:23:52 -0800365 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap,
366 anomalyAlarmMonitor, periodicAlarmMonitor,
367 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800368 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800369 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800370 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
371 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700372}
373
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800374TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800375 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800376 sp<AlarmMonitor> anomalyAlarmMonitor;
377 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800378 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800379 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800380 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800381 vector<sp<ConditionTracker>> allConditionTrackers;
382 vector<sp<MetricProducer>> allMetricProducers;
383 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800384 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chen10535b92017-11-27 11:31:55 -0800385 unordered_map<int, std::vector<int>> conditionToMetricMap;
386 unordered_map<int, std::vector<int>> trackerToMetricMap;
387 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800388 std::set<int64_t> noReportMetricIds;
Yangster-mac932ecec2018-02-01 10:23:52 -0800389 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap,
390 anomalyAlarmMonitor, periodicAlarmMonitor,
391 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chen10535b92017-11-27 11:31:55 -0800392 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800393 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800394 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
395 noReportMetricIds));
Yao Chen10535b92017-11-27 11:31:55 -0800396}
397
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800398TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800399 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800400 sp<AlarmMonitor> anomalyAlarmMonitor;
401 sp<AlarmMonitor> periodicAlarmMonitor;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800402 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700403 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800404 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700405 vector<sp<ConditionTracker>> allConditionTrackers;
406 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800407 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800408 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700409 unordered_map<int, std::vector<int>> conditionToMetricMap;
410 unordered_map<int, std::vector<int>> trackerToMetricMap;
411 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800412 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700413
Yangster-mac932ecec2018-02-01 10:23:52 -0800414 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap,
415 anomalyAlarmMonitor, periodicAlarmMonitor,
416 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800417 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800418 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800419 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
420 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800421}
422
423TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800424 UidMap uidMap;
Yangster-mac932ecec2018-02-01 10:23:52 -0800425 sp<AlarmMonitor> anomalyAlarmMonitor;
426 sp<AlarmMonitor> periodicAlarmMonitor;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800427 StatsdConfig config = buildAlertWithUnknownMetric();
428 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800429 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800430 vector<sp<ConditionTracker>> allConditionTrackers;
431 vector<sp<MetricProducer>> allMetricProducers;
432 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yangster-mac932ecec2018-02-01 10:23:52 -0800433 std::vector<sp<AlarmTracker>> allAlarmTrackers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800434 unordered_map<int, std::vector<int>> conditionToMetricMap;
435 unordered_map<int, std::vector<int>> trackerToMetricMap;
436 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800437 std::set<int64_t> noReportMetricIds;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800438
Yangster-mac932ecec2018-02-01 10:23:52 -0800439 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap,
440 anomalyAlarmMonitor, periodicAlarmMonitor,
441 timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800442 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac932ecec2018-02-01 10:23:52 -0800443 allAlarmTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800444 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
445 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700446}
447
448#else
449GTEST_LOG_(INFO) << "This test does nothing.\n";
450#endif