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