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 <gtest/gtest.h> 17 #include <gmock/gmock.h> 18 19 #include "discovery_service.h" 20 #include "disc_client_proxy.h" 21 #include "softbus_log.h" 22 #include "softbus_error_code.h" 23 #include "softbus_ipc_def.h" 24 #include "remote_object_mock.h" 25 #include "client_info_manager_mock.h" 26 #include "exception_branch_checker.h" 27 28 using namespace testing::ext; 29 using testing::Return; 30 31 namespace OHOS { 32 class DiscClientProxyTest : public testing::Test { 33 public: SetUpTestCase()34 static void SetUpTestCase() {} TearDownTestCase()35 static void TearDownTestCase() {} SetUp()36 void SetUp() override {} TearDown()37 void TearDown() override {} 38 39 static inline std::string pkgName = "TestPackage"; 40 static constexpr int SUBSCRIBE_ID = 8; 41 static constexpr int PUBLISH_ID = 16; 42 }; 43 44 /* 45 * @tc.name: OnDeviceFound001 46 * @tc.desc: both fail and success case 47 * @tc.type: FUNC 48 * @tc.require: 49 */ 50 HWTEST_F(DiscClientProxyTest, OnDeviceFound001, TestSize.Level1) 51 { 52 DLOGI("OnDeviceFound001 begin ----"); 53 const DeviceInfo device {}; 54 const InnerDeviceInfoAddtions addition{}; 55 56 { 57 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 58 RemoteObjectMock::SetupStub(objectMock); 59 EXPECT_CALL(*objectMock, SendRequest).WillRepeatedly(Return(SOFTBUS_ERR)); 60 ClientInfoManagerMock managerMock; 61 managerMock.SetupStub(); 62 ExceptionBranchChecker checker("send request failed"); 63 64 EXPECT_EQ(ClientIpcOnDeviceFound(pkgName.c_str(), &device, &addition), SOFTBUS_OK); 65 EXPECT_EQ(checker.GetResult(), true); 66 } 67 { 68 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 69 RemoteObjectMock::SetupStub(objectMock); 70 ClientInfoManagerMock managerMock; 71 managerMock.SetupStub(); 72 73 EXPECT_EQ(ClientIpcOnDeviceFound(pkgName.c_str(), &device, &addition), SOFTBUS_OK); 74 EXPECT_EQ(objectMock->GetResult(CLIENT_DISCOVERY_DEVICE_FOUND, &device), true); 75 } 76 77 RemoteObjectMock::Destroy(); 78 DLOGI("OnDeviceFound001 end ----"); 79 } 80 81 /* 82 * @tc.name: OnDiscoverFailed001 83 * @tc.desc: both fail and success case 84 * @tc.type: FUNC 85 * @tc.require: 86 */ 87 HWTEST_F(DiscClientProxyTest, OnDiscoverFailed001, TestSize.Level1) 88 { 89 DLOGI("OnDiscoverFailed001 begin ----"); 90 { 91 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 92 RemoteObjectMock::SetupStub(objectMock); 93 EXPECT_CALL(*objectMock, SendRequest).WillRepeatedly(Return(SOFTBUS_ERR)); 94 ClientInfoManagerMock managerMock; 95 managerMock.SetupStub(); 96 ExceptionBranchChecker checker("send request failed"); 97 98 EXPECT_EQ(ClientIpcOnDiscoverFailed(pkgName.c_str(), SUBSCRIBE_ID, DISCOVERY_FAIL_REASON_NOT_SUPPORT_MEDIUM), 99 SOFTBUS_OK); 100 EXPECT_EQ(checker.GetResult(), true); 101 } 102 { 103 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 104 RemoteObjectMock::SetupStub(objectMock); 105 ClientInfoManagerMock managerMock; 106 managerMock.SetupStub(); 107 108 EXPECT_EQ(ClientIpcOnDiscoverFailed(pkgName.c_str(), SUBSCRIBE_ID, DISCOVERY_FAIL_REASON_NOT_SUPPORT_MEDIUM), 109 SOFTBUS_OK); 110 EXPECT_EQ(objectMock->GetResult(CLIENT_DISCOVERY_FAIL, nullptr, 0, SUBSCRIBE_ID, 111 DISCOVERY_FAIL_REASON_NOT_SUPPORT_MEDIUM), true); 112 } 113 114 RemoteObjectMock::Destroy(); 115 DLOGI("OnDiscoverFailed001 end ----"); 116 } 117 118 /* 119 * @tc.name: DiscoverySuccess001 120 * @tc.desc: both fail and success case 121 * @tc.type: FUNC 122 * @tc.require: 123 */ 124 HWTEST_F(DiscClientProxyTest, DiscoverySuccess001, TestSize.Level1) 125 { 126 DLOGI("DiscoverySuccess001 begin ----"); 127 { 128 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 129 RemoteObjectMock::SetupStub(objectMock); 130 EXPECT_CALL(*objectMock, SendRequest).WillRepeatedly(Return(SOFTBUS_ERR)); 131 ClientInfoManagerMock managerMock; 132 managerMock.SetupStub(); 133 ExceptionBranchChecker checker("send request failed"); 134 135 EXPECT_EQ(ClientIpcDiscoverySuccess(pkgName.c_str(), SUBSCRIBE_ID), SOFTBUS_OK); 136 EXPECT_EQ(checker.GetResult(), true); 137 } 138 { 139 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 140 RemoteObjectMock::SetupStub(objectMock); 141 ClientInfoManagerMock managerMock; 142 managerMock.SetupStub(); 143 144 EXPECT_EQ(ClientIpcDiscoverySuccess(pkgName.c_str(), SUBSCRIBE_ID), SOFTBUS_OK); 145 EXPECT_EQ(objectMock->GetResult(CLIENT_DISCOVERY_SUCC, nullptr, 0, SUBSCRIBE_ID), true); 146 } 147 148 RemoteObjectMock::Destroy(); 149 DLOGI("DiscoverySuccess001 end ----"); 150 } 151 152 /* 153 * @tc.name: OnPublishSuccess001 154 * @tc.desc: both fail and success case 155 * @tc.type: FUNC 156 * @tc.require: 157 */ 158 HWTEST_F(DiscClientProxyTest, OnPublishSuccess001, TestSize.Level1) 159 { 160 DLOGI("DiscoverySuccess001 begin ----"); 161 { 162 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 163 RemoteObjectMock::SetupStub(objectMock); 164 EXPECT_CALL(*objectMock, SendRequest).WillRepeatedly(Return(SOFTBUS_ERR)); 165 ClientInfoManagerMock managerMock; 166 managerMock.SetupStub(); 167 ExceptionBranchChecker checker("send request failed"); 168 169 EXPECT_EQ(ClientIpcOnPublishSuccess(pkgName.c_str(), PUBLISH_ID), SOFTBUS_OK); 170 EXPECT_EQ(checker.GetResult(), true); 171 } 172 { 173 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 174 RemoteObjectMock::SetupStub(objectMock); 175 ClientInfoManagerMock managerMock; 176 managerMock.SetupStub(); 177 178 EXPECT_EQ(ClientIpcOnPublishSuccess(pkgName.c_str(), PUBLISH_ID), SOFTBUS_OK); 179 EXPECT_EQ(objectMock->GetResult(CLIENT_PUBLISH_SUCC, nullptr, PUBLISH_ID), true); 180 } 181 182 RemoteObjectMock::Destroy(); 183 DLOGI("OnPublishSuccess001 end ----"); 184 } 185 186 /* 187 * @tc.name: OnPublishFail001 188 * @tc.desc: both fail and success case 189 * @tc.type: FUNC 190 * @tc.require: 191 */ 192 HWTEST_F(DiscClientProxyTest, OnPublishFail001, TestSize.Level1) 193 { 194 DLOGI("OnPublishFail001 begin ----"); 195 { 196 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 197 RemoteObjectMock::SetupStub(objectMock); 198 EXPECT_CALL(*objectMock, SendRequest).WillRepeatedly(Return(SOFTBUS_ERR)); 199 ClientInfoManagerMock managerMock; 200 managerMock.SetupStub(); 201 ExceptionBranchChecker checker("send request failed"); 202 203 EXPECT_EQ(ClientIpcOnPublishFail(pkgName.c_str(), PUBLISH_ID, PUBLISH_FAIL_REASON_NOT_SUPPORT_MEDIUM), 204 SOFTBUS_OK); 205 EXPECT_EQ(checker.GetResult(), true); 206 } 207 { 208 sptr<RemoteObjectMock> objectMock = new (std::nothrow) RemoteObjectMock(); 209 RemoteObjectMock::SetupStub(objectMock); 210 ClientInfoManagerMock managerMock; 211 managerMock.SetupStub(); 212 213 EXPECT_EQ(ClientIpcOnPublishFail(pkgName.c_str(), PUBLISH_ID, PUBLISH_FAIL_REASON_NOT_SUPPORT_MEDIUM), 214 SOFTBUS_OK); 215 EXPECT_EQ(objectMock->GetResult(CLIENT_PUBLISH_FAIL, nullptr, PUBLISH_ID, 0, 216 PUBLISH_FAIL_REASON_NOT_SUPPORT_MEDIUM), true); 217 } 218 219 RemoteObjectMock::Destroy(); 220 DLOGI("OnPublishFail001 end ----"); 221 } 222 }