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