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
28using namespace testing::ext;
29
30namespace OHOS {
31namespace Security {
32namespace AccessToken {
33namespace {
34const static uint32_t MAX_PERM_SIZE = 2048;
35const static uint32_t MAX_CONFIG_FILE_SIZE = 5 * 1024;
36const static std::string TEST_JSON_PATH = "/data/test.json";
37const 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}
49class CommonTest : public testing::Test  {
50public:
51    static void SetUpTestCase();
52    static void TearDownTestCase();
53
54    void SetUp();
55    void TearDown();
56};
57
58void CommonTest::SetUpTestCase() {}
59void CommonTest::TearDownTestCase() {}
60void CommonTest::SetUp() {}
61void CommonTest::TearDown() {}
62
63/**
64 * @tc.name: EncryptDevId001
65 * @tc.desc: Test EncryptDevId001 function.
66 * @tc.type: FUNC
67 * @tc.require: issueI5RUCC
68 */
69HWTEST_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 */
88HWTEST_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 */
101HWTEST_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 */
114HWTEST_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 */
128HWTEST_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 */
151HWTEST_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