1/*
2 * Copyright (c) 2023 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#include "open_camera_test.h"
16
17void UtestOpenCameraTest::SetUpTestCase(void)
18{}
19void UtestOpenCameraTest::TearDownTestCase(void)
20{}
21void UtestOpenCameraTest::SetUp(void)
22{
23    if (cameraBase == nullptr) {
24        cameraBase = std::make_shared<TestCameraBase>();
25        cameraBase->Init();
26    }
27}
28void UtestOpenCameraTest::TearDown(void)
29{
30    cameraBase->Close();
31}
32
33/**
34  * @tc.name: OpenCamera
35  * @tc.desc: OpenCamera, success.
36  * @tc.level: Level0
37  * @tc.size: MediumTest
38  * @tc.type: Function
39  */
40TEST_F(UtestOpenCameraTest, camera_open_0001)
41{
42    CAMERA_LOGD("OpenCamera, success.");
43    std::vector<std::string> cameraIds;
44    cameraBase->cameraHost->GetCameraIds(cameraIds);
45    for (const auto &cameraId : cameraIds) {
46        CAMERA_LOGI("cameraId = %{public}s", cameraId.c_str());
47    }
48    std::string cameraId = cameraIds.front();
49    const OHOS::sptr<ICameraDeviceCallback> callback = new DemoCameraDeviceCallback();
50    OHOS::sptr<ICameraDevice> cameraDevice;
51    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraDevice);
52    EXPECT_EQ(true, cameraBase->rc == HDI::Camera::V1_0::NO_ERROR);
53}
54
55/**
56  * @tc.name: OpenCamera cameraID input error
57  * @tc.desc: OpenCamera, cameraID is not found.
58  * @tc.level: Level2
59  * @tc.size: MediumTest
60  * @tc.type: Function
61  */
62TEST_F(UtestOpenCameraTest, camera_open_0010)
63{
64    CAMERA_LOGD("OpenCamera, cameraID is not found.");
65    std::string cameraId = "qwerty";
66    OHOS::sptr<ICameraDeviceCallback> callback = new DemoCameraDeviceCallback();
67    CAMERA_LOGD("opencamera begin");
68    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
69    CAMERA_LOGD("opencamera end");
70    EXPECT_EQ(INVALID_ARGUMENT, cameraBase->rc);
71}
72
73/**
74  * @tc.name: OpenCamera cameraID input error
75  * @tc.desc: OpenCamera, cameraID is illegal.
76  * @tc.level: Level2
77  * @tc.size: MediumTest
78  * @tc.type: Function
79  */
80TEST_F(UtestOpenCameraTest, camera_open_0011)
81{
82    CAMERA_LOGD("OpenCamera, cameraID is illegal.");
83    std::string cameraId = "1";
84    OHOS::sptr<ICameraDeviceCallback> callback = new DemoCameraDeviceCallback();
85    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
86    EXPECT_EQ(INVALID_ARGUMENT, cameraBase->rc);
87}
88
89/**
90  * @tc.name: OpenCamera cameraID input error
91  * @tc.desc: OpenCamera, cameraID is Empty.
92  * @tc.level: Level2
93  * @tc.size: MediumTest
94  * @tc.type: Function
95  */
96TEST_F(UtestOpenCameraTest, camera_open_0012)
97{
98    CAMERA_LOGD("OpenCamera, cameraID is Empty.");
99    std::string cameraId;
100    OHOS::sptr<ICameraDeviceCallback> callback = new DemoCameraDeviceCallback();
101    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
102    EXPECT_EQ(INVALID_ARGUMENT, cameraBase->rc);
103}
104
105/**
106  * @tc.name: OpenCamera Callback input error
107  * @tc.desc: OpenCamera, Callback is Null.
108  * @tc.level: Level2
109  * @tc.size: MediumTest
110  * @tc.type: Function
111  */
112TEST_F(UtestOpenCameraTest, camera_open_0020)
113{
114    CAMERA_LOGD("OpenCamera, Callback is Null.");
115    std::string cameraId = "CAMERA_FIRST";
116    OHOS::sptr<ICameraDeviceCallback> callback = nullptr;
117    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
118    EXPECT_EQ(INVALID_ARGUMENT, cameraBase->rc);
119}
120
121/**
122  * @tc.name: OpenCamera cameraID & Callback input error
123  * @tc.desc: OpenCamera, cameraID is not found, callback is null.
124  * @tc.level: Level1
125  * @tc.size: MediumTest
126  * @tc.type: Function
127  */
128TEST_F(UtestOpenCameraTest, camera_open_0030)
129{
130    CAMERA_LOGD("OpenCamera, cameraID is not found, callback is null.");
131    std::string cameraId = "qwerty";
132    OHOS::sptr<ICameraDeviceCallback> callback = nullptr;
133    CAMERA_LOGD("opencamera begin");
134    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
135    CAMERA_LOGD("opencamera end");
136    EXPECT_EQ(INVALID_ARGUMENT, cameraBase-> rc);
137}
138
139/**
140  * @tc.name: OpenCamera cameraID & Callback input error
141  * @tc.desc: OpenCamera, cameraID is illegal, callback is null.
142  * @tc.level: Level1
143  * @tc.size: MediumTest
144  * @tc.type: Function
145  */
146TEST_F(UtestOpenCameraTest, camera_open_0031)
147{
148    CAMERA_LOGD("OpenCamera, cameraID is illegal, callback is null.");
149    std::string cameraId = "1";
150    OHOS::sptr<ICameraDeviceCallback> callback = nullptr;
151    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
152    EXPECT_EQ(INVALID_ARGUMENT, cameraBase-> rc);
153}
154
155/**
156  * @tc.name: OpenCamera cameraID & Callback input error
157  * @tc.desc: OpenCamera, cameraID is Empty, callback is null.
158  * @tc.level: Level1
159  * @tc.size: MediumTest
160  * @tc.type: Function
161  */
162TEST_F(UtestOpenCameraTest, camera_open_0032)
163{
164    CAMERA_LOGD("OpenCamera, cameraID is Empty, callback is null.");
165    std::string cameraId;
166    OHOS::sptr<ICameraDeviceCallback> callback = nullptr;
167    cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
168    EXPECT_EQ(INVALID_ARGUMENT, cameraBase->rc);
169}
170
171/**
172  * @tc.name: Open all Cameras
173  * @tc.desc: Open every Cameras what the getCameraId get.
174  * @tc.level: Level2
175  * @tc.size: MediumTest
176  * @tc.type: Function
177  */
178TEST_F(UtestOpenCameraTest, camera_open_0050)
179{
180    CAMERA_LOGD("Open all Cameras.");
181    std::vector<std::string> cameraIds;
182    cameraBase->cameraHost->GetCameraIds(cameraIds);
183    for (auto &cameraId : cameraIds) {
184        CAMERA_LOGI("cameraId = %{public}s", cameraId.c_str());
185        const OHOS::sptr<ICameraDeviceCallback> callback = new DemoCameraDeviceCallback();
186        cameraBase->rc = (CamRetCode)cameraBase->cameraHost->OpenCamera(cameraId, callback, cameraBase->cameraDevice);
187        EXPECT_EQ(true, cameraBase->rc == HDI::Camera::V1_0::NO_ERROR);
188        if (cameraBase->rc == HDI::Camera::V1_0::NO_ERROR) {
189            CAMERA_LOGI("OpenCamera success, cameraId = %{public}s", cameraId.c_str());
190        } else {
191            CAMERA_LOGE("OpenCamera fail, rc = %{public}d, cameraId = %{public}s", cameraBase->rc, cameraId.c_str());
192        }
193    }
194}
195