1 /*
2  * Copyright (c) 2022-2024 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 <gtest/gtest.h>
17 #include <memory>
18 #include <string>
19 #include <fcntl.h>
20 
21 #include "access_token_error.h"
22 #include "constant_common.h"
23 #define private public
24 #include "permission_map.h"
25 #undef private
26 #include "json_parser.h"
27 
28 using namespace testing::ext;
29 
30 namespace OHOS {
31 namespace Security {
32 namespace AccessToken {
33 namespace {
34 const static uint32_t MAX_PERM_SIZE = 2048;
35 const static uint32_t MAX_CONFIG_FILE_SIZE = 5 * 1024;
36 const static std::string TEST_JSON_PATH = "/data/test.json";
37 const static std::string TEST_STR =
38     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
39     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
40     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
41     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
42     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
43     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
44     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
45     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
46     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA"
47     "iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAIAAABrvZPKAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AA";
48 }
49 class CommonTest : public testing::Test  {
50 public:
51     static void SetUpTestCase();
52     static void TearDownTestCase();
53 
54     void SetUp();
55     void TearDown();
56 };
57 
SetUpTestCase()58 void CommonTest::SetUpTestCase() {}
TearDownTestCase()59 void CommonTest::TearDownTestCase() {}
SetUp()60 void CommonTest::SetUp() {}
TearDown()61 void CommonTest::TearDown() {}
62 
63 /**
64  * @tc.name: EncryptDevId001
65  * @tc.desc: Test EncryptDevId001 function.
66  * @tc.type: FUNC
67  * @tc.require: issueI5RUCC
68  */
69 HWTEST_F(CommonTest, EncryptDevId001, TestSize.Level1)
70 {
71     std::string res;
72     res = ConstantCommon::EncryptDevId("");
73     EXPECT_EQ(res, "");
74 
75     res = ConstantCommon::EncryptDevId("12345");
76     EXPECT_EQ(res, "1*******");
77 
78     res = ConstantCommon::EncryptDevId("123454321");
79     EXPECT_EQ(res, "1234****4321");
80 }
81 
82 /*
83  * @tc.name: TransferOpcodeToPermission001
84  * @tc.desc: TransferOpcodeToPermission function test
85  * @tc.type: FUNC
86  * @tc.require: issueI6024A
87  */
88 HWTEST_F(CommonTest, TransferOpcodeToPermission001, TestSize.Level1)
89 {
90     std::string permissionName;
91     EXPECT_TRUE(TransferOpcodeToPermission(0, permissionName));
92     EXPECT_EQ(permissionName, "ohos.permission.ANSWER_CALL");
93 }
94 
95 /*
96  * @tc.name: TransferOpcodeToPermission002
97  * @tc.desc: TransferOpcodeToPermission code oversize
98  * @tc.type: FUNC
99  * @tc.require: issueI6024A
100  */
101 HWTEST_F(CommonTest, TransferOpcodeToPermission002, TestSize.Level1)
102 {
103     std::string permissionName;
104     EXPECT_FALSE(TransferOpcodeToPermission(MAX_PERM_SIZE, permissionName));
105     EXPECT_FALSE(TransferOpcodeToPermission(MAX_PERM_SIZE - 1, permissionName));
106 }
107 
108 /*
109  * @tc.name: GetUnsignedIntFromJson001
110  * @tc.desc: GetUnsignedIntFromJson
111  * @tc.type: FUNC
112  * @tc.require: issueI6024A
113  */
114 HWTEST_F(CommonTest, GetUnsignedIntFromJson001, TestSize.Level1)
115 {
116     const nlohmann::json json;
117     u_int32_t out = 0;
118     EXPECT_FALSE(JsonParser::GetUnsignedIntFromJson(json, "tokenId", out));
119     EXPECT_EQ(0, out);
120 }
121 
122 /*
123  * @tc.name: ReadCfgFile001
124  * @tc.desc: GetUnsignedIntFromJson json invalid
125  * @tc.type: FUNC
126  * @tc.require: issueI6024A
127  */
128 HWTEST_F(CommonTest, ReadCfgFile001, TestSize.Level1)
129 {
130     int32_t fd = open(TEST_JSON_PATH.c_str(), O_RDWR | O_CREAT);
131     EXPECT_NE(-1, fd);
132     std::string rawData;
133     EXPECT_EQ(ERR_PARAM_INVALID, JsonParser::ReadCfgFile(TEST_JSON_PATH, rawData));
134     for (int i = 0; i < MAX_CONFIG_FILE_SIZE; i++) {
135         size_t strLen = strlen(TEST_STR.c_str());
136         write(fd, TEST_STR.c_str(), strLen);
137     }
138     EXPECT_EQ(ERR_OVERSIZE, JsonParser::ReadCfgFile(TEST_JSON_PATH, rawData));
139     close(fd);
140     sleep(5);
141 
142     remove(TEST_JSON_PATH.c_str());
143 }
144 
145 /*
146  * @tc.name: IsDirExsit001
147  * @tc.desc: IsDirExsit input param error
148  * @tc.type: FUNC
149  * @tc.require: issueI6024A
150  */
151 HWTEST_F(CommonTest, IsDirExsit001, TestSize.Level1)
152 {
153     EXPECT_FALSE(JsonParser::IsDirExsit(""));
154     int32_t fd = open(TEST_JSON_PATH.c_str(), O_RDWR | O_CREAT);
155     EXPECT_NE(-1, fd);
156 
157     EXPECT_FALSE(JsonParser::IsDirExsit(TEST_JSON_PATH.c_str()));
158 }
159 } // namespace AccessToken
160 } // namespace Security
161 } // namespace OHOS
162