• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2025 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 #include "nweb_config_helper.h"
26 #include "extractor.h"
27 #include "system_properties_adapter_impl.h"
28 #undef private
29 #include "parameters.h"
30 #include "zip_file_reader.h"
31 
32 using namespace testing;
33 using namespace testing::ext;
34 using namespace OHOS::AbilityBase;
35 using namespace OHOS::AbilityRuntime;
36 
37 namespace OHOS {
38 namespace {
39 constexpr uint32_t MODULE_NAME_SIZE = 32;
40 const std::string NWEB_HAP_PATH = "/system/app/ArkWebCore/ArkWebCore.hap";
41 const std::string NWEB_HAP_PATH_1 = "/system/app/NWeb/NWeb.hap";
42 const std::string NWEB_HAP_PATH_MODULE_UPDATE = "/module_update/ArkWebCore/app/com.ohos.nweb/NWeb.hap";
43 
44 std::shared_ptr<AbilityRuntime::ApplicationContext> g_applicationContext = nullptr;
45 }
46 
47 namespace AbilityRuntime {
GetApplicationContext()48 std::shared_ptr<ApplicationContext> Context::GetApplicationContext()
49 {
50     return g_applicationContext;
51 }
52 } // namespace AbilityRuntime
53 
54 namespace NWeb {
55 class OhosResourceAdapterTest : public testing::Test {
56 public:
57     static void SetUpTestCase(void);
58     static void TearDownTestCase(void);
59     void SetUp();
60     void TearDown();
61 };
62 
SetUpTestCase(void)63 void OhosResourceAdapterTest::SetUpTestCase(void)
64 {}
65 
TearDownTestCase(void)66 void OhosResourceAdapterTest::TearDownTestCase(void)
67 {}
68 
SetUp(void)69 void OhosResourceAdapterTest::SetUp(void)
70 {}
71 
TearDown(void)72 void OhosResourceAdapterTest::TearDown(void)
73 {}
74 
75 class ApplicationContextMock : public ApplicationContext {
76 public:
77     MOCK_CONST_METHOD0(GetResourceManager, std::shared_ptr<Global::Resource::ResourceManager>());
78     MOCK_METHOD2(CreateModuleContext, std::shared_ptr<Context>(const std::string &, const std::string &));
79 };
80 
81 class ExtractorMock : public Extractor{
82 public:
ExtractorMock()83     explicit ExtractorMock() : Extractor("web_test") {}
84     ~ExtractorMock() override = default;
SetInit(bool init)85     void SetInit(bool init)
86     {
87         initial_ = init;
88     }
89 
SetStageMode(bool isStageModel)90     void SetStageMode(bool isStageModel)
91     {
92         isStageModel_ = isStageModel;
93     }
94 };
95 
96 /**
97  * @tc.name: OhosResourceAdapterTest_Init_001
98  * @tc.desc: Init.
99  * @tc.type: FUNC
100  * @tc.require:
101  */
102 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_Init_001, TestSize.Level1)
103 {
104     std::string hapPath = "/system/app/com.ohos.nweb/NWeb.hap";
105     auto adapterImpl = std::make_shared<OhosResourceAdapterImpl>(hapPath);
106     EXPECT_NE(adapterImpl, nullptr);
107     hapPath.clear();
108     adapterImpl->Init(hapPath);
109 }
110 
111 /**
112  * @tc.name: OhosResourceAdapterTest_GetRawFileData_002
113  * @tc.desc: GetRawFileData.
114  * @tc.type: FUNC
115  * @tc.require:
116  */
117 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetRawFileData_002, TestSize.Level1)
118 {
119     std::string hapPath = "/system/app/com.ohos.nweb/NWeb.hap";
120     OhosResourceAdapterImpl adapterImpl(hapPath);
121     std::unique_ptr<uint8_t[]> dest;
122     std::string rawFile = "test_web";
123     size_t len = rawFile.size();
124     uint8_t* data;
125     bool result = adapterImpl.GetRawFileData(rawFile, len, &data, true);
126     EXPECT_FALSE(result);
127     std::shared_ptr<Extractor> extractor = std::make_shared<Extractor>(rawFile);
128     result = adapterImpl.GetRawFileData(extractor, rawFile, len, dest);
129     EXPECT_FALSE(result);
130     result = adapterImpl.GetRawFileData(nullptr, rawFile, len, dest);
131     EXPECT_FALSE(result);
132     auto mock = std::make_shared<ExtractorMock>();
133     mock->SetStageMode(false);
134     adapterImpl.GetRawFileData(mock, rawFile, len, dest);
135     std::shared_ptr<OhosFileMapper> fileMapper = adapterImpl.GetRawFileMapper(rawFile, true);
136     EXPECT_EQ(fileMapper, nullptr);
137     result = adapterImpl.IsRawFileExist(rawFile, true);
138     EXPECT_FALSE(result);
139     uint16_t date;
140     uint16_t time;
141     result = adapterImpl.GetRawFileLastModTime(rawFile, date, time, true);
142     EXPECT_FALSE(result);
143     result = adapterImpl.GetRawFileLastModTime(rawFile, date, time, false);
144     EXPECT_FALSE(result);
145     time_t times;
146     result = adapterImpl.GetRawFileLastModTime(rawFile, times, true);
147     EXPECT_FALSE(result);
148     result = adapterImpl.GetRawFileLastModTime(rawFile, times, false);
149     EXPECT_FALSE(result);
150     result = adapterImpl.HasEntry(extractor, rawFile);
151     EXPECT_FALSE(result);
152     result = adapterImpl.HasEntry(nullptr, rawFile);
153     EXPECT_FALSE(result);
154     std::shared_ptr<OhosFileMapper> mapper = adapterImpl.GetRawFileMapper(nullptr, rawFile);
155     EXPECT_EQ(mapper, nullptr);
156     mapper = adapterImpl.GetRawFileMapper(extractor, rawFile);
157     EXPECT_EQ(mapper, nullptr);
158     adapterImpl.sysExtractor_.reset();
159     result = adapterImpl.GetRawFileLastModTime(rawFile, date, time, true);
160     EXPECT_FALSE(result);
161     result = adapterImpl.GetRawFileLastModTime(rawFile, times, true);
162     EXPECT_FALSE(result);
163 }
164 
165 /**
166  * @tc.name: OhosResourceAdapterTest_OhosFileMapperImpl_003
167  * @tc.desc: OhosFileMapperImpl.
168  * @tc.type: FUNC
169  * @tc.require:
170  */
171 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_OhosFileMapperImpl_003, TestSize.Level1)
172 {
173     std::string hapPath = "";
174     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
175         hapPath = NWEB_HAP_PATH;
176     }
177     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
178         hapPath = NWEB_HAP_PATH_1;
179     }
180 
181     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
182         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
183     }
184 
185     std::shared_ptr<Extractor> extractor = std::make_shared<Extractor>(hapPath);
186     EXPECT_NE(extractor, nullptr);
187     std::shared_ptr<OHOS::AbilityBase::ZipFileReader> fileReader =
188         OHOS::AbilityBase::ZipFileReader::CreateZipFileReader(hapPath);
189     EXPECT_EQ(fileReader, nullptr);
190     std::unique_ptr<OHOS::AbilityBase::FileMapper> fileMap = std::make_unique<OHOS::AbilityBase::FileMapper>();
191     EXPECT_NE(fileMap, nullptr);
192     fileMap->CreateFileMapper(fileReader, hapPath, 0, hapPath.size(), true);
193     OhosFileMapperImpl apperImpl(std::move(fileMap), extractor);
194     int32_t result = apperImpl.GetFd();
195     EXPECT_EQ(result, -1);
196     result = apperImpl.GetOffset();
197     EXPECT_NE(result, -1);
198     std::string fileNmae = apperImpl.GetFileName();
199     EXPECT_EQ(fileNmae, "");
200     bool isCompressed = apperImpl.IsCompressed();
201     EXPECT_FALSE(isCompressed);
202     void* data = apperImpl.GetDataPtr();
203     EXPECT_EQ(data, nullptr);
204     size_t dataLen = apperImpl.GetDataLen();
205     EXPECT_EQ(dataLen, 0);
206     uint8_t* dest;
207     isCompressed = apperImpl.UnzipData(&dest, dataLen);
208     EXPECT_FALSE(isCompressed);
209     apperImpl.extractor_.reset();
210     isCompressed = apperImpl.UnzipData(&dest, dataLen);
211     EXPECT_FALSE(isCompressed);
212 }
213 
214 /**
215  * @tc.name: OhosResourceAdapterTest_OhosFileMapperImpl_004
216  * @tc.desc: OhosFileMapperImpl.
217  * @tc.type: FUNC
218  * @tc.require:
219  */
220 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_OhosFileMapperImpl_004, TestSize.Level1)
221 {
222     std::string hapPath = "/system/app/com.ohos.nweb/NWeb.hap";
223     OhosResourceAdapterImpl adapterImpl(hapPath);
224     SystemPropertiesAdapterImpl& propImpl = SystemPropertiesAdapterImpl::GetInstance();
225     bool optimode = propImpl.GetWebOptimizationValue();
226     if (optimode) {
227         OHOS::system::SetParameter("web.optimization", "false");
228     }
229     std::string rawFile = "test_web";
230     std::shared_ptr<Extractor> extractor = std::make_shared<Extractor>(rawFile);
231     std::shared_ptr<OhosFileMapper> mapper = adapterImpl.GetRawFileMapper(extractor, rawFile);
232     EXPECT_EQ(mapper, nullptr);
233     if (optimode) {
234         OHOS::system::SetParameter("web.optimization", "true");
235     }
236 }
237 
238 /**
239  * @tc.name: OhosResourceAdapterTest_ParseModuleName_004
240  * @tc.desc: Init.
241  * @tc.type: FUNC
242  * @tc.require:
243  */
244 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_ParseModuleName_004, TestSize.Level1)
245 {
246     std::string hapPath = "";
247     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
248         hapPath = NWEB_HAP_PATH;
249     }
250     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
251         hapPath = NWEB_HAP_PATH_1;
252     }
253     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
254         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
255     }
256     OhosResourceAdapterImpl adapterImpl(hapPath);
257     bool newCreate = false;
258     std::shared_ptr<Extractor> extractor = ExtractorUtil::GetExtractor(hapPath, newCreate);
259     EXPECT_EQ(extractor, nullptr);
260     std::string result = adapterImpl.GetModuleName(nullptr, 0);
261     EXPECT_EQ(result, "");
262     char *configStr = static_cast<char*>(malloc(MODULE_NAME_SIZE));
263     EXPECT_NE(configStr, nullptr);
264     (void)memset_s(configStr, MODULE_NAME_SIZE, 0, MODULE_NAME_SIZE);
265     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
266     EXPECT_EQ(result, "");
267     if (memcpy_s(configStr, MODULE_NAME_SIZE, "\"moduleName\"", sizeof("\"moduleName\"")) != EOK) {
268         EXPECT_FALSE(true);
269     };
270     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
271     EXPECT_EQ(result, "");
272     uint32_t len = strlen(configStr);
273     if (memcpy_s(configStr + len, MODULE_NAME_SIZE - len, "\"", sizeof("\"")) != EOK) {
274         EXPECT_FALSE(true);
275     };
276     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
277     EXPECT_EQ(result, "");
278     (void)memset_s(configStr, MODULE_NAME_SIZE, 0, MODULE_NAME_SIZE);
279     if (memcpy_s(configStr, MODULE_NAME_SIZE, "\"moduleName\"\"test\"", sizeof("\"moduleName\"\"test\"")) != EOK) {
280         EXPECT_FALSE(true);
281     };
282     result = adapterImpl.GetModuleName(configStr, MODULE_NAME_SIZE);
283     EXPECT_NE(result, "");
284     result = adapterImpl.ParseModuleName(extractor);
285     EXPECT_EQ(result, "");
286     result = adapterImpl.ParseModuleName(nullptr);
287     EXPECT_EQ(result, "");
288     free(configStr);
289     configStr = nullptr;
290 }
291 
292 /**
293  * @tc.name: OhosResourceAdapterTest_GetResourceMgr_005
294  * @tc.desc: GetResourceMgr.
295  * @tc.type: FUNC
296  * @tc.require:
297  */
298 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetResourceMgr_005, TestSize.Level1)
299 {
300     std::string hapPath = "";
301     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
302         hapPath = NWEB_HAP_PATH;
303     }
304     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
305         hapPath = NWEB_HAP_PATH_1;
306     }
307     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
308         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
309     }
310     OhosResourceAdapterImpl adapterImpl(hapPath);
311     uint8_t* dest;
312     std::string rawFile = "test";
313     size_t len = rawFile.size();
314     bool result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
315     EXPECT_FALSE(result);
316     rawFile = "resources/rawfile/";
317     len = rawFile.size();
318     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
319     EXPECT_FALSE(result);
320     rawFile = "resources/rawfile/bundleName";
321     len = rawFile.size();
322     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
323     EXPECT_FALSE(result);
324     rawFile = "resources/rawfile/bundleName:";
325     len = rawFile.size();
326     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
327     EXPECT_FALSE(result);
328     rawFile = "resources/rawfile/bundleName:test/";
329     len = rawFile.size();
330     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
331     EXPECT_FALSE(result);
332     rawFile = "resources/rawfile/bundleName:test/moduleName:";
333     len = rawFile.size();
334     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
335     EXPECT_FALSE(result);
336     rawFile = "resources/rawfile/bundleName:test/moduleName:web/";
337     len = rawFile.size();
338     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
339     EXPECT_FALSE(result);
340     rawFile = "resources/rawfile/bundleName:test/moduleName:web/webtest";
341     len = rawFile.size();
342     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
343     EXPECT_FALSE(result);
344     g_applicationContext = std::make_shared<ApplicationContextMock>();
345     result = adapterImpl.GetRawFileData(rawFile, len, &dest, false);
346     EXPECT_FALSE(result);
347 }
348 
349 /**
350  * @tc.name: OhosResourceAdapterTest_GetResourceString_006
351  * @tc.desc: GetResourceString.
352  * @tc.type: FUNC
353  * @tc.require:
354  */
355 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetResourceString_006, TestSize.Level1)
356 {
357     std::string hapPath = "";
358     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
359         hapPath = NWEB_HAP_PATH;
360     }
361     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
362         hapPath = NWEB_HAP_PATH_1;
363     }
364     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
365         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
366     }
367 
368     OhosResourceAdapterImpl adapterImpl(hapPath);
369     std::string res;
370 
371     bool result = adapterImpl.GetResourceString("", "", 1, res);
372     EXPECT_FALSE(result);
373 
374     result = adapterImpl.GetResourceString("test", "web", 1, res);
375     EXPECT_FALSE(result);
376 
377     result = adapterImpl.GetResourceString("test", "web/webtest", 1, res);
378     EXPECT_FALSE(result);
379 }
380 
381 /**
382  * @tc.name: OhosResourceAdapterTest_GetSystemLanguage_007
383  * @tc.desc: GetSystemLanguage.
384  * @tc.type: FUNC
385  * @tc.require:
386  */
387 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_GetSystemLanguage_007, TestSize.Level1)
388 {
389     std::string hapPath = "";
390     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
391         hapPath = NWEB_HAP_PATH;
392     }
393     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
394         hapPath = NWEB_HAP_PATH_1;
395     }
396     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
397         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
398     }
399 
400     OhosResourceAdapterImpl adapterImpl(hapPath);
401     std::string res = adapterImpl.GetSystemLanguage();
402     EXPECT_FALSE(res.empty());
403 }
404 
405 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_ConvertToSandboxPath_008, TestSize.Level1)
406 {
407     std::string hapPath = "";
408     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
409         hapPath = NWEB_HAP_PATH;
410     }
411     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
412         hapPath = NWEB_HAP_PATH_1;
413     }
414     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
415         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
416     }
417 
418     OhosResourceAdapterImpl adapterImpl(hapPath);
419     std::string inputStr = "";
420     std::string prefixPath = "";
421     std::string res = adapterImpl.ConvertToSandboxPath(inputStr, prefixPath);
422     EXPECT_EQ(res, "");
423     inputStr = NWEB_HAP_PATH;
424     prefixPath = "/data/app/el1/bundle/public/";
425     res = adapterImpl.ConvertToSandboxPath(inputStr, prefixPath);
426     EXPECT_FALSE(res.empty());
427     inputStr = "/data/app/el1/bundle/public/system/app/com.ohos.nweb/NWeb.hap";
428     res = adapterImpl.ConvertToSandboxPath(inputStr, prefixPath);
429     EXPECT_FALSE(res.empty());
430 }
431 
432 HWTEST_F(OhosResourceAdapterTest, OhosResourceAdapterTest_SetArkWebCoreHapPathOverride_009, TestSize.Level1)
433 {
434     std::string hapPath = "";
435     if (access(NWEB_HAP_PATH.c_str(), F_OK) == 0) {
436         hapPath = NWEB_HAP_PATH;
437     }
438     if (access(NWEB_HAP_PATH_1.c_str(), F_OK) == 0) {
439         hapPath = NWEB_HAP_PATH_1;
440     }
441     if (access(NWEB_HAP_PATH_MODULE_UPDATE.c_str(), F_OK) == 0) {
442         hapPath = NWEB_HAP_PATH_MODULE_UPDATE;
443     }
444 
445     OhosResourceAdapterImpl adapterImpl(hapPath);
446     adapterImpl.arkWebCoreHapPathOverride_ = "";
447     std::string inputStr = "";
448     adapterImpl.SetArkWebCoreHapPathOverride("");
449     EXPECT_EQ(adapterImpl.arkWebCoreHapPathOverride_, "");
450     inputStr = NWEB_HAP_PATH;
451     adapterImpl.SetArkWebCoreHapPathOverride(inputStr);
452     EXPECT_EQ(adapterImpl.arkWebCoreHapPathOverride_, NWEB_HAP_PATH);
453     adapterImpl.arkWebCoreHapPathOverride_ = "";
454 }
455 }
456 } // namespace NWeb
457