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