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