1 /*
2 * Copyright (C) 2024 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 #include "datashare_helper_impl.h"
16
17 #include <gtest/gtest.h>
18
19 #include <memory>
20
21 #include "datashare_log.h"
22 #include "gmock/gmock.h"
23
24 namespace OHOS {
25 namespace DataShare {
26 using namespace testing::ext;
27
28 class MockGeneralController : public GeneralController {
29 public:
30 MOCK_METHOD(int, Insert, (const Uri &uri, const DataShareValuesBucket &value), (override));
31 MOCK_METHOD(int, Update,
32 (const Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value), (override));
33 MOCK_METHOD(int, Delete, (const Uri &uri, const DataSharePredicates &predicates), (override));
34 MOCK_METHOD((std::shared_ptr<DataShareResultSet>), Query,
35 (const Uri &uri, const DataSharePredicates &predicates, (std::vector<std::string> & columns),
36 DatashareBusinessError &businessError),
37 (override));
38 MOCK_METHOD(
39 int, RegisterObserver, (const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver), (override));
40 MOCK_METHOD(int32_t, UnregisterObserver, (const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver),
41 (override));
42 MOCK_METHOD(void, NotifyChange, (const Uri &uri), (override));
43 MOCK_METHOD(
44 (std::pair<int32_t, int32_t>), InsertEx, (const Uri &uri, const DataShareValuesBucket &value), (override));
45 MOCK_METHOD((std::pair<int32_t, int32_t>), UpdateEx,
46 (const Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value), (override));
47 MOCK_METHOD(
48 (std::pair<int32_t, int32_t>), DeleteEx, (const Uri &uri, const DataSharePredicates &predicates), (override));
49 };
50
51 class DataShareHelperImplTest : public testing::Test {
52 public:
53 static void SetUpTestCase(void);
54 static void TearDownTestCase(void);
55 void SetUp();
56 void TearDown();
57 static std::shared_ptr<DataShareHelperImpl> GetInstance(std::shared_ptr<DataShareHelperImpl> instance = nullptr);
58 static std::shared_ptr<MockGeneralController> GetController(
59 std::shared_ptr<MockGeneralController> instance = nullptr);
60 };
61
SetUpTestCase(void)62 void DataShareHelperImplTest::SetUpTestCase(void)
63 {
64 DataShareHelperImplTest::GetInstance(std::make_shared<DataShareHelperImpl>("datashare://datasharehelperimpl"));
65 EXPECT_NE(DataShareHelperImplTest::GetInstance(), nullptr);
66 DataShareHelperImplTest::GetController(std::make_shared<MockGeneralController>());
67 EXPECT_NE(DataShareHelperImplTest::GetController(), nullptr);
68 DataShareHelperImplTest::GetInstance()->generalCtl_ = DataShareHelperImplTest::GetController();
69 EXPECT_NE(DataShareHelperImplTest::GetInstance()->generalCtl_, nullptr);
70 EXPECT_EQ(DataShareHelperImplTest::GetInstance()->extSpCtl_, nullptr);
71 DataShareHelperImplTest::GetInstance()->persistentDataCtl_ = nullptr;
72 DataShareHelperImplTest::GetInstance()->publishedDataCtl_ = nullptr;
73 }
TearDownTestCase(void)74 void DataShareHelperImplTest::TearDownTestCase(void)
75 {
76 }
SetUp(void)77 void DataShareHelperImplTest::SetUp(void)
78 {
79 }
TearDown(void)80 void DataShareHelperImplTest::TearDown(void)
81 {
82 }
GetInstance(std::shared_ptr<DataShareHelperImpl> instance)83 std::shared_ptr<DataShareHelperImpl> DataShareHelperImplTest::GetInstance(std::shared_ptr<DataShareHelperImpl> instance)
84 {
85 static std::shared_ptr<DataShareHelperImpl> helperInstance = nullptr;
86 if (instance != nullptr) {
87 helperInstance = instance;
88 }
89 return helperInstance;
90 }
GetController(std::shared_ptr<MockGeneralController> instance)91 std::shared_ptr<MockGeneralController> DataShareHelperImplTest::GetController(
92 std::shared_ptr<MockGeneralController> instance)
93 {
94 static std::shared_ptr<MockGeneralController> controllerInstance = nullptr;
95 if (instance != nullptr) {
96 controllerInstance = instance;
97 }
98 return controllerInstance;
99 }
100
101 HWTEST_F(DataShareHelperImplTest, BatchUpdateTest001, TestSize.Level0)
102 {
103 LOG_INFO("BatchUpdateTest001::Start");
104 UpdateOperations operations;
105 std::vector<BatchUpdateResult> results = {};
106 int result = DataShareHelperImplTest::GetInstance()->BatchUpdate(operations, results);
107 EXPECT_EQ(result, DATA_SHARE_ERROR);
108 LOG_INFO("BatchUpdateTest001::End");
109 }
110
111 HWTEST_F(DataShareHelperImplTest, InsertExTest001, TestSize.Level0)
112 {
113 LOG_INFO("InsertExTest001::Start");
114 OHOS::Uri uri("datashare:///com.datasharehelperimpl.test");
115 DataShareValuesBucket value;
116 DataShareHelperImplTest::GetInstance()->generalCtl_ = nullptr;
117 std::pair<int32_t, int32_t> result = DataShareHelperImplTest::GetInstance()->InsertEx(uri, value);
118 EXPECT_EQ(result.first, DATA_SHARE_ERROR);
119 EXPECT_EQ(result.second, 0);
120 std::shared_ptr<MockGeneralController> controller = DataShareHelperImplTest::GetController();
121 DataShareHelperImplTest::GetInstance()->generalCtl_ = controller;
122 EXPECT_CALL(*controller, InsertEx(testing::_, testing::_))
123 .WillOnce(testing::Return(std::make_pair(E_REGISTERED_REPEATED, 0)));
124 result = DataShareHelperImplTest::GetInstance()->InsertEx(uri, value);
125 EXPECT_EQ(result.first, E_REGISTERED_REPEATED);
126 EXPECT_EQ(result.second, 0);
127 LOG_INFO("InsertExTest001::End");
128 }
129
130 HWTEST_F(DataShareHelperImplTest, UpdateExTest001, TestSize.Level0)
131 {
132 LOG_INFO("UpdateExTest001::Start");
133 OHOS::Uri uri("datashare:///com.datasharehelperimpl.test");
134 DataShareValuesBucket value;
135 DataSharePredicates predicates;
136 DataShareHelperImplTest::GetInstance()->generalCtl_ = nullptr;
137 std::pair<int32_t, int32_t> result = DataShareHelperImplTest::GetInstance()->UpdateEx(uri, predicates, value);
138 EXPECT_EQ(result.first, DATA_SHARE_ERROR);
139 EXPECT_EQ(result.second, 0);
140 std::shared_ptr<MockGeneralController> controller = DataShareHelperImplTest::GetController();
141 DataShareHelperImplTest::GetInstance()->generalCtl_ = controller;
142 EXPECT_CALL(*controller, UpdateEx(testing::_, testing::_, testing::_))
143 .WillOnce(testing::Return(std::make_pair(E_REGISTERED_REPEATED, 0)));
144 result = DataShareHelperImplTest::GetInstance()->UpdateEx(uri, predicates, value);
145 EXPECT_EQ(result.first, E_REGISTERED_REPEATED);
146 EXPECT_EQ(result.second, 0);
147 LOG_INFO("UpdateExTest001::End");
148 }
149
150 HWTEST_F(DataShareHelperImplTest, DeleteExTest001, TestSize.Level0)
151 {
152 LOG_INFO("DeleteExTest001::Start");
153 OHOS::Uri uri("datashare:///com.datasharehelperimpl.test");
154 DataSharePredicates predicates;
155 DataShareHelperImplTest::GetInstance()->generalCtl_ = nullptr;
156 std::pair<int32_t, int32_t> result = DataShareHelperImplTest::GetInstance()->DeleteEx(uri, predicates);
157 EXPECT_EQ(result.first, DATA_SHARE_ERROR);
158 EXPECT_EQ(result.second, 0);
159 std::shared_ptr<MockGeneralController> controller = DataShareHelperImplTest::GetController();
160 DataShareHelperImplTest::GetInstance()->generalCtl_ = controller;
161 EXPECT_CALL(*controller, DeleteEx(testing::_, testing::_))
162 .WillOnce(testing::Return(std::make_pair(E_REGISTERED_REPEATED, 0)));
163 result = DataShareHelperImplTest::GetInstance()->DeleteEx(uri, predicates);
164 EXPECT_EQ(result.first, E_REGISTERED_REPEATED);
165 EXPECT_EQ(result.second, 0);
166 LOG_INFO("DeleteExTest001::End");
167 }
168
169 HWTEST_F(DataShareHelperImplTest, DelQueryTemplateTest001, TestSize.Level0)
170 {
171 LOG_INFO("DelQueryTemplateTest001::Start");
172 std::string uri("datashare:///com.datasharehelperimpl.test");
173 int64_t subscriberId = 0;
174 int result = DataShareHelperImplTest::GetInstance()->DelQueryTemplate(uri, subscriberId);
175 EXPECT_EQ(result, DATA_SHARE_ERROR);
176 LOG_INFO("DelQueryTemplateTest001::End");
177 }
178
179 HWTEST_F(DataShareHelperImplTest, PublishTest001, TestSize.Level0)
180 {
181 LOG_INFO("PublishTest001::Start");
182 Data data;
183 std::string bundleName("datashare:///com.datasharehelperimpl.test");
184 std::vector<OperationResult> result = DataShareHelperImplTest::GetInstance()->Publish(data, bundleName);
185 EXPECT_EQ(result.size(), 0);
186 LOG_INFO("PublishTest001::End");
187 }
188
189 HWTEST_F(DataShareHelperImplTest, GetPublishedDataTest001, TestSize.Level0)
190 {
191 LOG_INFO("GetPublishedDataTest001::Start");
192 int resultCode = 0;
193 std::string bundleName("datashare:///com.datasharehelperimpl.test");
194 Data result = DataShareHelperImplTest::GetInstance()->GetPublishedData(bundleName, resultCode);
195 EXPECT_EQ(result.version_, 0);
196 EXPECT_EQ(result.datas_.size(), 0);
197 LOG_INFO("GetPublishedDataTest001::End");
198 }
199
200 HWTEST_F(DataShareHelperImplTest, SubscribeRdbDataTest001, TestSize.Level0)
201 {
202 LOG_INFO("SubscribeRdbDataTest001::Start");
203 std::vector<std::string> uris = {};
204 TemplateId templateId;
205 std::function<void(const RdbChangeNode &changeNode)> callback;
206 std::vector<OperationResult> result =
207 DataShareHelperImplTest::GetInstance()->SubscribeRdbData(uris, templateId, callback);
208 EXPECT_EQ(result.size(), 0);
209 LOG_INFO("SubscribeRdbDataTest001::End");
210 }
211
212 HWTEST_F(DataShareHelperImplTest, UnsubscribeRdbDataTest001, TestSize.Level0)
213 {
214 LOG_INFO("UnsubscribeRdbDataTest001::Start");
215 std::vector<std::string> uris = {};
216 TemplateId templateId;
217 std::vector<OperationResult> result = DataShareHelperImplTest::GetInstance()->UnsubscribeRdbData(uris, templateId);
218 EXPECT_EQ(result.size(), 0);
219 LOG_INFO("UnsubscribeRdbDataTest001::End");
220 }
221
222 HWTEST_F(DataShareHelperImplTest, DisableRdbSubsTest001, TestSize.Level0)
223 {
224 LOG_INFO("DisableRdbSubsTest001::Start");
225 std::vector<std::string> uris = {};
226 TemplateId templateId;
227 std::vector<OperationResult> result = DataShareHelperImplTest::GetInstance()->DisableRdbSubs(uris, templateId);
228 EXPECT_EQ(result.size(), 0);
229 LOG_INFO("DisableRdbSubsTest001::End");
230 }
231
232 HWTEST_F(DataShareHelperImplTest, SubscribePublishedDataTest001, TestSize.Level0)
233 {
234 LOG_INFO("SubscribePublishedDataTest001::Start");
235 std::vector<std::string> uris = {};
236 int64_t subscriberId = 0;
237 std::function<void(const PublishedDataChangeNode &changeNode)> callback;
238 std::vector<OperationResult> result =
239 DataShareHelperImplTest::GetInstance()->SubscribePublishedData(uris, subscriberId, callback);
240 EXPECT_EQ(result.size(), 0);
241 LOG_INFO("SubscribePublishedDataTest001::End");
242 }
243
244 HWTEST_F(DataShareHelperImplTest, UnsubscribePublishedDataTest001, TestSize.Level0)
245 {
246 LOG_INFO("UnsubscribePublishedDataTest001::Start");
247 std::vector<std::string> uris = {};
248 int64_t subscriberId = 0;
249 std::vector<OperationResult> result =
250 DataShareHelperImplTest::GetInstance()->UnsubscribePublishedData(uris, subscriberId);
251 EXPECT_EQ(result.size(), 0);
252 LOG_INFO("UnsubscribePublishedDataTest001::End");
253 }
254
255 HWTEST_F(DataShareHelperImplTest, EnablePubSubsTest001, TestSize.Level0)
256 {
257 LOG_INFO("EnablePubSubsTest001::Start");
258 std::vector<std::string> uris = {};
259 int64_t subscriberId = 0;
260 std::vector<OperationResult> result = DataShareHelperImplTest::GetInstance()->EnablePubSubs(uris, subscriberId);
261 EXPECT_EQ(result.size(), 0);
262 LOG_INFO("EnablePubSubsTest001::End");
263 }
264
265 HWTEST_F(DataShareHelperImplTest, DisablePubSubsTest001, TestSize.Level0)
266 {
267 LOG_INFO("DisableRdbSubsTest001::Start");
268 std::vector<std::string> uris = {};
269 int64_t subscriberId = 0;
270 std::vector<OperationResult> result = DataShareHelperImplTest::GetInstance()->DisablePubSubs(uris, subscriberId);
271 EXPECT_EQ(result.size(), 0);
272 LOG_INFO("DisablePubSubsTest001::End");
273 }
274
275 /*
276 * @tc.desc: test UserDefineFunc with no extSpCtl_
277 * @tc.require: Null
278 */
279 HWTEST_F(DataShareHelperImplTest, User_Define_func_No_ExtSpCtl_Test001, TestSize.Level0)
280 {
281 LOG_INFO("User_Define_func_No_ExtSpCtl_Test001::Start");
282 DataShareHelperImplTest::GetInstance()->extSpCtl_ = nullptr;
283 MessageParcel data;
284 MessageParcel reply;
285 MessageOption option;
286 auto result = DataShareHelperImplTest::GetInstance()->UserDefineFunc(data, reply, option);
287 EXPECT_EQ(result, DATA_SHARE_ERROR);
288 LOG_INFO("User_Define_func_No_ExtSpCtl_Test001::End");
289 }
290 } // namespace DataShare
291 } // namespace OHOS