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 
55 HWTEST_F(IdmSessionTest, TestOpenEditSession, TestSize.Level0)
56 {
57     EXPECT_EQ(OpenEditSession(0, nullptr, 0), RESULT_BAD_PARAM);
58 }
59 
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 
71 HWTEST_F(IdmSessionTest, TestIsValidTokenTime, TestSize.Level0)
72 {
73     g_session = nullptr;
74     EXPECT_FALSE(IsValidTokenTime(0));
75 }
76 
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 
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 
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 
105 HWTEST_F(IdmSessionTest, TestAssociateCoauthSchedule, TestSize.Level0)
106 {
107     g_session = nullptr;
108     EXPECT_EQ(AssociateCoauthSchedule(0, 0, true), RESULT_NEED_INIT);
109 }
110 
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 
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 
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 
144 HWTEST_F(IdmSessionTest, TestGetIsUpdate, TestSize.Level0)
145 {
146     EXPECT_EQ(GetIsUpdate(nullptr), RESULT_BAD_PARAM);
147 }
148 
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 
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 
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 
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 
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