// Copyright (c) 2012 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.

// Unit tests for UsersOldestActivityTimestampCache.

#include "cryptohome/storage/user_oldest_activity_timestamp_cache.h"

#include <base/logging.h>
#include <gtest/gtest.h>

namespace {
const base::Time::Exploded feb1st2011_exploded = {2011, 2, 2, 1};
const base::Time::Exploded mar1st2011_exploded = {2011, 3, 2, 1};
}  // namespace

namespace cryptohome {

TEST(UserOldestActivityTimestampCache, GetLastUserActivityTimestamp) {
  base::Time time_feb1;
  CHECK(base::Time::FromUTCExploded(feb1st2011_exploded, &time_feb1));
  base::Time time_mar1;
  CHECK(base::Time::FromUTCExploded(mar1st2011_exploded, &time_mar1));

  UserOldestActivityTimestampCache cache;
  cache.Initialize();

  cache.AddExistingUser("b", time_mar1);
  EXPECT_EQ(cache.GetLastUserActivityTimestamp("b"), time_mar1);

  cache.AddExistingUser("c", time_feb1);
  EXPECT_EQ(cache.GetLastUserActivityTimestamp("c"), time_feb1);
  cache.UpdateExistingUser("c", time_mar1);
  EXPECT_EQ(cache.GetLastUserActivityTimestamp("c"), time_mar1);
  cache.RemoveUser("c");
  EXPECT_TRUE(cache.GetLastUserActivityTimestamp("c").is_null());
}

}  // namespace cryptohome
