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 #include "gtest/gtest.h"
16 #include <securec.h>
17
18 #include "network_mock.h"
19 #include "softbus_errcode.h"
20 #include "lnn_event_monitor_impl.h"
21 #include "lnn_bt_monitor.c"
22 #include "lnn_netlink_monitor.c"
23
24 namespace OHOS {
25 #define TEST_LEN 5
26 #define TEST_LEN2 65
27 #define TEST_LISTENER_ID 20
28 #define TEST_LISTENER_ID2 (-1)
29 #define TEST_STATE1 1
30 #define TEST_STATE2 3
31 #define TEST_STATE3 5
32 #define TEST_STATE4 7
33 #define TEST_ACL_STATE 0
34 #define TEST_ACL_STATE2 1
35 using namespace testing::ext;
36 using namespace testing;
37 class AdapterDsoftbusNetworkTest : public testing::Test {
38 protected:
39 static void SetUpTestCase(void);
40 static void TearDownTestCase(void);
41 void SetUp();
42 void TearDown();
43 };
SetUpTestCase(void)44 void AdapterDsoftbusNetworkTest::SetUpTestCase(void) { }
TearDownTestCase(void)45 void AdapterDsoftbusNetworkTest::TearDownTestCase(void) { }
SetUp()46 void AdapterDsoftbusNetworkTest::SetUp() { }
TearDown()47 void AdapterDsoftbusNetworkTest::TearDown() { }
48
49 /*
50 * @tc.name: CreateNetlinkSocket
51 * @tc.desc: softbus network test
52 * @tc.type: FUNC
53 * @tc.require:
54 */
55 HWTEST_F(AdapterDsoftbusNetworkTest, CreateNetlinkSocketTest001, TestSize.Level1)
56 {
57 NiceMock<NetworkInterfaceMock> networkMock;
58 ON_CALL(networkMock, SoftBusSocketCreate).WillByDefault(Return(SOFTBUS_OK));
59 ON_CALL(networkMock, SoftBusSocketSetOpt).WillByDefault(Return(SOFTBUS_OK));
60 ON_CALL(networkMock, SoftBusSocketClose).WillByDefault(Return(SOFTBUS_OK));
61 ON_CALL(networkMock, SoftBusSocketBind).WillByDefault(Return(SOFTBUS_OK));
62 int32_t ret = CreateNetlinkSocket();
63 EXPECT_TRUE(ret == SOFTBUS_OK);
64 EXPECT_CALL(networkMock, SoftBusSocketCreate).WillOnce(Return(SOFTBUS_ERR)).WillRepeatedly(Return(SOFTBUS_OK));
65 ret = CreateNetlinkSocket();
66 EXPECT_TRUE(ret == SOFTBUS_ERR);
67 EXPECT_CALL(networkMock, SoftBusSocketSetOpt)
68 .WillOnce(Return(SOFTBUS_ERR))
69 .WillOnce(Return(SOFTBUS_ERR))
70 .WillRepeatedly(Return(SOFTBUS_OK));
71 ret = CreateNetlinkSocket();
72 EXPECT_TRUE(ret == SOFTBUS_ERR);
73 EXPECT_CALL(networkMock, SoftBusSocketBind).WillOnce(Return(SOFTBUS_ERR)).WillRepeatedly(Return(SOFTBUS_OK));
74 ret = CreateNetlinkSocket();
75 EXPECT_TRUE(ret == SOFTBUS_ERR);
76 }
77
78 /*
79 * @tc.name: ProcessAddrEvent
80 * @tc.desc: softbus network test
81 * @tc.type: FUNC
82 * @tc.require:
83 */
84 HWTEST_F(AdapterDsoftbusNetworkTest, ProcessAddrEventTest001, TestSize.Level1)
85 {
86 nlmsghdr nlh1 = {
87 .nlmsg_len = TEST_LEN,
88 };
89 NiceMock<NetworkInterfaceMock> networkMock;
90 ON_CALL(networkMock, LnnGetNetIfTypeByName).WillByDefault(Return(SOFTBUS_OK));
91 ON_CALL(networkMock, SoftBusSocketCreate).WillByDefault(Return(SOFTBUS_OK));
92 ON_CALL(networkMock, SoftBusSocketSetOpt).WillByDefault(Return(SOFTBUS_OK));
93 ON_CALL(networkMock, SoftBusSocketClose).WillByDefault(Return(SOFTBUS_OK));
94 ON_CALL(networkMock, SoftBusSocketBind).WillByDefault(Return(SOFTBUS_OK));
95 ON_CALL(networkMock, SoftBusSocketRecv).WillByDefault(Return(TEST_LISTENER_ID2));
96 ProcessAddrEvent(&nlh1);
97 nlmsghdr nlh2 = {
98 .nlmsg_len = TEST_LEN2,
99 };
100 ProcessAddrEvent(&nlh2);
101 EXPECT_TRUE(NetlinkOnConnectEvent(NETLINK, -1, nullptr) == SOFTBUS_OK);
102 EXPECT_TRUE(NetlinkOnDataEvent(NETLINK, SOFTBUS_SOCKET_OUT, -1) == SOFTBUS_INVALID_PARAM);
103 EXPECT_CALL(networkMock, SoftBusSocketRecv).WillOnce(Return(TEST_LEN)).WillRepeatedly(Return(TEST_LISTENER_ID2));
104 EXPECT_TRUE(NetlinkOnDataEvent(NETLINK, SOFTBUS_SOCKET_IN, 0) == SOFTBUS_SOCKET_EXCEPTION);
105 }
106
107 /*
108 * @tc.name: LnnOnBtStateChanged
109 * @tc.desc: softbus network test
110 * @tc.type: FUNC
111 * @tc.require:
112 */
113 HWTEST_F(AdapterDsoftbusNetworkTest, LnnOnBtStateChangedTest001, TestSize.Level1)
114 {
115 NiceMock<NetworkInterfaceMock> networkMock;
116 ON_CALL(networkMock, LnnAsyncCallbackHelper).WillByDefault(Return(SOFTBUS_OK));
117 ON_CALL(networkMock, SoftBusAddBtStateListener).WillByDefault(Return(TEST_LISTENER_ID));
118
119 int32_t listenerId = TEST_LISTENER_ID;
120 int32_t state = TEST_STATE1;
121 SoftBusBtAddr addr;
122 int32_t aclState = TEST_ACL_STATE;
123 LnnOnBtStateChanged(listenerId, state);
124 state = TEST_STATE2;
125 LnnOnBtStateChanged(listenerId, state);
126 state = TEST_STATE3;
127 LnnOnBtStateChanged(listenerId, state);
128 state = TEST_STATE4;
129 LnnOnBtStateChanged(listenerId, state);
130 EXPECT_CALL(networkMock, LnnAsyncCallbackHelper).WillRepeatedly(Return(SOFTBUS_ERR));
131 LnnOnBtStateChanged(listenerId, state);
132 LnnOnBtAclStateChanged(listenerId, &addr, aclState, 0);
133 aclState = TEST_ACL_STATE2;
134 LnnOnBtAclStateChanged(listenerId, &addr, aclState, 0);
135 aclState = TEST_STATE1;
136 LnnOnBtAclStateChanged(listenerId, &addr, aclState, 0);
137 int32_t ret = LnnInitBtStateMonitorImpl();
138 EXPECT_TRUE(ret == SOFTBUS_OK);
139 EXPECT_CALL(networkMock, SoftBusAddBtStateListener).WillRepeatedly(Return(TEST_LISTENER_ID2));
140 ret = LnnInitBtStateMonitorImpl();
141 EXPECT_TRUE(ret == SOFTBUS_ERR);
142 }
143 } // namespace OHOS