1/*
2 * Copyright (c) 2020 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 "hdi_callback_test.h"
17
18using namespace OHOS;
19using namespace std;
20using namespace testing::ext;
21using namespace OHOS::Camera;
22
23void HdiCallbackTest::SetUpTestCase(void) {}
24void HdiCallbackTest::TearDownTestCase(void) {}
25void HdiCallbackTest::SetUp(void)
26{
27    Test_ = std::make_shared<OHOS::Camera::Test>();
28    Test_->Init();
29}
30void HdiCallbackTest::TearDown(void)
31{
32    Test_->Close();
33}
34
35/**
36  * @tc.name: OnCameraStatus
37  * @tc.desc: CameraHostCallback, OnCameraStatus
38  * @tc.size: MediumTest
39  * @tc.type: Function
40  */
41HWTEST_F(HdiCallbackTest, Camera_Hdi_1001, TestSize.Level0)
42{
43    Test_->Open();
44    Test_->onCameraStatusFlag = false;
45    std::cout << "==========[test log]Preview stream, 640*480, expected success." << std::endl;
46    // Start stream
47    Test_->intents = {Camera::PREVIEW};
48    Test_->StartStream(Test_->intents);
49    // Get preview
50    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
51    // release stream
52    Test_->captureIds = {Test_->captureId_preview};
53    Test_->streamIds = {Test_->streamId_preview};
54    Test_->StopStream(Test_->captureIds, Test_->streamIds);
55    Test_->StopConsumer(Test_->intents);
56    if (Test_->onCameraStatusFlag) {
57        std::cout << "==========[test log]OnCameraStatus" << std::endl;
58    }
59    EXPECT_EQ(Test_->onCameraStatusFlag, false);
60}
61
62/**
63  * @tc.name: OnFlashlightStatus
64  * @tc.desc: CameraHostCallback, OnFlashlightStatus
65  * @tc.size: MediumTest
66  * @tc.type: Function
67  */
68HWTEST_F(HdiCallbackTest, Camera_Hdi_1002, TestSize.Level0)
69{
70    Test_->GetCameraAbility();
71    Test_->onFlashlightStatusFlag = false;
72    std::cout << "==========[test log]Turn on the flashlight, not the camera, success." << std::endl;
73    Test_->status = true;
74    Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), Test_->status);
75    EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
76    Test_->status = false;
77    Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), Test_->status);
78    sleep(3); // sleep for 3 seconds
79    if (Test_->onFlashlightStatusFlag) {
80        std::cout << "==========[test log]OnFlashlightStatus" << std::endl;
81    }
82    EXPECT_EQ(Test_->onFlashlightStatusFlag, true);
83}
84
85/**
86  * @tc.name: OnError
87  * @tc.desc: CameraDeviceCallback, OnError.
88  * @tc.size: MediumTest
89  * @tc.type: Function
90  */
91HWTEST_F(HdiCallbackTest, Camera_Hdi_1010, TestSize.Level0)
92{
93    Test_->Open();
94    Test_->onErrorFlag = false;
95    std::cout << "==========[test log]Preview stream, 640*480, expected success." << std::endl;
96    // Start stream
97    Test_->intents = {Camera::PREVIEW};
98    Test_->StartStream(Test_->intents);
99    // Get preview
100    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
101    // release stream
102    Test_->captureIds = {Test_->captureId_preview};
103    Test_->streamIds = {Test_->streamId_preview};
104    Test_->StopStream(Test_->captureIds, Test_->streamIds);
105    Test_->StopConsumer(Test_->intents);
106    if (Test_->onErrorFlag) {
107        std::cout << "==========[test log]OnError" << std::endl;
108    }
109    EXPECT_EQ(Test_->onErrorFlag, false);
110}
111
112/**
113  * @tc.name: OnResult
114  * @tc.desc: CameraDeviceCallback, OnResult.
115  * @tc.size: MediumTest
116  * @tc.type: Function
117  */
118HWTEST_F(HdiCallbackTest, Camera_Hdi_1011, TestSize.Level0)
119{
120    Test_->onResultFlag = false;
121    Test_->Open();
122    EXPECT_EQ(true, Test_->cameraDevice != nullptr);
123    std::cout << "==========[test log]Check hdi_device: SetResultMode is PER_FRAME." << std::endl;
124    std::vector<Camera::MetaType> results;
125    results.push_back(OHOS_SENSOR_EXPOSURE_TIME);
126    results.push_back(OHOS_SENSOR_COLOR_CORRECTION_GAINS);
127    Test_->rc = Test_->cameraDevice->EnableResult(results);
128    EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
129    Test_->rc = Test_->cameraDevice->SetResultMode(Camera::PER_FRAME);
130    EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
131    // Start stream
132    Test_->intents = {Camera::PREVIEW};
133    Test_->StartStream(Test_->intents);
134    // Get preview
135    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
136    // release stream
137    Test_->captureIds = {Test_->captureId_preview};
138    Test_->streamIds.push_back(Test_->streamId_preview);
139    Test_->StopStream(Test_->captureIds, Test_->streamIds);
140    Test_->StopConsumer(Test_->intents);
141    if (Test_->onResultFlag) {
142        std::cout << "==========[test log]OnResult" << std::endl;
143    }
144    EXPECT_EQ(Test_->onResultFlag, true);
145}
146
147/**
148  * @tc.name: OnCaptureStarted
149  * @tc.desc: IStreamOpereatorCallback, OnCaptureStarted
150  * @tc.size: MediumTest
151  * @tc.type: Function
152  */
153HWTEST_F(HdiCallbackTest, Camera_Hdi_1020, TestSize.Level0)
154{
155    Test_->Open();
156    Test_->captureStartFlag = false;
157    std::cout << "==========[test log]Preview stream, 640*480, expected success." << std::endl;
158    // Start stream
159    Test_->intents = {Camera::PREVIEW};
160    Test_->StartStream(Test_->intents);
161    // Get preview
162    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
163    // release stream
164    Test_->captureIds = {Test_->captureId_preview};
165    Test_->streamIds.push_back(Test_->streamId_preview);
166    Test_->StopStream(Test_->captureIds, Test_->streamIds);
167    Test_->StopConsumer(Test_->intents);
168    if (Test_->captureStartFlag) {
169        std::cout << "==========[test log]OnCaptureStarted" << std::endl;
170    }
171    EXPECT_EQ(Test_->captureStartFlag, true);
172}
173
174/**
175  * @tc.name: OnCaptureEnded
176  * @tc.desc: IStreamOpereatorCallback, OnCaptureEnded
177  * @tc.size: MediumTest
178  * @tc.type: Function
179  */
180HWTEST_F(HdiCallbackTest, Camera_Hdi_1021, TestSize.Level0)
181{
182    Test_->Open();
183    Test_->captureEndFlag = false;
184    std::cout << "==========[test log]Preview stream, 640*480, expected success." << std::endl;
185    // Start stream
186    Test_->intents = {Camera::PREVIEW};
187    Test_->StartStream(Test_->intents);
188    // Get preview
189    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
190    // release stream
191    Test_->captureIds = {Test_->captureId_preview};
192    Test_->streamIds.push_back(Test_->streamId_preview);
193    Test_->StopStream(Test_->captureIds, Test_->streamIds);
194    Test_->StopConsumer(Test_->intents);
195    if (Test_->captureEndFlag) {
196        std::cout << "==========[test log]OnCaptureEnded" << std::endl;
197    }
198    EXPECT_EQ(Test_->captureEndFlag, true);
199}
200
201/**
202  * @tc.name: OnFrameShutter
203  * @tc.desc: IStreamOpereatorCallback, OnFrameShutter
204  * @tc.size: MediumTest
205  * @tc.type: Function
206  */
207HWTEST_F(HdiCallbackTest, Camera_Hdi_1023, TestSize.Level0)
208{
209    Test_->Open();
210    Test_->frameShutterFlag = false;
211    std::cout << "==========[test log]Preview stream, 640*480, expected success." << std::endl;
212    // Start stream
213    Test_->intents = {Camera::PREVIEW};
214    Test_->StartStream(Test_->intents);
215    // Get preview
216    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, true, true);
217    // release stream
218    Test_->captureIds = {Test_->captureId_preview};
219    Test_->streamIds.push_back(Test_->streamId_preview);
220    Test_->StopStream(Test_->captureIds, Test_->streamIds);
221    Test_->StopConsumer(Test_->intents);
222    if (Test_->frameShutterFlag) {
223        std::cout << "==========[test log]OnFrameShutter" << std::endl;
224    }
225    EXPECT_EQ(Test_->frameShutterFlag, true);
226}