1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file expected 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 "stability_test.h"
17
18 using namespace OHOS;
19 using namespace std;
20 using namespace testing::ext;
21 using namespace OHOS::Camera;
22
SetUpTestCase(void)23 void StabilityTest::SetUpTestCase(void) {}
TearDownTestCase(void)24 void StabilityTest::TearDownTestCase(void) {}
SetUp(void)25 void StabilityTest::SetUp(void)
26 {
27 Test_ = std::make_shared<OHOS::Camera::Test>();
28 Test_->Init();
29 }
TearDown(void)30 void StabilityTest::TearDown(void)
31 {
32 Test_->Close();
33 }
34
35 /**
36 * @tc.name: OpenCamera
37 * @tc.desc: OpenCamera, 100 times.
38 * @tc.size: MediumTest
39 * @tc.type: Function
40 */
41 HWTEST_F(StabilityTest, Camera_Stability_Open_0001, TestSize.Level3)
42 {
43 if (Test_->cameraDevice == nullptr) {
44 std::cout << "==========[test log] Check Performance: OpenCamera, 100 times."<< std::endl;
45 std::vector<int> FailTimes;
46 Test_->service->GetCameraIds(Test_->cameraIds);
47 Test_->CreateDeviceCallback();
48 for (int i = 0; i < 100; i++) {
49 std::cout << "Running " << i << " time" << std::endl;
50 Test_->rc =
51 Test_->service->OpenCamera(Test_->cameraIds.front(), Test_->deviceCallback, Test_->cameraDevice);
52 EXPECT_EQ(Test_->rc, Camera::NO_ERROR);
53 EXPECT_EQ(true, Test_->cameraDevice != nullptr);
54 if (Test_->rc != Camera::NO_ERROR) {
55 FailTimes.push_back(i);
56 }
57 }
58 std::cout << "Total fail times: "<< FailTimes.size() << ", at :" << std::endl;
59 for (auto it = FailTimes.begin(); it != FailTimes.end(); ++it) {
60 std::cout << *it << std::endl;
61 }
62 }
63 }
64
65 /**
66 * @tc.name: Preview
67 * @tc.desc: Preview for 100 times.
68 * @tc.size: MediumTest
69 * @tc.type: Function
70 */
71 HWTEST_F(StabilityTest, Camera_Stability_Preview_0001, TestSize.Level3)
72 {
73 std::cout << "==========[test log] Check Performance: Preview for 100 times." << std::endl;
74 for (int i = 1; i < 101; i++) {
75 std::cout << "Running " << i << " time" << std::endl;
76 std::cout << "==========[test log] Check Performance: Preview: " << i << " times. " << std::endl;
77 // Turn on the camera
78 Test_->Open();
79 // Configure two streams of information
80 Test_->intents = {Camera::PREVIEW};
81 Test_->StartStream(Test_->intents);
82 // Capture preview stream
83 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
84 // post-processing
85 Test_->captureIds = {Test_->captureId_preview};
86 Test_->streamIds = {Test_->streamId_preview};
87 Test_->StopStream(Test_->captureIds, Test_->streamIds);
88 Test_->StopConsumer(Test_->intents);
89 }
90 Test_->Close();
91 }
92
93 /**
94 * @tc.name: preview and capture stream, for 100 times.
95 * @tc.desc: Commit 2 streams together, Preview and still_capture streams, for 100 times.
96 * @tc.size: MediumTest
97 * @tc.type: Function
98 */
99 HWTEST_F(StabilityTest, Camera_Stability_Capture_0001, TestSize.Level3)
100 {
101 std::cout << "==========[test log] Commit 2 streams together, Preview and still_capture streams,";
102 std::cout << " for 100 times." << std::endl;
103 // Turn on the camera
104 Test_->Open();
105 for (int i = 1; i < 101; i++) {
106 std::cout << "Running " << i << " time" << std::endl;
107 // Configure two streams of information
108 Test_->intents = {Camera::PREVIEW, Camera::STILL_CAPTURE};
109 Test_->StartStream(Test_->intents);
110 // Capture preview stream
111 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
112 // Circulate the camera stream to capture 100 times
113 Test_->StartCapture(Test_->streamId_capture, Test_->captureId_capture, false, false);
114 // post-processing
115 Test_->captureIds = {Test_->captureId_preview};
116 Test_->streamIds.push_back(Test_->streamId_preview);
117 Test_->streamIds.push_back(Test_->streamId_capture);
118 Test_->StopStream(Test_->captureIds, Test_->streamIds);
119 Test_->StopConsumer(Test_->intents);
120 }
121 Test_->Close();
122 }
123
124 /**
125 * @tc.name: preview and capture
126 * @tc.desc: Dynamic capture start&stop, Preview and still_capture streams.
127 * @tc.size: MediumTest
128 * @tc.type: Function
129 */
130 HWTEST_F(StabilityTest, Camera_Stability_Capture_0002, TestSize.Level3)
131 {
132 std::cout << "==========[test log] Dynamic capture start&stop, ";
133 std::cout << "Preview and still_capture streams for 100 times." << std::endl;
134 // Turn on the camera
135 Test_->Open();
136 for (int i = 1; i < 101; i++) {
137 std::cout << "Running " << i << " time" << std::endl;
138 // start preview stream
139 Test_->intents = {Camera::PREVIEW};
140 Test_->StartStream(Test_->intents);
141 // Get preview
142 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
143 // start stream
144 Test_->intents = {Camera::STILL_CAPTURE};
145 Test_->StartStream(Test_->intents);
146 // Start capture
147 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
148 Test_->StartCapture(Test_->streamId_capture, Test_->captureId_capture, false, true);
149 // release stream
150 Test_->captureIds = {Test_->captureId_preview, Test_->captureId_capture};
151 Test_->streamIds.push_back(Test_->streamId_preview);
152 Test_->streamIds.push_back(Test_->streamId_capture);
153 Test_->StopStream(Test_->captureIds, Test_->streamIds);
154 Test_->StopConsumer({Camera::PREVIEW, Camera::STILL_CAPTURE});
155 }
156 Test_->Close();
157 }
158
159 /**
160 * @tc.name: Preview + Video stream, for 100 times.
161 * @tc.desc: Preview + video, commit together, for 100 times.
162 * @tc.size: MediumTest
163 * @tc.type: Function
164 */
165 HWTEST_F(StabilityTest, Camera_Stability_Video_0001, TestSize.Level3)
166 {
167 std::cout << "==========[test log] Performance: Preview + video, commit together, 100 times." << std::endl;
168 // Turn on the camera
169 Test_->Open();
170 for (int i = 1; i < 101; i++) {
171 std::cout << "Running " << i << " time" << std::endl;
172 std::cout << "==========[test log] Performance: Preview + video, commit together, success." << std::endl;
173 // Configure two streams of information
174 Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
175 Test_->StartStream(Test_->intents);
176 // Capture preview stream
177 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
178 // Capture video stream
179 Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
180 // post-processing
181 Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
182 Test_->streamIds.push_back(Test_->streamId_preview);
183 Test_->streamIds.push_back(Test_->streamId_video);
184 Test_->StopStream(Test_->captureIds, Test_->streamIds);
185 Test_->StopConsumer(Test_->intents);
186 }
187 Test_->Close();
188 }
189
190 /**
191 * @tc.name: Video
192 * @tc.desc: Dynamic Video start&stop, for 100 times, success.
193 * @tc.size: MediumTest
194 * @tc.type: Function
195 */
196 HWTEST_F(StabilityTest, Camera_Stability_Video_0002, TestSize.Level3)
197 {
198 std::cout << "==========[test log]Check video: Dynamic Video start&stop, for 100 times, success." << std::endl;
199 for (int i = 0; i < 100; i++) {
200 // Turn on the camera
201 Test_->Open();
202 std::cout << "Running " << i << " time" << std::endl;
203 // start preview stream
204 Test_->intents = {Camera::PREVIEW};
205 Test_->StartStream(Test_->intents);
206 // Get preview
207 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
208 // start stream
209 Test_->intents = {Camera::VIDEO};
210 Test_->StartStream(Test_->intents);
211 Test_->StopConsumer(Test_->intents);
212 // Start capture
213 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
214 Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
215 // release stream
216 Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
217 Test_->streamIds.push_back(Test_->streamId_preview);
218 Test_->streamIds.push_back(Test_->streamId_video);
219 Test_->intents = {Camera::PREVIEW};
220 Test_->StopStream(Test_->captureIds, Test_->streamIds);
221 Test_->StopConsumer(Test_->intents);
222 Test_->Close();
223 }
224 }
225
226 /**
227 * @tc.name: set 3A 100 times
228 * @tc.desc: set 3A 100 times, check result.
229 * @tc.size: MediumTest
230 * @tc.type: Function
231 */
232 HWTEST_F(StabilityTest, Camera_Stability_3a_0001, TestSize.Level3)
233 {
234 std::cout << "==========[test log] Check Performance: Set 3A 100 times, check result." << std::endl;
235 Test_->Open();
236 // Issue 3A parameters
237 std::shared_ptr<Camera::CameraSetting> meta = std::make_shared<Camera::CameraSetting>(100, 2000);
238 std::vector<uint8_t> awbMode = {
239 OHOS_CAMERA_AWB_MODE_OFF,
240 OHOS_CAMERA_AWB_MODE_AUTO,
241 OHOS_CAMERA_AWB_MODE_INCANDESCENT,
242 OHOS_CAMERA_AWB_MODE_FLUORESCENT,
243 OHOS_CAMERA_AWB_MODE_WARM_FLUORESCENT,
244 OHOS_CAMERA_AWB_MODE_DAYLIGHT,
245 OHOS_CAMERA_AWB_MODE_CLOUDY_DAYLIGHT,
246 OHOS_CAMERA_AWB_MODE_TWILIGHT,
247 OHOS_CAMERA_AWB_MODE_SHADE
248 };
249 for (int round = 0; round < 10; round++) {
250 for (int i = 0; i < awbMode.size(); i++) {
251 int times = (round * 10) + i + 1;
252 std::cout << "==========[test log] Check Performance: Set 3A Times: " << times << std::endl;
253 meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode.at(i), 1);
254 std::cout << "==========[test log] UpdateSettings, awb mode :" << awbMode.at(i) << std::endl;
255 Test_->rc = Test_->cameraDevice->UpdateSettings(meta);
256 if (Test_->rc == Camera::NO_ERROR) {
257 std::cout << "==========[test log] Check Performance: UpdateSettings success." << std::endl;
258 } else {
259 std::cout << "==========[test log] Check Performance: UpdateSettings fail, , at the " << (i+1);
260 std::cout <<"times, RetCode is " << Test_->rc << std::endl;
261 }
262 sleep(1);
263 }
264 }
265 Test_->Close();
266 }
267
268 /**
269 * @tc.name: flashlight
270 * @tc.desc: Turn on and off the flashlight, for 1000 times.
271 * @tc.size: MediumTest
272 * @tc.type: Function
273 */
274 HWTEST_F(StabilityTest, Camera_Stability_Flashlight_0001, TestSize.Level3)
275 {
276 std::cout << "==========[test log]Performance: Turn on and off the flashlight, 1000 times." << std::endl;
277 Test_->GetCameraAbility();
278 // Cycle to turn on and off the flashlight
279 for (int i = 0; i < 1000; i++) {
280 std::cout <<"times: " << i << std::endl;
281 bool status = true;
282 Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), status);
283 if (Test_->rc != Camera::NO_ERROR) {
284 std::cout << "==========[test log] Check Performance: Flashlight turn on fail, at the " << (i+1);
285 std::cout <<"times, RetCode is " << Test_->rc << std::endl;
286 }
287 status = false;
288 Test_->rc = Test_->service->SetFlashlight(Test_->cameraIds.front(), status);
289 if (Test_->rc != Camera::NO_ERROR) {
290 std::cout << "==========[test log] Check Performance: Flashlight turn off fail, at the " <<(i+1);
291 std::cout<<"times, RetCode is " << Test_->rc << std::endl;
292 }
293 sleep(1);
294 }
295 Test_->Close();
296 }
297