• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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