66namespace DB
77{
88
9- class ObjectStorageListObjectsCacheTest : public ::testing::Test
9+ auto & initializeAndGetCacheInstance ()
1010{
11- protected:
12- void SetUp () override
13- {
14- cache = std::unique_ptr<ObjectStorageListObjectsCache>(new ObjectStorageListObjectsCache ());
15- cache->setTTL (3 );
16- cache->setMaxCount (100 );
17- cache->setMaxSizeInBytes (1000000 );
18- }
11+ static auto & cache = ObjectStorageListObjectsCache::instance ();
12+ cache.setTTL (3 );
13+ cache.setMaxCount (100 );
14+ cache.setMaxSizeInBytes (1000000 );
15+ return cache;
16+ }
1917
20- std::unique_ptr<ObjectStorageListObjectsCache> cache;
21- static ObjectStorageListObjectsCache::Key default_key;
18+ static auto & cache = initializeAndGetCacheInstance();
2219
23- static std::shared_ptr<ObjectStorageListObjectsCache::Value> createTestValue (const std::vector<std::string>& paths)
20+ ObjectStorageListObjectsCache::Key default_key {" default" , " test-bucket" , " test-prefix/" };
21+
22+ std::shared_ptr<ObjectStorageListObjectsCache::Value> createTestValue (const std::vector<std::string>& paths)
23+ {
24+ auto value = std::make_shared<ObjectStorageListObjectsCache::Value>();
25+ for (const auto & path : paths)
2426 {
25- auto value = std::make_shared<ObjectStorageListObjectsCache::Value>();
26- for (const auto & path : paths)
27- {
28- value->push_back (std::make_shared<ObjectInfo>(path));
29- }
30- return value;
27+ value->push_back (std::make_shared<ObjectInfo>(path));
3128 }
32- };
29+ return value;
30+ }
3331
34- ObjectStorageListObjectsCache::Key ObjectStorageListObjectsCacheTest::default_key {" default" , " test-bucket" , " test-prefix/" };
3532
36- TEST_F (ObjectStorageListObjectsCacheTest, BasicSetAndGet)
33+ TEST (ObjectStorageListObjectsCacheTest, BasicSetAndGet)
3734{
38- cache-> clear ();
35+ cache. clear ();
3936 const std::string bucket = " test-bucket" ;
4037 const std::string prefix = " test-prefix/" ;
4138 auto value = createTestValue ({" test-prefix/file1.txt" , " test-prefix/file2.txt" });
4239
43- cache-> set (default_key, value);
40+ cache. set (default_key, value);
4441
45- auto result = cache-> get (default_key).value ();
42+ auto result = cache. get (default_key).value ();
4643 ASSERT_EQ (result.size (), 2 );
4744 EXPECT_EQ (result[0 ]->getPath (), " test-prefix/file1.txt" );
4845 EXPECT_EQ (result[1 ]->getPath (), " test-prefix/file2.txt" );
4946}
5047
51- TEST_F (ObjectStorageListObjectsCacheTest, CacheMiss)
48+ TEST (ObjectStorageListObjectsCacheTest, CacheMiss)
5249{
53- cache-> clear ();
50+ cache. clear ();
5451 const std::string bucket = " test-bucket" ;
5552 const std::string prefix = " test-prefix/" ;
5653
57- EXPECT_FALSE (cache-> get (default_key));
54+ EXPECT_FALSE (cache. get (default_key));
5855}
5956
60- TEST_F (ObjectStorageListObjectsCacheTest, ClearCache)
57+ TEST (ObjectStorageListObjectsCacheTest, ClearCache)
6158{
62- cache-> clear ();
59+ cache. clear ();
6360 const std::string bucket = " test-bucket" ;
6461 const std::string prefix = " test-prefix/" ;
6562 auto value = createTestValue ({" test-prefix/file1.txt" , " test-prefix/file2.txt" });
6663
67- cache-> set (default_key, value);
68- cache-> clear ();
64+ cache. set (default_key, value);
65+ cache. clear ();
6966
70- EXPECT_FALSE (cache-> get (default_key));
67+ EXPECT_FALSE (cache. get (default_key));
7168}
7269
73- TEST_F (ObjectStorageListObjectsCacheTest, PrefixMatching)
70+ TEST (ObjectStorageListObjectsCacheTest, PrefixMatching)
7471{
75- cache-> clear ();
72+ cache. clear ();
7673
7774 auto short_prefix_key = default_key;
7875 short_prefix_key.prefix = " parent/" ;
@@ -88,20 +85,20 @@ TEST_F(ObjectStorageListObjectsCacheTest, PrefixMatching)
8885 " parent/child/grandchild/file1.txt" ,
8986 " parent/child/grandchild/file2.txt" });
9087
91- cache-> set (mid_prefix_key, value);
88+ cache. set (mid_prefix_key, value);
9289
93- auto result1 = cache-> get (mid_prefix_key).value ();
90+ auto result1 = cache. get (mid_prefix_key).value ();
9491 EXPECT_EQ (result1.size (), 2 );
9592
96- auto result2 = cache-> get (long_prefix_key).value ();
93+ auto result2 = cache. get (long_prefix_key).value ();
9794 EXPECT_EQ (result2.size (), 2 );
9895
99- EXPECT_FALSE (cache-> get (short_prefix_key));
96+ EXPECT_FALSE (cache. get (short_prefix_key));
10097}
10198
102- TEST_F (ObjectStorageListObjectsCacheTest, PrefixFiltering)
99+ TEST (ObjectStorageListObjectsCacheTest, PrefixFiltering)
103100{
104- cache-> clear ();
101+ cache. clear ();
105102
106103 auto key_with_short_prefix = default_key;
107104 key_with_short_prefix.prefix = " parent/" ;
@@ -115,34 +112,34 @@ TEST_F(ObjectStorageListObjectsCacheTest, PrefixFiltering)
115112 " parent/child2/file3.txt"
116113 });
117114
118- cache-> set (key_with_short_prefix, value);
115+ cache. set (key_with_short_prefix, value);
119116
120- auto result = cache-> get (key_with_mid_prefix, true ).value ();
117+ auto result = cache. get (key_with_mid_prefix, true ).value ();
121118 EXPECT_EQ (result.size (), 1 );
122119 EXPECT_EQ (result[0 ]->getPath (), " parent/child1/file2.txt" );
123120}
124121
125- TEST_F (ObjectStorageListObjectsCacheTest, TTLExpiration)
122+ TEST (ObjectStorageListObjectsCacheTest, TTLExpiration)
126123{
127- cache-> clear ();
124+ cache. clear ();
128125 const std::string bucket = " test-bucket" ;
129126 const std::string prefix = " test-prefix/" ;
130127 auto value = createTestValue ({" test-prefix/file1.txt" });
131128
132- cache-> set (default_key, value);
129+ cache. set (default_key, value);
133130
134131 // Verify we can get it immediately
135- auto result1 = cache-> get (default_key).value ();
132+ auto result1 = cache. get (default_key).value ();
136133 EXPECT_EQ (result1.size (), 1 );
137134
138135 std::this_thread::sleep_for (std::chrono::seconds (4 ));
139136
140- EXPECT_FALSE (cache-> get (default_key));
137+ EXPECT_FALSE (cache. get (default_key));
141138}
142139
143- TEST_F (ObjectStorageListObjectsCacheTest, BestPrefixMatch)
140+ TEST (ObjectStorageListObjectsCacheTest, BestPrefixMatch)
144141{
145- cache-> clear ();
142+ cache. clear ();
146143
147144 auto short_prefix_key = default_key;
148145 short_prefix_key.prefix = " a/b/" ;
@@ -156,11 +153,11 @@ TEST_F(ObjectStorageListObjectsCacheTest, BestPrefixMatch)
156153 auto short_prefix = createTestValue ({" a/b/c/d/file1.txt" , " a/b/c/file1.txt" , " a/b/file2.txt" });
157154 auto mid_prefix = createTestValue ({" a/b/c/d/file1.txt" , " a/b/c/file1.txt" });
158155
159- cache-> set (short_prefix_key, short_prefix);
160- cache-> set (mid_prefix_key, mid_prefix);
156+ cache. set (short_prefix_key, short_prefix);
157+ cache. set (mid_prefix_key, mid_prefix);
161158
162159 // should pick mid_prefix, which has size 2. filter_by_prefix=false so we can assert by size
163- auto result = cache-> get (long_prefix_key, false ).value ();
160+ auto result = cache. get (long_prefix_key, false ).value ();
164161 EXPECT_EQ (result.size (), 2u );
165162}
166163
0 commit comments