//
|
// Copyright (C) 2018 The Android Open Source Project
|
//
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
// you may not use this file except in compliance with the License.
|
// You may obtain a copy of the License at
|
//
|
// http://www.apache.org/licenses/LICENSE-2.0
|
//
|
// Unless required by applicable law or agreed to in writing, software
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// See the License for the specific language governing permissions and
|
// limitations under the License.
|
//
|
|
#include "update_engine/update_manager/update_time_restrictions_policy_impl.h"
|
|
#include <memory>
|
|
#include <base/time/time.h>
|
|
#include "update_engine/update_manager/policy_test_utils.h"
|
#include "update_engine/update_manager/weekly_time.h"
|
|
using base::Time;
|
using base::TimeDelta;
|
using chromeos_update_engine::ErrorCode;
|
using chromeos_update_engine::InstallPlan;
|
using std::string;
|
|
namespace chromeos_update_manager {
|
|
constexpr TimeDelta kHour = TimeDelta::FromHours(1);
|
constexpr TimeDelta kMinute = TimeDelta::FromMinutes(1);
|
|
const WeeklyTimeIntervalVector kTestIntervals{
|
// Monday 10:15 AM to Monday 3:30 PM.
|
WeeklyTimeInterval(WeeklyTime(1, kHour * 10 + kMinute * 15),
|
WeeklyTime(1, kHour * 15 + kMinute * 30)),
|
// Wednesday 8:30 PM to Thursday 8:40 AM.
|
WeeklyTimeInterval(WeeklyTime(3, kHour * 20 + kMinute * 30),
|
WeeklyTime(4, kHour * 8 + kMinute * 40)),
|
};
|
|
class UmUpdateTimeRestrictionsPolicyImplTest : public UmPolicyTestBase {
|
protected:
|
UmUpdateTimeRestrictionsPolicyImplTest() {
|
policy_ = std::make_unique<UpdateTimeRestrictionsPolicyImpl>();
|
}
|
|
void TestPolicy(const Time::Exploded& exploded,
|
const WeeklyTimeIntervalVector& test_intervals,
|
const EvalStatus& expected_value,
|
bool kiosk) {
|
if (kiosk)
|
fake_state_.device_policy_provider()
|
->var_auto_launched_kiosk_app_id()
|
->reset(new string("myapp"));
|
|
Time time;
|
EXPECT_TRUE(Time::FromLocalExploded(exploded, &time));
|
fake_clock_.SetWallclockTime(time);
|
SetUpDefaultTimeProvider();
|
fake_state_.device_policy_provider()
|
->var_disallowed_time_intervals()
|
->reset(new WeeklyTimeIntervalVector(test_intervals));
|
ErrorCode result;
|
InstallPlan install_plan;
|
ExpectPolicyStatus(
|
expected_value, &Policy::UpdateCanBeApplied, &result, &install_plan);
|
if (expected_value == EvalStatus::kSucceeded)
|
EXPECT_EQ(result, ErrorCode::kOmahaUpdateDeferredPerPolicy);
|
}
|
};
|
|
// If there are no intervals, then the check should always return kContinue.
|
TEST_F(UmUpdateTimeRestrictionsPolicyImplTest, NoIntervalsSetTest) {
|
Time::Exploded random_time{2018, 7, 1, 9, 12, 30, 0, 0};
|
TestPolicy(random_time,
|
WeeklyTimeIntervalVector(),
|
EvalStatus::kContinue,
|
/* kiosk = */ true);
|
}
|
|
// Check that all intervals are checked.
|
TEST_F(UmUpdateTimeRestrictionsPolicyImplTest, TimeInRange) {
|
// Monday, July 9th 2018 12:30 PM.
|
Time::Exploded first_interval_time{2018, 7, 1, 9, 12, 30, 0, 0};
|
TestPolicy(first_interval_time,
|
kTestIntervals,
|
EvalStatus::kSucceeded,
|
/* kiosk = */ true);
|
|
// Check second interval.
|
// Thursday, July 12th 2018 4:30 AM.
|
Time::Exploded second_interval_time{2018, 7, 4, 12, 4, 30, 0, 0};
|
TestPolicy(second_interval_time,
|
kTestIntervals,
|
EvalStatus::kSucceeded,
|
/* kiosk = */ true);
|
}
|
|
TEST_F(UmUpdateTimeRestrictionsPolicyImplTest, TimeOutOfRange) {
|
// Monday, July 9th 2018 6:30 PM.
|
Time::Exploded out_of_range_time{2018, 7, 1, 9, 18, 30, 0, 0};
|
TestPolicy(out_of_range_time,
|
kTestIntervals,
|
EvalStatus::kContinue,
|
/* kiosk = */ true);
|
}
|
|
TEST_F(UmUpdateTimeRestrictionsPolicyImplTest, NoKioskDisablesPolicy) {
|
Time::Exploded in_range_time{2018, 7, 1, 9, 12, 30, 0, 0};
|
TestPolicy(in_range_time,
|
kTestIntervals,
|
EvalStatus::kContinue,
|
/* kiosk = */ false);
|
}
|
} // namespace chromeos_update_manager
|