12d43be4eSopenharmony_ci/*
22d43be4eSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License.
52d43be4eSopenharmony_ci * You may obtain a copy of the License at
62d43be4eSopenharmony_ci *
72d43be4eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
82d43be4eSopenharmony_ci *
92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and
132d43be4eSopenharmony_ci * limitations under the License.
142d43be4eSopenharmony_ci */
152d43be4eSopenharmony_ci
162d43be4eSopenharmony_ci#define private public
172d43be4eSopenharmony_ci#define protected public
182d43be4eSopenharmony_ci
192d43be4eSopenharmony_ci#include "mock/mock_net_conn_service.h"
202d43be4eSopenharmony_ci#include "mock/mock_sim_manager.h"
212d43be4eSopenharmony_ci#include "traffic_management.h"
222d43be4eSopenharmony_ci#include "core_manager_inner.h"
232d43be4eSopenharmony_ci#include "net_manager_constants.h"
242d43be4eSopenharmony_ci#include "net_conn_client.h"
252d43be4eSopenharmony_ci#include "net_link_info.h"
262d43be4eSopenharmony_ci
272d43be4eSopenharmony_cinamespace OHOS {
282d43be4eSopenharmony_cinamespace Telephony {
292d43be4eSopenharmony_ciusing namespace testing::ext;
302d43be4eSopenharmony_ciusing ::testing::_;
312d43be4eSopenharmony_ciusing ::testing::DoAll;
322d43be4eSopenharmony_ciusing ::testing::Mock;
332d43be4eSopenharmony_ciusing ::testing::Return;
342d43be4eSopenharmony_ciusing ::testing::SetArgReferee;
352d43be4eSopenharmony_ci
362d43be4eSopenharmony_ciclass TrafficManagementTest : public testing::Test {
372d43be4eSopenharmony_cipublic:
382d43be4eSopenharmony_ci    TrafficManagementTest()
392d43be4eSopenharmony_ci    {
402d43be4eSopenharmony_ci        trafficManagement = new TrafficManagement(0);
412d43be4eSopenharmony_ci
422d43be4eSopenharmony_ci        mockSimManager = new MockSimManager();
432d43be4eSopenharmony_ci        std::shared_ptr<MockSimManager> mockSimManagerPtr(mockSimManager);
442d43be4eSopenharmony_ci        CoreManagerInner::GetInstance().simManager_ = mockSimManagerPtr;
452d43be4eSopenharmony_ci
462d43be4eSopenharmony_ci        mockNetConnService = new NetManagerStandard::MockINetConnService();
472d43be4eSopenharmony_ci        sptr<NetManagerStandard::INetConnService> mockNetConnServicePtr(mockNetConnService);
482d43be4eSopenharmony_ci        NetManagerStandard::NetConnClient::GetInstance().NetConnService_ = mockNetConnServicePtr;
492d43be4eSopenharmony_ci    }
502d43be4eSopenharmony_ci
512d43be4eSopenharmony_ci    ~TrafficManagementTest()
522d43be4eSopenharmony_ci    {
532d43be4eSopenharmony_ci        delete trafficManagement;
542d43be4eSopenharmony_ci    }
552d43be4eSopenharmony_ci
562d43be4eSopenharmony_ci    static void TearDownTestCase()
572d43be4eSopenharmony_ci    {
582d43be4eSopenharmony_ci        if (CoreManagerInner::GetInstance().simManager_ != nullptr) {
592d43be4eSopenharmony_ci            CoreManagerInner::GetInstance().simManager_ = nullptr;
602d43be4eSopenharmony_ci            std::cout << "TrafficManagementTest set simManager_ nullptr" << std::endl;
612d43be4eSopenharmony_ci        }
622d43be4eSopenharmony_ci
632d43be4eSopenharmony_ci        if (NetManagerStandard::NetConnClient::GetInstance().NetConnService_ != nullptr) {
642d43be4eSopenharmony_ci            NetManagerStandard::NetConnClient::GetInstance().NetConnService_ = nullptr;
652d43be4eSopenharmony_ci            std::cout << "TrafficManagementTest set NetConnService_ nullptr" << std::endl;
662d43be4eSopenharmony_ci        }
672d43be4eSopenharmony_ci    }
682d43be4eSopenharmony_ci
692d43be4eSopenharmony_ci    MockSimManager *mockSimManager;
702d43be4eSopenharmony_ci    NetManagerStandard::MockINetConnService *mockNetConnService;
712d43be4eSopenharmony_ci    TrafficManagement *trafficManagement;
722d43be4eSopenharmony_ci};
732d43be4eSopenharmony_ci
742d43be4eSopenharmony_ciHWTEST_F(TrafficManagementTest, TrafficManagementTest_001, Function | MediumTest | Level1)
752d43be4eSopenharmony_ci{
762d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(1));
772d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(1));
782d43be4eSopenharmony_ci    trafficManagement->UpdatePacketData();
792d43be4eSopenharmony_ci
802d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(1));
812d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(1));
822d43be4eSopenharmony_ci    std::string ifaceName = trafficManagement->GetIfaceName();
832d43be4eSopenharmony_ci    std::cout << "TrafficManagementTest_001 interface name:" << ifaceName << std::endl;
842d43be4eSopenharmony_ci    ASSERT_TRUE(ifaceName.empty());
852d43be4eSopenharmony_ci}
862d43be4eSopenharmony_ci
872d43be4eSopenharmony_ciHWTEST_F(TrafficManagementTest, TrafficManagementTest_002, Function | MediumTest | Level1)
882d43be4eSopenharmony_ci{
892d43be4eSopenharmony_ci    trafficManagement->sendPackets_ = 100;
902d43be4eSopenharmony_ci    trafficManagement->recvPackets_ = 200;
912d43be4eSopenharmony_ci    int64_t sendP = 0;
922d43be4eSopenharmony_ci    int64_t recvP = 0;
932d43be4eSopenharmony_ci    trafficManagement->GetPacketData(sendP, recvP);
942d43be4eSopenharmony_ci    EXPECT_EQ(sendP, 100);
952d43be4eSopenharmony_ci    EXPECT_EQ(recvP, 200);
962d43be4eSopenharmony_ci}
972d43be4eSopenharmony_ci
982d43be4eSopenharmony_ciHWTEST_F(TrafficManagementTest, TrafficManagementTest_003, Function | MediumTest | Level1)
992d43be4eSopenharmony_ci{
1002d43be4eSopenharmony_ci    // get net id failed
1012d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
1022d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(1));
1032d43be4eSopenharmony_ci    std::string ifaceName = trafficManagement->GetIfaceName();
1042d43be4eSopenharmony_ci    ASSERT_EQ(ifaceName, "");
1052d43be4eSopenharmony_ci
1062d43be4eSopenharmony_ci    // get all nets failed
1072d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
1082d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _)).WillOnce(Return(0));
1092d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(Return(1));
1102d43be4eSopenharmony_ci    ifaceName = trafficManagement->GetIfaceName();
1112d43be4eSopenharmony_ci    ASSERT_EQ(ifaceName, "");
1122d43be4eSopenharmony_ci
1132d43be4eSopenharmony_ci    // net id not in netAllIds
1142d43be4eSopenharmony_ci    std::list<int32_t> netIdList = {1, 2};
1152d43be4eSopenharmony_ci    std::list<int32_t> netAllIds = {3};
1162d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
1172d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _))
1182d43be4eSopenharmony_ci        .WillOnce(DoAll(SetArgReferee<1>(netIdList), Return(0)));
1192d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(DoAll(SetArgReferee<0>(netAllIds), Return(0)));
1202d43be4eSopenharmony_ci    ifaceName = trafficManagement->GetIfaceName();
1212d43be4eSopenharmony_ci    ASSERT_EQ(ifaceName, "");
1222d43be4eSopenharmony_ci}
1232d43be4eSopenharmony_ci
1242d43be4eSopenharmony_ciHWTEST_F(TrafficManagementTest, TrafficManagementTest_004, Function | MediumTest | Level1)
1252d43be4eSopenharmony_ci{
1262d43be4eSopenharmony_ci    // net id in all netAllIds
1272d43be4eSopenharmony_ci    std::list<int32_t> netIdList = {1, 2};
1282d43be4eSopenharmony_ci    std::list<int32_t> netAllIds = {1, 2};
1292d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
1302d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _))
1312d43be4eSopenharmony_ci        .WillOnce(DoAll(SetArgReferee<1>(netIdList), Return(0)));
1322d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(DoAll(SetArgReferee<0>(netAllIds), Return(0)));
1332d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetConnectionProperties(_, _))
1342d43be4eSopenharmony_ci        .WillOnce([](int32_t netId, NetManagerStandard::NetLinkInfo &info) {
1352d43be4eSopenharmony_ci            info.ifaceName_ = "mock_ifaceName";
1362d43be4eSopenharmony_ci            return 0;
1372d43be4eSopenharmony_ci        });
1382d43be4eSopenharmony_ci    std::string ifaceName = trafficManagement->GetIfaceName();
1392d43be4eSopenharmony_ci    std::cout << "TrafficManagementTest_003 ifaceName: " << ifaceName << std::endl;
1402d43be4eSopenharmony_ci    ASSERT_EQ(ifaceName, "mock_ifaceName");
1412d43be4eSopenharmony_ci
1422d43be4eSopenharmony_ci    // update data
1432d43be4eSopenharmony_ci    EXPECT_CALL(*mockSimManager, GetSimId(_)).WillOnce(Return(0));
1442d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetNetIdByIdentifier(_, _))
1452d43be4eSopenharmony_ci        .WillOnce(DoAll(SetArgReferee<1>(netIdList), Return(0)));
1462d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetAllNets(_)).WillOnce(DoAll(SetArgReferee<0>(netAllIds), Return(0)));
1472d43be4eSopenharmony_ci    EXPECT_CALL(*mockNetConnService, GetConnectionProperties(_, _))
1482d43be4eSopenharmony_ci        .WillOnce([](int32_t netId, NetManagerStandard::NetLinkInfo &info) {
1492d43be4eSopenharmony_ci            info.ifaceName_ = "mock_ifaceName";
1502d43be4eSopenharmony_ci            return 0;
1512d43be4eSopenharmony_ci        });
1522d43be4eSopenharmony_ci    trafficManagement->sendPackets_ = 100;
1532d43be4eSopenharmony_ci    trafficManagement->recvPackets_ = 200;
1542d43be4eSopenharmony_ci    trafficManagement->UpdatePacketData();
1552d43be4eSopenharmony_ci    EXPECT_EQ(trafficManagement->sendPackets_, 0);
1562d43be4eSopenharmony_ci    EXPECT_EQ(trafficManagement->recvPackets_, 0);
1572d43be4eSopenharmony_ci
1582d43be4eSopenharmony_ci    Mock::VerifyAndClearExpectations(mockSimManager);
1592d43be4eSopenharmony_ci}
1602d43be4eSopenharmony_ci
1612d43be4eSopenharmony_ci}  // namespace Telephony
1622d43be4eSopenharmony_ci}  // namespace OHOS