6
6
namespace DB
7
7
{
8
8
9
- class ObjectStorageListObjectsCacheTest : public ::testing::Test
9
+ auto & initializeAndGetCacheInstance ()
10
10
{
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
+ }
19
17
20
- std::unique_ptr<ObjectStorageListObjectsCache> cache;
21
- static ObjectStorageListObjectsCache::Key default_key;
18
+ static auto & cache = initializeAndGetCacheInstance();
22
19
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)
24
26
{
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));
31
28
}
32
- };
29
+ return value;
30
+ }
33
31
34
- ObjectStorageListObjectsCache::Key ObjectStorageListObjectsCacheTest::default_key {" default" , " test-bucket" , " test-prefix/" };
35
32
36
- TEST_F (ObjectStorageListObjectsCacheTest, BasicSetAndGet)
33
+ TEST (ObjectStorageListObjectsCacheTest, BasicSetAndGet)
37
34
{
38
- cache-> clear ();
35
+ cache. clear ();
39
36
const std::string bucket = " test-bucket" ;
40
37
const std::string prefix = " test-prefix/" ;
41
38
auto value = createTestValue ({" test-prefix/file1.txt" , " test-prefix/file2.txt" });
42
39
43
- cache-> set (default_key, value);
40
+ cache. set (default_key, value);
44
41
45
- auto result = cache-> get (default_key).value ();
42
+ auto result = cache. get (default_key).value ();
46
43
ASSERT_EQ (result.size (), 2 );
47
44
EXPECT_EQ (result[0 ]->getPath (), " test-prefix/file1.txt" );
48
45
EXPECT_EQ (result[1 ]->getPath (), " test-prefix/file2.txt" );
49
46
}
50
47
51
- TEST_F (ObjectStorageListObjectsCacheTest, CacheMiss)
48
+ TEST (ObjectStorageListObjectsCacheTest, CacheMiss)
52
49
{
53
- cache-> clear ();
50
+ cache. clear ();
54
51
const std::string bucket = " test-bucket" ;
55
52
const std::string prefix = " test-prefix/" ;
56
53
57
- EXPECT_FALSE (cache-> get (default_key));
54
+ EXPECT_FALSE (cache. get (default_key));
58
55
}
59
56
60
- TEST_F (ObjectStorageListObjectsCacheTest, ClearCache)
57
+ TEST (ObjectStorageListObjectsCacheTest, ClearCache)
61
58
{
62
- cache-> clear ();
59
+ cache. clear ();
63
60
const std::string bucket = " test-bucket" ;
64
61
const std::string prefix = " test-prefix/" ;
65
62
auto value = createTestValue ({" test-prefix/file1.txt" , " test-prefix/file2.txt" });
66
63
67
- cache-> set (default_key, value);
68
- cache-> clear ();
64
+ cache. set (default_key, value);
65
+ cache. clear ();
69
66
70
- EXPECT_FALSE (cache-> get (default_key));
67
+ EXPECT_FALSE (cache. get (default_key));
71
68
}
72
69
73
- TEST_F (ObjectStorageListObjectsCacheTest, PrefixMatching)
70
+ TEST (ObjectStorageListObjectsCacheTest, PrefixMatching)
74
71
{
75
- cache-> clear ();
72
+ cache. clear ();
76
73
77
74
auto short_prefix_key = default_key;
78
75
short_prefix_key.prefix = " parent/" ;
@@ -88,20 +85,20 @@ TEST_F(ObjectStorageListObjectsCacheTest, PrefixMatching)
88
85
" parent/child/grandchild/file1.txt" ,
89
86
" parent/child/grandchild/file2.txt" });
90
87
91
- cache-> set (mid_prefix_key, value);
88
+ cache. set (mid_prefix_key, value);
92
89
93
- auto result1 = cache-> get (mid_prefix_key).value ();
90
+ auto result1 = cache. get (mid_prefix_key).value ();
94
91
EXPECT_EQ (result1.size (), 2 );
95
92
96
- auto result2 = cache-> get (long_prefix_key).value ();
93
+ auto result2 = cache. get (long_prefix_key).value ();
97
94
EXPECT_EQ (result2.size (), 2 );
98
95
99
- EXPECT_FALSE (cache-> get (short_prefix_key));
96
+ EXPECT_FALSE (cache. get (short_prefix_key));
100
97
}
101
98
102
- TEST_F (ObjectStorageListObjectsCacheTest, PrefixFiltering)
99
+ TEST (ObjectStorageListObjectsCacheTest, PrefixFiltering)
103
100
{
104
- cache-> clear ();
101
+ cache. clear ();
105
102
106
103
auto key_with_short_prefix = default_key;
107
104
key_with_short_prefix.prefix = " parent/" ;
@@ -115,34 +112,34 @@ TEST_F(ObjectStorageListObjectsCacheTest, PrefixFiltering)
115
112
" parent/child2/file3.txt"
116
113
});
117
114
118
- cache-> set (key_with_short_prefix, value);
115
+ cache. set (key_with_short_prefix, value);
119
116
120
- auto result = cache-> get (key_with_mid_prefix, true ).value ();
117
+ auto result = cache. get (key_with_mid_prefix, true ).value ();
121
118
EXPECT_EQ (result.size (), 1 );
122
119
EXPECT_EQ (result[0 ]->getPath (), " parent/child1/file2.txt" );
123
120
}
124
121
125
- TEST_F (ObjectStorageListObjectsCacheTest, TTLExpiration)
122
+ TEST (ObjectStorageListObjectsCacheTest, TTLExpiration)
126
123
{
127
- cache-> clear ();
124
+ cache. clear ();
128
125
const std::string bucket = " test-bucket" ;
129
126
const std::string prefix = " test-prefix/" ;
130
127
auto value = createTestValue ({" test-prefix/file1.txt" });
131
128
132
- cache-> set (default_key, value);
129
+ cache. set (default_key, value);
133
130
134
131
// Verify we can get it immediately
135
- auto result1 = cache-> get (default_key).value ();
132
+ auto result1 = cache. get (default_key).value ();
136
133
EXPECT_EQ (result1.size (), 1 );
137
134
138
135
std::this_thread::sleep_for (std::chrono::seconds (4 ));
139
136
140
- EXPECT_FALSE (cache-> get (default_key));
137
+ EXPECT_FALSE (cache. get (default_key));
141
138
}
142
139
143
- TEST_F (ObjectStorageListObjectsCacheTest, BestPrefixMatch)
140
+ TEST (ObjectStorageListObjectsCacheTest, BestPrefixMatch)
144
141
{
145
- cache-> clear ();
142
+ cache. clear ();
146
143
147
144
auto short_prefix_key = default_key;
148
145
short_prefix_key.prefix = " a/b/" ;
@@ -156,11 +153,11 @@ TEST_F(ObjectStorageListObjectsCacheTest, BestPrefixMatch)
156
153
auto short_prefix = createTestValue ({" a/b/c/d/file1.txt" , " a/b/c/file1.txt" , " a/b/file2.txt" });
157
154
auto mid_prefix = createTestValue ({" a/b/c/d/file1.txt" , " a/b/c/file1.txt" });
158
155
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);
161
158
162
159
// 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 ();
164
161
EXPECT_EQ (result.size (), 2u );
165
162
}
166
163
0 commit comments