blob: 6cd31dd100c80006129aa4eb2dc1c336109d11ea [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"
Yao Chencaf339d2017-10-06 16:01:10 -070024
25#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
26
27#include <stdio.h>
28#include <set>
29#include <unordered_map>
30#include <vector>
31
32using namespace android::os::statsd;
33using android::sp;
34using std::set;
35using std::unordered_map;
36using std::vector;
Stefan Lafon12d01fa2017-12-04 20:56:09 -080037using android::os::statsd::Predicate;
Yao Chencaf339d2017-10-06 16:01:10 -070038
39#ifdef __ANDROID__
40
41// TODO: ADD MORE TEST CASES.
42
Yao Chenb3561512017-11-21 18:07:17 -080043const ConfigKey kConfigKey(0, "test");
44
Chenjie Yu85ed8382017-12-14 16:48:54 -080045const long timeBaseSec = 1000;
46
Yao Chencaf339d2017-10-06 16:01:10 -070047StatsdConfig buildGoodConfig() {
48 StatsdConfig config;
Yangster-macd1815dc2017-11-13 21:43:15 -080049 config.set_name("12345");
Yao Chencaf339d2017-10-06 16:01:10 -070050
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080051 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -070052 eventMatcher->set_name("SCREEN_IS_ON");
53
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080054 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080055 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
56 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070057 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080058 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070059 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
60
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080061 eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -070062 eventMatcher->set_name("SCREEN_IS_OFF");
63
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080064 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -080065 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
66 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -070067 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -080068 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -070069 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
70
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080071 eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -070072 eventMatcher->set_name("SCREEN_ON_OR_OFF");
73
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080074 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -070075 combination->set_operation(LogicalOperation::OR);
76 combination->add_matcher("SCREEN_IS_ON");
77 combination->add_matcher("SCREEN_IS_OFF");
78
Yangster-mace2cd6d52017-11-09 20:38:30 -080079 CountMetric* metric = config.add_count_metric();
80 metric->set_name("3");
81 metric->set_what("SCREEN_IS_ON");
82 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
Yangster-mac20877162017-12-22 17:19:39 -080083 metric->mutable_dimensions()->set_field(2 /*SCREEN_STATE_CHANGE*/);
84 metric->mutable_dimensions()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -080085
86 auto alert = config.add_alert();
87 alert->set_name("3");
88 alert->set_metric_name("3");
89 alert->set_number_of_buckets(10);
90 alert->set_refractory_period_secs(100);
91 alert->set_trigger_if_sum_gt(100);
Yao Chencaf339d2017-10-06 16:01:10 -070092 return config;
93}
94
95StatsdConfig buildCircleMatchers() {
96 StatsdConfig config;
Yangster-macd1815dc2017-11-13 21:43:15 -080097 config.set_name("12345");
Yao Chencaf339d2017-10-06 16:01:10 -070098
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080099 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -0700100 eventMatcher->set_name("SCREEN_IS_ON");
101
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800102 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800103 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
104 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700105 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800106 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700107 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
108
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800109 eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -0700110 eventMatcher->set_name("SCREEN_ON_OR_OFF");
111
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800112 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700113 combination->set_operation(LogicalOperation::OR);
114 combination->add_matcher("SCREEN_IS_ON");
115 // Circle dependency
116 combination->add_matcher("SCREEN_ON_OR_OFF");
117
118 return config;
119}
120
Yangster-mace2cd6d52017-11-09 20:38:30 -0800121StatsdConfig buildAlertWithUnknownMetric() {
122 StatsdConfig config;
123 config.set_name("12345");
124
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800125 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yangster-mace2cd6d52017-11-09 20:38:30 -0800126 eventMatcher->set_name("SCREEN_IS_ON");
127
128 CountMetric* metric = config.add_count_metric();
129 metric->set_name("3");
130 metric->set_what("SCREEN_IS_ON");
131 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
Yangster-mac20877162017-12-22 17:19:39 -0800132 metric->mutable_dimensions()->set_field(2 /*SCREEN_STATE_CHANGE*/);
133 metric->mutable_dimensions()->add_child()->set_field(1);
Yangster-mace2cd6d52017-11-09 20:38:30 -0800134
135 auto alert = config.add_alert();
136 alert->set_name("3");
137 alert->set_metric_name("2");
138 alert->set_number_of_buckets(10);
139 alert->set_refractory_period_secs(100);
140 alert->set_trigger_if_sum_gt(100);
141 return config;
142}
143
Yao Chencaf339d2017-10-06 16:01:10 -0700144StatsdConfig buildMissingMatchers() {
145 StatsdConfig config;
Yangster-macd1815dc2017-11-13 21:43:15 -0800146 config.set_name("12345");
Yao Chencaf339d2017-10-06 16:01:10 -0700147
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800148 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -0700149 eventMatcher->set_name("SCREEN_IS_ON");
150
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800151 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800152 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
153 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700154 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800155 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700156 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
157
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800158 eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -0700159 eventMatcher->set_name("SCREEN_ON_OR_OFF");
160
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800161 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700162 combination->set_operation(LogicalOperation::OR);
163 combination->add_matcher("SCREEN_IS_ON");
164 // undefined matcher
165 combination->add_matcher("ABC");
166
167 return config;
168}
169
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800170StatsdConfig buildMissingPredicate() {
Yao Chen10535b92017-11-27 11:31:55 -0800171 StatsdConfig config;
172 config.set_name("12345");
173
174 CountMetric* metric = config.add_count_metric();
175 metric->set_name("3");
176 metric->set_what("SCREEN_EVENT");
177 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
178 metric->set_condition("SOME_CONDITION");
179
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800180 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yao Chen10535b92017-11-27 11:31:55 -0800181 eventMatcher->set_name("SCREEN_EVENT");
182
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800183 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800184 simpleAtomMatcher->set_atom_id(2);
Yao Chen10535b92017-11-27 11:31:55 -0800185
186 return config;
187}
188
Yao Chen5154a3792017-10-30 22:57:06 -0700189StatsdConfig buildDimensionMetricsWithMultiTags() {
190 StatsdConfig config;
Yangster-macd1815dc2017-11-13 21:43:15 -0800191 config.set_name("12345");
Yao Chen5154a3792017-10-30 22:57:06 -0700192
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800193 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yao Chen5154a3792017-10-30 22:57:06 -0700194 eventMatcher->set_name("BATTERY_VERY_LOW");
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800195 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800196 simpleAtomMatcher->set_atom_id(2);
Yao Chen5154a3792017-10-30 22:57:06 -0700197
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800198 eventMatcher = config.add_atom_matcher();
Yao Chen5154a3792017-10-30 22:57:06 -0700199 eventMatcher->set_name("BATTERY_VERY_VERY_LOW");
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800200 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800201 simpleAtomMatcher->set_atom_id(3);
Yao Chen5154a3792017-10-30 22:57:06 -0700202
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800203 eventMatcher = config.add_atom_matcher();
Yao Chen5154a3792017-10-30 22:57:06 -0700204 eventMatcher->set_name("BATTERY_LOW");
205
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800206 AtomMatcher_Combination* combination = eventMatcher->mutable_combination();
Yao Chen5154a3792017-10-30 22:57:06 -0700207 combination->set_operation(LogicalOperation::OR);
208 combination->add_matcher("BATTERY_VERY_LOW");
209 combination->add_matcher("BATTERY_VERY_VERY_LOW");
210
211 // Count process state changes, slice by uid, while SCREEN_IS_OFF
212 CountMetric* metric = config.add_count_metric();
Yangster-macd1815dc2017-11-13 21:43:15 -0800213 metric->set_name("3");
Yao Chen5154a3792017-10-30 22:57:06 -0700214 metric->set_what("BATTERY_LOW");
215 metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
Yangster-mac20877162017-12-22 17:19:39 -0800216 // This case is interesting. We want to dimension across two atoms.
217 metric->mutable_dimensions()->add_child()->set_field(1);
Yao Chen5154a3792017-10-30 22:57:06 -0700218
Yangster-mace2cd6d52017-11-09 20:38:30 -0800219 auto alert = config.add_alert();
220 alert->set_name("3");
221 alert->set_metric_name("3");
222 alert->set_number_of_buckets(10);
223 alert->set_refractory_period_secs(100);
224 alert->set_trigger_if_sum_gt(100);
Yao Chen5154a3792017-10-30 22:57:06 -0700225 return config;
226}
227
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800228StatsdConfig buildCirclePredicates() {
Yao Chencaf339d2017-10-06 16:01:10 -0700229 StatsdConfig config;
Yangster-macd1815dc2017-11-13 21:43:15 -0800230 config.set_name("12345");
Yao Chencaf339d2017-10-06 16:01:10 -0700231
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800232 AtomMatcher* eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -0700233 eventMatcher->set_name("SCREEN_IS_ON");
234
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800235 SimpleAtomMatcher* simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800236 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
237 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700238 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800239 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700240 2 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_ON*/);
241
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800242 eventMatcher = config.add_atom_matcher();
Yao Chencaf339d2017-10-06 16:01:10 -0700243 eventMatcher->set_name("SCREEN_IS_OFF");
244
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800245 simpleAtomMatcher = eventMatcher->mutable_simple_atom_matcher();
Yangster-mac20877162017-12-22 17:19:39 -0800246 simpleAtomMatcher->set_atom_id(2 /*SCREEN_STATE_CHANGE*/);
247 simpleAtomMatcher->add_field_value_matcher()->set_field(
Yao Chencaf339d2017-10-06 16:01:10 -0700248 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Yangster-mac20877162017-12-22 17:19:39 -0800249 simpleAtomMatcher->mutable_field_value_matcher(0)->set_eq_int(
Yao Chencaf339d2017-10-06 16:01:10 -0700250 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE__STATE_OFF*/);
251
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800252 auto condition = config.add_predicate();
Yao Chencaf339d2017-10-06 16:01:10 -0700253 condition->set_name("SCREEN_IS_ON");
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800254 SimplePredicate* simplePredicate = condition->mutable_simple_predicate();
255 simplePredicate->set_start("SCREEN_IS_ON");
256 simplePredicate->set_stop("SCREEN_IS_OFF");
Yao Chencaf339d2017-10-06 16:01:10 -0700257
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800258 condition = config.add_predicate();
Yao Chencaf339d2017-10-06 16:01:10 -0700259 condition->set_name("SCREEN_IS_EITHER_ON_OFF");
260
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800261 Predicate_Combination* combination = condition->mutable_combination();
Yao Chencaf339d2017-10-06 16:01:10 -0700262 combination->set_operation(LogicalOperation::OR);
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800263 combination->add_predicate("SCREEN_IS_ON");
264 combination->add_predicate("SCREEN_IS_EITHER_ON_OFF");
Yao Chencaf339d2017-10-06 16:01:10 -0700265
266 return config;
267}
268
269TEST(MetricsManagerTest, TestGoodConfig) {
Yangster-mac20877162017-12-22 17:19:39 -0800270 UidMap uidMap;
Yao Chencaf339d2017-10-06 16:01:10 -0700271 StatsdConfig config = buildGoodConfig();
272 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800273 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700274 vector<sp<ConditionTracker>> allConditionTrackers;
275 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800276 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700277 unordered_map<int, std::vector<int>> conditionToMetricMap;
278 unordered_map<int, std::vector<int>> trackerToMetricMap;
279 unordered_map<int, std::vector<int>> trackerToConditionMap;
280
Yangster-mac20877162017-12-22 17:19:39 -0800281 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800282 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
283 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800284 EXPECT_EQ(1u, allMetricProducers.size());
285 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700286}
287
Yao Chen5154a3792017-10-30 22:57:06 -0700288TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
Yangster-mac20877162017-12-22 17:19:39 -0800289 UidMap uidMap;
Yao Chen5154a3792017-10-30 22:57:06 -0700290 StatsdConfig config = buildDimensionMetricsWithMultiTags();
291 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800292 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a3792017-10-30 22:57:06 -0700293 vector<sp<ConditionTracker>> allConditionTrackers;
294 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800295 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chen5154a3792017-10-30 22:57:06 -0700296 unordered_map<int, std::vector<int>> conditionToMetricMap;
297 unordered_map<int, std::vector<int>> trackerToMetricMap;
298 unordered_map<int, std::vector<int>> trackerToConditionMap;
299
Yangster-mac20877162017-12-22 17:19:39 -0800300 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800301 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
302 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chen5154a3792017-10-30 22:57:06 -0700303}
304
Yao Chencaf339d2017-10-06 16:01:10 -0700305TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800306 UidMap uidMap;
Yao Chencaf339d2017-10-06 16:01:10 -0700307 StatsdConfig config = buildCircleMatchers();
308 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800309 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700310 vector<sp<ConditionTracker>> allConditionTrackers;
311 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800312 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700313 unordered_map<int, std::vector<int>> conditionToMetricMap;
314 unordered_map<int, std::vector<int>> trackerToMetricMap;
315 unordered_map<int, std::vector<int>> trackerToConditionMap;
316
Yangster-mac20877162017-12-22 17:19:39 -0800317 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800318 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
319 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chencaf339d2017-10-06 16:01:10 -0700320}
321
322TEST(MetricsManagerTest, TestMissingMatchers) {
Yangster-mac20877162017-12-22 17:19:39 -0800323 UidMap uidMap;
Yao Chencaf339d2017-10-06 16:01:10 -0700324 StatsdConfig config = buildMissingMatchers();
325 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800326 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700327 vector<sp<ConditionTracker>> allConditionTrackers;
328 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800329 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700330 unordered_map<int, std::vector<int>> conditionToMetricMap;
331 unordered_map<int, std::vector<int>> trackerToMetricMap;
332 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac20877162017-12-22 17:19:39 -0800333 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800334 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
335 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chencaf339d2017-10-06 16:01:10 -0700336}
337
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800338TEST(MetricsManagerTest, TestMissingPredicate) {
Yangster-mac20877162017-12-22 17:19:39 -0800339 UidMap uidMap;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800340 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800341 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800342 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800343 vector<sp<ConditionTracker>> allConditionTrackers;
344 vector<sp<MetricProducer>> allMetricProducers;
345 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
346 unordered_map<int, std::vector<int>> conditionToMetricMap;
347 unordered_map<int, std::vector<int>> trackerToMetricMap;
348 unordered_map<int, std::vector<int>> trackerToConditionMap;
Yangster-mac20877162017-12-22 17:19:39 -0800349 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chen10535b92017-11-27 11:31:55 -0800350 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
351 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
352}
353
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800354TEST(MetricsManagerTest, TestCirclePredicateDependency) {
Yangster-mac20877162017-12-22 17:19:39 -0800355 UidMap uidMap;
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800356 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700357 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800358 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700359 vector<sp<ConditionTracker>> allConditionTrackers;
360 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800361 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700362 unordered_map<int, std::vector<int>> conditionToMetricMap;
363 unordered_map<int, std::vector<int>> trackerToMetricMap;
364 unordered_map<int, std::vector<int>> trackerToConditionMap;
365
Yangster-mac20877162017-12-22 17:19:39 -0800366 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800367 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
368 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800369}
370
371TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
Yangster-mac20877162017-12-22 17:19:39 -0800372 UidMap uidMap;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800373 StatsdConfig config = buildAlertWithUnknownMetric();
374 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800375 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800376 vector<sp<ConditionTracker>> allConditionTrackers;
377 vector<sp<MetricProducer>> allMetricProducers;
378 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
379 unordered_map<int, std::vector<int>> conditionToMetricMap;
380 unordered_map<int, std::vector<int>> trackerToMetricMap;
381 unordered_map<int, std::vector<int>> trackerToConditionMap;
382
Yangster-mac20877162017-12-22 17:19:39 -0800383 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800384 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
385 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chencaf339d2017-10-06 16:01:10 -0700386}
387
388#else
389GTEST_LOG_(INFO) << "This test does nothing.\n";
390#endif