CachePruningTest.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //===- CachePruningTest.cpp -----------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "llvm/Support/CachePruning.h"
  9. #include "llvm/Support/Error.h"
  10. #include "gtest/gtest.h"
  11. using namespace llvm;
  12. TEST(CachePruningPolicyParser, Empty) {
  13. auto P = parseCachePruningPolicy("");
  14. ASSERT_TRUE(bool(P));
  15. EXPECT_EQ(std::chrono::seconds(1200), P->Interval);
  16. EXPECT_EQ(std::chrono::hours(7 * 24), P->Expiration);
  17. EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  18. }
  19. TEST(CachePruningPolicyParser, Interval) {
  20. auto P = parseCachePruningPolicy("prune_interval=1s");
  21. ASSERT_TRUE(bool(P));
  22. EXPECT_EQ(std::chrono::seconds(1), P->Interval);
  23. P = parseCachePruningPolicy("prune_interval=2m");
  24. ASSERT_TRUE(bool(P));
  25. EXPECT_EQ(std::chrono::minutes(2), *P->Interval);
  26. P = parseCachePruningPolicy("prune_interval=3h");
  27. ASSERT_TRUE(bool(P));
  28. EXPECT_EQ(std::chrono::hours(3), *P->Interval);
  29. }
  30. TEST(CachePruningPolicyParser, Expiration) {
  31. auto P = parseCachePruningPolicy("prune_after=1s");
  32. ASSERT_TRUE(bool(P));
  33. EXPECT_EQ(std::chrono::seconds(1), P->Expiration);
  34. }
  35. TEST(CachePruningPolicyParser, MaxSizePercentageOfAvailableSpace) {
  36. auto P = parseCachePruningPolicy("cache_size=100%");
  37. ASSERT_TRUE(bool(P));
  38. EXPECT_EQ(100u, P->MaxSizePercentageOfAvailableSpace);
  39. EXPECT_EQ(0u, P->MaxSizeBytes);
  40. }
  41. TEST(CachePruningPolicyParser, MaxSizeBytes) {
  42. auto P = parseCachePruningPolicy("cache_size_bytes=1");
  43. ASSERT_TRUE(bool(P));
  44. EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  45. EXPECT_EQ(1u, P->MaxSizeBytes);
  46. P = parseCachePruningPolicy("cache_size_bytes=2k");
  47. ASSERT_TRUE(bool(P));
  48. EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  49. EXPECT_EQ(2u * 1024u, P->MaxSizeBytes);
  50. P = parseCachePruningPolicy("cache_size_bytes=3m");
  51. ASSERT_TRUE(bool(P));
  52. EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  53. EXPECT_EQ(3u * 1024u * 1024u, P->MaxSizeBytes);
  54. P = parseCachePruningPolicy("cache_size_bytes=4G");
  55. ASSERT_TRUE(bool(P));
  56. EXPECT_EQ(75u, P->MaxSizePercentageOfAvailableSpace);
  57. EXPECT_EQ(4ull * 1024ull * 1024ull * 1024ull, P->MaxSizeBytes);
  58. }
  59. TEST(CachePruningPolicyParser, Multiple) {
  60. auto P = parseCachePruningPolicy("prune_after=1s:cache_size=50%");
  61. ASSERT_TRUE(bool(P));
  62. EXPECT_EQ(std::chrono::seconds(1200), P->Interval);
  63. EXPECT_EQ(std::chrono::seconds(1), P->Expiration);
  64. EXPECT_EQ(50u, P->MaxSizePercentageOfAvailableSpace);
  65. }
  66. TEST(CachePruningPolicyParser, Errors) {
  67. EXPECT_EQ("Duration must not be empty",
  68. toString(parseCachePruningPolicy("prune_interval=").takeError()));
  69. EXPECT_EQ("'foo' not an integer",
  70. toString(parseCachePruningPolicy("prune_interval=foos").takeError()));
  71. EXPECT_EQ("'24x' must end with one of 's', 'm' or 'h'",
  72. toString(parseCachePruningPolicy("prune_interval=24x").takeError()));
  73. EXPECT_EQ("'foo' must be a percentage",
  74. toString(parseCachePruningPolicy("cache_size=foo").takeError()));
  75. EXPECT_EQ("'foo' not an integer",
  76. toString(parseCachePruningPolicy("cache_size=foo%").takeError()));
  77. EXPECT_EQ("'101' must be between 0 and 100",
  78. toString(parseCachePruningPolicy("cache_size=101%").takeError()));
  79. EXPECT_EQ(
  80. "'foo' not an integer",
  81. toString(parseCachePruningPolicy("cache_size_bytes=foo").takeError()));
  82. EXPECT_EQ(
  83. "'foo' not an integer",
  84. toString(parseCachePruningPolicy("cache_size_bytes=foom").takeError()));
  85. EXPECT_EQ("Unknown key: 'foo'",
  86. toString(parseCachePruningPolicy("foo=bar").takeError()));
  87. }