blob: 96ee9c584e1816ebd1ce93f943bbc9102a34d9e1 [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-mace2cd6d52017-11-09 20:38:30 -080083 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
Yangster-mac20877162017-12-22 17:19:39 -080084 metric->mutable_dimensions()->set_field(2 /*SCREEN_STATE_CHANGE*/);
85 metric->mutable_dimensions()->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-mace2cd6d52017-11-09 20:38:30 -080092 alert->set_number_of_buckets(10);
93 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-mace2cd6d52017-11-09 20:38:30 -0800134 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
Yangster-mac20877162017-12-22 17:19:39 -0800135 metric->mutable_dimensions()->set_field(2 /*SCREEN_STATE_CHANGE*/);
136 metric->mutable_dimensions()->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-mace2cd6d52017-11-09 20:38:30 -0800141 alert->set_number_of_buckets(10);
142 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"));
Yao Chen10535b92017-11-27 11:31:55 -0800180 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
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 Chen5154a372017-10-30 22:57:06 -0700192StatsdConfig buildDimensionMetricsWithMultiTags() {
193 StatsdConfig config;
Yangster-mac94e197c2018-01-02 16:03:03 -0800194 config.set_id(12345);
Yao Chen5154a372017-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 Chen5154a372017-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 Chen5154a372017-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 Chen5154a372017-10-30 22:57:06 -0700208
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800209 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chen5154a372017-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 Chen5154a372017-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"));
Yao Chen5154a372017-10-30 22:57:06 -0700218 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
Yangster-mac20877162017-12-22 17:19:39 -0800219 // This case is interesting. We want to dimension across two atoms.
220 metric->mutable_dimensions()->add_child()->set_field(1);
Yao Chen5154a372017-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-mace2cd6d52017-11-09 20:38:30 -0800225 alert->set_number_of_buckets(10);
226 alert->set_refractory_period_secs(100);
227 alert->set_trigger_if_sum_gt(100);
Yao Chen5154a372017-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;
Yao Chencaf339d2017-10-06 16:01:10 -0700274 StatsdConfig config = buildGoodConfig();
275 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800276 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700277 vector<sp<ConditionTracker>> allConditionTrackers;
278 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800279 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700280 unordered_map<int, std::vector<int>> conditionToMetricMap;
281 unordered_map<int, std::vector<int>> trackerToMetricMap;
282 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800283 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700284
Yangster-mac20877162017-12-22 17:19:39 -0800285 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800286 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800287 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
288 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800289 EXPECT_EQ(1u, allMetricProducers.size());
290 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yangster-mac94e197c2018-01-02 16:03:03 -0800291 EXPECT_EQ(1u, noReportMetricIds.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700292}
293
Yao Chen5154a372017-10-30 22:57:06 -0700294TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800295 UidMap uidMap;
Yao Chen5154a372017-10-30 22:57:06 -0700296 StatsdConfig config = buildDimensionMetricsWithMultiTags();
297 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800298 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a372017-10-30 22:57:06 -0700299 vector<sp<ConditionTracker>> allConditionTrackers;
300 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800301 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chen5154a372017-10-30 22:57:06 -0700302 unordered_map<int, std::vector<int>> conditionToMetricMap;
303 unordered_map<int, std::vector<int>> trackerToMetricMap;
304 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800305 std::set<int64_t> noReportMetricIds;
Yao Chen5154a372017-10-30 22:57:06 -0700306
Yangster-mac20877162017-12-22 17:19:39 -0800307 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800308 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800309 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
310 noReportMetricIds));
Yao Chen5154a372017-10-30 22:57:06 -0700311}
312
Yao Chencaf339d2017-10-06 16:01:10 -0700313TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800314 UidMap uidMap;
Yao Chencaf339d2017-10-06 16:01:10 -0700315 StatsdConfig config = buildCircleMatchers();
316 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800317 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700318 vector<sp<ConditionTracker>> allConditionTrackers;
319 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800320 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700321 unordered_map<int, std::vector<int>> conditionToMetricMap;
322 unordered_map<int, std::vector<int>> trackerToMetricMap;
323 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800324 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700325
Yangster-mac20877162017-12-22 17:19:39 -0800326 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800327 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800328 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
329 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700330}
331
332TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800333 UidMap uidMap;
Yao Chencaf339d2017-10-06 16:01:10 -0700334 StatsdConfig config = buildMissingMatchers();
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;
Yao Chencaf339d2017-10-06 16:01:10 -0700340 unordered_map<int, std::vector<int>> conditionToMetricMap;
341 unordered_map<int, std::vector<int>> trackerToMetricMap;
342 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800343 std::set<int64_t> noReportMetricIds;
Yangster-mac20877162017-12-22 17:19:39 -0800344 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800345 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800346 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
347 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700348}
349
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800350TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800351 UidMap uidMap;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800352 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800353 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800354 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800355 vector<sp<ConditionTracker>> allConditionTrackers;
356 vector<sp<MetricProducer>> allMetricProducers;
357 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
358 unordered_map<int, std::vector<int>> conditionToMetricMap;
359 unordered_map<int, std::vector<int>> trackerToMetricMap;
360 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800361 std::set<int64_t> noReportMetricIds;
Yangster-mac20877162017-12-22 17:19:39 -0800362 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chen10535b92017-11-27 11:31:55 -0800363 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800364 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
365 noReportMetricIds));
Yao Chen10535b92017-11-27 11:31:55 -0800366}
367
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800368TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800369 UidMap uidMap;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800370 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700371 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800372 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700373 vector<sp<ConditionTracker>> allConditionTrackers;
374 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800375 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700376 unordered_map<int, std::vector<int>> conditionToMetricMap;
377 unordered_map<int, std::vector<int>> trackerToMetricMap;
378 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800379 std::set<int64_t> noReportMetricIds;
Yao Chencaf339d2017-10-06 16:01:10 -0700380
Yangster-mac20877162017-12-22 17:19:39 -0800381 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800382 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800383 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
384 noReportMetricIds));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800385}
386
387TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800388 UidMap uidMap;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800389 StatsdConfig config = buildAlertWithUnknownMetric();
390 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800391 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800392 vector<sp<ConditionTracker>> allConditionTrackers;
393 vector<sp<MetricProducer>> allMetricProducers;
394 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
395 unordered_map<int, std::vector<int>> conditionToMetricMap;
396 unordered_map<int, std::vector<int>> trackerToMetricMap;
397 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac94e197c2018-01-02 16:03:03 -0800398 std::set<int64_t> noReportMetricIds;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800399
Yangster-mac20877162017-12-22 17:19:39 -0800400 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800401 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
Yangster-mac94e197c2018-01-02 16:03:03 -0800402 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
403 noReportMetricIds));
Yao Chencaf339d2017-10-06 16:01:10 -0700404}
405
406#else
407GTEST_LOG_(INFO) << "This test does nothing.\n";
408#endif