• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 
16 #include <cstring>
17 #include <cstdint>
18 #include <securec.h>
19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
21 
22 #define private public
23 #include "ohos_resource_adapter_impl.h"
24 #include "application_context.h"
25 #undef private
26 
27 #include "extractor.h"
28 #include "zip_file_reader.h"
29 
30 using namespace testing;
31 using namespace testing::ext;
32 using namespace OHOS::AbilityBase;
33 using namespace OHOS::AbilityRuntime;
34 
35 namespace OHOS {
36 namespace {
37 constexpr uint32_t MODULE_NAME_SIZE = 32;
38 const std::string NWEB_HAP_PATH = "/system/app/com.ohos.arkwebcore/ArkWebCore.hap";
39 const std::string NWEB_HAP_PATH_1 = "/system/app/NWeb/NWeb.hap";
40 const std::string NWEB_HAP_PATH_MODULE_UPDATE = "/module_update/ArkWebCore/app/com.ohos.nweb/NWeb.hap";
41 
42 std::shared_ptr<AbilityRuntime::ApplicationContext> g_applicationContext = nullptr;
43 }
44 
45 namespace AbilityRuntime {
GetApplicationContext()46 std::shared_ptr<ApplicationContext> Context::GetApplicationContext()
47 {
48     return g_applicationContext;
49 }
50 } // namespace AbilityRuntime
51 
52 namespace NWeb {
53 class OhosResourceAdapterTest : public testing::Test {
54 public:
55     static void SetUpTestCase(void);
56     static void TearDownTestCase(void);
57     void SetUp();
58     void TearDown();
59 };
60 
SetUpTestCase(void)61 void OhosResourceAdapterTest::SetUpTestCase(void)
62 {}
63 
TearDownTestCase(void)64 void OhosResourceAdapterTest::TearDownTestCase(void)
65 {}
66 
SetUp(void)67 void OhosResourceAdapterTest::SetUp(void)
68 {}
69 
TearDown(void)70 void OhosResourceAdapterTest::TearDown(void)
71 {}
72 
73 class ApplicationContextMock : public ApplicationContext {
74 public:
75     MOCK_CONST_METHOD0(GetResourceManager, std::shared_ptr<Global::Resource::ResourceManager>());
76     MOCK_METHOD2(CreateModuleContext, std::shared_ptr<Context>(const std::string &, const std::string &));
77 };
78 
79 class ExtractorMock : public Extractor {
80 public:
ExtractorMock()81     explicit ExtractorMock() : Extractor("web_test") {}
82     ~ExtractorMock() override = default;
83     MOCK_METHOD0(Init, bool());
84     MOCK_METHOD0(IsStageModel, bool());
85     MOCK_METHOD3(ExtractToBufByName, bool(const std::string &, std::unique_ptr<uint8_t[]> &, size_t &));
86 };
87 
88 /**
89  * @tc.name: OhosResourceAdapterTest_Init_001
90  * @tc.desc: Init.
91  * @tc.type: FUNC
92  * @tc.require:
93  */
94 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_Init_001, TestSize.Level1)
95 {
96     std::string hapPath = "/system/app/com.ohos.nweb/NWeb.hap";
97     auto adapterImpl = std::make_shared<OhosResourceAdapterImpl>(hapPath);
98     EXPECT_NE(adapterImpl, nullptr);
99     hapPath.clear();
100     adapterImpl->Init(hapPath);
101 }
102 
103 /**
104  * @tc.name: OhosResourceAdapterTest_GetRawFileData_002
105  * @tc.desc: GetRawFileData.
106  * @tc.type: FUNC
107  * @tc.require:
108  */
109 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetRawFileData_002, TestSize.Level1)
110 {
111     std::string hapPath = "/system/app/com.ohos.nweb/NWeb.hap";
112     OhosResourceAdapterImpl adapterImpl(hapPath);
113     std::unique_ptr<uint8_t[]> dest;
114     std::string rawFile = "test_web";
115     size_t len = rawFile.size();
116     uint8_t* data;
117     bool result = adapterImpl.GetRawFileData(rawFile, len, &data, true);
118     EXPECT_FALSE(result);
119     std::shared_ptr<Extractor> extractor = std::make_shared<Extractor>(rawFile);
120     result = adapterImpl.GetRawFileData(extractor, rawFile, len, dest);
121     EXPECT_FALSE(result);
122     result = adapterImpl.GetRawFileData(nullptr, rawFile, len, dest);
123     EXPECT_FALSE(result);
124     auto mock = std::make_shared<ExtractorMock>();
125     EXPECT_CALL(*mock, IsStageModel())
126         .WillRepeatedly(::testing::Return(false));
127     adapterImpl.GetRawFileData(mock, rawFile, len, dest);
128     std::shared_ptr<OhosFileMapper> fileMapper = adapterImpl.GetRawFileMapper(rawFile, true);
129     EXPECT_EQ(fileMapper, nullptr);
130     result = adapterImpl.IsRawFileExist(rawFile, true);
131     EXPECT_FALSE(result);
132     uint16_t date;
133     uint16_t time;
134     result = adapterImpl.GetRawFileLastModTime(rawFile, date, time, true);
135     EXPECT_FALSE(result);
136     result = adapterImpl.GetRawFileLastModTime(rawFile, date, time, false);
137     EXPECT_FALSE(result);
138     time_t times;
139     result = adapterImpl.GetRawFileLastModTime(rawFile, times, true);
140     EXPECT_FALSE(result);
141     result = adapterImpl.GetRawFileLastModTime(rawFile, times, false);
142     EXPECT_FALSE(result);
143     result = adapterImpl.HasEntry(extractor, rawFile);
144     EXPECT_FALSE(result);
145     result = adapterImpl.HasEntry(nullptr, rawFile);
146     EXPECT_FALSE(result);
147     std::shared_ptr<OhosFileMapper> mapper = adapterImpl.GetRawFileMapper(nullptr, rawFile);
148     EXPECT_EQ(mapper, nullptr);
149     mapper = adapterImpl.GetRawFileMapper(extractor, rawFile);
150     EXPECT_EQ(mapper, nullptr);
151     adapterImpl.sysExtractor_.reset();
152     result = adapterImpl.GetRawFileLastModTime(rawFile, date, time, true);
153     EXPECT_FALSE(result);
154     result = adapterImpl.GetRawFileLastModTime(rawFile, times, true);
155     EXPECT_FALSE(result);
156 }
157 
158 /**
159  * @tc.name: OhosResourceAdapterTest_OhosFileMapperImpl_003
160  * @tc.desc: OhosFileMapperImpl.
161  * @tc.type: FUNC
162  * @tc.require:
163  */
164 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_OhosFileMapperImpl_003, TestSize.Level1)
165 {
166     std::string hapPath = "";
167     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
168         hapPath = NWEB_HAP_PATH;
169     }
170     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
171         hapPath = NWEB_HAP_PATH_1;
172     }
173 
174     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
175         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
176     }
177 
178     std::shared_ptr<Extractor> extractor = std::make_shared<Extractor>(hapPath);
179     EXPECT_NE(extractor, nullptr);
180     std::shared_ptr<OHOS::AbilityBase::ZipFileReader> fileReader =
181         OHOS::AbilityBase::ZipFileReader::CreateZipFileReader(hapPath);
182     EXPECT_NE(fileReader, nullptr);
183     std::unique_ptr<OHOS::AbilityBase::FileMapper> fileMap = std::make_unique<OHOS::AbilityBase::FileMapper>();
184     EXPECT_NE(fileMap, nullptr);
185     fileMap->CreateFileMapper(fileReader, hapPath, 0, hapPath.size(), true);
186     OhosFileMapperImpl apperImpl(std::move(fileMap), extractor);
187     int32_t result = apperImpl.GetFd();
188     EXPECT_EQ(result, -1);
189     result = apperImpl.GetOffset();
190     EXPECT_NE(result, -1);
191     std::string fileNmae = apperImpl.GetFileName();
192     EXPECT_NE(fileNmae, "");
193     bool isCompressed = apperImpl.IsCompressed();
194     EXPECT_TRUE(isCompressed);
195     void* data = apperImpl.GetDataPtr();
196     EXPECT_NE(data, nullptr);
197     size_t dataLen = apperImpl.GetDataLen();
198     EXPECT_NE(dataLen, 0);
199     uint8_t* dest;
200     isCompressed = apperImpl.UnzipData(&dest, dataLen);
201     EXPECT_FALSE(isCompressed);
202     apperImpl.extractor_.reset();
203     isCompressed = apperImpl.UnzipData(&dest, dataLen);
204     EXPECT_FALSE(isCompressed);
205 }
206 
207 /**
208  * @tc.name: OhosResourceAdapterTest_ParseModuleName_004
209  * @tc.desc: Init.
210  * @tc.type: FUNC
211  * @tc.require:
212  */
213 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_ParseModuleName_004, TestSize.Level1)
214 {
215     std::string hapPath = "";
216     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
217         hapPath = NWEB_HAP_PATH;
218     }
219     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
220         hapPath = NWEB_HAP_PATH_1;
221     }
222     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
223         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
224     }
225     OhosResourceAdapterImpl adapterImpl(hapPath);
226     bool newCreate = false;
227     std::shared_ptr<Extractor> extractor = ExtractorUtil::GetExtractor(hapPath, newCreate);
228     EXPECT_NE(extractor, nullptr);
229     std::string result = adapterImpl.GetModuleName(nullptr, 0);
230     EXPECT_EQ(result, "");
231     char *configStr = static_cast<char*>(malloc(MODULE_NAME_SIZE));
232     EXPECT_NE(configStr, nullptr);
233     (void)memset_s(configStr, MODULE_NAME_SIZE, 0, MODULE_NAME_SIZE);
234     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
235     EXPECT_EQ(result, "");
236     if (memcpy_s(configStr, MODULE_NAME_SIZE, "\"moduleName\"", sizeof("\"moduleName\"")) != EOK) {
237         EXPECT_FALSE(true);
238     };
239     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
240     EXPECT_EQ(result, "");
241     uint32_t len = strlen(configStr);
242     if (memcpy_s(configStr + len, MODULE_NAME_SIZE - len, "\"", sizeof("\"")) != EOK) {
243         EXPECT_FALSE(true);
244     };
245     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
246     EXPECT_EQ(result, "");
247     (void)memset_s(configStr, MODULE_NAME_SIZE, 0, MODULE_NAME_SIZE);
248     if (memcpy_s(configStr, MODULE_NAME_SIZE, "\"moduleName\"\"test\"", sizeof("\"moduleName\"\"test\"")) != EOK) {
249         EXPECT_FALSE(true);
250     };
251     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
252     EXPECT_NE(result, "");
253     result = adapterImpl.ParseModuleName(extractor);
254     EXPECT_EQ(result, "");
255     result = adapterImpl.ParseModuleName(nullptr);
256     EXPECT_EQ(result, "");
257     free(configStr);
258     configStr = nullptr;
259     auto mock = std::make_shared<ExtractorMock>();
260     EXPECT_CALL(*mock, ExtractToBufByName(::testing::_, ::testing::_, ::testing::_))
261         .WillRepeatedly(::testing::Return(true));
262     adapterImpl.ParseModuleName(mock);
263 }
264 
265 /**
266  * @tc.name: OhosResourceAdapterTest_GetResourceMgr_005
267  * @tc.desc: GetResourceMgr.
268  * @tc.type: FUNC
269  * @tc.require:
270  */
271 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetResourceMgr_005, TestSize.Level1)
272 {
273     std::string hapPath = "";
274     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
275         hapPath = NWEB_HAP_PATH;
276     }
277     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
278         hapPath = NWEB_HAP_PATH_1;
279     }
280     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
281         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
282     }
283     OhosResourceAdapterImpl adapterImpl(hapPath);
284     uint8_t* dest;
285     std::string rawFile = "test";
286     size_t len = rawFile.size();
287     bool result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
288     EXPECT_FALSE(result);
289     rawFile = "resources/rawfile/";
290     len = rawFile.size();
291     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
292     EXPECT_FALSE(result);
293     rawFile = "resources/rawfile/bundleName";
294     len = rawFile.size();
295     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
296     EXPECT_FALSE(result);
297     rawFile = "resources/rawfile/bundleName:";
298     len = rawFile.size();
299     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
300     EXPECT_FALSE(result);
301     rawFile = "resources/rawfile/bundleName:test/";
302     len = rawFile.size();
303     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
304     EXPECT_FALSE(result);
305     rawFile = "resources/rawfile/bundleName:test/moduleName:";
306     len = rawFile.size();
307     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
308     EXPECT_FALSE(result);
309     rawFile = "resources/rawfile/bundleName:test/moduleName:web/";
310     len = rawFile.size();
311     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
312     EXPECT_FALSE(result);
313     rawFile = "resources/rawfile/bundleName:test/moduleName:web/webtest";
314     len = rawFile.size();
315     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
316     EXPECT_FALSE(result);
317     g_applicationContext = std::make_shared<ApplicationContextMock>();
318     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
319     EXPECT_FALSE(result);
320 }
321 
322 /**
323  * @tc.name: OhosResourceAdapterTest_GetResourceString_006
324  * @tc.desc: GetResourceString.
325  * @tc.type: FUNC
326  * @tc.require:
327  */
328 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetResourceString_006, TestSize.Level1)
329 {
330     std::string hapPath = "";
331     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
332         hapPath = NWEB_HAP_PATH;
333     }
334     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
335         hapPath = NWEB_HAP_PATH_1;
336     }
337     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
338         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
339     }
340 
341     OhosResourceAdapterImpl adapterImpl(hapPath);
342     std::string res;
343 
344     bool result = adapterImpl.GetResourceString("", "", 1, res);
345     EXPECT_FALSE(result);
346 
347     result = adapterImpl.GetResourceString("test", "web", 1, res);
348     EXPECT_FALSE(result);
349 
350     result = adapterImpl.GetResourceString("test", "web/webtest", 1, res);
351     EXPECT_FALSE(result);
352 }
353 }
354 } // namespace NWeb
355