1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #define private public
18 #include "dcamera_source_service_ipc.h"
19 #undef private
20 
21 #include "if_system_ability_manager.h"
22 #include "iservice_registry.h"
23 #include "anonymous_string.h"
24 #include "distributed_camera_constants.h"
25 #include "distributed_camera_errno.h"
26 #include "distributed_hardware_log.h"
27 
28 using namespace testing::ext;
29 
30 namespace OHOS {
31 namespace DistributedHardware {
32 class DCameraSourceServiceIpcTest : public testing::Test {
33 public:
34     static void SetUpTestCase(void);
35     static void TearDownTestCase(void);
36     void SetUp();
37     void TearDown();
38 };
39 
SetUpTestCase(void)40 void DCameraSourceServiceIpcTest::SetUpTestCase(void)
41 {
42     DHLOGI("DCameraSourceServiceIpcTest::SetUpTestCase");
43 }
44 
TearDownTestCase(void)45 void DCameraSourceServiceIpcTest::TearDownTestCase(void)
46 {
47     DHLOGI("DCameraSourceServiceIpcTest::TearDownTestCase");
48 }
49 
SetUp(void)50 void DCameraSourceServiceIpcTest::SetUp(void)
51 {
52     DHLOGI("DCameraSourceServiceIpcTest::SetUp");
53 }
54 
TearDown(void)55 void DCameraSourceServiceIpcTest::TearDown(void)
56 {
57     DHLOGI("DCameraSourceServiceIpcTest::TearDown");
58 }
59 
60 /**
61  * @tc.name: dcamera_source_service_ipc_test_001
62  * @tc.desc: Verify Init func.
63  * @tc.type: FUNC
64  * @tc.require: issue
65  */
66 HWTEST_F(DCameraSourceServiceIpcTest, dcamera_source_service_ipc_test_001, TestSize.Level1)
67 {
68     DHLOGI("DCameraSourceServiceIpcTest::dcamera_source_service_ipc_test_001");
69     DCameraSourceServiceIpc::GetInstance().Init();
70     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, true);
71     DCameraSourceServiceIpc::GetInstance().Init();
72     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, true);
73 }
74 
75 /**
76  * @tc.name: dcamera_source_service_ipc_test_002
77  * @tc.desc: Verify UnInit func.
78  * @tc.type: FUNC
79  * @tc.require: issue
80  */
81 HWTEST_F(DCameraSourceServiceIpcTest, dcamera_source_service_ipc_test_002, TestSize.Level1)
82 {
83     DHLOGI("DCameraSourceServiceIpcTest::dcamera_source_service_ipc_test_002");
84     DCameraSourceServiceIpc::GetInstance().Init();
85     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, true);
86     DCameraSourceServiceIpc::GetInstance().UnInit();
87     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, false);
88     DCameraSourceServiceIpc::GetInstance().UnInit();
89     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, false);
90 }
91 
92 /**
93  * @tc.name: dcamera_source_service_ipc_test_003
94  * @tc.desc: Verify GetSinkRemoteCamSrv func.
95  * @tc.type: FUNC
96  * @tc.require: issue
97  */
98 HWTEST_F(DCameraSourceServiceIpcTest, dcamera_source_service_ipc_test_003, TestSize.Level1)
99 {
100     DHLOGI("DCameraSourceServiceIpcTest::dcamera_source_service_ipc_test_003");
101     std::string deviceId = "";
102     DCameraSourceServiceIpc::GetInstance().Init();
103     sptr<IDistributedCameraSink> camSinkSrv = DCameraSourceServiceIpc::GetInstance().GetSinkRemoteCamSrv(deviceId);
104     EXPECT_EQ(nullptr, camSinkSrv);
105     DCameraSourceServiceIpc::GetInstance().UnInit();
106     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, false);
107 }
108 
109 /**
110  * @tc.name: dcamera_source_service_ipc_test_004
111  * @tc.desc: Verify DeleteSinkRemoteCamSrv func.
112  * @tc.type: FUNC
113  * @tc.require: issue
114  */
115 HWTEST_F(DCameraSourceServiceIpcTest, dcamera_source_service_ipc_test_004, TestSize.Level1)
116 {
117     DHLOGI("DCameraSourceServiceIpcTest::dcamera_source_service_ipc_test_004");
118     std::string deviceId = "test004";
119     DCameraSourceServiceIpc::GetInstance().Init();
120     sptr<IDistributedCameraSink> camSinkSrv = DCameraSourceServiceIpc::GetInstance().GetSinkRemoteCamSrv(deviceId);
121     DCameraSourceServiceIpc::GetInstance().remoteSinks_.emplace(deviceId, camSinkSrv);
122     DCameraSourceServiceIpc::GetInstance().DeleteSinkRemoteCamSrv(deviceId);
123     deviceId = "test0004";
124     DCameraSourceServiceIpc::GetInstance().DeleteSinkRemoteCamSrv(deviceId);
125     camSinkSrv = nullptr;
126     DCameraSourceServiceIpc::GetInstance().remoteSinks_.emplace(deviceId, camSinkSrv);
127     DCameraSourceServiceIpc::GetInstance().DeleteSinkRemoteCamSrv(deviceId);
128     DCameraSourceServiceIpc::GetInstance().UnInit();
129     EXPECT_EQ(nullptr, camSinkSrv);
130 }
131 
132 /**
133  * @tc.name: dcamera_source_service_ipc_test_005
134  * @tc.desc: Verify GetSinkRemoteCamSrv func.
135  * @tc.type: FUNC
136  * @tc.require: issue
137  */
138 HWTEST_F(DCameraSourceServiceIpcTest, dcamera_source_service_ipc_test_005, TestSize.Level1)
139 {
140     DHLOGI("DCameraSourceServiceIpcTest::dcamera_source_service_ipc_test_005");
141     std::string deviceId = "";
142     DCameraSourceServiceIpc::GetInstance().Init();
143     sptr<ISystemAbilityManager> samgr =
144             SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
145     wptr<IRemoteObject> remote = samgr->GetSystemAbility(DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID);
146     DCameraSourceServiceIpc::GetInstance().OnSinkRemoteCamSrvDied(remote);
147     DCameraSourceServiceIpc::GetInstance().UnInit();
148     EXPECT_EQ(DCameraSourceServiceIpc::GetInstance().isInit_, false);
149 }
150 }
151 }