19762338dSopenharmony_ci/* 29762338dSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49762338dSopenharmony_ci * you may not use this file except in compliance with the License. 59762338dSopenharmony_ci * You may obtain a copy of the License at 69762338dSopenharmony_ci * 79762338dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89762338dSopenharmony_ci * 99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129762338dSopenharmony_ci * See the License for the specific language governing permissions and 139762338dSopenharmony_ci * limitations under the License. 149762338dSopenharmony_ci */ 159762338dSopenharmony_ci 169762338dSopenharmony_ci#include <base/hdi_smq.h> 179762338dSopenharmony_ci#include <functional> 189762338dSopenharmony_ci#include <gtest/gtest.h> 199762338dSopenharmony_ci#include <hdf_io_service_if.h> 209762338dSopenharmony_ci#include <hdf_log.h> 219762338dSopenharmony_ci#include <hdf_service_status_inner.h> 229762338dSopenharmony_ci#include <idevmgr_hdi.h> 239762338dSopenharmony_ci#include <iostream> 249762338dSopenharmony_ci#include <ipc_object_stub.h> 259762338dSopenharmony_ci#include <iservice_registry.h> 269762338dSopenharmony_ci#include <iservmgr_hdi.h> 279762338dSopenharmony_ci#include <iservstat_listener_hdi.h> 289762338dSopenharmony_ci#include <osal_time.h> 299762338dSopenharmony_ci#include <string> 309762338dSopenharmony_ci 319762338dSopenharmony_ci#include "sample_hdi.h" 329762338dSopenharmony_ci 339762338dSopenharmony_ci#define HDF_LOG_TAG service_manager_test_cpp 349762338dSopenharmony_cinamespace OHOS { 359762338dSopenharmony_ciusing namespace testing::ext; 369762338dSopenharmony_ciusing OHOS::IRemoteObject; 379762338dSopenharmony_ciusing OHOS::sptr; 389762338dSopenharmony_ciusing OHOS::HDI::Base::SharedMemQueue; 399762338dSopenharmony_ciusing OHOS::HDI::Base::SharedMemQueueMeta; 409762338dSopenharmony_ciusing OHOS::HDI::Base::SmqType; 419762338dSopenharmony_ciusing OHOS::HDI::DeviceManager::V1_0::IDeviceManager; 429762338dSopenharmony_ciusing OHOS::HDI::ServiceManager::V1_0::IServiceManager; 439762338dSopenharmony_ciusing OHOS::HDI::ServiceManager::V1_0::IServStatListener; 449762338dSopenharmony_ciusing OHOS::HDI::ServiceManager::V1_0::ServiceStatus; 459762338dSopenharmony_ciusing OHOS::HDI::ServiceManager::V1_0::ServStatListenerStub; 469762338dSopenharmony_ciusing OHOS::HDI::DeviceManager::V1_0::HdiDevHostInfo; 479762338dSopenharmony_ciusing OHOS::HDI::ServiceManager::V1_0::HdiServiceInfo; 489762338dSopenharmony_cistatic constexpr const char *TEST_SERVICE_NAME = "sample_driver_service"; 499762338dSopenharmony_cistatic constexpr const char *TEST1_SERVICE_NAME = "sample1_driver_service"; 509762338dSopenharmony_cistatic constexpr const char16_t *TEST_SERVICE_INTERFACE_DESC = u"hdf.test.sampele_service"; 519762338dSopenharmony_cistatic constexpr const char *TEST_SERVICE_INTERFACE_DESC_N = "hdf.test.sampele_service"; 529762338dSopenharmony_cistatic constexpr const char *TEST_SERVICE_INTERFACE_DESC_INVALID = "___"; 539762338dSopenharmony_cistatic constexpr const char *TEST_SERVICE_INTERFACE_DESC_VOID = ""; 549762338dSopenharmony_cistatic constexpr const char *TEST_SERVICE_INTERFACE_DESC_NULL = nullptr; 559762338dSopenharmony_cistatic constexpr int PAYLOAD_NUM = 1234; 569762338dSopenharmony_cistatic constexpr int SMQ_TEST_QUEUE_SIZE = 10; 579762338dSopenharmony_cistatic constexpr int SMQ_TEST_WAIT_TIME = 100; 589762338dSopenharmony_cistatic constexpr int WAIT_LOAD_UNLOAD_TIME = 300; 599762338dSopenharmony_cistatic constexpr int DEVICE_SERVICE_MANAGER_SA_ID = 5100; 609762338dSopenharmony_cistatic constexpr int INVALID_CODE = 100; 619762338dSopenharmony_cistatic constexpr int ERROR_CODE_WITH_INVALID_CODE = 305; 629762338dSopenharmony_ci 639762338dSopenharmony_ciclass HdfServiceMangerHdiTest : public testing::Test { 649762338dSopenharmony_cipublic: 659762338dSopenharmony_ci static void SetUpTestCase() 669762338dSopenharmony_ci { 679762338dSopenharmony_ci (void)TEST_SERVICE_NAME; 689762338dSopenharmony_ci (void)TEST1_SERVICE_NAME; 699762338dSopenharmony_ci (void)PAYLOAD_NUM; 709762338dSopenharmony_ci (void)WAIT_LOAD_UNLOAD_TIME; 719762338dSopenharmony_ci (void)TEST_SERVICE_INTERFACE_DESC; 729762338dSopenharmony_ci (void)TEST_SERVICE_INTERFACE_DESC_N; 739762338dSopenharmony_ci (void)SMQ_TEST_QUEUE_SIZE; 749762338dSopenharmony_ci (void)SMQ_TEST_WAIT_TIME; 759762338dSopenharmony_ci 769762338dSopenharmony_ci #ifdef SAMPLE_SHIELD 779762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 789762338dSopenharmony_ci if (devmgr != nullptr) { 799762338dSopenharmony_ci HDF_LOGI("%{public}s:%{public}d", __func__, __LINE__); 809762338dSopenharmony_ci devmgr->LoadDevice(TEST_SERVICE_NAME); 819762338dSopenharmony_ci } 829762338dSopenharmony_ci #endif 839762338dSopenharmony_ci } 849762338dSopenharmony_ci static void TearDownTestCase() 859762338dSopenharmony_ci { 869762338dSopenharmony_ci #ifdef SAMPLE_SHIELD 879762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 889762338dSopenharmony_ci if (devmgr != nullptr) { 899762338dSopenharmony_ci HDF_LOGI("%{public}s:%{public}d", __func__, __LINE__); 909762338dSopenharmony_ci devmgr->UnloadDevice(TEST_SERVICE_NAME); 919762338dSopenharmony_ci } 929762338dSopenharmony_ci #endif 939762338dSopenharmony_ci } 949762338dSopenharmony_ci 959762338dSopenharmony_ci void TestServiceListenerStop(const sptr<IDeviceManager>& devmgr, const sptr<IServiceManager>& servmgr); 969762338dSopenharmony_ci void TestSampleService(sptr<IRemoteObject>& sampleService, const sptr<IDeviceManager>& devmgr, 979762338dSopenharmony_ci const sptr<IServiceManager>& servmgr); 989762338dSopenharmony_ci void SetUp() {}; 999762338dSopenharmony_ci void TearDown() {}; 1009762338dSopenharmony_ci}; 1019762338dSopenharmony_ci 1029762338dSopenharmony_ciclass IPCObjectStubTest : public OHOS::IPCObjectStub { 1039762338dSopenharmony_cipublic: 1049762338dSopenharmony_ci explicit IPCObjectStubTest() : OHOS::IPCObjectStub(u"") {}; 1059762338dSopenharmony_ci virtual ~IPCObjectStubTest() = default; 1069762338dSopenharmony_ci int OnRemoteRequest( 1079762338dSopenharmony_ci uint32_t code, OHOS::MessageParcel &data, OHOS::MessageParcel &reply, OHOS::MessageOption &option) override 1089762338dSopenharmony_ci { 1099762338dSopenharmony_ci HDF_LOGI("IPCObjectStubTest::OnRemoteRequest called, code = %{public}d", code); 1109762338dSopenharmony_ci payload = data.ReadInt32(); 1119762338dSopenharmony_ci 1129762338dSopenharmony_ci return HDF_SUCCESS; 1139762338dSopenharmony_ci } 1149762338dSopenharmony_ci 1159762338dSopenharmony_ci static int32_t payload; 1169762338dSopenharmony_ci}; 1179762338dSopenharmony_ci 1189762338dSopenharmony_ciint32_t IPCObjectStubTest::payload = 0; 1199762338dSopenharmony_ci 1209762338dSopenharmony_ci/** 1219762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0100 1229762338dSopenharmony_ci * @tc.name: ServMgrTest001 1239762338dSopenharmony_ci * @tc.size: Medium 1249762338dSopenharmony_ci * @tc.level: level 1 1259762338dSopenharmony_ci */ 1269762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0100, Function | MediumTest | Level1) 1279762338dSopenharmony_ci{ 1289762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 1299762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 1309762338dSopenharmony_ci} 1319762338dSopenharmony_ci 1329762338dSopenharmony_ci#ifdef SAMPLE_SHIELD 1339762338dSopenharmony_ci/** 1349762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0200 1359762338dSopenharmony_ci * @tc.name: ServMgrTest002 1369762338dSopenharmony_ci * @tc.size: Medium 1379762338dSopenharmony_ci * @tc.level: level 1 1389762338dSopenharmony_ci */ 1399762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0200, Function | MediumTest | Level1) 1409762338dSopenharmony_ci{ 1419762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 1429762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 1439762338dSopenharmony_ci 1449762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 1459762338dSopenharmony_ci 1469762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 1479762338dSopenharmony_ci 1489762338dSopenharmony_ci OHOS::MessageParcel data; 1499762338dSopenharmony_ci OHOS::MessageParcel reply; 1509762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 1519762338dSopenharmony_ci ASSERT_EQ(ret, true); 1529762338dSopenharmony_ci data.WriteCString("sample_service test call"); 1539762338dSopenharmony_ci 1549762338dSopenharmony_ci OHOS::MessageOption option; 1559762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_SERVICE_PING, data, reply, option); 1569762338dSopenharmony_ci ASSERT_EQ(status, 0); 1579762338dSopenharmony_ci} 1589762338dSopenharmony_ci 1599762338dSopenharmony_ci/** 1609762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0300 1619762338dSopenharmony_ci * @tc.name: ServMgrTest003 1629762338dSopenharmony_ci * @tc.size: Medium 1639762338dSopenharmony_ci * @tc.level: level 1 1649762338dSopenharmony_ci */ 1659762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0300, Function | MediumTest | Level1) 1669762338dSopenharmony_ci{ 1679762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 1689762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 1699762338dSopenharmony_ci 1709762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 1719762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 1729762338dSopenharmony_ci 1739762338dSopenharmony_ci sptr<IRemoteObject> callback = new IPCObjectStubTest(); 1749762338dSopenharmony_ci OHOS::MessageParcel data; 1759762338dSopenharmony_ci OHOS::MessageParcel reply; 1769762338dSopenharmony_ci int32_t payload = PAYLOAD_NUM; 1779762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 1789762338dSopenharmony_ci ASSERT_EQ(ret, true); 1799762338dSopenharmony_ci data.WriteInt32(payload); 1809762338dSopenharmony_ci data.WriteRemoteObject(callback); 1819762338dSopenharmony_ci 1829762338dSopenharmony_ci OHOS::MessageOption option; 1839762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_SERVICE_CALLBACK, data, reply, option); 1849762338dSopenharmony_ci ASSERT_EQ(status, 0); 1859762338dSopenharmony_ci ASSERT_EQ(IPCObjectStubTest::payload, payload); 1869762338dSopenharmony_ci} 1879762338dSopenharmony_ci 1889762338dSopenharmony_ci/** 1899762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0400 1909762338dSopenharmony_ci * @tc.name: ServMgrTest004 1919762338dSopenharmony_ci * @tc.size: Medium 1929762338dSopenharmony_ci * @tc.level: level 1 1939762338dSopenharmony_ci */ 1949762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0400, Function | MediumTest | Level1) 1959762338dSopenharmony_ci{ 1969762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 1979762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 1989762338dSopenharmony_ci 1999762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 2009762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 2019762338dSopenharmony_ci 2029762338dSopenharmony_ci OHOS::MessageParcel data; 2039762338dSopenharmony_ci OHOS::MessageParcel reply; 2049762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 2059762338dSopenharmony_ci ASSERT_EQ(ret, true); 2069762338dSopenharmony_ci data.WriteInt32(PAYLOAD_NUM); 2079762338dSopenharmony_ci data.WriteInt32(PAYLOAD_NUM); 2089762338dSopenharmony_ci 2099762338dSopenharmony_ci OHOS::MessageOption option; 2109762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_SERVICE_SUM, data, reply, option); 2119762338dSopenharmony_ci ASSERT_EQ(status, 0); 2129762338dSopenharmony_ci int32_t result = reply.ReadInt32(); 2139762338dSopenharmony_ci int32_t expRes = PAYLOAD_NUM + PAYLOAD_NUM; 2149762338dSopenharmony_ci ASSERT_EQ(result, expRes); 2159762338dSopenharmony_ci} 2169762338dSopenharmony_ci 2179762338dSopenharmony_ci/** 2189762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0500 2199762338dSopenharmony_ci * @tc.name: ServMgrTest006 2209762338dSopenharmony_ci * @tc.size: Medium 2219762338dSopenharmony_ci * @tc.level: level 1 2229762338dSopenharmony_ci */ 2239762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0500, Function | MediumTest | Level1) 2249762338dSopenharmony_ci{ 2259762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 2269762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 2279762338dSopenharmony_ci 2289762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 2299762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 2309762338dSopenharmony_ci 2319762338dSopenharmony_ci OHOS::MessageParcel data; 2329762338dSopenharmony_ci OHOS::MessageParcel reply; 2339762338dSopenharmony_ci 2349762338dSopenharmony_ci constexpr int buffersize = 10; 2359762338dSopenharmony_ci uint8_t dataBuffer[buffersize]; 2369762338dSopenharmony_ci for (int i = 0; i < buffersize; i++) { 2379762338dSopenharmony_ci dataBuffer[i] = i; 2389762338dSopenharmony_ci } 2399762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 2409762338dSopenharmony_ci ASSERT_EQ(ret, true); 2419762338dSopenharmony_ci ret = data.WriteUnpadBuffer(dataBuffer, sizeof(dataBuffer)); 2429762338dSopenharmony_ci ASSERT_TRUE(ret); 2439762338dSopenharmony_ci 2449762338dSopenharmony_ci OHOS::MessageOption option; 2459762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_BUFFER_TRANS, data, reply, option); 2469762338dSopenharmony_ci ASSERT_EQ(status, 0); 2479762338dSopenharmony_ci 2489762338dSopenharmony_ci const uint8_t *retBuffer = reply.ReadUnpadBuffer(buffersize); 2499762338dSopenharmony_ci ASSERT_TRUE(retBuffer != nullptr); 2509762338dSopenharmony_ci 2519762338dSopenharmony_ci for (int i = 0; i < buffersize; i++) { 2529762338dSopenharmony_ci ASSERT_EQ(retBuffer[i], i); 2539762338dSopenharmony_ci } 2549762338dSopenharmony_ci} 2559762338dSopenharmony_ci 2569762338dSopenharmony_ci/** 2579762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0600 2589762338dSopenharmony_ci * @tc.name: Test device manager Load/UnLoad device and driver dynamic register device 2599762338dSopenharmony_ci * @tc.size: Medium 2609762338dSopenharmony_ci * @tc.level: level 1 2619762338dSopenharmony_ci */ 2629762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0600, Function | MediumTest | Level1) 2639762338dSopenharmony_ci{ 2649762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 2659762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 2669762338dSopenharmony_ci devmgr->UnloadDevice(TEST_SERVICE_NAME); 2679762338dSopenharmony_ci 2689762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 2699762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 2709762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 2719762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 2729762338dSopenharmony_ci ASSERT_TRUE(sampleService == nullptr); 2739762338dSopenharmony_ci 2749762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 2759762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 2769762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 2779762338dSopenharmony_ci sampleService = servmgr->GetService(TEST_SERVICE_NAME); 2789762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 2799762338dSopenharmony_ci 2809762338dSopenharmony_ci OHOS::MessageParcel data; 2819762338dSopenharmony_ci OHOS::MessageParcel reply; 2829762338dSopenharmony_ci OHOS::MessageOption option; 2839762338dSopenharmony_ci ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 2849762338dSopenharmony_ci ASSERT_EQ(ret, true); 2859762338dSopenharmony_ci const char *newServName = "sample_driver_service2"; 2869762338dSopenharmony_ci ret = data.WriteCString(newServName); 2879762338dSopenharmony_ci ASSERT_TRUE(ret); 2889762338dSopenharmony_ci 2899762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_REGISTER_DEVICE, data, reply, option); 2909762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 2919762338dSopenharmony_ci 2929762338dSopenharmony_ci auto sampleService2 = servmgr->GetService(newServName); 2939762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 2949762338dSopenharmony_ci 2959762338dSopenharmony_ci data.FlushBuffer(); 2969762338dSopenharmony_ci reply.FlushBuffer(); 2979762338dSopenharmony_ci ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 2989762338dSopenharmony_ci ASSERT_EQ(ret, true); 2999762338dSopenharmony_ci data.WriteInt32(PAYLOAD_NUM); 3009762338dSopenharmony_ci data.WriteInt32(PAYLOAD_NUM); 3019762338dSopenharmony_ci 3029762338dSopenharmony_ci status = sampleService2->SendRequest(SAMPLE_SERVICE_SUM, data, reply, option); 3039762338dSopenharmony_ci ASSERT_EQ(status, 0); 3049762338dSopenharmony_ci int32_t result = reply.ReadInt32(); 3059762338dSopenharmony_ci 3069762338dSopenharmony_ci int32_t expRes = PAYLOAD_NUM + PAYLOAD_NUM; 3079762338dSopenharmony_ci ASSERT_EQ(result, expRes); 3089762338dSopenharmony_ci sampleService2 = nullptr; 3099762338dSopenharmony_ci 3109762338dSopenharmony_ci data.FlushBuffer(); 3119762338dSopenharmony_ci reply.FlushBuffer(); 3129762338dSopenharmony_ci ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 3139762338dSopenharmony_ci ASSERT_EQ(ret, true); 3149762338dSopenharmony_ci data.WriteCString(newServName); 3159762338dSopenharmony_ci 3169762338dSopenharmony_ci status = sampleService->SendRequest(SAMPLE_UNREGISTER_DEVICE, data, reply, option); 3179762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 3189762338dSopenharmony_ci 3199762338dSopenharmony_ci sampleService2 = servmgr->GetService(newServName); 3209762338dSopenharmony_ci ASSERT_TRUE(sampleService2 == nullptr); 3219762338dSopenharmony_ci 3229762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST_SERVICE_NAME); 3239762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 3249762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 3259762338dSopenharmony_ci sampleService = servmgr->GetService(TEST_SERVICE_NAME); 3269762338dSopenharmony_ci ASSERT_TRUE(sampleService == nullptr); 3279762338dSopenharmony_ci} 3289762338dSopenharmony_ci#endif 3299762338dSopenharmony_ci 3309762338dSopenharmony_ciclass ServStatListener : public OHOS::HDI::ServiceManager::V1_0::ServStatListenerStub { 3319762338dSopenharmony_cipublic: 3329762338dSopenharmony_ci using StatusCallback = std::function<void(const ServiceStatus &)>; 3339762338dSopenharmony_ci explicit ServStatListener(StatusCallback callback) : callback_(std::move(callback)) {} 3349762338dSopenharmony_ci ~ServStatListener() = default; 3359762338dSopenharmony_ci void OnReceive(const ServiceStatus &status) override 3369762338dSopenharmony_ci { 3379762338dSopenharmony_ci callback_(status); 3389762338dSopenharmony_ci } 3399762338dSopenharmony_ci 3409762338dSopenharmony_ciprivate: 3419762338dSopenharmony_ci StatusCallback callback_; 3429762338dSopenharmony_ci}; 3439762338dSopenharmony_ci 3449762338dSopenharmony_ci#ifdef SAMPLE_SHIELD 3459762338dSopenharmony_ci/* 3469762338dSopenharmony_ci * Test service start status listener 3479762338dSopenharmony_ci */ 3489762338dSopenharmony_civoid HdfServiceMangerHdiTest::TestServiceListenerStop(const sptr<IDeviceManager>& devmgr, 3499762338dSopenharmony_ci const sptr<IServiceManager>& servmgr) 3509762338dSopenharmony_ci{ 3519762338dSopenharmony_ci std::string servInfo; 3529762338dSopenharmony_ci uint16_t devClass; 3539762338dSopenharmony_ci uint16_t servStatus; 3549762338dSopenharmony_ci bool callbacked = false; 3559762338dSopenharmony_ci ::OHOS::sptr<IServStatListener> listener 3569762338dSopenharmony_ci = new ServStatListener(ServStatListener::StatusCallback([&](const ServiceStatus &status) { 3579762338dSopenharmony_ci HDF_LOGI("service status callback"); 3589762338dSopenharmony_ci if (status.serviceName == std::string(TEST_SERVICE_NAME)) { 3599762338dSopenharmony_ci servInfo = status.info; 3609762338dSopenharmony_ci devClass = status.deviceClass; 3619762338dSopenharmony_ci servStatus = status.status; 3629762338dSopenharmony_ci callbacked = true; 3639762338dSopenharmony_ci } 3649762338dSopenharmony_ci })); 3659762338dSopenharmony_ci 3669762338dSopenharmony_ci int status = servmgr->RegisterServiceStatusListener(listener, DEVICE_CLASS_DEFAULT); 3679762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 3689762338dSopenharmony_ci 3699762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 3709762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 3719762338dSopenharmony_ci constexpr int WAIT_COUNT = 300; 3729762338dSopenharmony_ci int count = WAIT_COUNT; 3739762338dSopenharmony_ci while (!callbacked && count > 0) { 3749762338dSopenharmony_ci OsalMSleep(1); 3759762338dSopenharmony_ci count--; 3769762338dSopenharmony_ci } 3779762338dSopenharmony_ci ASSERT_TRUE(callbacked); 3789762338dSopenharmony_ci ASSERT_EQ(devClass, DEVICE_CLASS_DEFAULT); 3799762338dSopenharmony_ci ASSERT_EQ(servInfo, std::string(TEST_SERVICE_NAME)); 3809762338dSopenharmony_ci ASSERT_EQ(servStatus, OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); 3819762338dSopenharmony_ci 3829762338dSopenharmony_ci callbacked = false; 3839762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST_SERVICE_NAME); 3849762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 3859762338dSopenharmony_ci 3869762338dSopenharmony_ci count = WAIT_COUNT; 3879762338dSopenharmony_ci while (!callbacked && count > 0) { 3889762338dSopenharmony_ci OsalMSleep(1); 3899762338dSopenharmony_ci count--; 3909762338dSopenharmony_ci } 3919762338dSopenharmony_ci ASSERT_TRUE(callbacked); 3929762338dSopenharmony_ci ASSERT_EQ(devClass, DEVICE_CLASS_DEFAULT); 3939762338dSopenharmony_ci ASSERT_EQ(servInfo, std::string(TEST_SERVICE_NAME)); 3949762338dSopenharmony_ci ASSERT_EQ(servStatus, OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_STOP); 3959762338dSopenharmony_ci 3969762338dSopenharmony_ci status = servmgr->UnregisterServiceStatusListener(listener); 3979762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 3989762338dSopenharmony_ci} 3999762338dSopenharmony_ci 4009762338dSopenharmony_ci/** 4019762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_Pnp_0100 4029762338dSopenharmony_ci * @tc.name: Test service status listener update service info 4039762338dSopenharmony_ci * @tc.size: Medium 4049762338dSopenharmony_ci * @tc.level: level 1 4059762338dSopenharmony_ci */ 4069762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_Pnp_0100, Function | MediumTest | Level1) 4079762338dSopenharmony_ci{ 4089762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 4099762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 4109762338dSopenharmony_ci devmgr->UnloadDevice(TEST_SERVICE_NAME); 4119762338dSopenharmony_ci 4129762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 4139762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 4149762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 4159762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 4169762338dSopenharmony_ci ASSERT_TRUE(sampleService == nullptr); 4179762338dSopenharmony_ci 4189762338dSopenharmony_ci TestServiceListenerStop(devmgr, servmgr); 4199762338dSopenharmony_ci} 4209762338dSopenharmony_ci 4219762338dSopenharmony_ci/* 4229762338dSopenharmony_ci * Test service status listener update service info 4239762338dSopenharmony_ci */ 4249762338dSopenharmony_civoid HdfServiceMangerHdiTest::TestSampleService(sptr<IRemoteObject>& sampleService, 4259762338dSopenharmony_ci const sptr<IDeviceManager>& devmgr, const sptr<IServiceManager>& servmgr) 4269762338dSopenharmony_ci{ 4279762338dSopenharmony_ci std::string servInfo; 4289762338dSopenharmony_ci uint16_t devClass; 4299762338dSopenharmony_ci uint16_t servStatus; 4309762338dSopenharmony_ci bool callbacked = false; 4319762338dSopenharmony_ci ::OHOS::sptr<IServStatListener> listener 4329762338dSopenharmony_ci = new ServStatListener( 4339762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 4349762338dSopenharmony_ci if (status.serviceName == std::string(TEST_SERVICE_NAME) && 4359762338dSopenharmony_ci status.status == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_CHANGE) { 4369762338dSopenharmony_ci HDF_LOGI("sample service status callback"); 4379762338dSopenharmony_ci servInfo = status.info; 4389762338dSopenharmony_ci devClass = status.deviceClass; 4399762338dSopenharmony_ci servStatus = status.status; 4409762338dSopenharmony_ci callbacked = true; 4419762338dSopenharmony_ci } 4429762338dSopenharmony_ci })); 4439762338dSopenharmony_ci 4449762338dSopenharmony_ci int status = servmgr->RegisterServiceStatusListener(listener, DEVICE_CLASS_DEFAULT); 4459762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 4469762338dSopenharmony_ci constexpr int FIRST_WAIT = 20; 4479762338dSopenharmony_ci OsalMSleep(FIRST_WAIT); // skip callback on register 4489762338dSopenharmony_ci OHOS::MessageParcel data; 4499762338dSopenharmony_ci OHOS::MessageParcel reply; 4509762338dSopenharmony_ci OHOS::MessageOption option; 4519762338dSopenharmony_ci bool res = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 4529762338dSopenharmony_ci ASSERT_EQ(res, true); 4539762338dSopenharmony_ci std::string info = "foo"; 4549762338dSopenharmony_ci data.WriteCString(info.data()); 4559762338dSopenharmony_ci callbacked = false; 4569762338dSopenharmony_ci status = sampleService->SendRequest(SAMPLE_UPDATE_SERVIE, data, reply, option); 4579762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 4589762338dSopenharmony_ci constexpr int WAIT_COUNT = 300; 4599762338dSopenharmony_ci int count = WAIT_COUNT; 4609762338dSopenharmony_ci while (!callbacked && count > 0) { 4619762338dSopenharmony_ci OsalMSleep(1); 4629762338dSopenharmony_ci count--; 4639762338dSopenharmony_ci } 4649762338dSopenharmony_ci ASSERT_TRUE(callbacked); 4659762338dSopenharmony_ci ASSERT_EQ(devClass, DEVICE_CLASS_DEFAULT); 4669762338dSopenharmony_ci ASSERT_EQ(servInfo, info); 4679762338dSopenharmony_ci int ret = devmgr->UnloadDevice(TEST_SERVICE_NAME); 4689762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 4699762338dSopenharmony_ci 4709762338dSopenharmony_ci status = servmgr->UnregisterServiceStatusListener(listener); 4719762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 4729762338dSopenharmony_ci} 4739762338dSopenharmony_ci 4749762338dSopenharmony_ci/** 4759762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_Pnp_0500 4769762338dSopenharmony_ci * @tc.name: Test service loadDevice 4779762338dSopenharmony_ci * @tc.size: Medium 4789762338dSopenharmony_ci * @tc.level: level 1 4799762338dSopenharmony_ci */ 4809762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_Pnp_0500, Function | MediumTest | Level1) 4819762338dSopenharmony_ci{ 4829762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 4839762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 4849762338dSopenharmony_ci devmgr->UnloadDevice(TEST_SERVICE_NAME); 4859762338dSopenharmony_ci 4869762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 4879762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 4889762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 4899762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 4909762338dSopenharmony_ci ASSERT_TRUE(sampleService == nullptr); 4919762338dSopenharmony_ci 4929762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 4939762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 4949762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 4959762338dSopenharmony_ci sampleService = servmgr->GetService(TEST_SERVICE_NAME); 4969762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 4979762338dSopenharmony_ci 4989762338dSopenharmony_ci TestSampleService(sampleService, devmgr, servmgr); 4999762338dSopenharmony_ci} 5009762338dSopenharmony_ci/** 5019762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_Pnp_0200 5029762338dSopenharmony_ci * @tc.name: Test service status listener unregister 5039762338dSopenharmony_ci * @tc.size: Medium 5049762338dSopenharmony_ci * @tc.level: level 1 5059762338dSopenharmony_ci */ 5069762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_Pnp_0200, Function | MediumTest | Level1) 5079762338dSopenharmony_ci{ 5089762338dSopenharmony_ci constexpr int SLEEP_TIME = 10; 5099762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 5109762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 5119762338dSopenharmony_ci devmgr->UnloadDevice(TEST_SERVICE_NAME); 5129762338dSopenharmony_ci 5139762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 5149762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 5159762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 5169762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 5179762338dSopenharmony_ci ASSERT_TRUE(sampleService == nullptr); 5189762338dSopenharmony_ci 5199762338dSopenharmony_ci std::string servInfo; 5209762338dSopenharmony_ci uint16_t devClass; 5219762338dSopenharmony_ci uint16_t servStatus; 5229762338dSopenharmony_ci bool callbacked = false; 5239762338dSopenharmony_ci ::OHOS::sptr<IServStatListener> listener 5249762338dSopenharmony_ci = new ServStatListener( 5259762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 5269762338dSopenharmony_ci HDF_LOGI("service status callback"); 5279762338dSopenharmony_ci if (status.serviceName == std::string(TEST_SERVICE_NAME) && 5289762338dSopenharmony_ci status.status == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { 5299762338dSopenharmony_ci servInfo = status.info; 5309762338dSopenharmony_ci devClass = status.deviceClass; 5319762338dSopenharmony_ci servStatus = status.status; 5329762338dSopenharmony_ci callbacked = true; 5339762338dSopenharmony_ci } 5349762338dSopenharmony_ci })); 5359762338dSopenharmony_ci 5369762338dSopenharmony_ci int status = servmgr->RegisterServiceStatusListener(listener, DEVICE_CLASS_DEFAULT); 5379762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 5389762338dSopenharmony_ci 5399762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 5409762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 5419762338dSopenharmony_ci 5429762338dSopenharmony_ci constexpr int WAIT_COUNT = 300; 5439762338dSopenharmony_ci int count = WAIT_COUNT; 5449762338dSopenharmony_ci while (!callbacked && count > 0) { 5459762338dSopenharmony_ci OsalMSleep(1); 5469762338dSopenharmony_ci count--; 5479762338dSopenharmony_ci } 5489762338dSopenharmony_ci ASSERT_TRUE(callbacked); 5499762338dSopenharmony_ci ASSERT_EQ(devClass, DEVICE_CLASS_DEFAULT); 5509762338dSopenharmony_ci ASSERT_EQ(servInfo, std::string(TEST_SERVICE_NAME)); 5519762338dSopenharmony_ci ASSERT_EQ(servStatus, OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); 5529762338dSopenharmony_ci 5539762338dSopenharmony_ci sampleService = servmgr->GetService(TEST_SERVICE_NAME); 5549762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 5559762338dSopenharmony_ci 5569762338dSopenharmony_ci status = servmgr->UnregisterServiceStatusListener(listener); 5579762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 5589762338dSopenharmony_ci 5599762338dSopenharmony_ci callbacked = false; 5609762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST_SERVICE_NAME); 5619762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 5629762338dSopenharmony_ci 5639762338dSopenharmony_ci OsalMSleep(SLEEP_TIME); 5649762338dSopenharmony_ci ASSERT_FALSE(callbacked); 5659762338dSopenharmony_ci 5669762338dSopenharmony_ci ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 5679762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 5689762338dSopenharmony_ci} 5699762338dSopenharmony_ci 5709762338dSopenharmony_ci/** 5719762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_Memory_0100 5729762338dSopenharmony_ci * @tc.name: smq test normal read/write 5739762338dSopenharmony_ci * @tc.size: Medium 5749762338dSopenharmony_ci * @tc.level: level 1 5759762338dSopenharmony_ci */ 5769762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_Memory_0100, Function | MediumTest | Level1) 5779762338dSopenharmony_ci{ 5789762338dSopenharmony_ci HDF_LOGI("%{public}s:%{public}d", __func__, __LINE__); 5799762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 5809762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 5819762338dSopenharmony_ci 5829762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 5839762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 5849762338dSopenharmony_ci 5859762338dSopenharmony_ci OHOS::MessageParcel data; 5869762338dSopenharmony_ci OHOS::MessageParcel reply; 5879762338dSopenharmony_ci OHOS::MessageOption option; 5889762338dSopenharmony_ci std::unique_ptr<SharedMemQueue<SampleSmqElement>> smq = 5899762338dSopenharmony_ci std::make_unique<SharedMemQueue<SampleSmqElement>>(SMQ_TEST_QUEUE_SIZE, SmqType::SYNCED_SMQ); 5909762338dSopenharmony_ci ASSERT_TRUE(smq->IsGood()); 5919762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 5929762338dSopenharmony_ci ASSERT_EQ(ret, true); 5939762338dSopenharmony_ci ret = smq->GetMeta()->Marshalling(data); 5949762338dSopenharmony_ci ASSERT_TRUE(ret); 5959762338dSopenharmony_ci data.WriteUint32(1); 5969762338dSopenharmony_ci 5979762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_TRANS_SMQ, data, reply, option); 5989762338dSopenharmony_ci ASSERT_EQ(status, 0); 5999762338dSopenharmony_ci 6009762338dSopenharmony_ci constexpr int SEND_TIMES = 20; 6019762338dSopenharmony_ci for (size_t i = 0; i < SEND_TIMES; i++) { 6029762338dSopenharmony_ci SampleSmqElement t = {0}; 6039762338dSopenharmony_ci t.data32 = i; 6049762338dSopenharmony_ci t.data64 = i + 1; 6059762338dSopenharmony_ci 6069762338dSopenharmony_ci HDF_LOGI("%{public}s:write smq message %{public}zu", __func__, i); 6079762338dSopenharmony_ci auto status = smq->Write(&t, 1, OHOS::MillisecToNanosec(SMQ_TEST_WAIT_TIME)); 6089762338dSopenharmony_ci ASSERT_EQ(status, 0); 6099762338dSopenharmony_ci } 6109762338dSopenharmony_ci} 6119762338dSopenharmony_ci 6129762338dSopenharmony_ci/** 6139762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_Memory_0200 6149762338dSopenharmony_ci * @tc.name: smq test with overflow wait 6159762338dSopenharmony_ci * @tc.size: Medium 6169762338dSopenharmony_ci * @tc.level: level 1 6179762338dSopenharmony_ci */ 6189762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_Memory_0200, Function | MediumTest | Level1) 6199762338dSopenharmony_ci{ 6209762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 6219762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 6229762338dSopenharmony_ci 6239762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 6249762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 6259762338dSopenharmony_ci 6269762338dSopenharmony_ci OHOS::MessageParcel data; 6279762338dSopenharmony_ci OHOS::MessageParcel reply; 6289762338dSopenharmony_ci OHOS::MessageOption option; 6299762338dSopenharmony_ci std::unique_ptr<SharedMemQueue<SampleSmqElement>> smq = 6309762338dSopenharmony_ci std::make_unique<SharedMemQueue<SampleSmqElement>>(SMQ_TEST_QUEUE_SIZE, SmqType::SYNCED_SMQ); 6319762338dSopenharmony_ci ASSERT_TRUE(smq->IsGood()); 6329762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 6339762338dSopenharmony_ci ASSERT_EQ(ret, true); 6349762338dSopenharmony_ci constexpr uint32_t ELEMENT_SIZE = 2; 6359762338dSopenharmony_ci ret = smq->GetMeta()->Marshalling(data); 6369762338dSopenharmony_ci ASSERT_TRUE(ret); 6379762338dSopenharmony_ci 6389762338dSopenharmony_ci data.WriteUint32(ELEMENT_SIZE); 6399762338dSopenharmony_ci int status = sampleService->SendRequest(SAMPLE_TRANS_SMQ, data, reply, option); 6409762338dSopenharmony_ci ASSERT_EQ(status, 0); 6419762338dSopenharmony_ci 6429762338dSopenharmony_ci constexpr int SEND_TIMES = 20; 6439762338dSopenharmony_ci for (int i = 0; i < SEND_TIMES; i++) { 6449762338dSopenharmony_ci SampleSmqElement t[ELEMENT_SIZE] = {}; 6459762338dSopenharmony_ci t[0].data32 = i; 6469762338dSopenharmony_ci t[0].data64 = i + 1; 6479762338dSopenharmony_ci t[1].data32 = i + 1; 6489762338dSopenharmony_ci t[1].data64 = i + 1; 6499762338dSopenharmony_ci HDF_LOGI("%{public}s:write smq message %{public}d", __func__, i); 6509762338dSopenharmony_ci auto status = smq->Write(&t[0], ELEMENT_SIZE, OHOS::MillisecToNanosec(SMQ_TEST_WAIT_TIME)); 6519762338dSopenharmony_ci ASSERT_EQ(status, 0); 6529762338dSopenharmony_ci } 6539762338dSopenharmony_ci} 6549762338dSopenharmony_ci 6559762338dSopenharmony_ci/** 6569762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_Memory_0300 6579762338dSopenharmony_ci * @tc.name: smq test UNSYNC_SMQ 6589762338dSopenharmony_ci * @tc.size: Medium 6599762338dSopenharmony_ci * @tc.level: level 1 6609762338dSopenharmony_ci */ 6619762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_Memory_0300, Function | MediumTest | Level1) 6629762338dSopenharmony_ci{ 6639762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 6649762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 6659762338dSopenharmony_ci 6669762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 6679762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 6689762338dSopenharmony_ci 6699762338dSopenharmony_ci OHOS::MessageParcel data; 6709762338dSopenharmony_ci OHOS::MessageParcel reply; 6719762338dSopenharmony_ci OHOS::MessageOption option; 6729762338dSopenharmony_ci 6739762338dSopenharmony_ci std::unique_ptr<SharedMemQueue<SampleSmqElement>> smq = 6749762338dSopenharmony_ci std::make_unique<SharedMemQueue<SampleSmqElement>>(SMQ_TEST_QUEUE_SIZE, SmqType::UNSYNC_SMQ); 6759762338dSopenharmony_ci ASSERT_TRUE(smq->IsGood()); 6769762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 6779762338dSopenharmony_ci ASSERT_EQ(ret, true); 6789762338dSopenharmony_ci constexpr uint32_t ELEMENT_SIZE = 2; 6799762338dSopenharmony_ci ret = smq->GetMeta()->Marshalling(data); 6809762338dSopenharmony_ci ASSERT_TRUE(ret); 6819762338dSopenharmony_ci data.WriteUint32(ELEMENT_SIZE); 6829762338dSopenharmony_ci auto status = sampleService->SendRequest(SAMPLE_TRANS_SMQ, data, reply, option); 6839762338dSopenharmony_ci ASSERT_EQ(status, 0); 6849762338dSopenharmony_ci 6859762338dSopenharmony_ci SampleSmqElement t[ELEMENT_SIZE] = {}; 6869762338dSopenharmony_ci status = smq->Write(&t[0], ELEMENT_SIZE); 6879762338dSopenharmony_ci EXPECT_NE(status, 0); 6889762338dSopenharmony_ci constexpr int SEND_TIMES = 20; 6899762338dSopenharmony_ci for (int i = 0; i < SEND_TIMES; i++) { 6909762338dSopenharmony_ci t[0].data32 = i; 6919762338dSopenharmony_ci t[0].data64 = i + 1; 6929762338dSopenharmony_ci t[1].data32 = i + 1; 6939762338dSopenharmony_ci t[1].data64 = i + 1; 6949762338dSopenharmony_ci HDF_LOGI("%{public}s:write smq message %{public}d", __func__, i); 6959762338dSopenharmony_ci status = smq->WriteNonBlocking(&t[0], ELEMENT_SIZE); 6969762338dSopenharmony_ci ASSERT_EQ(status, 0); 6979762338dSopenharmony_ci } 6989762338dSopenharmony_ci} 6999762338dSopenharmony_ci 7009762338dSopenharmony_ci/** 7019762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0700 7029762338dSopenharmony_ci * @tc.name: Test service status listener get serviec callback on register 7039762338dSopenharmony_ci * @tc.size: Medium 7049762338dSopenharmony_ci * @tc.level: level 1 7059762338dSopenharmony_ci */ 7069762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0700, Function | MediumTest | Level1) 7079762338dSopenharmony_ci{ 7089762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 7099762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 7109762338dSopenharmony_ci 7119762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 7129762338dSopenharmony_ci ASSERT_NE(sampleService, nullptr); 7139762338dSopenharmony_ci 7149762338dSopenharmony_ci bool callbacked = false; 7159762338dSopenharmony_ci bool sampleServiceStarted = false; 7169762338dSopenharmony_ci uint16_t servStatus = 0; 7179762338dSopenharmony_ci ::OHOS::sptr<IServStatListener> listener 7189762338dSopenharmony_ci = new ServStatListener( 7199762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 7209762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 7219762338dSopenharmony_ci callbacked = true; 7229762338dSopenharmony_ci if (status.serviceName == std::string(TEST_SERVICE_NAME)) { 7239762338dSopenharmony_ci sampleServiceStarted = true; 7249762338dSopenharmony_ci servStatus = status.status; 7259762338dSopenharmony_ci } 7269762338dSopenharmony_ci })); 7279762338dSopenharmony_ci 7289762338dSopenharmony_ci int status = servmgr->RegisterServiceStatusListener(listener, DEVICE_CLASS_DEFAULT); 7299762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 7309762338dSopenharmony_ci constexpr int WAIT_COUNT = 100; 7319762338dSopenharmony_ci int count = WAIT_COUNT; 7329762338dSopenharmony_ci while (!sampleServiceStarted && count > 0) { 7339762338dSopenharmony_ci OsalMSleep(1); 7349762338dSopenharmony_ci count--; 7359762338dSopenharmony_ci } 7369762338dSopenharmony_ci ASSERT_TRUE(callbacked); 7379762338dSopenharmony_ci ASSERT_TRUE(sampleServiceStarted); 7389762338dSopenharmony_ci ASSERT_EQ(servStatus, OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); 7399762338dSopenharmony_ci status = servmgr->UnregisterServiceStatusListener(listener); 7409762338dSopenharmony_ci ASSERT_EQ(status, HDF_SUCCESS); 7419762338dSopenharmony_ci} 7429762338dSopenharmony_ci 7439762338dSopenharmony_ci/** 7449762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_InterfaceQuery_0100 7459762338dSopenharmony_ci * @tc.name: Test get service set by interfacedesc 7469762338dSopenharmony_ci * @tc.size: Medium 7479762338dSopenharmony_ci * @tc.level: level 1 7489762338dSopenharmony_ci */ 7499762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_InterfaceQuery_0100, Function | MediumTest | Level1) 7509762338dSopenharmony_ci{ 7519762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 7529762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 7539762338dSopenharmony_ci std::vector<std::string> serviceNames; 7549762338dSopenharmony_ci int ret = servmgr->ListServiceByInterfaceDesc(serviceNames, TEST_SERVICE_INTERFACE_DESC_N); 7559762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 7569762338dSopenharmony_ci ASSERT_FALSE(serviceNames.empty()); 7579762338dSopenharmony_ci ASSERT_TRUE(serviceNames.front().compare(TEST_SERVICE_NAME) == 0); 7589762338dSopenharmony_ci} 7599762338dSopenharmony_ci#endif 7609762338dSopenharmony_ci 7619762338dSopenharmony_ci/** 7629762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_InterfaceQuery_0200 7639762338dSopenharmony_ci * @tc.name: Test get service set by interfacedesc 7649762338dSopenharmony_ci * @tc.size: Medium 7659762338dSopenharmony_ci * @tc.level: level 1 7669762338dSopenharmony_ci */ 7679762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_InterfaceQuery_0200, Function | MediumTest | Level1) 7689762338dSopenharmony_ci{ 7699762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 7709762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 7719762338dSopenharmony_ci std::vector<std::string> serviceNames; 7729762338dSopenharmony_ci int ret = servmgr->ListServiceByInterfaceDesc(serviceNames, TEST_SERVICE_INTERFACE_DESC_INVALID); 7739762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 7749762338dSopenharmony_ci ASSERT_TRUE(serviceNames.empty()); 7759762338dSopenharmony_ci} 7769762338dSopenharmony_ci 7779762338dSopenharmony_ci/** 7789762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_InterfaceQuery_0300 7799762338dSopenharmony_ci * @tc.name: Test get service set by interfacedesc 7809762338dSopenharmony_ci * @tc.size: Medium 7819762338dSopenharmony_ci * @tc.level: level 1 7829762338dSopenharmony_ci */ 7839762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_InterfaceQuery_0300, Function | MediumTest | Level1) 7849762338dSopenharmony_ci{ 7859762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 7869762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 7879762338dSopenharmony_ci std::vector<std::string> serviceNames; 7889762338dSopenharmony_ci int ret = servmgr->ListServiceByInterfaceDesc(serviceNames, TEST_SERVICE_INTERFACE_DESC_VOID); 7899762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_ERR_INVALID_PARAM); 7909762338dSopenharmony_ci ASSERT_TRUE(serviceNames.empty()); 7919762338dSopenharmony_ci} 7929762338dSopenharmony_ci 7939762338dSopenharmony_ci/** 7949762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_InterfaceQuery_0400 7959762338dSopenharmony_ci * @tc.name: Test get service set by interfacedesc 7969762338dSopenharmony_ci * @tc.size: Medium 7979762338dSopenharmony_ci * @tc.level: level 1 7989762338dSopenharmony_ci */ 7999762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_InterfaceQuery_0400, Function | MediumTest | Level1) 8009762338dSopenharmony_ci{ 8019762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 8029762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 8039762338dSopenharmony_ci std::vector<std::string> serviceNames; 8049762338dSopenharmony_ci int ret = servmgr->ListServiceByInterfaceDesc(serviceNames, TEST_SERVICE_INTERFACE_DESC_NULL); 8059762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_ERR_INVALID_PARAM); 8069762338dSopenharmony_ci ASSERT_TRUE(serviceNames.empty()); 8079762338dSopenharmony_ci} 8089762338dSopenharmony_ci 8099762338dSopenharmony_ci#ifdef SAMPLE_SHIELD 8109762338dSopenharmony_ci/** 8119762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_InterfaceQuery_0500 8129762338dSopenharmony_ci * @tc.name: Test get service set by interfacedesc 8139762338dSopenharmony_ci * @tc.size: Medium 8149762338dSopenharmony_ci * @tc.level: level 1 8159762338dSopenharmony_ci */ 8169762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_InterfaceQuery_0500, Function | MediumTest | Level1) 8179762338dSopenharmony_ci{ 8189762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 8199762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 8209762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST1_SERVICE_NAME); 8219762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 8229762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 8239762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 8249762338dSopenharmony_ci OsalMSleep(WAIT_LOAD_UNLOAD_TIME); 8259762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 8269762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 8279762338dSopenharmony_ci auto sample1Service = servmgr->GetService(TEST1_SERVICE_NAME); 8289762338dSopenharmony_ci ASSERT_TRUE(sample1Service != nullptr); 8299762338dSopenharmony_ci 8309762338dSopenharmony_ci std::vector<std::string> serviceNames; 8319762338dSopenharmony_ci ret = servmgr->ListServiceByInterfaceDesc(serviceNames, TEST_SERVICE_INTERFACE_DESC_N); 8329762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 8339762338dSopenharmony_ci constexpr int sampleServiceCount = 2; 8349762338dSopenharmony_ci ASSERT_TRUE(serviceNames.size() == sampleServiceCount); 8359762338dSopenharmony_ci ASSERT_TRUE(serviceNames[0].compare(TEST_SERVICE_NAME) == 0); 8369762338dSopenharmony_ci ASSERT_TRUE(serviceNames[1].compare(TEST1_SERVICE_NAME) == 0); 8379762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST1_SERVICE_NAME); 8389762338dSopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 8399762338dSopenharmony_ci} 8409762338dSopenharmony_ci#endif 8419762338dSopenharmony_ci 8429762338dSopenharmony_ci/** 8439762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0800 8449762338dSopenharmony_ci * @tc.name: ListAllServiceTest 8459762338dSopenharmony_ci * @tc.size: Medium 8469762338dSopenharmony_ci * @tc.level: level 1 8479762338dSopenharmony_ci */ 8489762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0800, Function | MediumTest | Level1) 8499762338dSopenharmony_ci{ 8509762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 8519762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 8529762338dSopenharmony_ci 8539762338dSopenharmony_ci std::vector<HdiServiceInfo> serviceInfos; 8549762338dSopenharmony_ci int ret = servmgr->ListAllService(serviceInfos); 8559762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 8569762338dSopenharmony_ci ASSERT_TRUE(serviceInfos.size() != 0); 8579762338dSopenharmony_ci} 8589762338dSopenharmony_ci 8599762338dSopenharmony_ci/** 8609762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_0900 8619762338dSopenharmony_ci * @tc.name: ListAllServiceTest 8629762338dSopenharmony_ci * @tc.size: Medium 8639762338dSopenharmony_ci * @tc.level: level 1 8649762338dSopenharmony_ci */ 8659762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_0900, Function | MediumTest | Level1) 8669762338dSopenharmony_ci{ 8679762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 8689762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 8699762338dSopenharmony_ci 8709762338dSopenharmony_ci std::vector<HdiDevHostInfo> deviceInfos; 8719762338dSopenharmony_ci int ret = devmgr->ListAllDevice(deviceInfos); 8729762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 8739762338dSopenharmony_ci ASSERT_TRUE(deviceInfos.size() != 0); 8749762338dSopenharmony_ci} 8759762338dSopenharmony_ci 8769762338dSopenharmony_ci#ifdef SAMPLE_SHIELD 8779762338dSopenharmony_ci/** 8789762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1000 8799762338dSopenharmony_ci * @tc.name: EndSampleHostTest 8809762338dSopenharmony_ci * @tc.size: Medium 8819762338dSopenharmony_ci * @tc.level: level 1 8829762338dSopenharmony_ci */ 8839762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1000, Function | MediumTest | Level1) 8849762338dSopenharmony_ci{ 8859762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 8869762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 8879762338dSopenharmony_ci 8889762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 8899762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 8909762338dSopenharmony_ci 8919762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST1_SERVICE_NAME); 8929762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 8939762338dSopenharmony_ci auto sample1Service = servmgr->GetService(TEST1_SERVICE_NAME); 8949762338dSopenharmony_ci constexpr int waitCount = 1000; 8959762338dSopenharmony_ci constexpr int msleepTime = 10; 8969762338dSopenharmony_ci constexpr int waitHostStart = 100; 8979762338dSopenharmony_ci uint32_t cnt = 0; 8989762338dSopenharmony_ci while (sample1Service == nullptr && cnt < waitCount) { 8999762338dSopenharmony_ci OsalMSleep(msleepTime); 9009762338dSopenharmony_ci sample1Service = servmgr->GetService(TEST1_SERVICE_NAME); 9019762338dSopenharmony_ci cnt++; 9029762338dSopenharmony_ci } 9039762338dSopenharmony_ci ASSERT_TRUE(sample1Service != nullptr); 9049762338dSopenharmony_ci ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 9059762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9069762338dSopenharmony_ci cnt = 0; 9079762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 9089762338dSopenharmony_ci while (sampleService == nullptr && cnt < waitCount) { 9099762338dSopenharmony_ci OsalMSleep(msleepTime); 9109762338dSopenharmony_ci sampleService = servmgr->GetService(TEST_SERVICE_NAME); 9119762338dSopenharmony_ci cnt++; 9129762338dSopenharmony_ci } 9139762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 9149762338dSopenharmony_ci 9159762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST1_SERVICE_NAME); 9169762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9179762338dSopenharmony_ci sample1Service = servmgr->GetService(TEST1_SERVICE_NAME); 9189762338dSopenharmony_ci OsalMSleep(msleepTime); 9199762338dSopenharmony_ci 9209762338dSopenharmony_ci OHOS::MessageParcel data; 9219762338dSopenharmony_ci OHOS::MessageParcel reply; 9229762338dSopenharmony_ci OHOS::MessageOption option; 9239762338dSopenharmony_ci ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 9249762338dSopenharmony_ci ASSERT_EQ(ret, true); 9259762338dSopenharmony_ci 9269762338dSopenharmony_ci ret = sampleService->SendRequest(SAMPLE_END_HOST, data, reply, option); 9279762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9289762338dSopenharmony_ci OsalMSleep(waitHostStart); 9299762338dSopenharmony_ci 9309762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST1_SERVICE_NAME); 9319762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9329762338dSopenharmony_ci OsalMSleep(msleepTime); 9339762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST_SERVICE_NAME); 9349762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9359762338dSopenharmony_ci} 9369762338dSopenharmony_ci 9379762338dSopenharmony_ci/** 9389762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1100 9399762338dSopenharmony_ci * @tc.name: InjectPmTest 9409762338dSopenharmony_ci * @tc.size: Medium 9419762338dSopenharmony_ci * @tc.level: level 1 9429762338dSopenharmony_ci */ 9439762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1100, Function | MediumTest | Level1) 9449762338dSopenharmony_ci{ 9459762338dSopenharmony_ci auto servmgr = IServiceManager::Get(); 9469762338dSopenharmony_ci ASSERT_TRUE(servmgr != nullptr); 9479762338dSopenharmony_ci 9489762338dSopenharmony_ci auto devmgr = IDeviceManager::Get(); 9499762338dSopenharmony_ci ASSERT_TRUE(devmgr != nullptr); 9509762338dSopenharmony_ci 9519762338dSopenharmony_ci int ret = devmgr->LoadDevice(TEST1_SERVICE_NAME); 9529762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9539762338dSopenharmony_ci auto sample1Service = servmgr->GetService(TEST1_SERVICE_NAME); 9549762338dSopenharmony_ci constexpr int waitCount = 1000; 9559762338dSopenharmony_ci constexpr int waitHostStart = 100; 9569762338dSopenharmony_ci constexpr int msleepTime = 10; 9579762338dSopenharmony_ci uint32_t cnt = 0; 9589762338dSopenharmony_ci while (sample1Service == nullptr && cnt < waitCount) { 9599762338dSopenharmony_ci OsalMSleep(msleepTime); 9609762338dSopenharmony_ci sample1Service = servmgr->GetService(TEST1_SERVICE_NAME); 9619762338dSopenharmony_ci cnt++; 9629762338dSopenharmony_ci } 9639762338dSopenharmony_ci ASSERT_TRUE(sample1Service != nullptr); 9649762338dSopenharmony_ci ret = devmgr->LoadDevice(TEST_SERVICE_NAME); 9659762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9669762338dSopenharmony_ci auto sampleService = servmgr->GetService(TEST_SERVICE_NAME); 9679762338dSopenharmony_ci cnt = 0; 9689762338dSopenharmony_ci while (sampleService == nullptr && cnt < waitCount) { 9699762338dSopenharmony_ci OsalMSleep(msleepTime); 9709762338dSopenharmony_ci sampleService = servmgr->GetService(TEST_SERVICE_NAME); 9719762338dSopenharmony_ci cnt++; 9729762338dSopenharmony_ci } 9739762338dSopenharmony_ci ASSERT_TRUE(sampleService != nullptr); 9749762338dSopenharmony_ci 9759762338dSopenharmony_ci OHOS::MessageParcel data; 9769762338dSopenharmony_ci OHOS::MessageParcel reply; 9779762338dSopenharmony_ci OHOS::MessageOption option; 9789762338dSopenharmony_ci ret = data.WriteInterfaceToken(TEST_SERVICE_INTERFACE_DESC); 9799762338dSopenharmony_ci ASSERT_EQ(ret, true); 9809762338dSopenharmony_ci 9819762338dSopenharmony_ci ret = sampleService->SendRequest(SAMPLE_INJECT_PM, data, reply, option); 9829762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9839762338dSopenharmony_ci OsalMSleep(msleepTime); 9849762338dSopenharmony_ci ret = sampleService->SendRequest(SAMPLE_END_HOST, data, reply, option); 9859762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9869762338dSopenharmony_ci OsalMSleep(waitHostStart); 9879762338dSopenharmony_ci 9889762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST1_SERVICE_NAME); 9899762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9909762338dSopenharmony_ci OsalMSleep(msleepTime); 9919762338dSopenharmony_ci ret = devmgr->UnloadDevice(TEST_SERVICE_NAME); 9929762338dSopenharmony_ci ASSERT_TRUE(ret == HDF_SUCCESS); 9939762338dSopenharmony_ci} 9949762338dSopenharmony_ci#endif 9959762338dSopenharmony_ci 9969762338dSopenharmony_ci /** 9979762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1200 9989762338dSopenharmony_ci * @tc.name: ListenerTest001 9999762338dSopenharmony_ci * @tc.size: Medium 10009762338dSopenharmony_ci * @tc.level: level 1 10019762338dSopenharmony_ci */ 10029762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1200, Function | MediumTest | Level1) 10039762338dSopenharmony_ci{ 10049762338dSopenharmony_ci ::OHOS::sptr<ServStatListener> listener 10059762338dSopenharmony_ci = new ServStatListener( 10069762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 10079762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 10089762338dSopenharmony_ci })); 10099762338dSopenharmony_ci 10109762338dSopenharmony_ci MessageParcel data; 10119762338dSopenharmony_ci MessageParcel reply; 10129762338dSopenharmony_ci MessageOption option; 10139762338dSopenharmony_ci 10149762338dSopenharmony_ci // invalid code 10159762338dSopenharmony_ci int32_t ret = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_MAX, data, reply, option); 10169762338dSopenharmony_ci ASSERT_NE(ret, HDF_SUCCESS); 10179762338dSopenharmony_ci 10189762338dSopenharmony_ci // empty data 10199762338dSopenharmony_ci ret = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_NOTIFY, data, reply, option); 10209762338dSopenharmony_ci ASSERT_NE(ret, HDF_SUCCESS); 10219762338dSopenharmony_ci} 10229762338dSopenharmony_ci 10239762338dSopenharmony_ci /** 10249762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1300 10259762338dSopenharmony_ci * @tc.name: ListenerTest002 10269762338dSopenharmony_ci * @tc.size: Medium 10279762338dSopenharmony_ci * @tc.level: level 1 10289762338dSopenharmony_ci */ 10299762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1300, Function | MediumTest | Level1) 10309762338dSopenharmony_ci{ 10319762338dSopenharmony_ci ::OHOS::sptr<ServStatListener> listener 10329762338dSopenharmony_ci = new ServStatListener( 10339762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 10349762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 10359762338dSopenharmony_ci })); 10369762338dSopenharmony_ci 10379762338dSopenharmony_ci MessageParcel data; 10389762338dSopenharmony_ci MessageParcel reply; 10399762338dSopenharmony_ci MessageOption option; 10409762338dSopenharmony_ci 10419762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(IServStatListener::GetDescriptor()); 10429762338dSopenharmony_ci ASSERT_TRUE(ret); 10439762338dSopenharmony_ci int32_t reqRet = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_NOTIFY, data, reply, option); 10449762338dSopenharmony_ci ASSERT_NE(reqRet, HDF_SUCCESS); 10459762338dSopenharmony_ci} 10469762338dSopenharmony_ci 10479762338dSopenharmony_ci /** 10489762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1400 10499762338dSopenharmony_ci * @tc.name: ListenerTest003 10509762338dSopenharmony_ci * @tc.size: Medium 10519762338dSopenharmony_ci * @tc.level: level 1 10529762338dSopenharmony_ci */ 10539762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1400, Function | MediumTest | Level1) 10549762338dSopenharmony_ci{ 10559762338dSopenharmony_ci ::OHOS::sptr<ServStatListener> listener 10569762338dSopenharmony_ci = new ServStatListener( 10579762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 10589762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 10599762338dSopenharmony_ci })); 10609762338dSopenharmony_ci 10619762338dSopenharmony_ci MessageParcel data; 10629762338dSopenharmony_ci MessageParcel reply; 10639762338dSopenharmony_ci MessageOption option; 10649762338dSopenharmony_ci 10659762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(IServStatListener::GetDescriptor()); 10669762338dSopenharmony_ci ASSERT_TRUE(ret); 10679762338dSopenharmony_ci ret = data.WriteCString(""); 10689762338dSopenharmony_ci ASSERT_TRUE(ret); 10699762338dSopenharmony_ci 10709762338dSopenharmony_ci int32_t reqRet = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_NOTIFY, data, reply, option); 10719762338dSopenharmony_ci ASSERT_NE(reqRet, HDF_SUCCESS); 10729762338dSopenharmony_ci} 10739762338dSopenharmony_ci 10749762338dSopenharmony_ci /** 10759762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1500 10769762338dSopenharmony_ci * @tc.name: ListenerTest004 10779762338dSopenharmony_ci * @tc.size: Medium 10789762338dSopenharmony_ci * @tc.level: level 1 10799762338dSopenharmony_ci */ 10809762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1500, Function | MediumTest | Level1) 10819762338dSopenharmony_ci{ 10829762338dSopenharmony_ci ::OHOS::sptr<ServStatListener> listener 10839762338dSopenharmony_ci = new ServStatListener( 10849762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 10859762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 10869762338dSopenharmony_ci })); 10879762338dSopenharmony_ci 10889762338dSopenharmony_ci MessageParcel data; 10899762338dSopenharmony_ci MessageParcel reply; 10909762338dSopenharmony_ci MessageOption option; 10919762338dSopenharmony_ci 10929762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(IServStatListener::GetDescriptor()); 10939762338dSopenharmony_ci ASSERT_TRUE(ret); 10949762338dSopenharmony_ci ret = data.WriteCString("test_service"); 10959762338dSopenharmony_ci ASSERT_TRUE(ret); 10969762338dSopenharmony_ci 10979762338dSopenharmony_ci int32_t reqRet = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_NOTIFY, data, reply, option); 10989762338dSopenharmony_ci ASSERT_NE(reqRet, HDF_SUCCESS); 10999762338dSopenharmony_ci} 11009762338dSopenharmony_ci 11019762338dSopenharmony_ci /** 11029762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1600 11039762338dSopenharmony_ci * @tc.name: ListenerTest005 11049762338dSopenharmony_ci * @tc.size: Medium 11059762338dSopenharmony_ci * @tc.level: level 1 11069762338dSopenharmony_ci */ 11079762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1600, Function | MediumTest | Level1) 11089762338dSopenharmony_ci{ 11099762338dSopenharmony_ci ::OHOS::sptr<ServStatListener> listener 11109762338dSopenharmony_ci = new ServStatListener( 11119762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 11129762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 11139762338dSopenharmony_ci })); 11149762338dSopenharmony_ci 11159762338dSopenharmony_ci MessageParcel data; 11169762338dSopenharmony_ci MessageParcel reply; 11179762338dSopenharmony_ci MessageOption option; 11189762338dSopenharmony_ci 11199762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(IServStatListener::GetDescriptor()); 11209762338dSopenharmony_ci ASSERT_TRUE(ret); 11219762338dSopenharmony_ci ret = data.WriteCString("test_service"); 11229762338dSopenharmony_ci ASSERT_TRUE(ret); 11239762338dSopenharmony_ci // write deviceClass 11249762338dSopenharmony_ci ret = data.WriteUint16(DeviceClass::DEVICE_CLASS_DEFAULT); 11259762338dSopenharmony_ci ASSERT_TRUE(ret); 11269762338dSopenharmony_ci 11279762338dSopenharmony_ci int32_t reqRet = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_NOTIFY, data, reply, option); 11289762338dSopenharmony_ci ASSERT_NE(reqRet, HDF_SUCCESS); 11299762338dSopenharmony_ci} 11309762338dSopenharmony_ci 11319762338dSopenharmony_ci /** 11329762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1700 11339762338dSopenharmony_ci * @tc.name: ListenerTest006 11349762338dSopenharmony_ci * @tc.size: Medium 11359762338dSopenharmony_ci * @tc.level: level 1 11369762338dSopenharmony_ci */ 11379762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1700, Function | MediumTest | Level1) 11389762338dSopenharmony_ci{ 11399762338dSopenharmony_ci ::OHOS::sptr<ServStatListener> listener 11409762338dSopenharmony_ci = new ServStatListener( 11419762338dSopenharmony_ci ServStatListener::StatusCallback([&](const ServiceStatus &status) { 11429762338dSopenharmony_ci HDF_LOGI("service status callback, service is %{public}s", status.serviceName.data()); 11439762338dSopenharmony_ci })); 11449762338dSopenharmony_ci 11459762338dSopenharmony_ci MessageParcel data; 11469762338dSopenharmony_ci MessageParcel reply; 11479762338dSopenharmony_ci MessageOption option; 11489762338dSopenharmony_ci 11499762338dSopenharmony_ci bool ret = data.WriteInterfaceToken(IServStatListener::GetDescriptor()); 11509762338dSopenharmony_ci ASSERT_TRUE(ret); 11519762338dSopenharmony_ci ret = data.WriteCString("test_service"); 11529762338dSopenharmony_ci ASSERT_TRUE(ret); 11539762338dSopenharmony_ci // write deviceClass 11549762338dSopenharmony_ci ret = data.WriteUint16(DeviceClass::DEVICE_CLASS_DEFAULT); 11559762338dSopenharmony_ci ASSERT_TRUE(ret); 11569762338dSopenharmony_ci // write status 11579762338dSopenharmony_ci ret = data.WriteUint16(ServiceStatusType::SERVIE_STATUS_START); 11589762338dSopenharmony_ci ASSERT_TRUE(ret); 11599762338dSopenharmony_ci 11609762338dSopenharmony_ci int32_t reqRet = listener->OnRemoteRequest(SERVIE_STATUS_LISTENER_NOTIFY, data, reply, option); 11619762338dSopenharmony_ci ASSERT_EQ(reqRet, HDF_SUCCESS); 11629762338dSopenharmony_ci} 11639762338dSopenharmony_ci 11649762338dSopenharmony_ci /** 11659762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1800 11669762338dSopenharmony_ci * @tc.name: InvalidCodeTest001 11679762338dSopenharmony_ci * @tc.size: Medium 11689762338dSopenharmony_ci * @tc.level: level 1 11699762338dSopenharmony_ci */ 11709762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1800, Function | MediumTest | Level1) 11719762338dSopenharmony_ci{ 11729762338dSopenharmony_ci auto servmgr = OHOS::HDI::ServiceManager::V1_0::IServiceManager::Get(); 11739762338dSopenharmony_ci ASSERT_NE(servmgr, nullptr); 11749762338dSopenharmony_ci 11759762338dSopenharmony_ci sptr<IRemoteObject> remote = servmgr->GetService("hdf_device_manager"); 11769762338dSopenharmony_ci ASSERT_NE(remote, nullptr); 11779762338dSopenharmony_ci 11789762338dSopenharmony_ci MessageParcel data; 11799762338dSopenharmony_ci MessageParcel reply; 11809762338dSopenharmony_ci MessageOption option; 11819762338dSopenharmony_ci 11829762338dSopenharmony_ci ASSERT_TRUE(data.WriteInterfaceToken(IDeviceManager::GetDescriptor())); 11839762338dSopenharmony_ci int ret = remote->SendRequest(INVALID_CODE, data, reply, option); 11849762338dSopenharmony_ci EXPECT_EQ(ret, ERROR_CODE_WITH_INVALID_CODE); 11859762338dSopenharmony_ci} 11869762338dSopenharmony_ci 11879762338dSopenharmony_ci /** 11889762338dSopenharmony_ci * @tc.number: SUB_Driver_Manager_HdiCC_1900 11899762338dSopenharmony_ci * @tc.name: InvalidCodeTest002 11909762338dSopenharmony_ci * @tc.size: Medium 11919762338dSopenharmony_ci * @tc.level: level 1 11929762338dSopenharmony_ci */ 11939762338dSopenharmony_ciHWTEST_F(HdfServiceMangerHdiTest, SUB_Driver_Manager_HdiCC_1900, Function | MediumTest | Level1) 11949762338dSopenharmony_ci{ 11959762338dSopenharmony_ci auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 11969762338dSopenharmony_ci ASSERT_NE(saManager, nullptr); 11979762338dSopenharmony_ci sptr<IRemoteObject> remote = saManager->GetSystemAbility(DEVICE_SERVICE_MANAGER_SA_ID); 11989762338dSopenharmony_ci ASSERT_NE(remote, nullptr); 11999762338dSopenharmony_ci 12009762338dSopenharmony_ci MessageParcel data; 12019762338dSopenharmony_ci MessageParcel reply; 12029762338dSopenharmony_ci MessageOption option; 12039762338dSopenharmony_ci 12049762338dSopenharmony_ci ASSERT_TRUE(data.WriteInterfaceToken(OHOS::HDI::ServiceManager::V1_0::IServiceManager::GetDescriptor())); 12059762338dSopenharmony_ci int ret = remote->SendRequest(INVALID_CODE, data, reply, option); 12069762338dSopenharmony_ci ASSERT_EQ(ret, ERROR_CODE_WITH_INVALID_CODE); 12079762338dSopenharmony_ci} 12089762338dSopenharmony_ci} // namespace OHOS 1209