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 
27 namespace OHOS {
28 namespace Telephony {
29 using namespace testing::ext;
30 using ::testing::_;
31 using ::testing::DoAll;
32 using ::testing::Mock;
33 using ::testing::Return;
34 using ::testing::SetArgReferee;
35 
36 class TrafficManagementTest : public testing::Test {
37 public:
TrafficManagementTest()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 
~TrafficManagementTest()51     ~TrafficManagementTest()
52     {
53         delete trafficManagement;
54     }
55 
TearDownTestCase()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 
HWTEST_F(TrafficManagementTest, TrafficManagementTest_001, Function | MediumTest | Level1)74 HWTEST_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 
HWTEST_F(TrafficManagementTest, TrafficManagementTest_002, Function | MediumTest | Level1)87 HWTEST_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 
HWTEST_F(TrafficManagementTest, TrafficManagementTest_003, Function | MediumTest | Level1)98 HWTEST_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 
HWTEST_F(TrafficManagementTest, TrafficManagementTest_004, Function | MediumTest | Level1)124 HWTEST_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