blob: 3c8ccabed3ae1ee35ed8c4286a4f99d8e2708917 [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();
55 simpleAtomMatcher->set_tag(2 /*SCREEN_STATE_CHANGE*/);
56 simpleAtomMatcher->add_key_value_matcher()->mutable_key_matcher()->set_key(
Yao Chencaf339d2017-10-06 16:01:10 -070057 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080058 simpleAtomMatcher->mutable_key_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();
65 simpleAtomMatcher->set_tag(2 /*SCREEN_STATE_CHANGE*/);
66 simpleAtomMatcher->add_key_value_matcher()->mutable_key_matcher()->set_key(
Yao Chencaf339d2017-10-06 16:01:10 -070067 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Stefan Lafonb8c9aa82017-12-03 14:27:25 -080068 simpleAtomMatcher->mutable_key_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);
83 KeyMatcher* keyMatcher = metric->add_dimension();
84 keyMatcher->set_key(1);
85
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();
103 simpleAtomMatcher->set_tag(2 /*SCREEN_STATE_CHANGE*/);
104 simpleAtomMatcher->add_key_value_matcher()->mutable_key_matcher()->set_key(
Yao Chencaf339d2017-10-06 16:01:10 -0700105 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800106 simpleAtomMatcher->mutable_key_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);
132 KeyMatcher* keyMatcher = metric->add_dimension();
133 keyMatcher->set_key(1);
134
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();
152 simpleAtomMatcher->set_tag(2 /*SCREEN_STATE_CHANGE*/);
153 simpleAtomMatcher->add_key_value_matcher()->mutable_key_matcher()->set_key(
Yao Chencaf339d2017-10-06 16:01:10 -0700154 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800155 simpleAtomMatcher->mutable_key_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();
184 simpleAtomMatcher->set_tag(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();
196 simpleAtomMatcher->set_tag(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();
201 simpleAtomMatcher->set_tag(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);
216 KeyMatcher* keyMatcher = metric->add_dimension();
217 keyMatcher->set_key(1);
218
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();
236 simpleAtomMatcher->set_tag(2 /*SCREEN_STATE_CHANGE*/);
237 simpleAtomMatcher->add_key_value_matcher()->mutable_key_matcher()->set_key(
Yao Chencaf339d2017-10-06 16:01:10 -0700238 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800239 simpleAtomMatcher->mutable_key_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();
246 simpleAtomMatcher->set_tag(2 /*SCREEN_STATE_CHANGE*/);
247 simpleAtomMatcher->add_key_value_matcher()->mutable_key_matcher()->set_key(
Yao Chencaf339d2017-10-06 16:01:10 -0700248 1 /*SCREEN_STATE_CHANGE__DISPLAY_STATE*/);
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800249 simpleAtomMatcher->mutable_key_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) {
270 StatsdConfig config = buildGoodConfig();
271 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800272 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700273 vector<sp<ConditionTracker>> allConditionTrackers;
274 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800275 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700276 unordered_map<int, std::vector<int>> conditionToMetricMap;
277 unordered_map<int, std::vector<int>> trackerToMetricMap;
278 unordered_map<int, std::vector<int>> trackerToConditionMap;
279
Chenjie Yu85ed8382017-12-14 16:48:54 -0800280 EXPECT_TRUE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800281 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
282 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800283 EXPECT_EQ(1u, allMetricProducers.size());
284 EXPECT_EQ(1u, allAnomalyTrackers.size());
Yao Chencaf339d2017-10-06 16:01:10 -0700285}
286
Yao Chen5154a3792017-10-30 22:57:06 -0700287TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
288 StatsdConfig config = buildDimensionMetricsWithMultiTags();
289 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800290 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen5154a3792017-10-30 22:57:06 -0700291 vector<sp<ConditionTracker>> allConditionTrackers;
292 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800293 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chen5154a3792017-10-30 22:57:06 -0700294 unordered_map<int, std::vector<int>> conditionToMetricMap;
295 unordered_map<int, std::vector<int>> trackerToMetricMap;
296 unordered_map<int, std::vector<int>> trackerToConditionMap;
297
Chenjie Yu85ed8382017-12-14 16:48:54 -0800298 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800299 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
300 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chen5154a3792017-10-30 22:57:06 -0700301}
302
Yao Chencaf339d2017-10-06 16:01:10 -0700303TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
304 StatsdConfig config = buildCircleMatchers();
305 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800306 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700307 vector<sp<ConditionTracker>> allConditionTrackers;
308 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800309 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700310 unordered_map<int, std::vector<int>> conditionToMetricMap;
311 unordered_map<int, std::vector<int>> trackerToMetricMap;
312 unordered_map<int, std::vector<int>> trackerToConditionMap;
313
Chenjie Yu85ed8382017-12-14 16:48:54 -0800314 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800315 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
316 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chencaf339d2017-10-06 16:01:10 -0700317}
318
319TEST(MetricsManagerTest, TestMissingMatchers) {
320 StatsdConfig config = buildMissingMatchers();
321 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800322 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700323 vector<sp<ConditionTracker>> allConditionTrackers;
324 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800325 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700326 unordered_map<int, std::vector<int>> conditionToMetricMap;
327 unordered_map<int, std::vector<int>> trackerToMetricMap;
328 unordered_map<int, std::vector<int>> trackerToConditionMap;
Chenjie Yu85ed8382017-12-14 16:48:54 -0800329 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800330 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
331 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chencaf339d2017-10-06 16:01:10 -0700332}
333
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800334TEST(MetricsManagerTest, TestMissingPredicate) {
335 StatsdConfig config = buildMissingPredicate();
Yao Chen10535b92017-11-27 11:31:55 -0800336 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800337 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chen10535b92017-11-27 11:31:55 -0800338 vector<sp<ConditionTracker>> allConditionTrackers;
339 vector<sp<MetricProducer>> allMetricProducers;
340 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
341 unordered_map<int, std::vector<int>> conditionToMetricMap;
342 unordered_map<int, std::vector<int>> trackerToMetricMap;
343 unordered_map<int, std::vector<int>> trackerToConditionMap;
Chenjie Yu85ed8382017-12-14 16:48:54 -0800344 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chen10535b92017-11-27 11:31:55 -0800345 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
346 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
347}
348
Stefan Lafon12d01fa2017-12-04 20:56:09 -0800349TEST(MetricsManagerTest, TestCirclePredicateDependency) {
350 StatsdConfig config = buildCirclePredicates();
Yao Chencaf339d2017-10-06 16:01:10 -0700351 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800352 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yao Chencaf339d2017-10-06 16:01:10 -0700353 vector<sp<ConditionTracker>> allConditionTrackers;
354 vector<sp<MetricProducer>> allMetricProducers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800355 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
Yao Chencaf339d2017-10-06 16:01:10 -0700356 unordered_map<int, std::vector<int>> conditionToMetricMap;
357 unordered_map<int, std::vector<int>> trackerToMetricMap;
358 unordered_map<int, std::vector<int>> trackerToConditionMap;
359
Chenjie Yu85ed8382017-12-14 16:48:54 -0800360 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800361 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
362 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yangster-mace2cd6d52017-11-09 20:38:30 -0800363}
364
365TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
366 StatsdConfig config = buildAlertWithUnknownMetric();
367 set<int> allTagIds;
Stefan Lafonb8c9aa82017-12-03 14:27:25 -0800368 vector<sp<LogMatchingTracker>> allAtomMatchers;
Yangster-mace2cd6d52017-11-09 20:38:30 -0800369 vector<sp<ConditionTracker>> allConditionTrackers;
370 vector<sp<MetricProducer>> allMetricProducers;
371 std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
372 unordered_map<int, std::vector<int>> conditionToMetricMap;
373 unordered_map<int, std::vector<int>> trackerToMetricMap;
374 unordered_map<int, std::vector<int>> trackerToConditionMap;
375
Chenjie Yu85ed8382017-12-14 16:48:54 -0800376 EXPECT_FALSE(initStatsdConfig(kConfigKey, config, timeBaseSec, allTagIds, allAtomMatchers,
Yao Chenb3561512017-11-21 18:07:17 -0800377 allConditionTrackers, allMetricProducers, allAnomalyTrackers,
378 conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
Yao Chencaf339d2017-10-06 16:01:10 -0700379}
380
381#else
382GTEST_LOG_(INFO) << "This test does nothing.\n";
383#endif