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 #include "pipeline_test.h"
16 
SetUpTestCase(void)17 void UtestPipelineTest::SetUpTestCase(void)
18 {}
TearDownTestCase(void)19 void UtestPipelineTest::TearDownTestCase(void)
20 {}
SetUp(void)21 void UtestPipelineTest::SetUp(void)
22 {
23     if (cameraBase == nullptr)
24     cameraBase = std::make_shared<TestCameraBase>();
25     cameraBase->FBInit();
26     cameraBase->Init();
27 }
TearDown(void)28 void UtestPipelineTest::TearDown(void)
29 {
30     cameraBase->Close();
31 }
32 
33 /**
34   * @tc.name: Check ppl
35   * @tc.desc: preview success.
36   * @tc.level: Level0
37   * @tc.size: MediumTest
38   * @tc.type: Function
39   */
TEST_F(UtestPipelineTest,camera_ppl_0001)40 TEST_F(UtestPipelineTest, camera_ppl_0001)
41 {
42     std::cout << "==========[test log] Check ppl: preview success." << std::endl;
43     // Get the stream manager
44     cameraBase->AchieveStreamOperator();
45     // start stream
46     cameraBase->intents = {PREVIEW};
47     cameraBase->StartStream(cameraBase->intents);
48     // Get preview
49     cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
50     // release stream
51     cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW};
52     cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW};
53     cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
54 }
55 
56 /**
57   * @tc.name: Check ppl
58   * @tc.desc: preview + capture success.
59   * @tc.level: Level1
60   * @tc.size: MediumTest
61   * @tc.type: Function
62   */
TEST_F(UtestPipelineTest,camera_ppl_0002)63 TEST_F(UtestPipelineTest, camera_ppl_0002)
64 {
65     std::cout << "==========[test log] Check ppl: preview + capture success." << std::endl;
66     // Get the stream manager
67     cameraBase->AchieveStreamOperator();
68     // start stream
69     cameraBase->intents = {PREVIEW, STILL_CAPTURE};
70     cameraBase->StartStream(cameraBase->intents);
71     // Get preview
72     cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
73     cameraBase->StartCapture(cameraBase->STREAM_ID_CAPTURE, cameraBase->CAPTURE_ID_CAPTURE, false, true);
74     // release stream
75     cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW, cameraBase->CAPTURE_ID_CAPTURE};
76     cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW, cameraBase->STREAM_ID_CAPTURE};
77     cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
78 }
79 
80 /**
81   * @tc.name: Check ppl
82   * @tc.desc: preview + video success.
83   * @tc.level: Level1
84   * @tc.size: MediumTest
85   * @tc.type: Function
86   */
TEST_F(UtestPipelineTest,camera_ppl_0003)87 TEST_F(UtestPipelineTest, camera_ppl_0003)
88 {
89     std::cout << "==========[test log] Check ppl: preview + video success." << std::endl;
90     // Get the stream manager
91     cameraBase->AchieveStreamOperator();
92     // start stream
93     cameraBase->intents = {PREVIEW, VIDEO};
94     cameraBase->StartStream(cameraBase->intents);
95     // Get preview
96     cameraBase->StartCapture(cameraBase->STREAM_ID_PREVIEW, cameraBase->CAPTURE_ID_PREVIEW, false, true);
97     cameraBase->StartCapture(cameraBase->STREAM_ID_VIDEO, cameraBase->CAPTURE_ID_VIDEO, false, true);
98     // release stream
99     cameraBase->captureIds = {cameraBase->CAPTURE_ID_PREVIEW, cameraBase->CAPTURE_ID_VIDEO};
100     cameraBase->streamIds = {cameraBase->STREAM_ID_PREVIEW, cameraBase->STREAM_ID_VIDEO};
101     cameraBase->StopStream(cameraBase->captureIds, cameraBase->streamIds);
102 }
103 
104 /**
105   * @tc.name: Check ppl
106   * @tc.desc: video mode without preview, system not support, expected return fail.
107   * @tc.level: Level2
108   * @tc.size: MediumTest
109   * @tc.type: Function
110   */
TEST_F(UtestPipelineTest,camera_ppl_0004)111 TEST_F(UtestPipelineTest, camera_ppl_0004)
112 {
113     std::cout << "==========[test log] Video mode without preview, system not support, ";
114     std::cout << "expected return fail." << std::endl;
115 
116     EXPECT_EQ(true, cameraBase->cameraDevice != nullptr);
117     cameraBase->AchieveStreamOperator();
118     // Create video stream
119     std::vector<std::shared_ptr<StreamInfo>> streamInfos;
120     std::shared_ptr<IBufferProducer> producer = IBufferProducer::CreateBufferQueue();
121     producer->SetQueueSize(8); // 8:set bufferqueue size
122     if (producer->GetQueueSize() != 8) { // 8:get bufferqueue size
123         std::cout << "~~~~~~~" << std::endl;
124     }
125     auto callback = [this](std::shared_ptr<SurfaceBuffer> b) {
126         cameraBase->BufferCallback(b, cameraBase->video_mode);
127         return;
128     };
129     producer->SetCallback(callback);
130     cameraBase->streamInfo = std::make_shared<StreamInfo>();
131     cameraBase->streamInfo->streamId_ = cameraBase->STREAM_ID_VIDEO;
132     cameraBase->streamInfo->width_ = 640; // 640:picture width // 640:picture width
133     cameraBase->streamInfo->height_ = 480; // 480:picture height // 480:picture height
134     cameraBase->streamInfo->format_ = CAMERA_FORMAT_YUYV_422_PKG;
135     cameraBase->streamInfo->dataspace_ = 10; // 10:picture dataspace
136     cameraBase->streamInfo->intent_ = VIDEO;
137     cameraBase->streamInfo->tunneledMode_ = 5; // 5:tunnel mode // 5:tunnel mode
138     cameraBase->streamInfo->bufferQueue_ = producer;
139     std::vector<std::shared_ptr<StreamInfo>>().swap(streamInfos);
140     streamInfos.push_back(cameraBase->streamInfo);
141     cameraBase->rc = cameraBase->streamOperator->CreateStreams(streamInfos);
142     EXPECT_EQ(false, cameraBase->rc == Camera::METHOD_NOT_SUPPORTED);
143     if (cameraBase->rc == Camera::METHOD_NOT_SUPPORTED) {
144         std::cout << "==========[test log] CreateStreams METHOD_NOT_SUPPORTED, streamId = ";
145         std::cout << cameraBase->STREAM_ID_VIDEO <<", intent = VIDEO" << std::endl;
146     } else {
147         std::cout << "==========[test log] CreateStreams fail, rc = " << cameraBase->rc << std::endl;
148     }
149 
150     cameraBase->rc = cameraBase->streamOperator->CommitStreams(Camera::NORMAL, nullptr);
151     EXPECT_EQ(false, cameraBase->rc == NO_ERROR);
152     if (cameraBase->rc == NO_ERROR) {
153         std::cout << "==========[test log] CommitStreams success." << std::endl;
154     } else {
155         std::cout << "==========[test log] CommitStreams fail, rc = ." << cameraBase->rc << std::endl;
156     }
157 }