1 //===- CachePruningTest.cpp -----------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "llvm/Support/CachePruning.h"
11 #include "llvm/Support/Error.h"
12 #include "gtest/gtest.h"
13 
14 using namespace llvm;
15 
16 TEST(CachePruningPolicyParser, Empty) {
17   auto P = parseCachePruningPolicy("");
18   ASSERT_TRUE(bool(P));
19   EXPECT_EQ(std::chrono::seconds(1200), P->Interval);
20   EXPECT_EQ(std::chrono::hours(7 * 24), P->Expiration);
21   EXPECT_EQ(75u, P->PercentageOfAvailableSpace);
22 }
23 
24 TEST(CachePruningPolicyParser, Interval) {
25   auto P = parseCachePruningPolicy("prune_interval=1s");
26   ASSERT_TRUE(bool(P));
27   EXPECT_EQ(std::chrono::seconds(1), P->Interval);
28   P = parseCachePruningPolicy("prune_interval=2m");
29   ASSERT_TRUE(bool(P));
30   EXPECT_EQ(std::chrono::minutes(2), P->Interval);
31   P = parseCachePruningPolicy("prune_interval=3h");
32   ASSERT_TRUE(bool(P));
33   EXPECT_EQ(std::chrono::hours(3), P->Interval);
34 }
35 
36 TEST(CachePruningPolicyParser, Expiration) {
37   auto P = parseCachePruningPolicy("prune_after=1s");
38   ASSERT_TRUE(bool(P));
39   EXPECT_EQ(std::chrono::seconds(1), P->Expiration);
40 }
41 
42 TEST(CachePruningPolicyParser, PercentageOfAvailableSpace) {
43   auto P = parseCachePruningPolicy("cache_size=100%");
44   ASSERT_TRUE(bool(P));
45   EXPECT_EQ(100u, P->PercentageOfAvailableSpace);
46 }
47 
48 TEST(CachePruningPolicyParser, Multiple) {
49   auto P = parseCachePruningPolicy("prune_after=1s:cache_size=50%");
50   ASSERT_TRUE(bool(P));
51   EXPECT_EQ(std::chrono::seconds(1200), P->Interval);
52   EXPECT_EQ(std::chrono::seconds(1), P->Expiration);
53   EXPECT_EQ(50u, P->PercentageOfAvailableSpace);
54 }
55 
56 TEST(CachePruningPolicyParser, Errors) {
57   EXPECT_EQ("Duration must not be empty",
58             toString(parseCachePruningPolicy("prune_interval=").takeError()));
59   EXPECT_EQ("'foo' not an integer",
60             toString(parseCachePruningPolicy("prune_interval=foos").takeError()));
61   EXPECT_EQ("'24x' must end with one of 's', 'm' or 'h'",
62             toString(parseCachePruningPolicy("prune_interval=24x").takeError()));
63   EXPECT_EQ("'foo' must be a percentage",
64             toString(parseCachePruningPolicy("cache_size=foo").takeError()));
65   EXPECT_EQ("'foo' not an integer",
66             toString(parseCachePruningPolicy("cache_size=foo%").takeError()));
67   EXPECT_EQ("'101' must be between 0 and 100",
68             toString(parseCachePruningPolicy("cache_size=101%").takeError()));
69   EXPECT_EQ("Unknown key: 'foo'",
70             toString(parseCachePruningPolicy("foo=bar").takeError()));
71 }
72