1 /*
2  * Copyright (C) 2024 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 <string>
16 #include <sys/stat.h>
17 #include <fcntl.h>
18 #include <cinttypes>
19 #include "gtest/gtest.h"
20 #include "avcodec_errors.h"
21 #include "avcodec_info.h"
22 #include "media_description.h"
23 #include "file_fd_source_plugin_unit_test.h"
24 
25 using namespace OHOS;
26 using namespace OHOS::Media;
27 using namespace std;
28 using namespace testing::ext;
29 
30 namespace OHOS {
31 namespace Media {
32 namespace Plugins {
33 namespace FileFdSource {
34 const std::string MEDIA_ROOT = "file:///data/test/media/";
35 const std::string VIDEO_FILE1 = MEDIA_ROOT + "camera_info_parser.mp4";
SetUpTestCase(void)36 void OHOS::Media::Plugins::FileFdSource::FileFdSourceUnitTest::SetUpTestCase(void)
37 {
38 }
39 
TearDownTestCase(void)40 void FileFdSourceUnitTest::TearDownTestCase(void)
41 {
42 }
43 
SetUp(void)44 void FileFdSourceUnitTest::SetUp(void)
45 {
46     fileFdSourcePlugin_ = std::make_shared<FileFdSourcePlugin>("testPlugin");
47     size_t bufferSize = 1024;
48     std::shared_ptr<RingBuffer> ringBuffer = std::make_shared<RingBuffer>(bufferSize);
49     fileFdSourcePlugin_->ringBuffer_ = ringBuffer;
50 }
51 
TearDown(void)52 void FileFdSourceUnitTest::TearDown(void)
53 {
54     fileFdSourcePlugin_->ringBuffer_ = nullptr;
55     fileFdSourcePlugin_ = nullptr;
56 }
57 
58 class SourceCallback : public Plugins::Callback {
59 public:
OnEvent(const Plugins::PluginEvent & event)60     void OnEvent(const Plugins::PluginEvent &event) override
61     {
62         (void)event;
63     }
64 
SetSelectBitRateFlag(bool flag,uint32_t desBitRate)65     void SetSelectBitRateFlag(bool flag, uint32_t desBitRate) override
66     {
67         (void)flag;
68         (void)desBitRate;
69     }
70 
CanAutoSelectBitRate()71     bool CanAutoSelectBitRate() override
72     {
73         return true;
74     }
75 };
76 
77 /**
78  * @tc.name: FileFdSource_SetSource_0100
79  * @tc.desc: SetSource
80  * @tc.type: FUNC
81  */
82 HWTEST_F(FileFdSourceUnitTest, FileFdSource_SetSource_0100, TestSize.Level1)
83 {
84     std::shared_ptr<MediaSource> mediaSource = std::make_shared<MediaSource>(VIDEO_FILE1);
85     EXPECT_NE(Status::OK, fileFdSourcePlugin_->SetSource(mediaSource));
86 }
87 /**
88  * @tc.name: FileFdSource_NotifyBufferingStart_0100
89  * @tc.desc: FileFdSource_NotifyBufferingStart_0100
90  * @tc.type: FUNC
91  */
92 HWTEST_F(FileFdSourceUnitTest, FileFdSource_NotifyBufferingStart_0100, TestSize.Level1)
93 {
94     Plugins::Callback* sourceCallback = new SourceCallback();
95     fileFdSourcePlugin_->isInterrupted_ = false;
96     fileFdSourcePlugin_->NotifyBufferingStart();
97     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->SetCallback(sourceCallback));
98     fileFdSourcePlugin_->isInterrupted_ = true;
99     fileFdSourcePlugin_->NotifyBufferingStart();
100 
101     fileFdSourcePlugin_->SetBundleName("TestFileFdSource");
102     fileFdSourcePlugin_->NotifyBufferingStart();
103     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->Stop());
104     delete sourceCallback;
105     sourceCallback = nullptr;
106 }
107 /**
108  * @tc.name: FileFdSource_NotifyReadFail_0100
109  * @tc.desc: FileFdSource_NotifyReadFail_0100
110  * @tc.type: FUNC
111  */
112 HWTEST_F(FileFdSourceUnitTest, FileFdSource_NotifyReadFail_0100, TestSize.Level1)
113 {
114     fileFdSourcePlugin_->NotifyReadFail();
115     Plugins::Callback* sourceCallback = new SourceCallback();
116     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->SetCallback(sourceCallback));
117     fileFdSourcePlugin_->NotifyReadFail();
118     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->Stop());
119     fileFdSourcePlugin_->NotifyReadFail();
120     delete sourceCallback;
121     sourceCallback = nullptr;
122 }
123 /**
124  * @tc.name: FileFdSource_read_0100
125  * @tc.desc: FileFdSource_read_0100
126  * @tc.type: FUNC
127  */
128 HWTEST_F(FileFdSourceUnitTest, FileFdSource_read_0100, TestSize.Level1)
129 {
130     fileFdSourcePlugin_->NotifyBufferingStart();
131     std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>();
132     EXPECT_NE(Status::OK, fileFdSourcePlugin_->Read(buffer, 0, 1024));
133 }
134 /**
135  * @tc.name: FileFdSource_read_0200
136  * @tc.desc: FileFdSource_read_0200
137  * @tc.type: FUNC
138  */
139 HWTEST_F(FileFdSourceUnitTest, FileFdSource_read_0200, TestSize.Level1)
140 {
141     std::shared_ptr<Buffer> buffer = nullptr;
142     EXPECT_NE(Status::OK, fileFdSourcePlugin_->Read(buffer, 0, 1024));
143 }
144 /**
145  * @tc.name: FileFdSource_ParseUriInfo_0100
146  * @tc.desc: FileFdSource_ParseUriInfo_0100
147  * @tc.type: FUNC
148  */
149 HWTEST_F(FileFdSourceUnitTest, FileFdSource_ParseUriInfo_0100, TestSize.Level1)
150 {
151     std::string uri = "";
152     std::shared_ptr<MediaSource> source = std::make_shared<MediaSource>(uri);
153     fileFdSourcePlugin_->SetSource(source);
154     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->Reset());
155 }
156 /**
157  * @tc.name: FileFdSource_Reset_0100
158  * @tc.desc: FileFdSource_Reset_0100
159  * @tc.type: FUNC
160  */
161 HWTEST_F(FileFdSourceUnitTest, FileFdSource_Reset_0100, TestSize.Level1)
162 {
163     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->Reset());
164 }
165 /**
166  * @tc.name: FileFdSource_SetBundleName_0100
167  * @tc.desc: FileFdSource_SetBundleName_0100
168  * @tc.type: FUNC
169  */
170 HWTEST_F(FileFdSourceUnitTest, FileFdSource_SetBundleName_0100, TestSize.Level1)
171 {
172     fileFdSourcePlugin_->Stop();
173     fileFdSourcePlugin_->SetBundleName("TestFileFdSource");
174     EXPECT_EQ(Status::OK, fileFdSourcePlugin_->Stop());
175 }
176 /**
177  * @tc.name: FileFdSource_PauseDownloadTask_0100
178  * @tc.desc: FileFdSource_PauseDownloadTask_0100
179  * @tc.type: FUNC
180  */
181 HWTEST_F(FileFdSourceUnitTest, FileFdSource_PauseDownloadTask_0100, TestSize.Level1)
182 {
183     fileFdSourcePlugin_->downloadTask_ = nullptr;
184     fileFdSourcePlugin_->PauseDownloadTask(true);
185     fileFdSourcePlugin_->downloadTask_ = std::shared_ptr<Task>();
186     fileFdSourcePlugin_->PauseDownloadTask(true);
187     fileFdSourcePlugin_->PauseDownloadTask(false);
188 }
189 } // namespace FileSource
190 } // namespace Plugins
191 } // namespace Media
192 } // namespace OHOS