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 <gtest/gtest.h>
17
18 #include "securec.h"
19
20 #include "adaptor_time.h"
21 #include "defines.h"
22 #include "idm_session.h"
23
24 extern "C" {
25 extern struct SessionInfo {
26 int32_t userId;
27 uint32_t authType;
28 uint64_t time;
29 uint64_t validAuthTokenTime;
30 uint8_t challenge[CHALLENGE_LEN];
31 uint64_t scheduleId;
32 bool isUpdate;
33 bool isScheduleValid;
34 } *g_session;
35 extern ResultCode GenerateChallenge(uint8_t *challenge, uint32_t challengeLen);
36 }
37
38 namespace OHOS {
39 namespace UserIam {
40 namespace UserAuth {
41 using namespace testing;
42 using namespace testing::ext;
43
44 class IdmSessionTest : public testing::Test {
45 public:
SetUpTestCase()46 static void SetUpTestCase() {};
47
TearDownTestCase()48 static void TearDownTestCase() {};
49
SetUp()50 void SetUp() {};
51
TearDown()52 void TearDown() {};
53 };
54
HWTEST_F(IdmSessionTest, TestOpenEditSession, TestSize.Level0)55 HWTEST_F(IdmSessionTest, TestOpenEditSession, TestSize.Level0)
56 {
57 EXPECT_EQ(OpenEditSession(0, nullptr, 0), RESULT_BAD_PARAM);
58 }
59
HWTEST_F(IdmSessionTest, TestRefreshValidTokenTime, TestSize.Level0)60 HWTEST_F(IdmSessionTest, TestRefreshValidTokenTime, TestSize.Level0)
61 {
62 g_session = nullptr;
63 RefreshValidTokenTime();
64 struct SessionInfo session = {};
65 g_session = &session;
66 RefreshValidTokenTime();
67 EXPECT_LE(g_session->validAuthTokenTime, GetSystemTime());
68 g_session = nullptr;
69 }
70
HWTEST_F(IdmSessionTest, TestIsValidTokenTime, TestSize.Level0)71 HWTEST_F(IdmSessionTest, TestIsValidTokenTime, TestSize.Level0)
72 {
73 g_session = nullptr;
74 EXPECT_FALSE(IsValidTokenTime(0));
75 }
76
HWTEST_F(IdmSessionTest, TestGetUserId, TestSize.Level0)77 HWTEST_F(IdmSessionTest, TestGetUserId, TestSize.Level0)
78 {
79 g_session = nullptr;
80 EXPECT_EQ(GetUserId(nullptr), RESULT_BAD_PARAM);
81 int32_t userId = 0;
82 EXPECT_EQ(GetUserId(&userId), RESULT_BAD_PARAM);
83 }
84
HWTEST_F(IdmSessionTest, TestCheckChallenge_001, TestSize.Level0)85 HWTEST_F(IdmSessionTest, TestCheckChallenge_001, TestSize.Level0)
86 {
87 g_session = nullptr;
88 EXPECT_EQ(CheckChallenge(nullptr, 0), RESULT_BAD_PARAM);
89 uint8_t challenge = 0;
90 EXPECT_EQ(CheckChallenge(&challenge, 0), RESULT_BAD_PARAM);
91 EXPECT_EQ(CheckChallenge(&challenge, CHALLENGE_LEN), RESULT_NEED_INIT);
92 }
93
HWTEST_F(IdmSessionTest, TestCheckChallenge_002, TestSize.Level0)94 HWTEST_F(IdmSessionTest, TestCheckChallenge_002, TestSize.Level0)
95 {
96 uint8_t challenge[CHALLENGE_LEN];
97 EXPECT_EQ(memset_s(challenge, CHALLENGE_LEN, 0, CHALLENGE_LEN), EOK);
98 struct SessionInfo session;
99 EXPECT_EQ(GenerateChallenge(session.challenge, CHALLENGE_LEN), RESULT_SUCCESS);
100 g_session = &session;
101 EXPECT_EQ(CheckChallenge(challenge, CHALLENGE_LEN), RESULT_BAD_MATCH);
102 g_session = nullptr;
103 }
104
HWTEST_F(IdmSessionTest, TestAssociateCoauthSchedule, TestSize.Level0)105 HWTEST_F(IdmSessionTest, TestAssociateCoauthSchedule, TestSize.Level0)
106 {
107 g_session = nullptr;
108 EXPECT_EQ(AssociateCoauthSchedule(0, 0, true), RESULT_NEED_INIT);
109 }
110
HWTEST_F(IdmSessionTest, TestGetEnrollScheduleInfo_001, TestSize.Level0)111 HWTEST_F(IdmSessionTest, TestGetEnrollScheduleInfo_001, TestSize.Level0)
112 {
113 EXPECT_EQ(GetEnrollScheduleInfo(nullptr, nullptr), RESULT_BAD_PARAM);
114 uint64_t scheduleId = 0;
115 EXPECT_EQ(GetEnrollScheduleInfo(&scheduleId, nullptr), RESULT_BAD_PARAM);
116 }
117
HWTEST_F(IdmSessionTest, TestGetEnrollScheduleInfo_002, TestSize.Level0)118 HWTEST_F(IdmSessionTest, TestGetEnrollScheduleInfo_002, TestSize.Level0)
119 {
120 g_session = nullptr;
121 uint64_t scheduleId = 0;
122 uint32_t authType = 1;
123 EXPECT_EQ(GetEnrollScheduleInfo(&scheduleId, &authType), RESULT_NEED_INIT);
124 struct SessionInfo session;
125 session.isScheduleValid = false;
126 g_session = &session;
127 EXPECT_EQ(GetEnrollScheduleInfo(&scheduleId, &authType), RESULT_NEED_INIT);
128 session.isScheduleValid = true;
129 EXPECT_EQ(GetEnrollScheduleInfo(&scheduleId, &authType), RESULT_SUCCESS);
130 g_session = nullptr;
131 }
132
HWTEST_F(IdmSessionTest, TestCheckSessionTimeout, TestSize.Level0)133 HWTEST_F(IdmSessionTest, TestCheckSessionTimeout, TestSize.Level0)
134 {
135 g_session = nullptr;
136 EXPECT_EQ(CheckSessionTimeout(), RESULT_NEED_INIT);
137 struct SessionInfo session;
138 session.time = UINT64_MAX;
139 g_session = &session;
140 EXPECT_EQ(CheckSessionTimeout(), RESULT_GENERAL_ERROR);
141 g_session = nullptr;
142 }
143
HWTEST_F(IdmSessionTest, TestGetIsUpdate, TestSize.Level0)144 HWTEST_F(IdmSessionTest, TestGetIsUpdate, TestSize.Level0)
145 {
146 EXPECT_EQ(GetIsUpdate(nullptr), RESULT_BAD_PARAM);
147 }
148
HWTEST_F(IdmSessionTest, TestCheckSessionValid, TestSize.Level0)149 HWTEST_F(IdmSessionTest, TestCheckSessionValid, TestSize.Level0)
150 {
151 struct SessionInfo session;
152 constexpr int32_t userId = 2135;
153 session.userId = userId;
154 session.time = UINT64_MAX;
155 g_session = &session;
156 EXPECT_EQ(CheckSessionValid(0), RESULT_GENERAL_ERROR);
157 session.time = GetSystemTime();
158 EXPECT_EQ(CheckSessionValid(0), RESULT_GENERAL_ERROR);
159 g_session = nullptr;
160 }
161
HWTEST_F(IdmSessionTest, TestGetChallenge, TestSize.Level0)162 HWTEST_F(IdmSessionTest, TestGetChallenge, TestSize.Level0)
163 {
164 constexpr uint32_t arrayLen = 32;
165 uint8_t challengeArray[arrayLen] = {};
166 EXPECT_EQ(GetChallenge(nullptr, 0), RESULT_BAD_PARAM);
167 EXPECT_EQ(GetChallenge(nullptr, arrayLen), RESULT_BAD_PARAM);
168 EXPECT_EQ(GetChallenge(challengeArray, arrayLen), RESULT_NEED_INIT);
169 }
170
HWTEST_F(IdmSessionTest, TestGetCacheRootSecret, TestSize.Level0)171 HWTEST_F(IdmSessionTest, TestGetCacheRootSecret, TestSize.Level0)
172 {
173 constexpr int32_t userId = 0;
174 Buffer *rootSecret = GetCacheRootSecret(userId);
175 EXPECT_EQ(rootSecret, nullptr);
176 struct SessionInfo session;
177 session.userId = userId;
178 rootSecret = GetCacheRootSecret(userId);
179 EXPECT_EQ(rootSecret, nullptr);
180 }
181
HWTEST_F(IdmSessionTest, TestCacheRootSecret, TestSize.Level0)182 HWTEST_F(IdmSessionTest, TestCacheRootSecret, TestSize.Level0)
183 {
184 constexpr int32_t userId = 0;
185 CacheRootSecret(userId, nullptr);
186 constexpr int32_t dataLen = 32;
187 Buffer *test = CreateBufferBySize(dataLen);
188 CacheRootSecret(userId, test);
189 DestoryBuffer(test);
190 }
191
HWTEST_F(IdmSessionTest, TestIsValidUserType, TestSize.Level0)192 HWTEST_F(IdmSessionTest, TestIsValidUserType, TestSize.Level0)
193 {
194 constexpr int32_t userType = 1024;
195 EXPECT_EQ(IsValidUserType(userType), RESULT_BAD_PARAM);
196 }
197
198 } // namespace UserAuth
199 } // namespace UserIam
200 } // namespace OHOS
201