Home | History | Annotate | Download | only in e2e
      1 // 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 
     15 #include <gtest/gtest.h>
     16 
     17 #include "src/StatsLogProcessor.h"
     18 #include "src/stats_log_util.h"
     19 #include "tests/statsd_test_util.h"
     20 
     21 #include <vector>
     22 
     23 namespace android {
     24 namespace os {
     25 namespace statsd {
     26 
     27 #ifdef __ANDROID__
     28 
     29 namespace {
     30 
     31 StatsdConfig CreateStatsdConfig() {
     32     StatsdConfig config;
     33     config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root.
     34 
     35     auto alarm = config.add_alarm();
     36     alarm->set_id(123456);
     37     alarm->set_offset_millis(TimeUnitToBucketSizeInMillis(TEN_MINUTES));
     38     alarm->set_period_millis(TimeUnitToBucketSizeInMillis(ONE_HOUR));
     39 
     40     alarm = config.add_alarm();
     41     alarm->set_id(654321);
     42     alarm->set_offset_millis(TimeUnitToBucketSizeInMillis(FIVE_MINUTES));
     43     alarm->set_period_millis(TimeUnitToBucketSizeInMillis(THIRTY_MINUTES));
     44     return config;
     45 }
     46 
     47 }  // namespace
     48 
     49 TEST(AlarmE2eTest, TestMultipleAlarms) {
     50     auto config = CreateStatsdConfig();
     51     int64_t bucketStartTimeNs = 10000000000;
     52 
     53     ConfigKey cfgKey;
     54     auto processor = CreateStatsLogProcessor(bucketStartTimeNs, bucketStartTimeNs, config, cfgKey);
     55     EXPECT_EQ(processor->mMetricsManagers.size(), 1u);
     56     EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid());
     57     EXPECT_EQ(2u, processor->mMetricsManagers.begin()->second->mAllPeriodicAlarmTrackers.size());
     58 
     59     auto alarmTracker1 = processor->mMetricsManagers.begin()->second->mAllPeriodicAlarmTrackers[0];
     60     auto alarmTracker2 = processor->mMetricsManagers.begin()->second->mAllPeriodicAlarmTrackers[1];
     61 
     62     int64_t alarmTimestampSec0 = bucketStartTimeNs / NS_PER_SEC + 10 * 60;
     63     int64_t alarmTimestampSec1 = bucketStartTimeNs / NS_PER_SEC + 5 * 60;
     64     EXPECT_EQ(alarmTimestampSec0, alarmTracker1->getAlarmTimestampSec());
     65     EXPECT_EQ(alarmTimestampSec1, alarmTracker2->getAlarmTimestampSec());
     66 
     67     // Alarm fired.
     68     const int64_t alarmFiredTimestampSec0 = alarmTimestampSec1 + 5;
     69     auto alarmSet = processor->getPeriodicAlarmMonitor()->popSoonerThan(
     70             static_cast<uint32_t>(alarmFiredTimestampSec0));
     71     EXPECT_EQ(1u, alarmSet.size());
     72     processor->onPeriodicAlarmFired(alarmFiredTimestampSec0 * NS_PER_SEC, alarmSet);
     73     EXPECT_EQ(alarmTimestampSec0, alarmTracker1->getAlarmTimestampSec());
     74     EXPECT_EQ(alarmTimestampSec1 + 30 * 60, alarmTracker2->getAlarmTimestampSec());
     75 
     76     // Alarms fired very late.
     77     const int64_t alarmFiredTimestampSec1 = alarmTimestampSec0 + 2 * 60 * 60 + 125;
     78     alarmSet = processor->getPeriodicAlarmMonitor()->popSoonerThan(
     79             static_cast<uint32_t>(alarmFiredTimestampSec1));
     80     EXPECT_EQ(2u, alarmSet.size());
     81     processor->onPeriodicAlarmFired(alarmFiredTimestampSec1 * NS_PER_SEC, alarmSet);
     82     EXPECT_EQ(alarmTimestampSec0 + 60 * 60 * 3, alarmTracker1->getAlarmTimestampSec());
     83     EXPECT_EQ(alarmTimestampSec1 + 30 * 60 * 5, alarmTracker2->getAlarmTimestampSec());
     84 }
     85 
     86 #else
     87 GTEST_LOG_(INFO) << "This test does nothing.\n";
     88 #endif
     89 
     90 }  // namespace statsd
     91 }  // namespace os
     92 }  // namespace android
     93