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
16#include "UTTest_dm_publish_manager.h"
17
18#include "dm_log.h"
19#include "dm_constants.h"
20#include "dm_anonymous.h"
21#include "ipc_server_listener.h"
22#include "device_manager_service_listener.h"
23#include "softbus_bus_center.h"
24#include "device_manager_service_listener.h"
25#include "softbus_error_code.h"
26
27namespace OHOS {
28namespace DistributedHardware {
29void DmPublishManagerTest::SetUp()
30{
31}
32
33void DmPublishManagerTest::TearDown()
34{
35}
36
37void DmPublishManagerTest::SetUpTestCase()
38{
39}
40
41void DmPublishManagerTest::TearDownTestCase()
42{
43}
44
45namespace {
46std::shared_ptr<SoftbusConnector> softbusConnector_ = std::make_shared<SoftbusConnector>();
47std::shared_ptr<DeviceManagerServiceListener> listener_ = std::make_shared<DeviceManagerServiceListener>();
48std::shared_ptr<DmPublishManager> publishMgr_ = std::make_shared<DmPublishManager>(softbusConnector_, listener_);
49
50/**
51 * @tc.name: DmPublishManager_001
52 * @tc.desc: Test whether the DmPublishManager function can generate a new pointer
53 * @tc.type: FUNC
54 * @tc.require: I5N1K3
55 */
56HWTEST_F(DmPublishManagerTest, DmPublishManager_001, testing::ext::TestSize.Level0)
57{
58    std::shared_ptr<DmPublishManager> Test = std::make_shared<DmPublishManager>(softbusConnector_, listener_);
59    ASSERT_NE(Test, nullptr);
60}
61
62/**
63 * @tc.name: DmPublishManager_002
64 * @tc.desc: Test whether the DmPublishManager function can delete a new pointer
65 * @tc.type: FUNC
66 * @tc.require: I5N1K3
67 */
68HWTEST_F(DmPublishManagerTest, DmPublishManager_002, testing::ext::TestSize.Level0)
69{
70    std::shared_ptr<DmPublishManager> Test = std::make_shared<DmPublishManager>(softbusConnector_, listener_);
71    Test.reset();
72    EXPECT_EQ(Test, nullptr);
73}
74
75/**
76 * @tc.name: PublishDeviceDiscovery_001
77 * @tc.desc: keeping pkgame unchanged, call PublishDeviceDiscovery twice
78 *           so that its PublishQueue is not empty and return ERR_DM_PUBLISH_REPEATED
79 * @tc.type: FUNC
80 * @tc.require: I5N1K3
81 */
82HWTEST_F(DmPublishManagerTest, PublishDeviceDiscovery_001, testing::ext::TestSize.Level0)
83{
84    std::string pkgName = "com.ohos.helloworld";
85    DmPublishInfo publishInfo;
86    publishInfo.publishId = 9;
87    publishInfo.mode = DM_DISCOVER_MODE_PASSIVE;
88    publishInfo.freq = DM_HIGH;
89    publishInfo.ranging = 1;
90    publishMgr_->PublishDeviceDiscovery(pkgName, publishInfo);
91    int32_t ret = publishMgr_->PublishDeviceDiscovery(pkgName, publishInfo);
92    EXPECT_EQ(ret, ERR_DM_PUBLISH_REPEATED);
93    publishMgr_->UnPublishDeviceDiscovery(pkgName, publishInfo.publishId);
94}
95
96/**
97 * @tc.name: PublishDeviceDiscovery_002
98 * @tc.desc: pkgame changed, call PublishDeviceDiscovery twice
99 *           so that its discoveryQueue is not empty and return ERR_DM_PUBLISH_REPEATED
100 * @tc.type: FUNC
101 * @tc.require: I5N1K3
102 */
103HWTEST_F(DmPublishManagerTest, PublishDeviceDiscovery_002, testing::ext::TestSize.Level0)
104{
105    std::string pkgName = "com.ohos.helloworld";
106    DmPublishInfo publishInfo;
107    publishInfo.publishId = 9;
108    publishInfo.mode = DM_DISCOVER_MODE_PASSIVE;
109    publishInfo.freq = DM_FREQ_BUTT;
110    publishInfo.ranging = 1;
111    publishMgr_->PublishDeviceDiscovery(pkgName, publishInfo);
112    pkgName = "com.ohos.helloworld.new";
113    int32_t ret = publishMgr_->PublishDeviceDiscovery(pkgName, publishInfo);
114    ASSERT_TRUE(ret == SOFTBUS_INVALID_PARAM || ret == SOFTBUS_NETWORK_NOT_INIT || ret == SOFTBUS_NETWORK_LOOPER_ERR);
115    publishMgr_->UnPublishDeviceDiscovery(pkgName, publishInfo.publishId);
116}
117
118/**
119 * @tc.name: OnPublishResult_001
120 * @tc.desc: The OnPublishFailed function takes the wrong case and emptying pkgName
121 * @tc.type: FUNC
122 * @tc.require: I5N1K3
123 */
124HWTEST_F(DmPublishManagerTest, OnPublishResult_001, testing::ext::TestSize.Level0)
125{
126    std::string pkgName = "com.ohos.helloworld";
127    int32_t publishId = 1;
128    int32_t failedReason = 3;
129    publishMgr_->OnPublishResult(pkgName, publishId, failedReason);
130    std::shared_ptr<IpcNotifyPublishResultReq> pReq =
131        std::static_pointer_cast<IpcNotifyPublishResultReq>(listener_->ipcServerListener_.req_);
132    std::string ret = pReq->GetPkgName();
133    EXPECT_EQ(ret, pkgName);
134}
135
136/**
137 * @tc.name: OnPublishResult_002
138 * @tc.desc: The OnPublishSuccess function takes the wrong case and return pkgName
139 * @tc.type: FUNC
140 * @tc.require: I5N1K3
141 */
142HWTEST_F(DmPublishManagerTest, OnPublishResult_002, testing::ext::TestSize.Level0)
143{
144    std::string pkgName;
145    int32_t publishId = 1;
146    publishMgr_->OnPublishResult(pkgName, publishId, 0);
147    std::shared_ptr<IpcNotifyPublishResultReq> pReq =
148        std::static_pointer_cast<IpcNotifyPublishResultReq>(listener_->ipcServerListener_.req_);
149    std::string ret = pReq->GetPkgName();
150    EXPECT_NE(ret, pkgName);
151}
152} // namespace
153} // namespace DistributedHardware
154} // namespace OHOS
155