1060ff233Sopenharmony_ci/*
2060ff233Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3060ff233Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4060ff233Sopenharmony_ci * you may not use this file except in compliance with the License.
5060ff233Sopenharmony_ci * You may obtain a copy of the License at
6060ff233Sopenharmony_ci *
7060ff233Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8060ff233Sopenharmony_ci *
9060ff233Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10060ff233Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11060ff233Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12060ff233Sopenharmony_ci * See the License for the specific language governing permissions and
13060ff233Sopenharmony_ci * limitations under the License.
14060ff233Sopenharmony_ci */
15060ff233Sopenharmony_ci#include "gtest/gtest.h"
16060ff233Sopenharmony_ci#include <securec.h>
17060ff233Sopenharmony_ci
18060ff233Sopenharmony_ci#include "network_mock.h"
19060ff233Sopenharmony_ci#include "softbus_errcode.h"
20060ff233Sopenharmony_ci#include "lnn_event_monitor_impl.h"
21060ff233Sopenharmony_ci#include "lnn_bt_monitor.c"
22060ff233Sopenharmony_ci#include "lnn_netlink_monitor.c"
23060ff233Sopenharmony_ci
24060ff233Sopenharmony_cinamespace OHOS {
25060ff233Sopenharmony_ci#define TEST_LEN          5
26060ff233Sopenharmony_ci#define TEST_LEN2         65
27060ff233Sopenharmony_ci#define TEST_LISTENER_ID  20
28060ff233Sopenharmony_ci#define TEST_LISTENER_ID2 (-1)
29060ff233Sopenharmony_ci#define TEST_STATE1       1
30060ff233Sopenharmony_ci#define TEST_STATE2       3
31060ff233Sopenharmony_ci#define TEST_STATE3       5
32060ff233Sopenharmony_ci#define TEST_STATE4       7
33060ff233Sopenharmony_ci#define TEST_ACL_STATE    0
34060ff233Sopenharmony_ci#define TEST_ACL_STATE2   1
35060ff233Sopenharmony_ciusing namespace testing::ext;
36060ff233Sopenharmony_ciusing namespace testing;
37060ff233Sopenharmony_ciclass AdapterDsoftbusNetworkTest : public testing::Test {
38060ff233Sopenharmony_ciprotected:
39060ff233Sopenharmony_ci    static void SetUpTestCase(void);
40060ff233Sopenharmony_ci    static void TearDownTestCase(void);
41060ff233Sopenharmony_ci    void SetUp();
42060ff233Sopenharmony_ci    void TearDown();
43060ff233Sopenharmony_ci};
44060ff233Sopenharmony_civoid AdapterDsoftbusNetworkTest::SetUpTestCase(void) { }
45060ff233Sopenharmony_civoid AdapterDsoftbusNetworkTest::TearDownTestCase(void) { }
46060ff233Sopenharmony_civoid AdapterDsoftbusNetworkTest::SetUp() { }
47060ff233Sopenharmony_civoid AdapterDsoftbusNetworkTest::TearDown() { }
48060ff233Sopenharmony_ci
49060ff233Sopenharmony_ci/*
50060ff233Sopenharmony_ci * @tc.name: CreateNetlinkSocket
51060ff233Sopenharmony_ci * @tc.desc: softbus network test
52060ff233Sopenharmony_ci * @tc.type: FUNC
53060ff233Sopenharmony_ci * @tc.require:
54060ff233Sopenharmony_ci */
55060ff233Sopenharmony_ciHWTEST_F(AdapterDsoftbusNetworkTest, CreateNetlinkSocketTest001, TestSize.Level1)
56060ff233Sopenharmony_ci{
57060ff233Sopenharmony_ci    NiceMock<NetworkInterfaceMock> networkMock;
58060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketCreate).WillByDefault(Return(SOFTBUS_OK));
59060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketSetOpt).WillByDefault(Return(SOFTBUS_OK));
60060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketClose).WillByDefault(Return(SOFTBUS_OK));
61060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketBind).WillByDefault(Return(SOFTBUS_OK));
62060ff233Sopenharmony_ci    int32_t ret = CreateNetlinkSocket();
63060ff233Sopenharmony_ci    EXPECT_TRUE(ret == SOFTBUS_OK);
64060ff233Sopenharmony_ci    EXPECT_CALL(networkMock, SoftBusSocketCreate).WillOnce(Return(SOFTBUS_ERR)).WillRepeatedly(Return(SOFTBUS_OK));
65060ff233Sopenharmony_ci    ret = CreateNetlinkSocket();
66060ff233Sopenharmony_ci    EXPECT_TRUE(ret == SOFTBUS_ERR);
67060ff233Sopenharmony_ci    EXPECT_CALL(networkMock, SoftBusSocketSetOpt)
68060ff233Sopenharmony_ci        .WillOnce(Return(SOFTBUS_ERR))
69060ff233Sopenharmony_ci        .WillOnce(Return(SOFTBUS_ERR))
70060ff233Sopenharmony_ci        .WillRepeatedly(Return(SOFTBUS_OK));
71060ff233Sopenharmony_ci    ret = CreateNetlinkSocket();
72060ff233Sopenharmony_ci    EXPECT_TRUE(ret == SOFTBUS_ERR);
73060ff233Sopenharmony_ci    EXPECT_CALL(networkMock, SoftBusSocketBind).WillOnce(Return(SOFTBUS_ERR)).WillRepeatedly(Return(SOFTBUS_OK));
74060ff233Sopenharmony_ci    ret = CreateNetlinkSocket();
75060ff233Sopenharmony_ci    EXPECT_TRUE(ret == SOFTBUS_ERR);
76060ff233Sopenharmony_ci}
77060ff233Sopenharmony_ci
78060ff233Sopenharmony_ci/*
79060ff233Sopenharmony_ci * @tc.name: ProcessAddrEvent
80060ff233Sopenharmony_ci * @tc.desc: softbus network test
81060ff233Sopenharmony_ci * @tc.type: FUNC
82060ff233Sopenharmony_ci * @tc.require:
83060ff233Sopenharmony_ci */
84060ff233Sopenharmony_ciHWTEST_F(AdapterDsoftbusNetworkTest, ProcessAddrEventTest001, TestSize.Level1)
85060ff233Sopenharmony_ci{
86060ff233Sopenharmony_ci    nlmsghdr nlh1 = {
87060ff233Sopenharmony_ci        .nlmsg_len = TEST_LEN,
88060ff233Sopenharmony_ci    };
89060ff233Sopenharmony_ci    NiceMock<NetworkInterfaceMock> networkMock;
90060ff233Sopenharmony_ci    ON_CALL(networkMock, LnnGetNetIfTypeByName).WillByDefault(Return(SOFTBUS_OK));
91060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketCreate).WillByDefault(Return(SOFTBUS_OK));
92060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketSetOpt).WillByDefault(Return(SOFTBUS_OK));
93060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketClose).WillByDefault(Return(SOFTBUS_OK));
94060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketBind).WillByDefault(Return(SOFTBUS_OK));
95060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusSocketRecv).WillByDefault(Return(TEST_LISTENER_ID2));
96060ff233Sopenharmony_ci    ProcessAddrEvent(&nlh1);
97060ff233Sopenharmony_ci    nlmsghdr nlh2 = {
98060ff233Sopenharmony_ci        .nlmsg_len = TEST_LEN2,
99060ff233Sopenharmony_ci    };
100060ff233Sopenharmony_ci    ProcessAddrEvent(&nlh2);
101060ff233Sopenharmony_ci    EXPECT_TRUE(NetlinkOnConnectEvent(NETLINK, -1, nullptr) == SOFTBUS_OK);
102060ff233Sopenharmony_ci    EXPECT_TRUE(NetlinkOnDataEvent(NETLINK, SOFTBUS_SOCKET_OUT, -1) == SOFTBUS_INVALID_PARAM);
103060ff233Sopenharmony_ci    EXPECT_CALL(networkMock, SoftBusSocketRecv).WillOnce(Return(TEST_LEN)).WillRepeatedly(Return(TEST_LISTENER_ID2));
104060ff233Sopenharmony_ci    EXPECT_TRUE(NetlinkOnDataEvent(NETLINK, SOFTBUS_SOCKET_IN, 0) == SOFTBUS_SOCKET_EXCEPTION);
105060ff233Sopenharmony_ci}
106060ff233Sopenharmony_ci
107060ff233Sopenharmony_ci/*
108060ff233Sopenharmony_ci * @tc.name: LnnOnBtStateChanged
109060ff233Sopenharmony_ci * @tc.desc: softbus network test
110060ff233Sopenharmony_ci * @tc.type: FUNC
111060ff233Sopenharmony_ci * @tc.require:
112060ff233Sopenharmony_ci */
113060ff233Sopenharmony_ciHWTEST_F(AdapterDsoftbusNetworkTest, LnnOnBtStateChangedTest001, TestSize.Level1)
114060ff233Sopenharmony_ci{
115060ff233Sopenharmony_ci    NiceMock<NetworkInterfaceMock> networkMock;
116060ff233Sopenharmony_ci    ON_CALL(networkMock, LnnAsyncCallbackHelper).WillByDefault(Return(SOFTBUS_OK));
117060ff233Sopenharmony_ci    ON_CALL(networkMock, SoftBusAddBtStateListener).WillByDefault(Return(TEST_LISTENER_ID));
118060ff233Sopenharmony_ci
119060ff233Sopenharmony_ci    int32_t listenerId = TEST_LISTENER_ID;
120060ff233Sopenharmony_ci    int32_t state = TEST_STATE1;
121060ff233Sopenharmony_ci    SoftBusBtAddr addr;
122060ff233Sopenharmony_ci    int32_t aclState = TEST_ACL_STATE;
123060ff233Sopenharmony_ci    LnnOnBtStateChanged(listenerId, state);
124060ff233Sopenharmony_ci    state = TEST_STATE2;
125060ff233Sopenharmony_ci    LnnOnBtStateChanged(listenerId, state);
126060ff233Sopenharmony_ci    state = TEST_STATE3;
127060ff233Sopenharmony_ci    LnnOnBtStateChanged(listenerId, state);
128060ff233Sopenharmony_ci    state = TEST_STATE4;
129060ff233Sopenharmony_ci    LnnOnBtStateChanged(listenerId, state);
130060ff233Sopenharmony_ci    EXPECT_CALL(networkMock, LnnAsyncCallbackHelper).WillRepeatedly(Return(SOFTBUS_ERR));
131060ff233Sopenharmony_ci    LnnOnBtStateChanged(listenerId, state);
132060ff233Sopenharmony_ci    LnnOnBtAclStateChanged(listenerId, &addr, aclState, 0);
133060ff233Sopenharmony_ci    aclState = TEST_ACL_STATE2;
134060ff233Sopenharmony_ci    LnnOnBtAclStateChanged(listenerId, &addr, aclState, 0);
135060ff233Sopenharmony_ci    aclState = TEST_STATE1;
136060ff233Sopenharmony_ci    LnnOnBtAclStateChanged(listenerId, &addr, aclState, 0);
137060ff233Sopenharmony_ci    int32_t ret = LnnInitBtStateMonitorImpl();
138060ff233Sopenharmony_ci    EXPECT_TRUE(ret == SOFTBUS_OK);
139060ff233Sopenharmony_ci    EXPECT_CALL(networkMock, SoftBusAddBtStateListener).WillRepeatedly(Return(TEST_LISTENER_ID2));
140060ff233Sopenharmony_ci    ret = LnnInitBtStateMonitorImpl();
141060ff233Sopenharmony_ci    EXPECT_TRUE(ret == SOFTBUS_ERR);
142060ff233Sopenharmony_ci}
143060ff233Sopenharmony_ci} // namespace OHOS