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 #define LOG_TAG "CommunicationProviderImplTest"
17
18 #include <gtest/gtest.h>
19 #include <cstdint>
20 #include <vector>
21 #include <unistd.h>
22 #include <iostream>
23 #include "app_device_change_listener.h"
24 #include "communication_provider.h"
25 #include "log_print.h"
26
27 using namespace std;
28 using namespace testing::ext;
29 using namespace OHOS::AppDistributedKv;
30 class CommunicationProviderImplTest : public testing::Test {
31 };
32
33 class AppDataChangeListenerImpl : public AppDataChangeListener {
34 void OnMessage(const OHOS::AppDistributedKv::DeviceInfo &info, const uint8_t *ptr, const int size,
35 const struct PipeInfo &id) const override;
36 };
OnMessage(const OHOS::AppDistributedKv::DeviceInfo & info,const uint8_t * ptr,const int size,const struct PipeInfo & id) const37 void AppDataChangeListenerImpl::OnMessage(const OHOS::AppDistributedKv::DeviceInfo &info,
38 const uint8_t *ptr, const int size, const struct PipeInfo &id) const
39 {
40 ZLOGI("data %{public}s %s", info.deviceName.c_str(), ptr);
41 }
42
43 /**
44 * @tc.name: CommunicationProvider001
45 * @tc.desc: Verify getting KvStore
46 * @tc.type: FUNC
47 * @tc.require: AR000CCPQ1 AR000CQDVE
48 * @tc.author: hongbo
49 */
50 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider001, TestSize.Level1)
51 {
52 ZLOGI("begin.");
53 const AppDataChangeListenerImpl* dataListener = new AppDataChangeListenerImpl();
54 PipeInfo appId;
55 appId.pipeId = "appId";
56 appId.userId = "groupId";
57 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, appId);
58 auto secRegister = CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, appId);
59 EXPECT_EQ(Status::ERROR, secRegister);
60 sleep(1); // avoid thread dnet thread died, then will have pthread;
61 }
62
63 /**
64 * @tc.name: CommunicationProvider002
65 * @tc.desc: Verify stop watch device change
66 * @tc.type: FUNC
67 * @tc.require: AR000CCPQ2 AR000CQS3F
68 * @tc.author: hongbo
69 */
70 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider002, TestSize.Level1)
71 {
72 ZLOGD("CommunicationProvider004");
73 const AppDataChangeListenerImpl* dataListener = new AppDataChangeListenerImpl();
74 PipeInfo appId;
75 appId.pipeId = "appId";
76 appId.userId = "groupId";
77 auto secRegister = CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, appId);
78 ZLOGD("CommunicationProvider004 %d", static_cast<int>(secRegister));
79 EXPECT_EQ(Status::ERROR, secRegister);
80 sleep(1); // avoid thread dnet thread died, then will have pthread;
81 }
82
83 /**
84 * @tc.name: CommunicationProvider003
85 * @tc.desc: close pipe
86 * @tc.type: FUNC
87 * @tc.require: AR000CCPQ2
88 * @tc.author: hongbo
89 */
90 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider003, TestSize.Level1)
91 {
92 ZLOGI("CommunicationProvider015 ");
93 PipeInfo appId;
94 appId.pipeId = "appId";
95 appId.userId = "groupId";
96 auto status = CommunicationProvider::GetInstance().Stop(appId);
97 EXPECT_NE(Status::ERROR, status);
98 sleep(1); // avoid thread dnet thread died, then will have pthread;
99 }
100
101 /**
102 * @tc.name: CommunicationProvider004
103 * @tc.desc: singleton pipe
104 * @tc.type: FUNC
105 * @tc.require: AR000CCPQ2
106 * @tc.author: hongbo
107 */
108 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider004, TestSize.Level1)
109 {
110 ZLOGI("begin.");
111 auto &provider = CommunicationProvider::GetInstance();
112 auto &provider1 = CommunicationProvider::GetInstance();
113 EXPECT_EQ(&provider, &provider1);
114 sleep(1); // avoid thread dnet thread died, then will have pthread;
115 }
116
117 /**
118 * @tc.name: CommunicationProvider005
119 * @tc.desc: parse sent data
120 * @tc.type: FUNC
121 * @tc.require: AR000CCPQ2 AR000CQS3M AR000CQSAI
122 * @tc.author: hongbo
123 */
124 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider005, TestSize.Level1)
125 {
126 const AppDataChangeListenerImpl *dataListener17 = new AppDataChangeListenerImpl();
127 PipeInfo id17;
128 id17.pipeId = "appId";
129 id17.userId = "groupId";
130 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener17, id17);
131 CommunicationProvider::GetInstance().Start(id17);
132 std::string content = "Helloworlds";
133 const uint8_t *t = reinterpret_cast<const uint8_t*>(content.c_str());
134 DeviceId di17 = {"127.0.0.2"};
135 DataInfo data = { const_cast<uint8_t *>(t), static_cast<uint32_t>(content.length())};
136 auto status = CommunicationProvider::GetInstance().SendData(id17, di17, data, 0);
137 EXPECT_NE(status.first, Status::SUCCESS);
138 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener17, id17);
139 CommunicationProvider::GetInstance().Stop(id17);
140 delete dataListener17;
141 sleep(1); // avoid thread dnet thread died, then will have pthread;
142 }
143
144 /**
145 * @tc.name: CommunicationProvider006
146 * @tc.desc:the observer is nullptr
147 * @tc.type: FUNC
148 * @tc.author: nhj
149 */
150 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider006, TestSize.Level1)
151 {
152 ZLOGI("begin.");
153 PipeInfo appId;
154 appId.pipeId = "appId06";
155 appId.userId = "groupId06";
156 CommunicationProvider::GetInstance().StartWatchDataChange(nullptr, appId);
157 auto secRegister = CommunicationProvider::GetInstance().StartWatchDataChange(nullptr, appId);
158 EXPECT_EQ(Status::INVALID_ARGUMENT, secRegister);
159 }
160
161 /**
162 * @tc.name: CommunicationProvider007
163 * @tc.desc:the pipeInfo is nullptr
164 * @tc.type: FUNC
165 * @tc.author: nhj
166 */
167 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider007, TestSize.Level1)
168 {
169 ZLOGI("begin.");
170 auto secRegister = CommunicationProvider::GetInstance().StartWatchDataChange(nullptr, {});
171 EXPECT_EQ(Status::INVALID_ARGUMENT, secRegister);
172 }
173
174 /**
175 * @tc.name: CommunicationProvider008
176 * @tc.desc:the observer is nullptr
177 * @tc.type: FUNC
178 * @tc.author: nhj
179 */
180 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider008, TestSize.Level1)
181 {
182 ZLOGI("begin.");
183 PipeInfo appId;
184 appId.pipeId = "appId06";
185 appId.userId = "groupId06";
186 CommunicationProvider::GetInstance().StopWatchDataChange(nullptr, appId);
187 auto secRegister = CommunicationProvider::GetInstance().StopWatchDataChange(nullptr, appId);
188 EXPECT_EQ(Status::INVALID_ARGUMENT, secRegister);
189 }
190
191 /**
192 * @tc.name: CommunicationProvider009
193 * @tc.desc: the pipeInfo is nullptr
194 * @tc.type: FUNC
195 * @tc.author: nhj
196 */
197 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider009, TestSize.Level1)
198 {
199 ZLOGI("begin.");
200 auto secRegister = CommunicationProvider::GetInstance().StopWatchDataChange(nullptr, {});
201 EXPECT_EQ(Status::INVALID_ARGUMENT, secRegister);
202 }
203
204 /**
205 * @tc.name: CommunicationProvider010
206 * @tc.desc: Start pipe
207 * @tc.type: FUNC
208 * @tc.author: nhj
209 */
210 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider010, TestSize.Level1)
211 {
212 PipeInfo appId;
213 appId.pipeId = "";
214 appId.userId = "groupId";
215 auto status = CommunicationProvider::GetInstance().Start(appId);
216 EXPECT_EQ(Status::INVALID_ARGUMENT, status);
217 }
218
219 /**
220 * @tc.name: CommunicationProvider011
221 * @tc.desc: parse sent data
222 * @tc.type: FUNC
223 * @tc.author: nhj
224 */
225 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider011, TestSize.Level1)
226 {
227 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
228 PipeInfo id;
229 id.pipeId = "appId";
230 id.userId = "groupId";
231 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
232 CommunicationProvider::GetInstance().Start(id);
233 std::string content = "";
234 const uint8_t *t = reinterpret_cast<const uint8_t*>(content.c_str());
235 DeviceId di = {"DeviceId"};
236 DataInfo data = { const_cast<uint8_t *>(t), static_cast<uint32_t>(content.length())};
237 auto status = CommunicationProvider::GetInstance().SendData(id, di, data, 0);
238 EXPECT_EQ(status.first, Status::ERROR);
239 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
240 CommunicationProvider::GetInstance().Stop(id);
241 delete dataListener;
242 }
243
244 /**
245 * @tc.name: CommunicationProvider012
246 * @tc.desc: parse sent data
247 * @tc.type: FUNC
248 * @tc.author: nhj
249 */
250 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider012, TestSize.Level1)
251 {
252 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
253 PipeInfo id;
254 id.pipeId = "appId";
255 id.userId = "groupId";
256 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
257 CommunicationProvider::GetInstance().Start(id);
258 std::string content = "hello";
259 const uint8_t *t = reinterpret_cast<const uint8_t*>(content.c_str());
260 DeviceId di = {""};
261 DataInfo data = { const_cast<uint8_t *>(t), static_cast<uint32_t>(content.length())};
262 auto status = CommunicationProvider::GetInstance().SendData(id, di, data, 0);
263 EXPECT_EQ(status.first, Status::ERROR);
264 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
265 CommunicationProvider::GetInstance().Stop(id);
266 delete dataListener;
267 }
268
269 /**
270 * @tc.name: CommunicationProvider013
271 * @tc.desc: parse sent data
272 * @tc.type: FUNC
273 * @tc.author: nhj
274 */
275 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider013, TestSize.Level1)
276 {
277 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
278 PipeInfo id;
279 id.pipeId = "appId";
280 id.userId = "groupId";
281 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
282 CommunicationProvider::GetInstance().Start(id);
283 DeviceId di = {"DeviceId"};
284 DataInfo data = {nullptr, 0};
285 auto status = CommunicationProvider::GetInstance().SendData(id, di, data, 0);
286 EXPECT_EQ(status.first, Status::ERROR);
287 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
288 CommunicationProvider::GetInstance().Stop(id);
289 delete dataListener;
290 }
291
292 /**
293 * @tc.name: CommunicationProvider014
294 * @tc.desc: parse sent data
295 * @tc.type: FUNC
296 * @tc.author: nhj
297 */
298 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider014, TestSize.Level1)
299 {
300 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
301 PipeInfo id;
302 id.pipeId = "";
303 id.userId = "groupId";
304 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
305 CommunicationProvider::GetInstance().Start(id);
306 std::string content = "hello";
307 const uint8_t *t = reinterpret_cast<const uint8_t*>(content.c_str());
308 DeviceId di = {"DeviceId"};
309 DataInfo data = { const_cast<uint8_t *>(t), static_cast<uint32_t>(content.length())};
310 auto status = CommunicationProvider::GetInstance().SendData(id, di, data, 0);
311 EXPECT_EQ(status.first, Status::ERROR);
312 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
313 CommunicationProvider::GetInstance().Stop(id);
314 delete dataListener;
315 }
316
317 /**
318 * @tc.name: CommunicationProvider015
319 * @tc.desc: parse sent data
320 * @tc.type: FUNC
321 * @tc.author: nhj
322 */
323 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider015, TestSize.Level1)
324 {
325 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
326 PipeInfo id;
327 id.pipeId = "";
328 id.userId = "groupId";
329 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
330 CommunicationProvider::GetInstance().Start(id);
331 DeviceId di = {"DeviceId"};
332 auto status = CommunicationProvider::GetInstance().IsSameStartedOnPeer(id, di);
333 EXPECT_EQ(status, false);
334 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
335 CommunicationProvider::GetInstance().Stop(id);
336 delete dataListener;
337 }
338
339 /**
340 * @tc.name: CommunicationProvider016
341 * @tc.desc: IsSameStartedOnPeer
342 * @tc.type: FUNC
343 * @tc.author: nhj
344 */
345 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider016, TestSize.Level1)
346 {
347 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
348 PipeInfo id;
349 id.pipeId = "pipeid";
350 id.userId = "userId";
351 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
352 CommunicationProvider::GetInstance().Start(id);
353 DeviceId di = {""};
354 auto status = CommunicationProvider::GetInstance().IsSameStartedOnPeer(id, di);
355 EXPECT_EQ(status, false);
356 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
357 CommunicationProvider::GetInstance().Stop(id);
358 delete dataListener;
359 }
360
361 /**
362 * @tc.name: CommunicationProvider017
363 * @tc.desc: SetMessageTransFlag
364 * @tc.type: FUNC
365 * @tc.author: nhj
366 */
367 HWTEST_F(CommunicationProviderImplTest, CommunicationProvider017, TestSize.Level1)
368 {
369 const AppDataChangeListenerImpl *dataListener = new AppDataChangeListenerImpl();
370 PipeInfo id;
371 id.pipeId = "pipeid";
372 id.userId = "userId";
373 CommunicationProvider::GetInstance().StartWatchDataChange(dataListener, id);
374 CommunicationProvider::GetInstance().Start(id);
375 DeviceId di = {"DeviceId"};
376 auto status = CommunicationProvider::GetInstance().IsSameStartedOnPeer(id, di);
377 EXPECT_EQ(status, false);
378 CommunicationProvider::GetInstance().SetMessageTransFlag(id, true);
379 CommunicationProvider::GetInstance().StopWatchDataChange(dataListener, id);
380 CommunicationProvider::GetInstance().Stop(id);
381 delete dataListener;
382 }