1/*
2 * Copyright (C) 2024 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#define private public
17#define protected public
18
19#include "mock/mock_net_conn_service.h"
20#include "mock/mock_sim_manager.h"
21#include "traffic_management.h"
22#include "core_manager_inner.h"
23#include "net_manager_constants.h"
24#include "net_conn_client.h"
25#include "net_link_info.h"
26
27namespace OHOS {
28namespace Telephony {
29using namespace testing::ext;
30using ::testing::_;
31using ::testing::DoAll;
32using ::testing::Mock;
33using ::testing::Return;
34using ::testing::SetArgReferee;
35
36class TrafficManagementTest : public testing::Test {
37public:
38    TrafficManagementTest()
39    {
40        trafficManagement = new TrafficManagement(0);
41
42        mockSimManager = new MockSimManager();
43        std::shared_ptr<MockSimManager> mockSimManagerPtr(mockSimManager);
44        CoreManagerInner::GetInstance().simManager_ = mockSimManagerPtr;
45
46        mockNetConnService = new NetManagerStandard::MockINetConnService();
47        sptr<NetManagerStandard::INetConnService> mockNetConnServicePtr(mockNetConnService);
48        NetManagerStandard::NetConnClient::GetInstance().NetConnService_ = mockNetConnServicePtr;
49    }
50
51    ~TrafficManagementTest()
52    {
53        delete trafficManagement;
54    }
55
56    static void TearDownTestCase()
57    {
58        if (CoreManagerInner::GetInstance().simManager_ != nullptr) {
59            CoreManagerInner::GetInstance().simManager_ = nullptr;
60            std::cout << "TrafficManagementTest set simManager_ nullptr" << std::endl;
61        }
62
63        if (NetManagerStandard::NetConnClient::GetInstance().NetConnService_ != nullptr) {
64            NetManagerStandard::NetConnClient::GetInstance().NetConnService_ = nullptr;
65            std::cout << "TrafficManagementTest set NetConnService_ nullptr" << std::endl;
66        }
67    }
68
69    MockSimManager *mockSimManager;
70    NetManagerStandard::MockINetConnService *mockNetConnService;
71    TrafficManagement *trafficManagement;
72};
73
74HWTEST_F(TrafficManagementTest, TrafficManagementTest_001, Function | MediumTest | Level1)
75{
76    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(1));
77    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(1));
78    trafficManagement->UpdatePacketData();
79
80    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(1));
81    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(1));
82    std::string ifaceName = trafficManagement->GetIfaceName();
83    std::cout << "TrafficManagementTest_001 interface name:" << ifaceName << std::endl;
84    ASSERT_TRUE(ifaceName.empty());
85}
86
87HWTEST_F(TrafficManagementTest, TrafficManagementTest_002, Function | MediumTest | Level1)
88{
89    trafficManagement->sendPackets_ = 100;
90    trafficManagement->recvPackets_ = 200;
91    int64_t sendP = 0;
92    int64_t recvP = 0;
93    trafficManagement->GetPacketData(sendP, recvP);
94    EXPECT_EQ(sendP, 100);
95    EXPECT_EQ(recvP, 200);
96}
97
98HWTEST_F(TrafficManagementTest, TrafficManagementTest_003, Function | MediumTest | Level1)
99{
100    // get net id failed
101    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
102    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(1));
103    std::string ifaceName = trafficManagement->GetIfaceName();
104    ASSERT_EQ(ifaceName, "");
105
106    // get all nets failed
107    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
108    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(0));
109    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(Return(1));
110    ifaceName = trafficManagement->GetIfaceName();
111    ASSERT_EQ(ifaceName, "");
112
113    // net id not in netAllIds
114    std::list<int32_t> netIdList = {1, 2};
115    std::list<int32_t> netAllIds = {3};
116    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
117    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _))
118        .WillOnce(DoAll(SetArgReferee<1>(netIdList), Return(0)));
119    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(DoAll(SetArgReferee<0>(netAllIds), Return(0)));
120    ifaceName = trafficManagement->GetIfaceName();
121    ASSERT_EQ(ifaceName, "");
122}
123
124HWTEST_F(TrafficManagementTest, TrafficManagementTest_004, Function | MediumTest | Level1)
125{
126    // net id in all netAllIds
127    std::list<int32_t> netIdList = {1, 2};
128    std::list<int32_t> netAllIds = {1, 2};
129    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
130    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _))
131        .WillOnce(DoAll(SetArgReferee<1>(netIdList), Return(0)));
132    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(DoAll(SetArgReferee<0>(netAllIds), Return(0)));
133    EXPECT_CALL(*mockNetConnService, GetConnectionProperties(_, _))
134        .WillOnce([](int32_t netId, NetManagerStandard::NetLinkInfo &info) {
135            info.ifaceName_ = "mock_ifaceName";
136            return 0;
137        });
138    std::string ifaceName = trafficManagement->GetIfaceName();
139    std::cout << "TrafficManagementTest_003 ifaceName: " << ifaceName << std::endl;
140    ASSERT_EQ(ifaceName, "mock_ifaceName");
141
142    // update data
143    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
144    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _))
145        .WillOnce(DoAll(SetArgReferee<1>(netIdList), Return(0)));
146    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(DoAll(SetArgReferee<0>(netAllIds), Return(0)));
147    EXPECT_CALL(*mockNetConnService, GetConnectionProperties(_, _))
148        .WillOnce([](int32_t netId, NetManagerStandard::NetLinkInfo &info) {
149            info.ifaceName_ = "mock_ifaceName";
150            return 0;
151        });
152    trafficManagement->sendPackets_ = 100;
153    trafficManagement->recvPackets_ = 200;
154    trafficManagement->UpdatePacketData();
155    EXPECT_EQ(trafficManagement->sendPackets_, 0);
156    EXPECT_EQ(trafficManagement->recvPackets_, 0);
157
158    Mock::VerifyAndClearExpectations(mockSimManager);
159}
160
161}  // namespace Telephony
162}  // namespace OHOS