| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <base/test/simple_test_clock.h> |
| #include <base/time/time.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "authpolicy/gpo_version_cache.h" |
| #include "bindings/authpolicy_containers.pb.h" |
| |
| namespace { |
| constexpr char kKey[] = "GUID-M"; |
| |
| constexpr int kVersion1 = 1; |
| constexpr int kVersion2 = 2; |
| |
| constexpr base::TimeDelta kTwoDays = base::TimeDelta::FromDays(2); |
| constexpr base::TimeDelta kThreeDays = base::TimeDelta::FromDays(3); |
| constexpr base::TimeDelta kMinusOneSecond = base::TimeDelta::FromSeconds(-1); |
| } // namespace |
| |
| namespace authpolicy { |
| |
| class GpoVersionCacheTest : public ::testing::Test { |
| public: |
| GpoVersionCacheTest() : cache_(&flags_) { |
| cache_.SetClockForTesting(std::make_unique<base::SimpleTestClock>()); |
| flags_.set_log_caches(true); |
| } |
| ~GpoVersionCacheTest() override {} |
| |
| protected: |
| GpoVersionCache cache_; |
| base::SimpleTestClock* clock() { |
| return static_cast<base::SimpleTestClock*>(cache_.clock()); |
| } |
| |
| private: |
| protos::DebugFlags flags_; |
| DISALLOW_COPY_AND_ASSIGN(GpoVersionCacheTest); |
| }; |
| |
| TEST_F(GpoVersionCacheTest, AddingAndRemoving) { |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| |
| cache_.Add(kKey, kVersion1); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion2)); |
| |
| cache_.Add(kKey, kVersion2); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion2)); |
| |
| cache_.Remove(kKey); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion2)); |
| } |
| |
| TEST_F(GpoVersionCacheTest, PurgeExpiredEntries) { |
| cache_.Add(kKey, kVersion1); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| |
| // Entry just got added, it's not older than 3 days. |
| cache_.RemoveEntriesOlderThan(kThreeDays); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| |
| // Advance 2 days -> entry is NOT older than 3 days and stays in cache. |
| clock()->Advance(kTwoDays); |
| cache_.RemoveEntriesOlderThan(kThreeDays); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| |
| // Advance another 2 days (4 days total) -> entry is older than 3 days and |
| // gets purged. |
| clock()->Advance(kTwoDays); |
| cache_.RemoveEntriesOlderThan(kThreeDays); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| } |
| |
| TEST_F(GpoVersionCacheTest, PurgeEntriesWhenTimeGoesBackwards) { |
| cache_.Add(kKey, kVersion1); |
| clock()->Advance(kMinusOneSecond); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| cache_.RemoveEntriesOlderThan(kThreeDays); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| } |
| |
| TEST_F(GpoVersionCacheTest, ClearCache) { |
| cache_.Add(kKey, kVersion1); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| cache_.Clear(); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| } |
| |
| TEST_F(GpoVersionCacheTest, DisableCache) { |
| cache_.Add(kKey, kVersion1); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| |
| cache_.SetEnabled(false); |
| |
| // MayUseCachedGpo() always returns false. |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| |
| // Add() and Remove() are ignored. |
| cache_.Add(kKey, kVersion2); |
| cache_.Remove(kKey); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| EXPECT_FALSE(cache_.MayUseCachedGpo(kKey, kVersion2)); |
| |
| cache_.SetEnabled(true); |
| EXPECT_TRUE(cache_.MayUseCachedGpo(kKey, kVersion1)); |
| } |
| |
| } // namespace authpolicy |