1cc290419Sopenharmony_ci/* 2cc290419Sopenharmony_ci * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License. 5cc290419Sopenharmony_ci * You may obtain a copy of the License at 6cc290419Sopenharmony_ci * 7cc290419Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cc290419Sopenharmony_ci * 9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and 13cc290419Sopenharmony_ci * limitations under the License. 14cc290419Sopenharmony_ci * 15cc290419Sopenharmony_ci */ 16cc290419Sopenharmony_ci 17cc290419Sopenharmony_ci#include <memory> 18cc290419Sopenharmony_ci#include <string> 19cc290419Sopenharmony_ci 20cc290419Sopenharmony_ci#include "gtest/gtest.h" 21cc290419Sopenharmony_ci 22cc290419Sopenharmony_ci#define private public 23cc290419Sopenharmony_ci#define protected public 24cc290419Sopenharmony_ci#include "define_register.h" 25cc290419Sopenharmony_ci#include "hdc_connect.h" 26cc290419Sopenharmony_ci#include "hdc_jdwp.h" 27cc290419Sopenharmony_ci#undef private 28cc290419Sopenharmony_ci#undef protected 29cc290419Sopenharmony_ci 30cc290419Sopenharmony_ciusing namespace testing; 31cc290419Sopenharmony_ciusing namespace testing::ext; 32cc290419Sopenharmony_ci 33cc290419Sopenharmony_cinamespace Hdc { 34cc290419Sopenharmony_ciextern std::unique_ptr<ConnectManagement> g_connectManagement; 35cc290419Sopenharmony_ciclass RegisterTest : public testing::Test {}; 36cc290419Sopenharmony_ci 37cc290419Sopenharmony_ci/** 38cc290419Sopenharmony_ci * @tc.name: CastToRegisterTest001 39cc290419Sopenharmony_ci * @tc.desc: Test cast to register. 40cc290419Sopenharmony_ci * @tc.type: FUNC 41cc290419Sopenharmony_ci */ 42cc290419Sopenharmony_ciHWTEST_F(RegisterTest, CastToRegisterTest001, TestSize.Level1) 43cc290419Sopenharmony_ci{ 44cc290419Sopenharmony_ci /** 45cc290419Sopenharmony_ci * @tc.steps: step1. stop connect before start. 46cc290419Sopenharmony_ci * @tc.expected: step1. g_connectManagement is null. 47cc290419Sopenharmony_ci */ 48cc290419Sopenharmony_ci StopConnect(); 49cc290419Sopenharmony_ci EXPECT_EQ(g_connectManagement, nullptr); 50cc290419Sopenharmony_ci} 51cc290419Sopenharmony_ci 52cc290419Sopenharmony_ci/** 53cc290419Sopenharmony_ci * @tc.name: CastToRegisterTest002 54cc290419Sopenharmony_ci * @tc.desc: Test cast to register. 55cc290419Sopenharmony_ci * @tc.type: FUNC 56cc290419Sopenharmony_ci */ 57cc290419Sopenharmony_ciHWTEST_F(RegisterTest, CastToRegisterTest002, TestSize.Level1) 58cc290419Sopenharmony_ci{ 59cc290419Sopenharmony_ci /** 60cc290419Sopenharmony_ci * @tc.steps: step1. start connect. 61cc290419Sopenharmony_ci * @tc.expected: step1. g_connectManagement is not null and the pktName is right. 62cc290419Sopenharmony_ci */ 63cc290419Sopenharmony_ci StartConnect("", "test_pkt_name", true, nullptr); 64cc290419Sopenharmony_ci ASSERT_NE(g_connectManagement, nullptr); 65cc290419Sopenharmony_ci EXPECT_EQ(g_connectManagement->GetPkgName(), "test_pkt_name"); 66cc290419Sopenharmony_ci 67cc290419Sopenharmony_ci /** 68cc290419Sopenharmony_ci * @tc.steps: step2. sleep 3 second. 69cc290419Sopenharmony_ci */ 70cc290419Sopenharmony_ci sleep(3); 71cc290419Sopenharmony_ci 72cc290419Sopenharmony_ci /** 73cc290419Sopenharmony_ci # @tc.steps: step3. stop connect. 74cc290419Sopenharmony_ci * @tc.expected: step3. g_connectManagement is not null 75cc290419Sopenharmony_ci */ 76cc290419Sopenharmony_ci StopConnect(); 77cc290419Sopenharmony_ci ASSERT_NE(g_connectManagement, nullptr); 78cc290419Sopenharmony_ci} 79cc290419Sopenharmony_ci 80cc290419Sopenharmony_ci/** 81cc290419Sopenharmony_ci * @tc.name: CastToRegisterTest003 82cc290419Sopenharmony_ci * @tc.desc: Test cast to register. 83cc290419Sopenharmony_ci * @tc.type: FUNC 84cc290419Sopenharmony_ci */ 85cc290419Sopenharmony_ciHWTEST_F(RegisterTest, CastToRegisterTest003, TestSize.Level1) 86cc290419Sopenharmony_ci{ 87cc290419Sopenharmony_ci /** 88cc290419Sopenharmony_ci * @tc.steps: step1. start connect. 89cc290419Sopenharmony_ci * @tc.expected: step1. g_connectManagement is not null and the pktName is right. 90cc290419Sopenharmony_ci */ 91cc290419Sopenharmony_ci StartConnect("", "test_pkt_name", true, nullptr); 92cc290419Sopenharmony_ci ASSERT_NE(g_connectManagement, nullptr); 93cc290419Sopenharmony_ci EXPECT_EQ(g_connectManagement->GetPkgName(), "test_pkt_name"); 94cc290419Sopenharmony_ci 95cc290419Sopenharmony_ci /** 96cc290419Sopenharmony_ci * @tc.steps: step2. sleep 3 second. 97cc290419Sopenharmony_ci */ 98cc290419Sopenharmony_ci sleep(3); 99cc290419Sopenharmony_ci 100cc290419Sopenharmony_ci /** 101cc290419Sopenharmony_ci # @tc.steps: step3. start connect again 102cc290419Sopenharmony_ci * @tc.expected: step3. start fail and g_connectManagement is not null and the pktName is same with first start. 103cc290419Sopenharmony_ci */ 104cc290419Sopenharmony_ci StartConnect("", "test_pkt_name_2", true, nullptr); 105cc290419Sopenharmony_ci ASSERT_NE(g_connectManagement, nullptr); 106cc290419Sopenharmony_ci EXPECT_EQ(g_connectManagement->GetPkgName(), "test_pkt_name"); 107cc290419Sopenharmony_ci} 108cc290419Sopenharmony_ci 109cc290419Sopenharmony_ciHdcJdwpSimulator* g_hdcJdwpSimulator = nullptr; 110cc290419Sopenharmony_cibool g_threadRunning = false; 111cc290419Sopenharmony_civoid* HdcConnectRunTest(void* pkgContent) 112cc290419Sopenharmony_ci{ 113cc290419Sopenharmony_ci g_threadRunning = true; 114cc290419Sopenharmony_ci std::string pkgName = static_cast<ConnectManagement*>(pkgContent)->GetPkgName(); 115cc290419Sopenharmony_ci std::string processName = static_cast<ConnectManagement*>(pkgContent)->GetProcessName(); 116cc290419Sopenharmony_ci bool isDebug = static_cast<ConnectManagement*>(pkgContent)->GetDebug(); 117cc290419Sopenharmony_ci g_hdcJdwpSimulator = new (std::nothrow) HdcJdwpSimulator(processName, pkgName, isDebug, nullptr); 118cc290419Sopenharmony_ci if (!g_hdcJdwpSimulator->Connect()) { 119cc290419Sopenharmony_ci HILOG_FATAL(LOG_CORE, "Connect fail."); 120cc290419Sopenharmony_ci g_threadRunning = false; 121cc290419Sopenharmony_ci return nullptr; 122cc290419Sopenharmony_ci } 123cc290419Sopenharmony_ci g_threadRunning = false; 124cc290419Sopenharmony_ci return nullptr; 125cc290419Sopenharmony_ci} 126cc290419Sopenharmony_ci 127cc290419Sopenharmony_ci/** 128cc290419Sopenharmony_ci * @tc.name: CastToRegisterTest005 129cc290419Sopenharmony_ci * @tc.desc: Test cast to HdcJdwpSimulator. 130cc290419Sopenharmony_ci * @tc.type: FUNC 131cc290419Sopenharmony_ci */ 132cc290419Sopenharmony_ciHWTEST_F(RegisterTest, CastToRegisterTest005, TestSize.Level1) 133cc290419Sopenharmony_ci{ 134cc290419Sopenharmony_ci /** 135cc290419Sopenharmony_ci * @tc.steps: step1. new a ConnectManagement and start the connect thread 136cc290419Sopenharmony_ci * @tc.expected: step1. connect ok, the thread is runed. 137cc290419Sopenharmony_ci */ 138cc290419Sopenharmony_ci pthread_t tid; 139cc290419Sopenharmony_ci g_connectManagement = std::make_unique<ConnectManagement>(); 140cc290419Sopenharmony_ci g_connectManagement->SetPkgName("test_pkt_name"); 141cc290419Sopenharmony_ci ASSERT_EQ( 142cc290419Sopenharmony_ci pthread_create(&tid, nullptr, &HdcConnectRunTest, static_cast<void*>(g_connectManagement.get())), 143cc290419Sopenharmony_ci 0) << "pthread_create fail!"; 144cc290419Sopenharmony_ci sleep(3); 145cc290419Sopenharmony_ci EXPECT_TRUE(g_threadRunning); 146cc290419Sopenharmony_ci 147cc290419Sopenharmony_ci /** 148cc290419Sopenharmony_ci * @tc.steps: step2. Call disconnect and delete the HdcJdwpSimulator 149cc290419Sopenharmony_ci * @tc.expected: step2. Disconnect ok, the thread is stopped. 150cc290419Sopenharmony_ci */ 151cc290419Sopenharmony_ci g_hdcJdwpSimulator->Disconnect(); 152cc290419Sopenharmony_ci sleep(3); 153cc290419Sopenharmony_ci delete g_hdcJdwpSimulator; 154cc290419Sopenharmony_ci g_hdcJdwpSimulator = nullptr; 155cc290419Sopenharmony_ci EXPECT_FALSE(g_threadRunning); 156cc290419Sopenharmony_ci} 157cc290419Sopenharmony_ci 158cc290419Sopenharmony_cibool g_isCtxPointNull = false; 159cc290419Sopenharmony_civoid* ConnectJpidTest(void* pkgName) 160cc290419Sopenharmony_ci{ 161cc290419Sopenharmony_ci g_threadRunning = true; 162cc290419Sopenharmony_ci 163cc290419Sopenharmony_ci std::string name = (char*)pkgName; 164cc290419Sopenharmony_ci g_hdcJdwpSimulator = new (std::nothrow) HdcJdwpSimulator(name, name, true, nullptr); 165cc290419Sopenharmony_ci if (!g_hdcJdwpSimulator->Connect()) { 166cc290419Sopenharmony_ci HILOG_FATAL(LOG_CORE, "Connect fail."); 167cc290419Sopenharmony_ci } 168cc290419Sopenharmony_ci g_threadRunning = false; 169cc290419Sopenharmony_ci return nullptr; 170cc290419Sopenharmony_ci} 171cc290419Sopenharmony_ci 172cc290419Sopenharmony_ci/** 173cc290419Sopenharmony_ci * @tc.name: CastToRegisterTest006 174cc290419Sopenharmony_ci * @tc.desc: Test cast to Connect. 175cc290419Sopenharmony_ci * @tc.type: FUNC 176cc290419Sopenharmony_ci */ 177cc290419Sopenharmony_ciHWTEST_F(RegisterTest, CastToRegisterTest007, TestSize.Level1) 178cc290419Sopenharmony_ci{ 179cc290419Sopenharmony_ci /** 180cc290419Sopenharmony_ci * @tc.steps: step1. new a ConnectManagement and start the connect thread 181cc290419Sopenharmony_ci * @tc.expected: step1. connect ok, the thread is runed. 182cc290419Sopenharmony_ci */ 183cc290419Sopenharmony_ci pthread_t tid; 184cc290419Sopenharmony_ci g_hdcJdwpSimulator = nullptr; 185cc290419Sopenharmony_ci g_threadRunning = false; 186cc290419Sopenharmony_ci string pkgName = "test_pkt_name"; 187cc290419Sopenharmony_ci ASSERT_EQ(pthread_create(&tid, nullptr, &ConnectJpidTest, (void*)pkgName.c_str()), 0); 188cc290419Sopenharmony_ci sleep(3); 189cc290419Sopenharmony_ci EXPECT_TRUE(g_threadRunning); 190cc290419Sopenharmony_ci 191cc290419Sopenharmony_ci /** 192cc290419Sopenharmony_ci * @tc.steps: step2. Call disconnect and delete the HdcJdwpSimulator 193cc290419Sopenharmony_ci * @tc.expected: step2. Disconnect ok, the thread is stopped. 194cc290419Sopenharmony_ci */ 195cc290419Sopenharmony_ci g_hdcJdwpSimulator->Disconnect(); 196cc290419Sopenharmony_ci delete g_hdcJdwpSimulator; 197cc290419Sopenharmony_ci g_hdcJdwpSimulator = nullptr; 198cc290419Sopenharmony_ci sleep(2); 199cc290419Sopenharmony_ci 200cc290419Sopenharmony_ci /** 201cc290419Sopenharmony_ci * @tc.steps: step3. new a HdcJdwpSimulator and start the connect thread 202cc290419Sopenharmony_ci * @tc.expected: step3. connect failed 203cc290419Sopenharmony_ci */ 204cc290419Sopenharmony_ci pthread_t tid2; 205cc290419Sopenharmony_ci g_hdcJdwpSimulator = nullptr; 206cc290419Sopenharmony_ci g_threadRunning = false; 207cc290419Sopenharmony_ci g_isCtxPointNull = true; 208cc290419Sopenharmony_ci ASSERT_EQ(pthread_create(&tid2, nullptr, &ConnectJpidTest, (void*)pkgName.c_str()), 0); 209cc290419Sopenharmony_ci sleep(3); 210cc290419Sopenharmony_ci 211cc290419Sopenharmony_ci g_hdcJdwpSimulator->Disconnect(); 212cc290419Sopenharmony_ci delete g_hdcJdwpSimulator; 213cc290419Sopenharmony_ci g_hdcJdwpSimulator = nullptr; 214cc290419Sopenharmony_ci} 215cc290419Sopenharmony_ci} // namespace Hdc 216