blob: 04ac0d09b49356ae5d9a3878b6f9eae05eac76bd [file] [log] [blame]
Peter Collingbourned1eac7b2017-03-16 03:42:00 +00001//===- 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
14using namespace llvm;
15
16TEST(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
24TEST(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
36TEST(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
42TEST(CachePruningPolicyParser, PercentageOfAvailableSpace) {
43 auto P = parseCachePruningPolicy("cache_size=100%");
44 ASSERT_TRUE(bool(P));
45 EXPECT_EQ(100u, P->PercentageOfAvailableSpace);
46}
47
48TEST(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
56TEST(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}