40class KVStorageTest :
public ::testing::TestWithParam<StorageType> {
43 StorageType t = GetParam();
60 void Reset() { std::filesystem::remove_all(
path_.c_str()); }
64 std::string
path_ =
"/tmp/leveldb_test";
67TEST_P(KVStorageTest, SetValue) {
68 EXPECT_EQ(
storage->SetValue(
"test_key",
"test_value"), 0);
69 EXPECT_EQ(
storage->GetValue(
"test_key"),
"test_value");
72TEST_P(KVStorageTest, GetValue) {
73 EXPECT_EQ(
storage->GetValue(
"test_key"),
"");
76TEST_P(KVStorageTest, GetEmptyValueWithVersion) {
77 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 0),
78 std::make_pair(std::string(
""), 0));
81TEST_P(KVStorageTest, SetValueWithVersion) {
82 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key",
"test_value", 1), -2);
84 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key",
"test_value", 0), 0);
86 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 0),
87 std::make_pair(std::string(
"test_value"), 1));
88 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 1),
89 std::make_pair(std::string(
"test_value"), 1));
91 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key",
"test_value_v2", 2), -2);
92 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key",
"test_value_v2", 1), 0);
94 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 0),
95 std::make_pair(std::string(
"test_value_v2"), 2));
97 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 1),
98 std::make_pair(std::string(
"test_value"), 1));
100 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 2),
101 std::make_pair(std::string(
"test_value_v2"), 2));
103 EXPECT_EQ(
storage->GetValueWithVersion(
"test_key", 3),
104 std::make_pair(std::string(
"test_value_v2"), 2));
107TEST_P(KVStorageTest, GetAllValueWithVersion) {
109 std::map<std::string, std::pair<std::string, int> > expected_list{
110 std::make_pair(
"test_key", std::make_pair(
"test_value", 1))};
112 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key",
"test_value", 0), 0);
113 EXPECT_EQ(
storage->GetAllItems(), expected_list);
117 std::map<std::string, std::pair<std::string, int> > expected_list{
118 std::make_pair(
"test_key", std::make_pair(
"test_value_v2", 2))};
119 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key",
"test_value_v2", 1), 0);
120 EXPECT_EQ(
storage->GetAllItems(), expected_list);
124 std::map<std::string, std::pair<std::string, int> > expected_list{
125 std::make_pair(
"test_key_v1", std::make_pair(
"test_value1", 1)),
126 std::make_pair(
"test_key", std::make_pair(
"test_value_v2", 2))};
127 EXPECT_EQ(
storage->SetValueWithVersion(
"test_key_v1",
"test_value1", 0), 0);
128 EXPECT_EQ(
storage->GetAllItems(), expected_list);
132TEST_P(KVStorageTest, GetKeyRange) {
133 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value1", 0), 0);
134 EXPECT_EQ(
storage->SetValueWithVersion(
"2",
"value2", 0), 0);
135 EXPECT_EQ(
storage->SetValueWithVersion(
"3",
"value3", 0), 0);
136 EXPECT_EQ(
storage->SetValueWithVersion(
"4",
"value4", 0), 0);
139 std::map<std::string, std::pair<std::string, int> > expected_list{
140 std::make_pair(
"1", std::make_pair(
"value1", 1)),
141 std::make_pair(
"2", std::make_pair(
"value2", 1)),
142 std::make_pair(
"3", std::make_pair(
"value3", 1)),
143 std::make_pair(
"4", std::make_pair(
"value4", 1))};
144 EXPECT_EQ(
storage->GetKeyRange(
"1",
"4"), expected_list);
147 EXPECT_EQ(
storage->SetValueWithVersion(
"3",
"value3_1", 1), 0);
149 std::map<std::string, std::pair<std::string, int> > expected_list{
150 std::make_pair(
"1", std::make_pair(
"value1", 1)),
151 std::make_pair(
"2", std::make_pair(
"value2", 1)),
152 std::make_pair(
"3", std::make_pair(
"value3_1", 2)),
153 std::make_pair(
"4", std::make_pair(
"value4", 1))};
154 EXPECT_EQ(
storage->GetKeyRange(
"1",
"4"), expected_list);
157 std::map<std::string, std::pair<std::string, int> > expected_list{
158 std::make_pair(
"1", std::make_pair(
"value1", 1)),
159 std::make_pair(
"2", std::make_pair(
"value2", 1)),
160 std::make_pair(
"3", std::make_pair(
"value3_1", 2)),
162 EXPECT_EQ(
storage->GetKeyRange(
"1",
"3"), expected_list);
165 std::map<std::string, std::pair<std::string, int> > expected_list{
166 std::make_pair(
"2", std::make_pair(
"value2", 1)),
167 std::make_pair(
"3", std::make_pair(
"value3_1", 2)),
168 std::make_pair(
"4", std::make_pair(
"value4", 1))};
169 EXPECT_EQ(
storage->GetKeyRange(
"2",
"4"), expected_list);
172 std::map<std::string, std::pair<std::string, int> > expected_list{
173 std::make_pair(
"1", std::make_pair(
"value1", 1)),
174 std::make_pair(
"2", std::make_pair(
"value2", 1)),
175 std::make_pair(
"3", std::make_pair(
"value3_1", 2)),
176 std::make_pair(
"4", std::make_pair(
"value4", 1))};
177 EXPECT_EQ(
storage->GetKeyRange(
"0",
"5"), expected_list);
180 std::map<std::string, std::pair<std::string, int> > expected_list{
181 std::make_pair(
"2", std::make_pair(
"value2", 1)),
182 std::make_pair(
"3", std::make_pair(
"value3_1", 2)),
184 EXPECT_EQ(
storage->GetKeyRange(
"2",
"3"), expected_list);
188TEST_P(KVStorageTest, GetHistory) {
190 std::vector<std::pair<std::string, int> > expected_list{};
191 EXPECT_EQ(
storage->GetHistory(
"1", 1, 5), expected_list);
194 std::vector<std::pair<std::string, int> > expected_list{
195 std::make_pair(
"value3", 3), std::make_pair(
"value2", 2),
196 std::make_pair(
"value1", 1)};
198 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value1", 0), 0);
199 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value2", 1), 0);
200 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value3", 2), 0);
202 EXPECT_EQ(
storage->GetHistory(
"1", 1, 5), expected_list);
206 std::vector<std::pair<std::string, int> > expected_list{
207 std::make_pair(
"value5", 5), std::make_pair(
"value4", 4),
208 std::make_pair(
"value3", 3), std::make_pair(
"value2", 2),
209 std::make_pair(
"value1", 1)};
211 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value4", 3), 0);
212 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value5", 4), 0);
213 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value6", 5), 0);
214 EXPECT_EQ(
storage->SetValueWithVersion(
"1",
"value7", 6), 0);
216 EXPECT_EQ(
storage->GetHistory(
"1", 1, 5), expected_list);
220 std::vector<std::pair<std::string, int> > expected_list{
221 std::make_pair(
"value7", 7), std::make_pair(
"value6", 6)};
223 EXPECT_EQ(
storage->GetTopHistory(
"1", 2), expected_list);
227INSTANTIATE_TEST_CASE_P(KVStorageTest, KVStorageTest,
228 ::testing::Values(MEM, LEVELDB, ROCKSDB));