diff options
| author | 2017-11-27 11:31:55 -0800 | |
|---|---|---|
| committer | 2017-11-27 14:15:36 -0800 | |
| commit | 10535b9ad0b8be8f07d27f1d6a13372be31cbf65 (patch) | |
| tree | 96d6024f58855e9e8cef45a6794f5142a2505fcf | |
| parent | c8862caf4f2deebe7e81f8a291233fa1035ecdd4 (diff) | |
Reject the config if condition config has errors. And add log tag.
Test: added unit test.
Change-Id: I7108350978f7c1d0e8e87f22082e19fc76a75631
| -rw-r--r-- | cmds/statsd/src/metrics/metrics_manager_util.cpp | 48 | ||||
| -rw-r--r-- | cmds/statsd/tests/MetricsManager_test.cpp | 34 |
2 files changed, 67 insertions, 15 deletions
diff --git a/cmds/statsd/src/metrics/metrics_manager_util.cpp b/cmds/statsd/src/metrics/metrics_manager_util.cpp index 1b9efc51c7b7..fe3082b4b038 100644 --- a/cmds/statsd/src/metrics/metrics_manager_util.cpp +++ b/cmds/statsd/src/metrics/metrics_manager_util.cpp @@ -14,6 +14,9 @@ * limitations under the License. */ +#define DEBUG true // STOPSHIP if true +#include "Log.h" + #include "../condition/CombinationConditionTracker.h" #include "../condition/SimpleConditionTracker.h" #include "../external/StatsPullerManager.h" @@ -221,9 +224,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, int conditionIndex = -1; if (metric.has_condition()) { - handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, - metric.links(), allConditionTrackers, conditionIndex, - conditionToMetricMap); + bool good = handleMetricWithConditions( + metric.condition(), metricIndex, conditionTrackerMap, metric.links(), + allConditionTrackers, conditionIndex, conditionToMetricMap); + if (!good) { + return false; + } } else { if (metric.links_size() > 0) { ALOGW("metrics has a EventConditionLink but doesn't have a condition"); @@ -289,9 +295,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, int conditionIndex = -1; if (metric.has_condition()) { - handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, - metric.links(), allConditionTrackers, conditionIndex, - conditionToMetricMap); + bool good = handleMetricWithConditions( + metric.condition(), metricIndex, conditionTrackerMap, metric.links(), + allConditionTrackers, conditionIndex, conditionToMetricMap); + if (!good) { + return false; + } } else { if (metric.links_size() > 0) { ALOGW("metrics has a EventConditionLink but doesn't have a condition"); @@ -323,9 +332,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, int conditionIndex = -1; if (metric.has_condition()) { - handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, - metric.links(), allConditionTrackers, conditionIndex, - conditionToMetricMap); + bool good = handleMetricWithConditions( + metric.condition(), metricIndex, conditionTrackerMap, metric.links(), + allConditionTrackers, conditionIndex, conditionToMetricMap); + if (!good) { + return false; + } } else { if (metric.links_size() > 0) { ALOGW("metrics has a EventConditionLink but doesn't have a condition"); @@ -370,9 +382,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, int conditionIndex = -1; if (metric.has_condition()) { - handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, - metric.links(), allConditionTrackers, conditionIndex, - conditionToMetricMap); + bool good = handleMetricWithConditions( + metric.condition(), metricIndex, conditionTrackerMap, metric.links(), + allConditionTrackers, conditionIndex, conditionToMetricMap); + if (!good) { + return false; + } } else { if (metric.links_size() > 0) { ALOGW("metrics has a EventConditionLink but doesn't have a condition"); @@ -416,9 +431,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, int conditionIndex = -1; if (metric.has_condition()) { - handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap, - metric.links(), allConditionTrackers, conditionIndex, - conditionToMetricMap); + bool good = handleMetricWithConditions( + metric.condition(), metricIndex, conditionTrackerMap, metric.links(), + allConditionTrackers, conditionIndex, conditionToMetricMap); + if (!good) { + return false; + } } else { if (metric.links_size() > 0) { ALOGW("metrics has a EventConditionLink but doesn't have a condition"); diff --git a/cmds/statsd/tests/MetricsManager_test.cpp b/cmds/statsd/tests/MetricsManager_test.cpp index 2adec945b85a..5384e0c2b9a9 100644 --- a/cmds/statsd/tests/MetricsManager_test.cpp +++ b/cmds/statsd/tests/MetricsManager_test.cpp @@ -165,6 +165,25 @@ StatsdConfig buildMissingMatchers() { return config; } +StatsdConfig buildMissingCondition() { + StatsdConfig config; + config.set_name("12345"); + + CountMetric* metric = config.add_count_metric(); + metric->set_name("3"); + metric->set_what("SCREEN_EVENT"); + metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L); + metric->set_condition("SOME_CONDITION"); + + LogEntryMatcher* eventMatcher = config.add_log_entry_matcher(); + eventMatcher->set_name("SCREEN_EVENT"); + + SimpleLogEntryMatcher* simpleLogEntryMatcher = eventMatcher->mutable_simple_log_entry_matcher(); + simpleLogEntryMatcher->set_tag(2); + + return config; +} + StatsdConfig buildDimensionMetricsWithMultiTags() { StatsdConfig config; config.set_name("12345"); @@ -310,6 +329,21 @@ TEST(MetricsManagerTest, TestMissingMatchers) { conditionToMetricMap, trackerToMetricMap, trackerToConditionMap)); } +TEST(MetricsManagerTest, TestMissingCondition) { + StatsdConfig config = buildMissingCondition(); + set<int> allTagIds; + vector<sp<LogMatchingTracker>> allLogEntryMatchers; + vector<sp<ConditionTracker>> allConditionTrackers; + vector<sp<MetricProducer>> allMetricProducers; + std::vector<sp<AnomalyTracker>> allAnomalyTrackers; + unordered_map<int, std::vector<int>> conditionToMetricMap; + unordered_map<int, std::vector<int>> trackerToMetricMap; + unordered_map<int, std::vector<int>> trackerToConditionMap; + EXPECT_FALSE(initStatsdConfig(kConfigKey, config, allTagIds, allLogEntryMatchers, + allConditionTrackers, allMetricProducers, allAnomalyTrackers, + conditionToMetricMap, trackerToMetricMap, trackerToConditionMap)); +} + TEST(MetricsManagerTest, TestCircleConditionDependency) { StatsdConfig config = buildCircleConditions(); set<int> allTagIds; |