14d949f91Sopenharmony_ci/*
24d949f91Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
34d949f91Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44d949f91Sopenharmony_ci * you may not use this file except in compliance with the License.
54d949f91Sopenharmony_ci * You may obtain a copy of the License at
64d949f91Sopenharmony_ci *
74d949f91Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84d949f91Sopenharmony_ci *
94d949f91Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104d949f91Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114d949f91Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124d949f91Sopenharmony_ci * See the License for the specific language governing permissions and
134d949f91Sopenharmony_ci * limitations under the License.
144d949f91Sopenharmony_ci */
154d949f91Sopenharmony_ci
164d949f91Sopenharmony_ci#include "gtest/gtest.h"
174d949f91Sopenharmony_ci
184d949f91Sopenharmony_ci#include "pipeline_core.h"
194d949f91Sopenharmony_ci#include "efilter_factory.h"
204d949f91Sopenharmony_ci#include "test_common.h"
214d949f91Sopenharmony_ci#include "filter_base.h"
224d949f91Sopenharmony_ci#include "transfer.h"
234d949f91Sopenharmony_ci
244d949f91Sopenharmony_ciusing namespace testing::ext;
254d949f91Sopenharmony_ci
264d949f91Sopenharmony_cinamespace OHOS {
274d949f91Sopenharmony_cinamespace Media {
284d949f91Sopenharmony_cinamespace Effect {
294d949f91Sopenharmony_cinamespace Test {
304d949f91Sopenharmony_ci
314d949f91Sopenharmony_ciclass TestEffectPipeline : public testing::Test {
324d949f91Sopenharmony_cipublic:
334d949f91Sopenharmony_ci    TestEffectPipeline() = default;
344d949f91Sopenharmony_ci
354d949f91Sopenharmony_ci    ~TestEffectPipeline() override = default;
364d949f91Sopenharmony_ci    static void SetUpTestCase() {}
374d949f91Sopenharmony_ci
384d949f91Sopenharmony_ci    static void TearDownTestCase() {}
394d949f91Sopenharmony_ci
404d949f91Sopenharmony_ci    void SetUp() override{}
414d949f91Sopenharmony_ci
424d949f91Sopenharmony_ci    void TearDown() override{}
434d949f91Sopenharmony_ci};
444d949f91Sopenharmony_ci
454d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, EffectPipelineStandard001, TestSize.Level1) {
464d949f91Sopenharmony_ci    std::shared_ptr<PipelineCore> pipeline = std::make_shared<PipelineCore>();
474d949f91Sopenharmony_ci    pipeline->Init(nullptr);
484d949f91Sopenharmony_ci
494d949f91Sopenharmony_ci    std::vector<Filter *> filtersToPipeline;
504d949f91Sopenharmony_ci    std::shared_ptr<EFilter> eFilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
514d949f91Sopenharmony_ci    filtersToPipeline.push_back(eFilter.get());
524d949f91Sopenharmony_ci
534d949f91Sopenharmony_ci    ErrorCode result = pipeline->AddFilters(filtersToPipeline);
544d949f91Sopenharmony_ci    EXPECT_EQ(result, ErrorCode::SUCCESS);
554d949f91Sopenharmony_ci
564d949f91Sopenharmony_ci    std::shared_ptr<EFilter> contrastEFilter = EFilterFactory::Instance()->Create(CONTRAST_EFILTER);
574d949f91Sopenharmony_ci    result = pipeline->AddFilter(contrastEFilter.get());
584d949f91Sopenharmony_ci    EXPECT_EQ(result, ErrorCode::SUCCESS);
594d949f91Sopenharmony_ci
604d949f91Sopenharmony_ci    result = pipeline->LinkFilters(filtersToPipeline);
614d949f91Sopenharmony_ci    EXPECT_EQ(result, ErrorCode::SUCCESS);
624d949f91Sopenharmony_ci
634d949f91Sopenharmony_ci    result = pipeline->RemoveFilter(eFilter.get());
644d949f91Sopenharmony_ci    EXPECT_EQ(result, ErrorCode::SUCCESS);
654d949f91Sopenharmony_ci
664d949f91Sopenharmony_ci    result = pipeline->RemoveFilterChain(contrastEFilter.get());
674d949f91Sopenharmony_ci    EXPECT_EQ(result, ErrorCode::SUCCESS);
684d949f91Sopenharmony_ci}
694d949f91Sopenharmony_ci
704d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseNamePort001, TestSize.Level1)
714d949f91Sopenharmony_ci{
724d949f91Sopenharmony_ci    FilterBase filterBase("testName_");
734d949f91Sopenharmony_ci    std::string mime = "image/png";
744d949f91Sopenharmony_ci    std::string expectedPortName = "image_1";
754d949f91Sopenharmony_ci    std::string portName = filterBase.NamePort(mime);
764d949f91Sopenharmony_ci
774d949f91Sopenharmony_ci    EXPECT_EQ(portName, expectedPortName);
784d949f91Sopenharmony_ci    EXPECT_EQ(filterBase.portTypeCntMap_["testName_image"], 1);
794d949f91Sopenharmony_ci
804d949f91Sopenharmony_ci    mime = "";
814d949f91Sopenharmony_ci    expectedPortName = "default_1";
824d949f91Sopenharmony_ci    portName = filterBase.NamePort(mime);
834d949f91Sopenharmony_ci    EXPECT_EQ(portName, expectedPortName);
844d949f91Sopenharmony_ci    EXPECT_EQ(filterBase.portTypeCntMap_["testName_default"], 1);
854d949f91Sopenharmony_ci}
864d949f91Sopenharmony_ci
874d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetRouteInPort001, TestSize.Level1)
884d949f91Sopenharmony_ci{
894d949f91Sopenharmony_ci    FilterBase filterBase("testNmae_");
904d949f91Sopenharmony_ci    PInPort result = filterBase.GetRouteInPort("test");
914d949f91Sopenharmony_ci    EXPECT_EQ(result, nullptr);
924d949f91Sopenharmony_ci
934d949f91Sopenharmony_ci    filterBase.routeMap_.emplace_back("test", "test");
944d949f91Sopenharmony_ci    result = filterBase.GetRouteInPort("test");
954d949f91Sopenharmony_ci    EXPECT_EQ(result, nullptr);
964d949f91Sopenharmony_ci}
974d949f91Sopenharmony_ci
984d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetRouteOutPort001, TestSize.Level1)
994d949f91Sopenharmony_ci{
1004d949f91Sopenharmony_ci    FilterBase filterBase("testNmae_");
1014d949f91Sopenharmony_ci    POutPort result = filterBase.GetRouteOutPort("test");
1024d949f91Sopenharmony_ci    EXPECT_EQ(result, nullptr);
1034d949f91Sopenharmony_ci
1044d949f91Sopenharmony_ci    filterBase.routeMap_.emplace_back("test", "test");
1054d949f91Sopenharmony_ci    result = filterBase.GetRouteOutPort("test");
1064d949f91Sopenharmony_ci    EXPECT_EQ(result, nullptr);
1074d949f91Sopenharmony_ci}
1084d949f91Sopenharmony_ci
1094d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseOnEvent001, TestSize.Level1)
1104d949f91Sopenharmony_ci{
1114d949f91Sopenharmony_ci    FilterBase filterBase("testNmae_");
1124d949f91Sopenharmony_ci    const Event &event = Event{ "name_", EventType::EVENT_COMPLETE, { nullptr } };
1134d949f91Sopenharmony_ci    filterBase.OnEvent(event);
1144d949f91Sopenharmony_ci
1154d949f91Sopenharmony_ci    EventReceiver *eventReceiver{ nullptr };
1164d949f91Sopenharmony_ci    filterBase.eventReceiver_ = eventReceiver;
1174d949f91Sopenharmony_ci    filterBase.OnEvent(event);
1184d949f91Sopenharmony_ci}
1194d949f91Sopenharmony_ci
1204d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetNextFilters001, TestSize.Level1)
1214d949f91Sopenharmony_ci{
1224d949f91Sopenharmony_ci    FilterBase filterBase("testNmae_");
1234d949f91Sopenharmony_ci    InfoTransfer *filterPtr = nullptr;
1244d949f91Sopenharmony_ci    OutPort port(filterPtr);
1254d949f91Sopenharmony_ci    auto outPort = std::make_shared<OutPort>(port);
1264d949f91Sopenharmony_ci    filterBase.outPorts_.push_back(outPort);
1274d949f91Sopenharmony_ci    std::vector<Filter *> filters = filterBase.GetNextFilters();
1284d949f91Sopenharmony_ci    EXPECT_TRUE(filters.empty());
1294d949f91Sopenharmony_ci}
1304d949f91Sopenharmony_ci
1314d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetPreFilters001, TestSize.Level1)
1324d949f91Sopenharmony_ci{
1334d949f91Sopenharmony_ci    FilterBase filterBase("testNmae_");
1344d949f91Sopenharmony_ci    InfoTransfer *filterPtr = nullptr;
1354d949f91Sopenharmony_ci    InPort port(filterPtr);
1364d949f91Sopenharmony_ci    auto inPort = std::make_shared<InPort>(port);
1374d949f91Sopenharmony_ci    filterBase.inPorts_.push_back(inPort);
1384d949f91Sopenharmony_ci    std::vector<Filter *> filters = filterBase.GetPreFilters();
1394d949f91Sopenharmony_ci    EXPECT_TRUE(filters.empty());
1404d949f91Sopenharmony_ci
1414d949f91Sopenharmony_ci    filterBase.UnlinkPrevFilters();
1424d949f91Sopenharmony_ci
1434d949f91Sopenharmony_ci    auto result = filterBase.FindPort(filterBase.inPorts_, "test");
1444d949f91Sopenharmony_ci    EXPECT_EQ(result, nullptr);
1454d949f91Sopenharmony_ci}
1464d949f91Sopenharmony_ci
1474d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, InPortPullData001, TestSize.Level1)
1484d949f91Sopenharmony_ci{
1494d949f91Sopenharmony_ci    std::shared_ptr<BufferInfo> bufferInfo = std::make_unique<BufferInfo>();
1504d949f91Sopenharmony_ci    void *add = nullptr;
1514d949f91Sopenharmony_ci    std::shared_ptr<ExtraInfo> extraInfo = std::make_unique<ExtraInfo>();
1524d949f91Sopenharmony_ci    std::shared_ptr<EffectBuffer> data = std::make_shared<EffectBuffer>(bufferInfo, add, extraInfo);
1534d949f91Sopenharmony_ci
1544d949f91Sopenharmony_ci    InfoTransfer *filterPtr = nullptr;
1554d949f91Sopenharmony_ci    InPort port(filterPtr);
1564d949f91Sopenharmony_ci    auto inPort = std::make_shared<InPort>(port);
1574d949f91Sopenharmony_ci
1584d949f91Sopenharmony_ci    std::shared_ptr<InPort> prevPort = std::make_shared<InPort>(nullptr);
1594d949f91Sopenharmony_ci    inPort->prevPort_ = prevPort;
1604d949f91Sopenharmony_ci
1614d949f91Sopenharmony_ci    ErrorCode result = inPort->PullData(data);
1624d949f91Sopenharmony_ci    ASSERT_EQ(result, ErrorCode::ERR_PIPELINE_INVALID_FILTER_PORT);
1634d949f91Sopenharmony_ci}
1644d949f91Sopenharmony_ci
1654d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, InPortActivate001, TestSize.Level1)
1664d949f91Sopenharmony_ci{
1674d949f91Sopenharmony_ci    std::shared_ptr<EFilter> eFilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
1684d949f91Sopenharmony_ci    InPort port(eFilter.get());
1694d949f91Sopenharmony_ci    auto inPort = std::make_shared<InPort>(port);
1704d949f91Sopenharmony_ci
1714d949f91Sopenharmony_ci    std::shared_ptr<InPort> prevPort = std::make_shared<InPort>(port);
1724d949f91Sopenharmony_ci    inPort->prevPort_ = prevPort;
1734d949f91Sopenharmony_ci
1744d949f91Sopenharmony_ci    std::vector<WorkMode> modes;
1754d949f91Sopenharmony_ci    WorkMode outMode;
1764d949f91Sopenharmony_ci    ErrorCode result = inPort->Activate(modes, outMode);
1774d949f91Sopenharmony_ci    ASSERT_EQ(result, ErrorCode::ERR_INVALID_PARAMETER_VALUE);
1784d949f91Sopenharmony_ci}
1794d949f91Sopenharmony_ci}
1804d949f91Sopenharmony_ci}
1814d949f91Sopenharmony_ci}
1824d949f91Sopenharmony_ci}