179a732c7Sopenharmony_ci/*
279a732c7Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
379a732c7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
479a732c7Sopenharmony_ci * you may not use this file except in compliance with the License.
579a732c7Sopenharmony_ci * You may obtain a copy of the License at
679a732c7Sopenharmony_ci *
779a732c7Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
879a732c7Sopenharmony_ci *
979a732c7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1079a732c7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1179a732c7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1279a732c7Sopenharmony_ci * See the License for the specific language governing permissions and
1379a732c7Sopenharmony_ci * limitations under the License.
1479a732c7Sopenharmony_ci */
1579a732c7Sopenharmony_ci
1679a732c7Sopenharmony_ci#include "UTTest_ipc_client_stub.h"
1779a732c7Sopenharmony_ci
1879a732c7Sopenharmony_ci#include <unistd.h>
1979a732c7Sopenharmony_ci
2079a732c7Sopenharmony_ci#include "device_manager.h"
2179a732c7Sopenharmony_ci#include "device_manager_impl.h"
2279a732c7Sopenharmony_ci#include "device_manager_ipc_interface_code.h"
2379a732c7Sopenharmony_ci#include "dm_constants.h"
2479a732c7Sopenharmony_ci#include "dm_device_info.h"
2579a732c7Sopenharmony_ci#include "mock/mock_ipc_client_stub.h"
2679a732c7Sopenharmony_ci#include "ipc_remote_broker.h"
2779a732c7Sopenharmony_ci#include "iremote_object.h"
2879a732c7Sopenharmony_ci#include "iservice_registry.h"
2979a732c7Sopenharmony_ci#include "system_ability_definition.h"
3079a732c7Sopenharmony_ci#include "ipc_client_manager.h"
3179a732c7Sopenharmony_ci#include "ipc_set_useroperation_req.h"
3279a732c7Sopenharmony_ci#include "ipc_cmd_register.h"
3379a732c7Sopenharmony_ci#include "ipc_skeleton.h"
3479a732c7Sopenharmony_ci#include "ipc_types.h"
3579a732c7Sopenharmony_ci#include "ipc_rsp.h"
3679a732c7Sopenharmony_ci#include "ipc_def.h"
3779a732c7Sopenharmony_ci
3879a732c7Sopenharmony_cinamespace OHOS {
3979a732c7Sopenharmony_cinamespace DistributedHardware {
4079a732c7Sopenharmony_civoid IpcClientStubTest::SetUp()
4179a732c7Sopenharmony_ci{
4279a732c7Sopenharmony_ci}
4379a732c7Sopenharmony_ci
4479a732c7Sopenharmony_civoid IpcClientStubTest::TearDown()
4579a732c7Sopenharmony_ci{
4679a732c7Sopenharmony_ci}
4779a732c7Sopenharmony_ci
4879a732c7Sopenharmony_civoid IpcClientStubTest::SetUpTestCase()
4979a732c7Sopenharmony_ci{
5079a732c7Sopenharmony_ci}
5179a732c7Sopenharmony_ci
5279a732c7Sopenharmony_civoid IpcClientStubTest::TearDownTestCase()
5379a732c7Sopenharmony_ci{
5479a732c7Sopenharmony_ci}
5579a732c7Sopenharmony_ci
5679a732c7Sopenharmony_cinamespace {
5779a732c7Sopenharmony_ci/**
5879a732c7Sopenharmony_ci * @tc.name: OnRemoteRequest_001
5979a732c7Sopenharmony_ci * @tc.desc: 1. set MessageOption not null
6079a732c7Sopenharmony_ci *              set MessageParcel not null
6179a732c7Sopenharmony_ci *              set MessageParcel not null
6279a732c7Sopenharmony_ci *           2. set set code is 999
6379a732c7Sopenharmony_ci *           3. call IpcClientStub OnRemoteRequest with parameter
6479a732c7Sopenharmony_ci *           4. check result is ERR_DM_FAILED
6579a732c7Sopenharmony_ci * @tc.type: FUNC
6679a732c7Sopenharmony_ci * @tc.require: AR000GHSJK
6779a732c7Sopenharmony_ci */
6879a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, OnRemoteRequest_001, testing::ext::TestSize.Level0)
6979a732c7Sopenharmony_ci{
7079a732c7Sopenharmony_ci    // 1. set MessageOption not null
7179a732c7Sopenharmony_ci    MessageOption option;
7279a732c7Sopenharmony_ci    // set MessageParcel not null
7379a732c7Sopenharmony_ci    MessageParcel data;
7479a732c7Sopenharmony_ci    // set MessageParcel not null
7579a732c7Sopenharmony_ci    MessageParcel reply;
7679a732c7Sopenharmony_ci    // 2. set set code is 999
7779a732c7Sopenharmony_ci    int code = 999;
7879a732c7Sopenharmony_ci    sptr<IpcClientStub> instance(new IpcClientStub());
7979a732c7Sopenharmony_ci    // 3. call IpcClientStub OnRemoteRequest with parameter
8079a732c7Sopenharmony_ci    int32_t result = instance->OnRemoteRequest(code, data, reply, option);
8179a732c7Sopenharmony_ci    if (result != DM_OK) {
8279a732c7Sopenharmony_ci        result = ERR_DM_FAILED;
8379a732c7Sopenharmony_ci    }
8479a732c7Sopenharmony_ci    // 4. check result is ERR_DM_FAILED
8579a732c7Sopenharmony_ci    ASSERT_EQ(result, ERR_DM_FAILED);
8679a732c7Sopenharmony_ci}
8779a732c7Sopenharmony_ci
8879a732c7Sopenharmony_ci/**
8979a732c7Sopenharmony_ci * @tc.name: OnRemoteRequest_002
9079a732c7Sopenharmony_ci * @tc.desc: 1. set MessageOption not null
9179a732c7Sopenharmony_ci *              set MessageParcel not null
9279a732c7Sopenharmony_ci *              set MessageParcel not null
9379a732c7Sopenharmony_ci *           2. set set code is SERVER_DEVICE_FA_NOTIFY
9479a732c7Sopenharmony_ci *           3. call IpcClientStub OnRemoteRequest with parameter
9579a732c7Sopenharmony_ci *           4. check result is ERR_DM_IPC_READ_FAILED
9679a732c7Sopenharmony_ci * @tc.type: FUNC
9779a732c7Sopenharmony_ci * @tc.require: AR000GHSJK
9879a732c7Sopenharmony_ci */
9979a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, OnRemoteRequest_002, testing::ext::TestSize.Level0)
10079a732c7Sopenharmony_ci{
10179a732c7Sopenharmony_ci    // 1. set MessageOption not null
10279a732c7Sopenharmony_ci    MessageOption option;
10379a732c7Sopenharmony_ci    // set MessageParcel not null
10479a732c7Sopenharmony_ci    MessageParcel data;
10579a732c7Sopenharmony_ci    // set MessageParcel not null
10679a732c7Sopenharmony_ci    MessageParcel reply;
10779a732c7Sopenharmony_ci    // 2. set set code is SERVER_DEVICE_FA_NOTIFY
10879a732c7Sopenharmony_ci    int code = SERVER_DEVICE_FA_NOTIFY;
10979a732c7Sopenharmony_ci    sptr<IpcClientStub> instance(new IpcClientStub());
11079a732c7Sopenharmony_ci    // 3. call IpcClientStub OnRemoteRequest with parameter
11179a732c7Sopenharmony_ci    int ret = instance->OnRemoteRequest(code, data, reply, option);
11279a732c7Sopenharmony_ci    // 4. check result is ERR_DM_IPC_READ_FAILED
11379a732c7Sopenharmony_ci    ASSERT_EQ(ret, ERR_DM_IPC_READ_FAILED);
11479a732c7Sopenharmony_ci}
11579a732c7Sopenharmony_ci
11679a732c7Sopenharmony_ci/**
11779a732c7Sopenharmony_ci * @tc.name: OnRemoteRequest_003
11879a732c7Sopenharmony_ci * @tc.type: FUNC
11979a732c7Sopenharmony_ci */
12079a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, OnRemoteRequest_003, testing::ext::TestSize.Level0)
12179a732c7Sopenharmony_ci{
12279a732c7Sopenharmony_ci    MessageOption option;
12379a732c7Sopenharmony_ci    MessageParcel data;
12479a732c7Sopenharmony_ci    MessageParcel reply;
12579a732c7Sopenharmony_ci    int code = GET_TRUST_DEVICE_LIST;
12679a732c7Sopenharmony_ci    std::shared_ptr<MockIpcClientStub> mockInstance = std::make_shared<MockIpcClientStub>();
12779a732c7Sopenharmony_ci    std::shared_ptr<IpcClientStub> ipcClientStub= mockInstance;
12879a732c7Sopenharmony_ci    EXPECT_CALL(*mockInstance, OnRemoteRequest(testing::_, testing::_, testing::_, testing::_))
12979a732c7Sopenharmony_ci                .Times(1).WillOnce(testing::Return(DM_OK));
13079a732c7Sopenharmony_ci    std::shared_ptr<IpcClientStub> instance = std::shared_ptr<IpcClientStub>(ipcClientStub);
13179a732c7Sopenharmony_ci    int ret = instance->OnRemoteRequest(code, data, reply, option);
13279a732c7Sopenharmony_ci    ASSERT_EQ(ret, DM_OK);
13379a732c7Sopenharmony_ci}
13479a732c7Sopenharmony_ci
13579a732c7Sopenharmony_ci/**
13679a732c7Sopenharmony_ci * @tc.name: SendCmd_001
13779a732c7Sopenharmony_ci * @tc.desc: 1. set set code is SERVER_DEVICE_FA_NOTIFY
13879a732c7Sopenharmony_ci *              set req is nullptr
13979a732c7Sopenharmony_ci *              set rsp is nullptr
14079a732c7Sopenharmony_ci *           2. call IpcClientStub SendCmd with parameter
14179a732c7Sopenharmony_ci *           3. check result is ERR_DM_IPC_SEND_REQUEST_FAILED
14279a732c7Sopenharmony_ci * @tc.type: FUNC
14379a732c7Sopenharmony_ci * @tc.require: AR000GHSJK
14479a732c7Sopenharmony_ci */
14579a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, SendCmd_001, testing::ext::TestSize.Level0)
14679a732c7Sopenharmony_ci{
14779a732c7Sopenharmony_ci    // 1. set set code is SERVER_DEVICE_FA_NOTIFY
14879a732c7Sopenharmony_ci    int cmdCode = SERVER_DEVICE_FA_NOTIFY;
14979a732c7Sopenharmony_ci    // set req is nullptr
15079a732c7Sopenharmony_ci    std::shared_ptr<IpcReq> req = nullptr;
15179a732c7Sopenharmony_ci    // set rsp is nullptr
15279a732c7Sopenharmony_ci    std::shared_ptr<IpcRsp> rsp = nullptr;
15379a732c7Sopenharmony_ci    sptr<IpcClientStub> instance(new IpcClientStub());
15479a732c7Sopenharmony_ci    // 2. call IpcClientStub SendCmd with parameter
15579a732c7Sopenharmony_ci    int ret = instance->SendCmd(cmdCode, req, rsp);
15679a732c7Sopenharmony_ci    // 3. check result is ERR_DM_IPC_SEND_REQUEST_FAILED
15779a732c7Sopenharmony_ci    ASSERT_EQ(ret, ERR_DM_IPC_SEND_REQUEST_FAILED);
15879a732c7Sopenharmony_ci}
15979a732c7Sopenharmony_ci
16079a732c7Sopenharmony_ci/**
16179a732c7Sopenharmony_ci * @tc.name: SendCmd_002
16279a732c7Sopenharmony_ci * @tc.type: FUNC
16379a732c7Sopenharmony_ci */
16479a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, SendCmd_002, testing::ext::TestSize.Level0)
16579a732c7Sopenharmony_ci{
16679a732c7Sopenharmony_ci    int result = 305;
16779a732c7Sopenharmony_ci    int cmdCode = IPC_MSG_BUTT;
16879a732c7Sopenharmony_ci    std::shared_ptr<IpcReq> req = nullptr;
16979a732c7Sopenharmony_ci    std::shared_ptr<IpcRsp> rsp = nullptr;
17079a732c7Sopenharmony_ci    sptr<IpcClientStub> instance(new IpcClientStub());
17179a732c7Sopenharmony_ci    int ret = instance->SendCmd(cmdCode, req, rsp);
17279a732c7Sopenharmony_ci    ASSERT_EQ(ret, result);
17379a732c7Sopenharmony_ci}
17479a732c7Sopenharmony_ci
17579a732c7Sopenharmony_ci/**
17679a732c7Sopenharmony_ci * @tc.name: SendCmd_003
17779a732c7Sopenharmony_ci * @tc.type: FUNC
17879a732c7Sopenharmony_ci */
17979a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, SendCmd_003, testing::ext::TestSize.Level0)
18079a732c7Sopenharmony_ci{
18179a732c7Sopenharmony_ci    int cmdCode = GET_TRUST_DEVICE_LIST;
18279a732c7Sopenharmony_ci    std::shared_ptr<IpcReq> req = std::make_shared<IpcReq>();
18379a732c7Sopenharmony_ci    std::shared_ptr<IpcRsp> rsp = std::make_shared<IpcRsp>();
18479a732c7Sopenharmony_ci    std::shared_ptr<MockIpcClientStub> mockInstance = std::make_shared<MockIpcClientStub>();
18579a732c7Sopenharmony_ci    std::shared_ptr<IpcClientStub> ipcClientStub= mockInstance;
18679a732c7Sopenharmony_ci    EXPECT_CALL(*mockInstance, SendCmd(testing::_, testing::_, testing::_))
18779a732c7Sopenharmony_ci                .Times(1).WillOnce(testing::Return(DM_OK));
18879a732c7Sopenharmony_ci    std::shared_ptr<IpcClientStub> instance = std::shared_ptr<IpcClientStub>(ipcClientStub);
18979a732c7Sopenharmony_ci    int ret = instance->SendCmd(cmdCode, req, rsp);
19079a732c7Sopenharmony_ci    ASSERT_EQ(ret, DM_OK);
19179a732c7Sopenharmony_ci}
19279a732c7Sopenharmony_ci
19379a732c7Sopenharmony_ci/**
19479a732c7Sopenharmony_ci * @tc.name: SendCmd_004
19579a732c7Sopenharmony_ci * @tc.type: FUNC
19679a732c7Sopenharmony_ci */
19779a732c7Sopenharmony_ciHWTEST_F(IpcClientStubTest, SendCmd_004, testing::ext::TestSize.Level0)
19879a732c7Sopenharmony_ci{
19979a732c7Sopenharmony_ci    int result = 305;
20079a732c7Sopenharmony_ci    int cmdCode = -1;
20179a732c7Sopenharmony_ci    std::shared_ptr<IpcReq> req = nullptr;
20279a732c7Sopenharmony_ci    std::shared_ptr<IpcRsp> rsp = nullptr;
20379a732c7Sopenharmony_ci    sptr<IpcClientStub> instance = sptr<IpcClientStub>(new IpcClientStub());
20479a732c7Sopenharmony_ci    int ret = instance->SendCmd(cmdCode, req, rsp);
20579a732c7Sopenharmony_ci    ASSERT_EQ(ret, result);
20679a732c7Sopenharmony_ci}
20779a732c7Sopenharmony_ci} // namespace
20879a732c7Sopenharmony_ci} // namespace DistributedHardware
20979a732c7Sopenharmony_ci} // namespace OHOS
210