1 /*
2 * Copyright (C) 2025 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 "datashare_stub.h"
17
18 #include <gtest/gtest.h>
19
20 #include "accesstoken_kit.h"
21 #include "data_ability_observer_stub.h"
22 #include "datashare_business_error.h"
23 #include "datashare_errno.h"
24 #include "datashare_itypes_utils.h"
25 #include "datashare_log.h"
26 #include "datashare_operation_statement.h"
27 #include "datashare_stub_impl.h"
28 #include "extension_manager_proxy.h"
29 #include "idatashare.h"
30 #include "ipc_skeleton.h"
31 #include "ipc_types.h"
32 #include "ishared_result_set.h"
33
34
35 namespace OHOS {
36 namespace DataShare {
37 using namespace testing::ext;
38 using namespace DistributedShare::DataShare;
39 using namespace OHOS::AAFwk;
40 using ChangeInfo = AAFwk::ChangeInfo;
41 class DataShareStubTest : public testing::Test {
42 public:
43 static void SetUpTestCase(void);
44 static void TearDownTestCase(void);
45 void SetUp();
46 void TearDown();
47 };
48
49
50 class IDataAbilityObserverTest : public DataAbilityObserverStub {
51 public:
IDataAbilityObserverTest()52 IDataAbilityObserverTest() {}
~IDataAbilityObserverTest()53 ~IDataAbilityObserverTest()
54 {}
55
OnChange()56 void OnChange()
57 {
58 GTEST_LOG_(INFO) << "OnChange enter";
59 }
60 };
61
62 class TestDataShareStub : public DataShareStub {
63 public:
TestDataShareStub()64 TestDataShareStub() {}
~TestDataShareStub()65 ~TestDataShareStub() {}
OpenFile(const Uri & uri,const std::string & mode)66 int OpenFile(const Uri &uri, const std::string &mode)
67 {
68 return 0;
69 }
OpenRawFile(const Uri & uri,const std::string & mode)70 int OpenRawFile(const Uri &uri, const std::string &mode)
71 {
72 return 0;
73 }
Insert(const Uri & uri,const DataShareValuesBucket & value)74 int Insert(const Uri &uri, const DataShareValuesBucket &value)
75 {
76 return 0;
77 }
Update(const Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)78 int Update(const Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value)
79 {
80 return 0;
81 }
Delete(const Uri & uri,const DataSharePredicates & predicates)82 int Delete(const Uri &uri, const DataSharePredicates &predicates)
83 {
84 return 0;
85 }
Query(const Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns,DatashareBusinessError & businessError)86 std::shared_ptr<DataShareResultSet> Query(const Uri &uri, const DataSharePredicates &predicates,
87 std::vector<std::string> &columns, DatashareBusinessError &businessError)
88 {
89 return nullptr;
90 }
GetType(const Uri & uri)91 std::string GetType(const Uri &uri)
92 {
93 return "";
94 }
BatchInsert(const Uri & uri,const std::vector<DataShareValuesBucket> & values)95 int BatchInsert(const Uri &uri, const std::vector<DataShareValuesBucket> &values)
96 {
97 return 0;
98 }
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)99 bool RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
100 {
101 return true;
102 }
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)103 bool UnregisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
104 {
105 return true;
106 }
NotifyChange(const Uri & uri)107 bool NotifyChange(const Uri &uri)
108 {
109 return true;
110 }
NormalizeUri(const Uri & uri)111 Uri NormalizeUri(const Uri &uri)
112 {
113 return uri;
114 }
DenormalizeUri(const Uri & uri)115 Uri DenormalizeUri(const Uri &uri)
116 {
117 return uri;
118 }
GetFileTypes(const Uri & uri,const std::string & mimeTypeFilter)119 std::vector<std::string> GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter)
120 {
121 return {};
122 }
123 };
124
125 std::string DATA_SHARE_URI = "datashare:///com.acts.datasharetest";
126 std::shared_ptr<DataShareStub> dataShareStub = std::make_shared<TestDataShareStub>();
127 std::u16string InterfaceToken = u"OHOS.DataShare.IDataShare";
128
SetUpTestCase(void)129 void DataShareStubTest::SetUpTestCase(void) {}
TearDownTestCase(void)130 void DataShareStubTest::TearDownTestCase(void) {}
SetUp(void)131 void DataShareStubTest::SetUp(void) {}
TearDown(void)132 void DataShareStubTest::TearDown(void) {}
133
134 /**
135 * @tc.name: DataShareStub_CmdRegisterObserverExtProvider_Test_001
136 * @tc.desc: test CmdRegisterObserverExtProvideroteRequest default func
137 * @tc.type: FUNC
138 */
139 HWTEST_F(DataShareStubTest, DataShareStub_CmdRegisterObserverExtProvider_Test_001, TestSize.Level0)
140 {
141 LOG_INFO("DataShareStub_CmdRegisterObserverExtProvider_Test_001::Start");
142
143 Uri uri(DATA_SHARE_URI);
144 sptr<IDataAbilityObserverTest> dataObserver = new (std::nothrow) IDataAbilityObserverTest();
145 ASSERT_NE(dataObserver, nullptr);
146 uint32_t code = static_cast<uint32_t>(IDataShareInterfaceCode::CMD_REGISTER_OBSERVEREXT_PROVIDER);
147
148 MessageParcel data;
149 data.WriteInterfaceToken(InterfaceToken);
150 RegisterOption registerOption;
151 bool ret = ITypesUtil::Marshal(data, uri, dataObserver->AsObject(), true, registerOption);
152 EXPECT_TRUE(ret);
153
154 MessageParcel reply;
155 MessageOption option;
156 ASSERT_NE(dataShareStub, nullptr);
157 int errCode = dataShareStub->OnRemoteRequest(code, data, reply, option);
158 EXPECT_EQ(errCode, 0);
159 ret = ITypesUtil::Unmarshal(reply, errCode);
160 EXPECT_TRUE(ret);
161 // return default errCode 0(E_OK)
162 EXPECT_EQ(errCode, 0);
163
164 LOG_INFO("DataShareStub_CmdRegisterObserverExtProvider_Test_001::End");
165 }
166
167 /**
168 * @tc.name: DataShareStub_CmdUnregisterObserverExtProvider_Test_001
169 * @tc.desc: test CmdUnregisterObserverExtProvideroteRequest default func
170 * @tc.type: FUNC
171 */
172 HWTEST_F(DataShareStubTest, DataShareStub_CmdUnregisterObserverExtProvider_Test_001, TestSize.Level0)
173 {
174 LOG_INFO("DataShareStub_CmdUnregisterObserverExtProvider_Test_001::Start");
175
176 Uri uri(DATA_SHARE_URI);
177 sptr<IDataAbilityObserverTest> dataObserver = new (std::nothrow) IDataAbilityObserverTest();
178 ASSERT_NE(dataObserver, nullptr);
179 uint32_t code = static_cast<uint32_t>(IDataShareInterfaceCode::CMD_UNREGISTER_OBSERVEREXT_PROVIDER);
180
181 MessageParcel data;
182 data.WriteInterfaceToken(InterfaceToken);
183 bool ret = ITypesUtil::Marshal(data, uri, dataObserver->AsObject());
184 EXPECT_TRUE(ret);
185
186 MessageParcel reply;
187 MessageOption option;
188 int errCode = dataShareStub->OnRemoteRequest(code, data, reply, option);
189 EXPECT_EQ(errCode, 0);
190 ret = ITypesUtil::Unmarshal(reply, errCode);
191 EXPECT_TRUE(ret);
192 // return default errCode 0(E_OK)
193 EXPECT_EQ(errCode, 0);
194
195 LOG_INFO("DataShareStub_CmdUnregisterObserverExtProvider_Test_001::End");
196 }
197
198 /**
199 * @tc.name: DataShareStub_CmdNotifyChangeExtProvider_Test_001
200 * @tc.desc: test CmdNotifyChangeExtProvider default func
201 * @tc.type: FUNC
202 */
203 HWTEST_F(DataShareStubTest, DataShareStub_CmdNotifyChangeExtProvider_Test_001, TestSize.Level0)
204 {
205 LOG_INFO("DataShareStub_CmdNotifyChangeExtProvider_Test_001::Start");
206
207 Uri uri(DATA_SHARE_URI);
208 ChangeInfo changeInfo = { ChangeInfo::ChangeType::INSERT, { uri } };
209 uint32_t code = static_cast<uint32_t>(IDataShareInterfaceCode::CMD_NOTIFY_CHANGEEXT_PROVIDER);
210
211 MessageParcel data;
212 data.WriteInterfaceToken(InterfaceToken);
213 bool ret = ChangeInfo::Marshalling(changeInfo, data);
214 EXPECT_TRUE(ret);
215
216 MessageParcel reply;
217 MessageOption option;
218 int errCode = dataShareStub->OnRemoteRequest(code, data, reply, option);
219 EXPECT_EQ(errCode, 0);
220 ret = ITypesUtil::Unmarshal(reply, errCode);
221 EXPECT_TRUE(ret);
222 // return default errCode 0(E_OK)
223 EXPECT_EQ(errCode, 0);
224
225 LOG_INFO("DataShareStub_CmdNotifyChangeExtProvider_Test_001::End");
226 }
227 }
228 }