1 /*
2 * Copyright (c) 2020-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 "imgdecode/image_load.h"
17
18 #include "gfx_utils/file.h"
19 #include "gfx_utils/mem_api.h"
20 #include "test_resource_config.h"
21
22 #include <climits>
23 #include <gtest/gtest.h>
24
25 using namespace testing::ext;
26
27 namespace {
28 constexpr uint8_t MAX_FILE_NUM = 2;
29 }
30
31 namespace OHOS {
32 class ImageTest : public testing::Test {
33 public:
34 static void SetUpTestCase();
35 static void TearDownTestCase();
36
37 static void ResetFds();
38 static void InitImageInfo(ImageInfo& info);
39
40 static int32_t imgResFds_[MAX_FILE_NUM];
41 static ImageInfo imgInfos_[MAX_FILE_NUM];
42 static uint32_t sizes_[MAX_FILE_NUM];
43 };
44
45 int32_t ImageTest::imgResFds_[MAX_FILE_NUM];
46 ImageInfo ImageTest::imgInfos_[MAX_FILE_NUM];
47 uint32_t ImageTest::sizes_[MAX_FILE_NUM];
48
SetUpTestCase()49 void ImageTest::SetUpTestCase()
50 {
51 const char* paths[] = {
52 IMAGE_DIR "A001_001.bin",
53 IMAGE_DIR "A001_002.bin"
54 };
55 for (int i = 0; i < MAX_FILE_NUM; i++) {
56 imgResFds_[i] = open(paths[i], O_RDONLY);
57 struct stat fileStat;
58 fstat(imgResFds_[i], &fileStat);
59 sizes_[i] = fileStat.st_size - sizeof(ImageHeader);
60 read(imgResFds_[i], &imgInfos_[i].header, sizeof(ImageHeader));
61 }
62 }
63
TearDownTestCase()64 void ImageTest::TearDownTestCase()
65 {
66 for (int i = 0; i < MAX_FILE_NUM; i++) {
67 close(imgResFds_[i]);
68 }
69 }
70
ResetFds()71 void ImageTest::ResetFds()
72 {
73 for (int i = 0; i < MAX_FILE_NUM; i++) {
74 lseek(imgResFds_[i], sizeof(ImageHeader), SEEK_SET);
75 }
76 }
77
78 /**
79 * @tc.name: Graphic_Image_Test_GetImageInfo_001
80 * @tc.desc: Verify ImageLoad::GetImageInfo function, invalid param.
81 * @tc.type: FUNC
82 * @tc.require: AR000F74ST
83 */
84 HWTEST_F(ImageTest, Graphic_Image_Test_GetImageInfo_001, TestSize.Level0)
85 {
86 /* test invalid fd */
87 bool ret = ImageLoad::GetImageInfo(-1, sizes_[0], imgInfos_[0]);
88 EXPECT_EQ(ret, false);
89
90 /* test invalid size */
91 ret = ImageLoad::GetImageInfo(imgResFds_[0], 0, imgInfos_[0]);
92 EXPECT_EQ(ret, false);
93 }
94
95 /**
96 * @tc.name: Graphic_Image_Test_GetImageInfo_002
97 * @tc.desc: Verify ImageLoad::GetImageInfo function, invalid compress mode.
98 * @tc.type: FUNC
99 * @tc.require: SR000ERCR7
100 */
101 HWTEST_F(ImageTest, Graphic_Image_Test_GetImageInfo_002, TestSize.Level0)
102 {
103 ResetFds();
104
105 auto info = imgInfos_[0];
106 info.header.compressMode = COMPRESS_MODE_BLOCK_ALG;
107 bool ret = ImageLoad::GetImageInfo(imgResFds_[0], sizes_[0], info);
108 EXPECT_EQ(ret, false);
109 }
110
111 /**
112 * @tc.name: Graphic_Image_Test_GetImageInfo_003
113 * @tc.desc: Verify ImageLoad::GetImageInfo function, multi-images.
114 * @tc.type: FUNC
115 * @tc.require: AR000F74ST
116 */
117 HWTEST_F(ImageTest, Graphic_Image_Test_GetImageInfo_003, TestSize.Level0)
118 {
119 ResetFds();
120
121 for (int32_t i = 0; i < MAX_FILE_NUM; i++) {
122 bool success = ImageLoad::GetImageInfo(imgResFds_[i], sizes_[i], imgInfos_[i]);
123 if (success) {
124 ImageCacheFree(imgInfos_[i]);
125 } else {
126 EXPECT_EQ(success, false);
127 }
128 }
129 }
130 } // namespace OHOS
131