14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distribZuted under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci#include <cstdio> 174514f5e3Sopenharmony_ci#include <iostream> 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_ci#include "ecmascript/extractortool/src/extractor.h" 204514f5e3Sopenharmony_ci#include "ecmascript/tests/test_helper.h" 214514f5e3Sopenharmony_ci 224514f5e3Sopenharmony_ciusing namespace panda::ecmascript; 234514f5e3Sopenharmony_ci 244514f5e3Sopenharmony_cinamespace panda::ecmascript { 254514f5e3Sopenharmony_ciclass ExtractorFriend { 264514f5e3Sopenharmony_cipublic: 274514f5e3Sopenharmony_ci explicit ExtractorFriend(const std::string &source) : extractor_(source) 284514f5e3Sopenharmony_ci { 294514f5e3Sopenharmony_ci } 304514f5e3Sopenharmony_ci 314514f5e3Sopenharmony_ci bool GetInitial() const 324514f5e3Sopenharmony_ci { 334514f5e3Sopenharmony_ci return extractor_.initial_; 344514f5e3Sopenharmony_ci } 354514f5e3Sopenharmony_ci 364514f5e3Sopenharmony_ci void SetInitial(bool initialValue) 374514f5e3Sopenharmony_ci { 384514f5e3Sopenharmony_ci extractor_.initial_ = initialValue; 394514f5e3Sopenharmony_ci } 404514f5e3Sopenharmony_ci 414514f5e3Sopenharmony_ci const std::string &GetHapPath() const 424514f5e3Sopenharmony_ci { 434514f5e3Sopenharmony_ci return extractor_.hapPath_; 444514f5e3Sopenharmony_ci } 454514f5e3Sopenharmony_ci 464514f5e3Sopenharmony_ci void SetHapPath(const std::string &newHapPath) 474514f5e3Sopenharmony_ci { 484514f5e3Sopenharmony_ci extractor_.hapPath_ = newHapPath; 494514f5e3Sopenharmony_ci } 504514f5e3Sopenharmony_ci 514514f5e3Sopenharmony_ci std::optional<bool> GetIsStageModel() const 524514f5e3Sopenharmony_ci { 534514f5e3Sopenharmony_ci return extractor_.isStageModel_; 544514f5e3Sopenharmony_ci } 554514f5e3Sopenharmony_ci 564514f5e3Sopenharmony_ci void SetIsStageModel(bool model) 574514f5e3Sopenharmony_ci { 584514f5e3Sopenharmony_ci extractor_.isStageModel_ = model; 594514f5e3Sopenharmony_ci } 604514f5e3Sopenharmony_ci 614514f5e3Sopenharmony_ci Extractor extractor_; 624514f5e3Sopenharmony_ci}; 634514f5e3Sopenharmony_ci 644514f5e3Sopenharmony_ciclass ExtractorUtilFriend { 654514f5e3Sopenharmony_cipublic: 664514f5e3Sopenharmony_ci void DeleteExtractor(const std::string &hapPath) 674514f5e3Sopenharmony_ci { 684514f5e3Sopenharmony_ci return extractorUtil_.DeleteExtractor(hapPath); 694514f5e3Sopenharmony_ci } 704514f5e3Sopenharmony_ci 714514f5e3Sopenharmony_ci std::unordered_map<std::string, std::shared_ptr<Extractor>> GetExtractorMap() 724514f5e3Sopenharmony_ci { 734514f5e3Sopenharmony_ci return extractorUtil_.extractorMap_; 744514f5e3Sopenharmony_ci } 754514f5e3Sopenharmony_ci 764514f5e3Sopenharmony_ciprivate: 774514f5e3Sopenharmony_ci ExtractorUtil extractorUtil_; 784514f5e3Sopenharmony_ci}; 794514f5e3Sopenharmony_ci} 804514f5e3Sopenharmony_ci 814514f5e3Sopenharmony_cinamespace panda::test { 824514f5e3Sopenharmony_ciclass ExtractorTest : public testing::Test { 834514f5e3Sopenharmony_cipublic: 844514f5e3Sopenharmony_ci static void SetUpTestCase() 854514f5e3Sopenharmony_ci { 864514f5e3Sopenharmony_ci GTEST_LOG_(INFO) << "SetUpTestCase"; 874514f5e3Sopenharmony_ci } 884514f5e3Sopenharmony_ci 894514f5e3Sopenharmony_ci static void TearDownTestCase() 904514f5e3Sopenharmony_ci { 914514f5e3Sopenharmony_ci GTEST_LOG_(INFO) << "TearDownCase"; 924514f5e3Sopenharmony_ci } 934514f5e3Sopenharmony_ci 944514f5e3Sopenharmony_ci void SetUp() override 954514f5e3Sopenharmony_ci { 964514f5e3Sopenharmony_ci TestHelper::CreateEcmaVMWithScope(instance, thread, scope); 974514f5e3Sopenharmony_ci instance->SetEnableForceGC(false); 984514f5e3Sopenharmony_ci } 994514f5e3Sopenharmony_ci 1004514f5e3Sopenharmony_ci void TearDown() override 1014514f5e3Sopenharmony_ci { 1024514f5e3Sopenharmony_ci TestHelper::DestroyEcmaVMWithScope(instance, scope); 1034514f5e3Sopenharmony_ci } 1044514f5e3Sopenharmony_ci 1054514f5e3Sopenharmony_ci EcmaVM *instance{nullptr}; 1064514f5e3Sopenharmony_ci EcmaHandleScope *scope{nullptr}; 1074514f5e3Sopenharmony_ci JSThread *thread{nullptr}; 1084514f5e3Sopenharmony_ci}; 1094514f5e3Sopenharmony_ci 1104514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, InitTest) 1114514f5e3Sopenharmony_ci{ 1124514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1134514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.Init()); 1144514f5e3Sopenharmony_ci} 1154514f5e3Sopenharmony_ci 1164514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetFileBufferTest) 1174514f5e3Sopenharmony_ci{ 1184514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1194514f5e3Sopenharmony_ci std::ostringstream dest; 1204514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileBuffer("Test", dest)); 1214514f5e3Sopenharmony_ci extractorFriend.SetInitial(true); 1224514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileBuffer("", dest)); 1234514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileBuffer("Test", dest)); 1244514f5e3Sopenharmony_ci} 1254514f5e3Sopenharmony_ci 1264514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetFileListTest) 1274514f5e3Sopenharmony_ci{ 1284514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1294514f5e3Sopenharmony_ci std::vector<std::string> assetList; 1304514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileList("TestSrcPath", assetList)); 1314514f5e3Sopenharmony_ci extractorFriend.SetInitial(true); 1324514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileList("", assetList)); 1334514f5e3Sopenharmony_ci EXPECT_TRUE(extractorFriend.extractor_.GetFileList("/", assetList)); 1344514f5e3Sopenharmony_ci std::set<std::string> fileSet; 1354514f5e3Sopenharmony_ci EXPECT_TRUE(extractorFriend.extractor_.GetFileList("TestSrcPath", fileSet)); 1364514f5e3Sopenharmony_ci} 1374514f5e3Sopenharmony_ci 1384514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, HasEntryTest) 1394514f5e3Sopenharmony_ci{ 1404514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1414514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.HasEntry("TestFileName")); 1424514f5e3Sopenharmony_ci extractorFriend.SetInitial(true); 1434514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.HasEntry("TestFileName")); 1444514f5e3Sopenharmony_ci} 1454514f5e3Sopenharmony_ci 1464514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, IsDirExistTest) 1474514f5e3Sopenharmony_ci{ 1484514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1494514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.IsDirExist("TestFileName")); 1504514f5e3Sopenharmony_ci extractorFriend.SetInitial(true); 1514514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.IsDirExist("")); 1524514f5e3Sopenharmony_ci EXPECT_TRUE(extractorFriend.extractor_.IsDirExist("/")); 1534514f5e3Sopenharmony_ci} 1544514f5e3Sopenharmony_ci 1554514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, ExtractByNameTest) 1564514f5e3Sopenharmony_ci{ 1574514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1584514f5e3Sopenharmony_ci std::ostringstream dest; 1594514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.ExtractByName("TestFileName", dest)); 1604514f5e3Sopenharmony_ci extractorFriend.SetInitial(true); 1614514f5e3Sopenharmony_ci} 1624514f5e3Sopenharmony_ci 1634514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, ExtractFileTest) 1644514f5e3Sopenharmony_ci{ 1654514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1664514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.ExtractFile("TestFileName", "TestPath")); 1674514f5e3Sopenharmony_ci} 1684514f5e3Sopenharmony_ci 1694514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetSafeDataTest) 1704514f5e3Sopenharmony_ci{ 1714514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1724514f5e3Sopenharmony_ci auto result = extractorFriend.extractor_.GetSafeData("TestFileName.abc"); 1734514f5e3Sopenharmony_ci EXPECT_EQ(result, nullptr); 1744514f5e3Sopenharmony_ci 1754514f5e3Sopenharmony_ci result = extractorFriend.extractor_.GetSafeData("TestFileName"); 1764514f5e3Sopenharmony_ci EXPECT_EQ(result, nullptr); 1774514f5e3Sopenharmony_ci} 1784514f5e3Sopenharmony_ci 1794514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, IsStageModelTest) 1804514f5e3Sopenharmony_ci{ 1814514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1824514f5e3Sopenharmony_ci EXPECT_TRUE(extractorFriend.extractor_.IsStageModel()); 1834514f5e3Sopenharmony_ci EXPECT_TRUE(extractorFriend.extractor_.IsStageModel()); 1844514f5e3Sopenharmony_ci} 1854514f5e3Sopenharmony_ci 1864514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, ExtractToBufByNameTest) 1874514f5e3Sopenharmony_ci{ 1884514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1894514f5e3Sopenharmony_ci auto byteArray = std::make_unique<uint8_t[]>(1024); 1904514f5e3Sopenharmony_ci size_t len; 1914514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.ExtractToBufByName("TestFileName", byteArray, len)); 1924514f5e3Sopenharmony_ci} 1934514f5e3Sopenharmony_ci 1944514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetFileInfoTest) 1954514f5e3Sopenharmony_ci{ 1964514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 1974514f5e3Sopenharmony_ci FileInfo fileInfo; 1984514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileInfo("TestFileName", fileInfo)); 1994514f5e3Sopenharmony_ci} 2004514f5e3Sopenharmony_ci 2014514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetFileListTest2) 2024514f5e3Sopenharmony_ci{ 2034514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 2044514f5e3Sopenharmony_ci std::set<std::string> fileSet; 2054514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileList("TestSrcPath", fileSet)); 2064514f5e3Sopenharmony_ci 2074514f5e3Sopenharmony_ci extractorFriend.SetInitial(true); 2084514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.GetFileList("", fileSet)); 2094514f5e3Sopenharmony_ci} 2104514f5e3Sopenharmony_ci 2114514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, IsHapCompressTest) 2124514f5e3Sopenharmony_ci{ 2134514f5e3Sopenharmony_ci ExtractorFriend extractorFriend("TestFile"); 2144514f5e3Sopenharmony_ci EXPECT_FALSE(extractorFriend.extractor_.IsHapCompress("TestFileName")); 2154514f5e3Sopenharmony_ci} 2164514f5e3Sopenharmony_ci 2174514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetLoadFilePathTest) 2184514f5e3Sopenharmony_ci{ 2194514f5e3Sopenharmony_ci ExtractorUtil util; 2204514f5e3Sopenharmony_ci EXPECT_EQ(util.GetLoadFilePath("/data/app/el1/bundle/public/Test.hap"), "/data/storage/el1/bundle/Test.hap"); 2214514f5e3Sopenharmony_ci EXPECT_EQ(util.GetLoadFilePath("Test.hap"), "Test.hap"); 2224514f5e3Sopenharmony_ci} 2234514f5e3Sopenharmony_ci 2244514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, GetExtractorTest) 2254514f5e3Sopenharmony_ci{ 2264514f5e3Sopenharmony_ci ExtractorUtil util; 2274514f5e3Sopenharmony_ci bool newCreate = false; 2284514f5e3Sopenharmony_ci bool cache = false; 2294514f5e3Sopenharmony_ci auto result = util.GetExtractor("", newCreate, cache); 2304514f5e3Sopenharmony_ci EXPECT_EQ(result, nullptr); 2314514f5e3Sopenharmony_ci 2324514f5e3Sopenharmony_ci result = util.GetExtractor("TestHapPath.hap", newCreate, cache); 2334514f5e3Sopenharmony_ci EXPECT_EQ(result, nullptr); 2344514f5e3Sopenharmony_ci} 2354514f5e3Sopenharmony_ci 2364514f5e3Sopenharmony_ciHWTEST_F_L0(ExtractorTest, DeleteExtractorTest) 2374514f5e3Sopenharmony_ci{ 2384514f5e3Sopenharmony_ci ExtractorUtilFriend util; 2394514f5e3Sopenharmony_ci util.DeleteExtractor(""); 2404514f5e3Sopenharmony_ci util.DeleteExtractor("TestHapPath.hap"); 2414514f5e3Sopenharmony_ci std::unordered_map<std::string, std::shared_ptr<Extractor>> emptyMap; 2424514f5e3Sopenharmony_ci auto map = util.GetExtractorMap(); 2434514f5e3Sopenharmony_ci EXPECT_EQ(map, emptyMap); 2444514f5e3Sopenharmony_ci} 2454514f5e3Sopenharmony_ci}