@@ -24,10 +24,24 @@ namespace proxy_wasm {
2424
2525TEST (SharedData, SingleThread) {
2626 SharedData shared_data (false );
27+ std::string_view vm_id = " id" ;
28+
29+ // Validate we get an 'Ok' response when fetching keys before anything
30+ // is initialized.
31+ std::vector<std::string> keys;
32+ EXPECT_EQ (WasmResult::Ok, shared_data.keys (vm_id, &keys));
33+ EXPECT_EQ (0 , keys.size ());
34+
35+ // Validate that we clear the result set
36+ std::vector<std::string> nonEmptyKeys (2 );
37+ nonEmptyKeys[0 ] = " valueA" ;
38+ nonEmptyKeys[1 ] = " valueB" ;
39+ EXPECT_EQ (WasmResult::Ok, shared_data.keys (vm_id, &nonEmptyKeys));
40+ EXPECT_EQ (0 , nonEmptyKeys.size ());
41+
2742 std::pair<std::string, uint32_t > result;
2843 EXPECT_EQ (WasmResult::NotFound, shared_data.get (" non-exist" , " non-exists" , &result));
2944
30- std::string_view vm_id = " id" ;
3145 std::string_view key = " key" ;
3246 std::string_view value = " 1" ;
3347 EXPECT_EQ (WasmResult::Ok, shared_data.set (vm_id, key, value, 0 ));
@@ -44,6 +58,31 @@ TEST(SharedData, SingleThread) {
4458 EXPECT_EQ (WasmResult::Ok, shared_data.get (vm_id, key, &result));
4559 EXPECT_EQ (value, result.first );
4660 EXPECT_EQ (result.second , 3 );
61+
62+ EXPECT_EQ (WasmResult::Ok, shared_data.keys (vm_id, &keys));
63+ EXPECT_EQ (1 , keys.size ());
64+ EXPECT_EQ (key, keys[0 ]);
65+
66+ keys.clear ();
67+ EXPECT_EQ (WasmResult::CasMismatch, shared_data.remove (vm_id, key, 911 , nullptr ));
68+ EXPECT_EQ (WasmResult::Ok, shared_data.keys (vm_id, &keys));
69+ EXPECT_EQ (1 , keys.size ());
70+
71+ EXPECT_EQ (WasmResult::Ok, shared_data.remove (vm_id, key, 0 , nullptr ));
72+ EXPECT_EQ (WasmResult::NotFound, shared_data.get (vm_id, key, &result));
73+
74+ EXPECT_EQ (WasmResult::NotFound, shared_data.remove (vm_id, " non-existent_key" , 0 , nullptr ));
75+
76+ EXPECT_EQ (WasmResult::Ok, shared_data.set (vm_id, key, value, 0 ));
77+ EXPECT_EQ (WasmResult::Ok, shared_data.set (vm_id, key, value, 0 ));
78+ EXPECT_EQ (WasmResult::Ok, shared_data.get (vm_id, key, &result));
79+
80+ uint32_t expectedCasValue = result.second ;
81+
82+ std::pair<std::string, uint32_t > removeResult;
83+ EXPECT_EQ (WasmResult::Ok, shared_data.remove (vm_id, key, 0 , &removeResult));
84+ EXPECT_EQ (value, removeResult.first );
85+ EXPECT_EQ (removeResult.second , expectedCasValue);
4786}
4887
4988void incrementData (SharedData *shared_data, std::string_view vm_id, std::string_view key) {
0 commit comments