1 /*
2  * Copyright (c) 2022 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 #ifndef OHOS_DISTRIBUTEDDATA_SERVICE_TEST_DB_STORE_MOCK_H
16 #define OHOS_DISTRIBUTEDDATA_SERVICE_TEST_DB_STORE_MOCK_H
17 #include "kv_store_nb_delegate.h"
18 #include "concurrent_map.h"
19 namespace OHOS {
20 namespace DistributedData {
21 class DBStoreMock : public DistributedDB::KvStoreNbDelegate {
22 public:
23     using DBStatus = DistributedDB::DBStatus;
24     using Entry = DistributedDB::Entry;
25     using Key = DistributedDB::Key;
26     using Value = DistributedDB::Value;
27     using KvStoreResultSet = DistributedDB::KvStoreResultSet;
28     using Query = DistributedDB::Query;
29     using KvStoreNbPublishOnConflict = DistributedDB::KvStoreNbPublishOnConflict;
30     using KvStoreObserver = DistributedDB::KvStoreObserver;
31     using SyncMode = DistributedDB::SyncMode;
32     using PragmaCmd = DistributedDB::PragmaCmd;
33     using PragmaData = DistributedDB::PragmaData;
34     using CipherPassword = DistributedDB::CipherPassword;
35     using KvStoreNbConflictNotifier = DistributedDB::KvStoreNbConflictNotifier;
36     using SecurityOption = DistributedDB::SecurityOption;
37     using RemotePushFinishedNotifier = DistributedDB::RemotePushFinishedNotifier;
38     using PushDataInterceptor = DistributedDB::PushDataInterceptor;
39     using UpdateKeyCallback = DistributedDB::UpdateKeyCallback;
40     using WatermarkInfo = DistributedDB::WatermarkInfo;
41     using ClearMode = DistributedDB::ClearMode;
42     using DataBaseSchema = DistributedDB::DataBaseSchema;
43     using ICloudDb = DistributedDB::ICloudDb;
44     using CloudSyncOption = DistributedDB::CloudSyncOption;
45     using SyncProcessCallback = DistributedDB::SyncProcessCallback;
46     using GenerateCloudVersionCallback = DistributedDB::GenerateCloudVersionCallback;
47     using CloudSyncConfig = DistributedDB::CloudSyncConfig;
48     using DataInterceptor = DistributedDB::DataInterceptor;
49     DBStatus Get(const Key &key, Value &value) const override;
50     DBStatus GetEntries(const Key &keyPrefix, std::vector<Entry> &entries) const override;
51     DBStatus GetEntries(const Key &keyPrefix, KvStoreResultSet *&resultSet) const override;
52     DBStatus GetEntries(const Query &query, std::vector<Entry> &entries) const override;
53     DBStatus GetEntries(const Query &query, KvStoreResultSet *&resultSet) const override;
54     DBStatus GetCount(const Query &query, int &count) const override;
55     DBStatus CloseResultSet(KvStoreResultSet *&resultSet) override;
56     DBStatus Put(const Key &key, const Value &value) override;
57     DBStatus PutBatch(const std::vector<Entry> &entries) override;
58     DBStatus DeleteBatch(const std::vector<Key> &keys) override;
59     DBStatus Delete(const Key &key) override;
60     DBStatus GetLocal(const Key &key, Value &value) const override;
61     DBStatus GetLocalEntries(const Key &keyPrefix, std::vector<Entry> &entries) const override;
62     DBStatus PutLocal(const Key &key, const Value &value) override;
63     DBStatus DeleteLocal(const Key &key) override;
64     DBStatus PublishLocal(const Key &key, bool deleteLocal, bool updateTimestamp,
65         const KvStoreNbPublishOnConflict &onConflict) override;
66     DBStatus UnpublishToLocal(const Key &key, bool deletePublic, bool updateTimestamp) override;
67     DBStatus RegisterObserver(const Key &key, unsigned int mode, KvStoreObserver *observer) override;
68     DBStatus UnRegisterObserver(const KvStoreObserver *observer) override;
69     DBStatus RemoveDeviceData(const std::string &device) override;
70     std::string GetStoreId() const override;
71     DBStatus Sync(const std::vector<std::string> &devices, SyncMode mode,
72         const std::function<void(const std::map<std::string, DBStatus> &)> &onComplete, bool wait) override;
73     DBStatus Pragma(PragmaCmd cmd, PragmaData &paramData) override;
74     DBStatus SetConflictNotifier(int conflictType, const KvStoreNbConflictNotifier &notifier) override;
75     DBStatus Rekey(const CipherPassword &password) override;
76     DBStatus Export(const std::string &filePath, const CipherPassword &passwd, bool force) override;
77     DBStatus Import(const std::string &filePath, const CipherPassword &passwd) override;
78     DBStatus StartTransaction() override;
79     DBStatus Commit() override;
80     DBStatus Rollback() override;
81     DBStatus PutLocalBatch(const std::vector<Entry> &entries) override;
82     DBStatus DeleteLocalBatch(const std::vector<Key> &keys) override;
83     DBStatus GetSecurityOption(SecurityOption &option) const override;
84     DBStatus SetRemotePushFinishedNotify(const RemotePushFinishedNotifier &notifier) override;
85     DBStatus Sync(const std::vector<std::string> &devices, SyncMode mode,
86         const std::function<void(const std::map<std::string, DBStatus> &)> &onComplete, const Query &query,
87         bool wait) override;
88     DBStatus CheckIntegrity() const override;
89     DBStatus SetEqualIdentifier(const std::string &identifier, const std::vector<std::string> &targets) override;
90     DBStatus SetPushDataInterceptor(const PushDataInterceptor &interceptor) override;
91     DBStatus SubscribeRemoteQuery(const std::vector<std::string> &devices,
92         const std::function<void(const std::map<std::string, DBStatus> &)> &onComplete, const Query &query,
93         bool wait) override;
94     DBStatus UnSubscribeRemoteQuery(const std::vector<std::string> &devices,
95         const std::function<void(const std::map<std::string, DBStatus> &)> &onComplete, const Query &query,
96         bool wait) override;
97     DBStatus RemoveDeviceData() override;
98     DBStatus GetKeys(const Key &keyPrefix, std::vector<Key> &keys) const override;
99     size_t GetSyncDataSize(const std::string &device) const override;
100     DBStatus UpdateKey(const UpdateKeyCallback &callback) override;
101     std::pair<DBStatus, WatermarkInfo> GetWatermarkInfo(const std::string &device) override;
102     DBStatus Sync(const CloudSyncOption &option, const SyncProcessCallback &onProcess) override;
103     DBStatus SetCloudDB(const std::map<std::string, std::shared_ptr<ICloudDb>> &cloudDBs) override;
104     DBStatus SetCloudDbSchema(const std::map<std::string, DataBaseSchema> &schema) override;
105     DBStatus RemoveDeviceData(const std::string &device, ClearMode mode) override;
106     DBStatus RemoveDeviceData(const std::string &device, const std::string &user, ClearMode mode) override;
107     int32_t GetTaskCount() override;
108     void SetGenCloudVersionCallback(const GenerateCloudVersionCallback &callback) override;
109     std::pair<DBStatus, std::map<std::string, std::string>> GetCloudVersion(const std::string &device) override;
110     DBStatus SetCloudSyncConfig(const CloudSyncConfig &config) override;
111     DBStatus SetReceiveDataInterceptor(const DataInterceptor &interceptor) override;
112     DBStatus GetDeviceEntries(const std::string &device, std::vector<Entry> &entries) const override;
113 private:
114     static const uint32_t DEFAULT_SIZE = 0;
115     DBStatus Get(ConcurrentMap<Key, Value> &store, const Key &key, Value &value) const;
116     DBStatus GetEntries(ConcurrentMap<Key, Value> &store, const Key &keyPrefix, std::vector<Entry> &entries) const;
117     DBStatus PutBatch(ConcurrentMap<Key, Value> &store, const std::vector<Entry> &entries);
118     DBStatus DeleteBatch(ConcurrentMap<Key, Value> &store, const std::vector<Key> &keys);
119     mutable ConcurrentMap<Key, Value> entries_;
120     mutable ConcurrentMap<Key, Value> localEntries_;
121     mutable ConcurrentMap<KvStoreObserver *, std::set<Key>> observers_;
122 };
123 } // namespace DistributedData
124 } // namespace OHOS
125 #endif // OHOS_DISTRIBUTEDDATA_SERVICE_TEST_DB_STORE_MOCK_H
126