//===- CachePruningTest.cpp -----------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "llvm/Support/CachePruning.h"
#include "llvm/Support/Error.h"
#include "gtest/gtest.h"

using namespace llvm;

TEST(CachePruningPolicyParser, Empty) {
  auto P = parseCachePruningPolicy("");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(std::chrono::seconds(1200), P->Interval);
  EXPECT_EQ(std::chrono::hours(7 * 24), P->Expiration);
  EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
}

TEST(CachePruningPolicyParser, Interval) {
  auto P = parseCachePruningPolicy("prune_interval=1s");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(std::chrono::seconds(1), P->Interval);
  P = parseCachePruningPolicy("prune_interval=2m");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(std::chrono::minutes(2), *P->Interval);
  P = parseCachePruningPolicy("prune_interval=3h");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(std::chrono::hours(3), *P->Interval);
}

TEST(CachePruningPolicyParser, Expiration) {
  auto P = parseCachePruningPolicy("prune_after=1s");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(std::chrono::seconds(1), P->Expiration);
}

TEST(CachePruningPolicyParser, MaxSizePercentageOfAvailableSpace) {
  auto P = parseCachePruningPolicy("cache_size=100%");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(100u, P->MaxSizePercentageOfAvailableSpace);
  EXPECT_EQ(0u, P->MaxSizeBytes);
}

TEST(CachePruningPolicyParser, MaxSizeBytes) {
  auto P = parseCachePruningPolicy("cache_size_bytes=1");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  EXPECT_EQ(1u, P->MaxSizeBytes);
  P = parseCachePruningPolicy("cache_size_bytes=2k");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  EXPECT_EQ(2u * 1024u, P->MaxSizeBytes);
  P = parseCachePruningPolicy("cache_size_bytes=3m");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  EXPECT_EQ(3u * 1024u * 1024u, P->MaxSizeBytes);
  P = parseCachePruningPolicy("cache_size_bytes=4G");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  EXPECT_EQ(4ull * 1024ull * 1024ull * 1024ull, P->MaxSizeBytes);
}

TEST(CachePruningPolicyParser, Multiple) {
  auto P = parseCachePruningPolicy("prune_after=1s:cache_size=50%");
  ASSERT_TRUE(bool(P));
  EXPECT_EQ(std::chrono::seconds(1200), P->Interval);
  EXPECT_EQ(std::chrono::seconds(1), P->Expiration);
  EXPECT_EQ(50u, P->MaxSizePercentageOfAvailableSpace);
}

TEST(CachePruningPolicyParser, Errors) {
  EXPECT_EQ("Duration must not be empty",
            toString(parseCachePruningPolicy("prune_interval=").takeError()));
  EXPECT_EQ("'foo' not an integer",
            toString(parseCachePruningPolicy("prune_interval=foos").takeError()));
  EXPECT_EQ("'24x' must end with one of 's', 'm' or 'h'",
            toString(parseCachePruningPolicy("prune_interval=24x").takeError()));
  EXPECT_EQ("'foo' must be a percentage",
            toString(parseCachePruningPolicy("cache_size=foo").takeError()));
  EXPECT_EQ("'foo' not an integer",
            toString(parseCachePruningPolicy("cache_size=foo%").takeError()));
  EXPECT_EQ("'101' must be between 0 and 100",
            toString(parseCachePruningPolicy("cache_size=101%").takeError()));
  EXPECT_EQ(
      "'foo' not an integer",
      toString(parseCachePruningPolicy("cache_size_bytes=foo").takeError()));
  EXPECT_EQ(
      "'foo' not an integer",
      toString(parseCachePruningPolicy("cache_size_bytes=foom").takeError()));
  EXPECT_EQ("Unknown key: 'foo'",
            toString(parseCachePruningPolicy("foo=bar").takeError()));
}
