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