1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "mock_single_kv_store.h"
17
18 #include "types.h"
19
20 namespace OHOS {
21 namespace DistributedKv {
22 std::mutex MockSingleKvStore::mutex_;
23 std::map<std::pair<std::string, std::string>, std::shared_ptr<SingleKvStore>> MockSingleKvStore::kvStoreMap_;
24
InsertMockKvStore(AppId appId,StoreId storeId,std::shared_ptr<SingleKvStore> store)25 void MockSingleKvStore::InsertMockKvStore(AppId appId, StoreId storeId, std::shared_ptr<SingleKvStore> store)
26 {
27 std::lock_guard<std::mutex> lock(mutex_);
28
29 kvStoreMap_[std::pair<std::string, std::string>(appId.appId, storeId.storeId)] = store;
30 }
31
RemoveMockKvStore(AppId appId,StoreId storeId)32 void MockSingleKvStore::RemoveMockKvStore(AppId appId, StoreId storeId)
33 {
34 kvStoreMap_.erase(std::pair<std::string, std::string>(appId.appId, storeId.storeId));
35 }
36
GetMockKvStorePointer(AppId appId,StoreId storeId)37 std::shared_ptr<MockSingleKvStore> MockSingleKvStore::GetMockKvStorePointer(AppId appId, StoreId storeId)
38 {
39 for (auto kvstore : kvStoreMap_) {
40 if (kvstore.first == std::pair<std::string, std::string>(appId.appId, storeId.storeId)) {
41 return std::static_pointer_cast<MockSingleKvStore>(kvstore.second);
42 }
43 }
44
45 return nullptr;
46 }
47
InsertDataToDoCallback(const Key & key,const Value & value)48 void MockSingleKvStore::InsertDataToDoCallback(const Key &key, const Value &value)
49 {
50 Put(key, value);
51 if (observer_ != nullptr) {
52 Entry entry;
53 entry.key = key;
54 entry.value = value;
55 std::vector<Entry> insertEntries;
56 std::vector<Entry> updateEntries;
57 std::vector<Entry> deleteEntries;
58 insertEntries.push_back(entry);
59 ChangeNotification change(
60 std::move(insertEntries), std::move(updateEntries), std::move(deleteEntries), "<remoteDeviceId>", false);
61 observer_->OnChange(change);
62 }
63 }
64
UpdateDataToDoCallback(const Key & key,const Value & value)65 void MockSingleKvStore::UpdateDataToDoCallback(const Key &key, const Value &value)
66 {
67 Put(key, value);
68 if (observer_ != nullptr) {
69 Entry entry;
70 entry.key = key;
71 entry.value = value;
72 std::vector<Entry> insertEntries;
73 std::vector<Entry> updateEntries;
74 std::vector<Entry> deleteEntries;
75 updateEntries.push_back(entry);
76 ChangeNotification change(
77 std::move(insertEntries), std::move(updateEntries), std::move(deleteEntries), "<remoteDeviceId>", false);
78 observer_->OnChange(change);
79 }
80 }
81
DeleteDataToDoCallback(const Key & key)82 void MockSingleKvStore::DeleteDataToDoCallback(const Key &key)
83 {
84 Value value;
85 Get(key, value);
86 Delete(key);
87 if (observer_ != nullptr) {
88 Entry entry;
89 entry.key = key;
90 entry.value = value;
91 std::vector<Entry> insertEntries;
92 std::vector<Entry> updateEntries;
93 std::vector<Entry> deleteEntries;
94 deleteEntries.push_back(entry);
95 ChangeNotification change(
96 std::move(insertEntries), std::move(updateEntries), std::move(deleteEntries), "<remoteDeviceId>", false);
97 observer_->OnChange(change);
98 }
99 }
100
GetEntries(const Key & prefixKey,std::vector<Entry> & entries) const101 Status MockSingleKvStore::GetEntries(const Key &prefixKey, std::vector<Entry> &entries) const
102 {
103 entries.clear();
104
105 for (auto iter : kvstore_) {
106 if (iter.first.StartsWith(prefixKey)) {
107 Entry entry;
108 entry.key = iter.first;
109 entry.value = iter.second;
110 entries.push_back(entry);
111 }
112 }
113
114 return Status::SUCCESS;
115 }
116
GetEntries(const DataQuery & query,std::vector<Entry> & entries) const117 Status MockSingleKvStore::GetEntries(const DataQuery &query, std::vector<Entry> &entries) const
118 {
119 return Status::SUCCESS;
120 }
121
GetResultSet(const Key & prefixKey,std::shared_ptr<KvStoreResultSet> & resultSet) const122 Status MockSingleKvStore::GetResultSet(const Key &prefixKey, std::shared_ptr<KvStoreResultSet> &resultSet) const
123 {
124 return Status::SUCCESS;
125 }
126
GetResultSet(const DataQuery & query,std::shared_ptr<KvStoreResultSet> & resultSet) const127 Status MockSingleKvStore::GetResultSet(const DataQuery &query, std::shared_ptr<KvStoreResultSet> &resultSet) const
128 {
129 return Status::SUCCESS;
130 }
131
CloseResultSet(std::shared_ptr<KvStoreResultSet> & resultSet)132 Status MockSingleKvStore::CloseResultSet(std::shared_ptr<KvStoreResultSet> &resultSet)
133 {
134 return Status::SUCCESS;
135 }
136
GetCount(const DataQuery & query,int & result) const137 Status MockSingleKvStore::GetCount(const DataQuery &query, int &result) const
138 {
139 return Status::SUCCESS;
140 }
141
Sync(const std::vector<std::string> & deviceIds,SyncMode mode,uint32_t allowedDelayMs)142 Status MockSingleKvStore::Sync(
143 const std::vector<std::string> &deviceIds, SyncMode mode, uint32_t allowedDelayMs)
144 {
145 return Status::SUCCESS;
146 }
147
RemoveDeviceData(const std::string & device)148 Status MockSingleKvStore::RemoveDeviceData(const std::string &device)
149 {
150 kvstore_.clear();
151
152 return Status::SUCCESS;
153 }
154
GetStoreId() const155 StoreId MockSingleKvStore::GetStoreId() const
156 {
157 StoreId storeId;
158 storeId.storeId = "";
159 return storeId;
160 }
161
Delete(const Key & key)162 Status MockSingleKvStore::Delete(const Key &key)
163 {
164 if (kvstore_.erase(key) != 0) {
165 return Status::SUCCESS;
166 }
167
168 return Status::KEY_NOT_FOUND;
169 }
170
Put(const Key & key,const Value & value)171 Status MockSingleKvStore::Put(const Key &key, const Value &value)
172 {
173 kvstore_[key] = value;
174
175 return Status::SUCCESS;
176 }
177
Get(const Key & key,Value & value)178 Status MockSingleKvStore::Get(const Key &key, Value &value)
179 {
180 for (auto iter : kvstore_) {
181 if (iter.first == key) {
182 value = iter.second;
183 return Status::SUCCESS;
184 }
185 }
186
187 return Status::KEY_NOT_FOUND;
188 }
189
SubscribeKvStore(SubscribeType subscribeType,std::shared_ptr<KvStoreObserver> observer)190 Status MockSingleKvStore::SubscribeKvStore(SubscribeType subscribeType, std::shared_ptr<KvStoreObserver> observer)
191 {
192 observer_ = observer;
193 return Status::SUCCESS;
194 }
195
UnSubscribeKvStore(SubscribeType subscribeType,std::shared_ptr<KvStoreObserver> observer)196 Status MockSingleKvStore::UnSubscribeKvStore(SubscribeType subscribeType, std::shared_ptr<KvStoreObserver> observer)
197 {
198 observer_ = nullptr;
199 return Status::SUCCESS;
200 }
201
RegisterSyncCallback(std::shared_ptr<KvStoreSyncCallback> callback)202 Status MockSingleKvStore::RegisterSyncCallback(std::shared_ptr<KvStoreSyncCallback> callback)
203 {
204 return Status::SUCCESS;
205 }
206
UnRegisterSyncCallback()207 Status MockSingleKvStore::UnRegisterSyncCallback()
208 {
209 return Status::SUCCESS;
210 }
211
PutBatch(const std::vector<Entry> & entries)212 Status MockSingleKvStore::PutBatch(const std::vector<Entry> &entries)
213 {
214 return Status::SUCCESS;
215 }
216
DeleteBatch(const std::vector<Key> & keys)217 Status MockSingleKvStore::DeleteBatch(const std::vector<Key> &keys)
218 {
219 return Status::SUCCESS;
220 }
221
StartTransaction()222 Status MockSingleKvStore::StartTransaction()
223 {
224 return Status::SUCCESS;
225 }
226
Commit()227 Status MockSingleKvStore::Commit()
228 {
229 return Status::SUCCESS;
230 }
231
Rollback()232 Status MockSingleKvStore::Rollback()
233 {
234 return Status::SUCCESS;
235 }
236
SetSyncParam(const KvSyncParam & syncParam)237 Status MockSingleKvStore::SetSyncParam(const KvSyncParam &syncParam)
238 {
239 return Status::SUCCESS;
240 }
241
GetSyncParam(KvSyncParam & syncParam)242 Status MockSingleKvStore::GetSyncParam(KvSyncParam &syncParam)
243 {
244 return Status::SUCCESS;
245 }
246
SetCapabilityEnabled(bool enabled) const247 Status MockSingleKvStore::SetCapabilityEnabled(bool enabled) const
248 {
249 return Status::SUCCESS;
250 }
251
SetCapabilityRange(const std::vector<std::string> & localLabels,const std::vector<std::string> & remoteSupportLabels) const252 Status MockSingleKvStore::SetCapabilityRange(
253 const std::vector<std::string> &localLabels, const std::vector<std::string> &remoteSupportLabels) const
254 {
255 return Status::SUCCESS;
256 }
257
GetSecurityLevel(SecurityLevel & securityLevel) const258 Status MockSingleKvStore::GetSecurityLevel(SecurityLevel &securityLevel) const
259 {
260 return Status::SUCCESS;
261 }
262
Sync(const std::vector<std::string> & deviceIds,SyncMode mode,const DataQuery & query,std::shared_ptr<KvStoreSyncCallback> syncCallback)263 Status MockSingleKvStore::Sync(const std::vector<std::string> &deviceIds, SyncMode mode,
264 const DataQuery &query, std::shared_ptr<KvStoreSyncCallback> syncCallback)
265 {
266 return Status::SUCCESS;
267 }
268
SubscribeWithQuery(const std::vector<std::string> & deviceIds,const DataQuery & query)269 Status MockSingleKvStore::SubscribeWithQuery(const std::vector<std::string> &deviceIds, const DataQuery &query)
270 {
271 return Status::SUCCESS;
272 }
273
UnsubscribeWithQuery(const std::vector<std::string> & deviceIds,const DataQuery & query)274 Status MockSingleKvStore::UnsubscribeWithQuery(const std::vector<std::string> &deviceIds, const DataQuery &query)
275 {
276 return Status::SUCCESS;
277 }
278
Backup(const std::string & file,const std::string & baseDir)279 Status MockSingleKvStore::Backup(const std::string &file, const std::string &baseDir)
280 {
281 return Status::SUCCESS;
282 }
283
Restore(const std::string & file,const std::string & baseDir)284 Status MockSingleKvStore::Restore(const std::string &file, const std::string &baseDir)
285 {
286 return Status::SUCCESS;
287 }
288
DeleteBackup(const std::vector<std::string> & files,const std::string & baseDir,std::map<std::string,DistributedKv::Status> & status)289 Status MockSingleKvStore::DeleteBackup(
290 const std::vector<std::string> &files, const std::string &baseDir,
291 std::map<std::string, DistributedKv::Status> &status)
292 {
293 return Status::SUCCESS;
294 }
295 } // namespace DistributedKv
296 } // namespace OHOS
297