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_memory.h" 21 #include "buffer.h" 22 #include "linked_list.h" 23 #include "pool.h" 24 25 extern "C" { 26 extern LinkedList *g_poolList; 27 extern void DestroyExecutorInfo(void *data); 28 extern bool IsExecutorIdMatchById(const void *data, const void *condition); 29 extern bool IsExecutorNodeMatch(const void *data, const void *condition); 30 extern bool IsExecutorValid(const ExecutorInfoHal *executorInfo); 31 extern ResultCode GenerateValidExecutorId(uint64_t *executorIndex); 32 extern bool IsExecutorMatch(const ExecutorCondition *condition, const ExecutorInfoHal *credentialInfo); 33 } 34 35 namespace OHOS { 36 namespace UserIam { 37 namespace UserAuth { 38 using namespace testing; 39 using namespace testing::ext; 40 41 class PoolTest : public testing::Test { 42 public: SetUpTestCase()43 static void SetUpTestCase() {}; 44 TearDownTestCase()45 static void TearDownTestCase() {}; 46 SetUp()47 void SetUp() {}; 48 TearDown()49 void TearDown() {}; 50 }; 51 52 HWTEST_F(PoolTest, TestDestroyExecutorInfo, TestSize.Level0) 53 { 54 DestroyExecutorInfo(nullptr); 55 ExecutorInfoHal *executorInfo = (ExecutorInfoHal *)Malloc(sizeof(ExecutorInfoHal)); 56 EXPECT_NE(executorInfo, nullptr); 57 ASSERT_NE(executorInfo, nullptr); 58 (void)memset_s(executorInfo, sizeof(ExecutorInfoHal), 0, sizeof(ExecutorInfoHal)); 59 DestroyExecutorInfo(executorInfo); 60 } 61 62 HWTEST_F(PoolTest, TestIsExecutorIdMatchById, TestSize.Level0) 63 { 64 EXPECT_FALSE(IsExecutorIdMatchById(nullptr, nullptr)); 65 } 66 67 HWTEST_F(PoolTest, TestIsExecutorNodeMatch, TestSize.Level0) 68 { 69 EXPECT_FALSE(IsExecutorNodeMatch(nullptr, nullptr)); 70 } 71 72 HWTEST_F(PoolTest, TestInitResourcePool, TestSize.Level0) 73 { 74 g_poolList = CreateLinkedList(DestroyExecutorInfo); 75 EXPECT_NE(g_poolList, nullptr); 76 EXPECT_EQ(InitResourcePool(), 0); 77 DestroyResourcePool(); 78 } 79 80 HWTEST_F(PoolTest, TestIsExecutorValid, TestSize.Level0) 81 { 82 EXPECT_FALSE(IsExecutorValid(nullptr)); 83 } 84 85 HWTEST_F(PoolTest, TestGenerateValidExecutorId, TestSize.Level0) 86 { 87 g_poolList = nullptr; 88 EXPECT_EQ(GenerateValidExecutorId(nullptr), 8); 89 } 90 91 HWTEST_F(PoolTest, TestRegisterExecutorToPool_001, TestSize.Level0) 92 { 93 g_poolList = nullptr; 94 EXPECT_EQ(RegisterExecutorToPool(nullptr), RESULT_NEED_INIT); 95 InitResourcePool(); 96 EXPECT_EQ(RegisterExecutorToPool(nullptr), RESULT_BAD_PARAM); 97 ExecutorInfoHal info = {}; 98 info.authType = 4; 99 EXPECT_EQ(RegisterExecutorToPool(&info), 0); 100 g_poolList = nullptr; 101 } 102 103 HWTEST_F(PoolTest, TestRegisterExecutorToPool_002, TestSize.Level0) 104 { 105 g_poolList = nullptr; 106 EXPECT_EQ(RegisterExecutorToPool(nullptr), RESULT_NEED_INIT); 107 InitResourcePool(); 108 EXPECT_EQ(RegisterExecutorToPool(nullptr), RESULT_BAD_PARAM); 109 auto *info1 = static_cast<ExecutorInfoHal *>(Malloc(sizeof(ExecutorInfoHal))); 110 info1->authType = 1; 111 info1->executorSensorHint = 20; 112 info1->executorRole = 50; 113 g_poolList->insert(g_poolList, static_cast<void *>(info1)); 114 auto *info2 = static_cast<ExecutorInfoHal *>(Malloc(sizeof(ExecutorInfoHal))); 115 info2->authType = 1; 116 info2->executorSensorHint = 20; 117 info2->executorRole = 50; 118 EXPECT_EQ(RegisterExecutorToPool(info2), 0); 119 DestroyResourcePool(); 120 } 121 122 HWTEST_F(PoolTest, TestUnregisterExecutorToPool, TestSize.Level0) 123 { 124 g_poolList = nullptr; 125 EXPECT_EQ(UnregisterExecutorToPool(12), RESULT_NEED_INIT); 126 } 127 128 HWTEST_F(PoolTest, TestCopyExecutorInfo, TestSize.Level0) 129 { 130 g_poolList = nullptr; 131 EXPECT_EQ(CopyExecutorInfo(nullptr), nullptr); 132 } 133 134 HWTEST_F(PoolTest, TestIsExecutorMatch_001, TestSize.Level0) 135 { 136 uint64_t index = 245485; 137 ExecutorInfoHal executorInfo = {}; 138 executorInfo.executorIndex = 2634; 139 ExecutorCondition condition = {}; 140 EXPECT_TRUE(IsExecutorMatch(&condition, &executorInfo)); 141 SetExecutorConditionExecutorIndex(&condition, index); 142 EXPECT_FALSE(IsExecutorMatch(&condition, &executorInfo)); 143 executorInfo.executorIndex = index; 144 EXPECT_TRUE(IsExecutorMatch(&condition, &executorInfo)); 145 } 146 147 HWTEST_F(PoolTest, TestIsExecutorMatch_002, TestSize.Level0) 148 { 149 uint32_t hint = 245485; 150 ExecutorInfoHal executorInfo = {}; 151 executorInfo.executorSensorHint = 2634; 152 ExecutorCondition condition = {}; 153 EXPECT_TRUE(IsExecutorMatch(&condition, &executorInfo)); 154 SetExecutorConditionSensorHint(&condition, hint); 155 EXPECT_FALSE(IsExecutorMatch(&condition, &executorInfo)); 156 executorInfo.executorSensorHint = hint; 157 EXPECT_TRUE(IsExecutorMatch(&condition, &executorInfo)); 158 } 159 160 HWTEST_F(PoolTest, TestIsExecutorMatch_003, TestSize.Level0) 161 { 162 uint32_t matcher = 245485; 163 ExecutorInfoHal executorInfo = {}; 164 executorInfo.executorMatcher = 2634; 165 ExecutorCondition condition = {}; 166 EXPECT_TRUE(IsExecutorMatch(&condition, &executorInfo)); 167 SetExecutorConditionExecutorMatcher(&condition, matcher); 168 EXPECT_FALSE(IsExecutorMatch(&condition, &executorInfo)); 169 executorInfo.executorMatcher = matcher; 170 EXPECT_TRUE(IsExecutorMatch(&condition, &executorInfo)); 171 } 172 173 HWTEST_F(PoolTest, TestQueryExecutor, TestSize.Level0) 174 { 175 g_poolList = nullptr; 176 EXPECT_EQ(QueryExecutor(nullptr), nullptr); 177 } 178 179 HWTEST_F(PoolTest, TestQueryCollecterMatcher, TestSize.Level0) 180 { 181 g_poolList = nullptr; 182 EXPECT_EQ(QueryCollecterMatcher(1, 20, nullptr), RESULT_NEED_INIT); 183 InitResourcePool(); 184 EXPECT_EQ(QueryCollecterMatcher(1, 20, nullptr), RESULT_BAD_PARAM); 185 uint32_t matcher = 1245; 186 EXPECT_EQ(QueryCollecterMatcher(1, 20, &matcher), RESULT_NOT_FOUND); 187 ExecutorInfoHal info1 = {}; 188 info1.authType = 1; 189 info1.executorSensorHint = 20; 190 info1.executorRole = ALL_IN_ONE; 191 g_poolList->insert(g_poolList, static_cast<void *>(&info1)); 192 ExecutorInfoHal info2 = {}; 193 info2.authType = 1; 194 info2.executorSensorHint = 20; 195 info2.executorRole = VERIFIER; 196 g_poolList->insert(g_poolList, static_cast<void *>(&info2)); 197 ExecutorInfoHal info3 = {}; 198 info3.authType = 1; 199 g_poolList->insert(g_poolList, static_cast<void *>(&info3)); 200 ExecutorInfoHal info4 = {}; 201 info4.authType = 4; 202 g_poolList->insert(g_poolList, static_cast<void *>(&info4)); 203 g_poolList->insert(g_poolList, nullptr); 204 EXPECT_EQ(QueryCollecterMatcher(1, 20, &matcher), RESULT_SUCCESS); 205 g_poolList = nullptr; 206 } 207 208 HWTEST_F(PoolTest, TestQueryCredentialExecutorIndex, TestSize.Level0) 209 { 210 g_poolList = nullptr; 211 EXPECT_EQ(QueryCredentialExecutorIndex(1, 20), INVALID_EXECUTOR_INDEX); 212 InitResourcePool(); 213 EXPECT_EQ(QueryCredentialExecutorIndex(1, 20), INVALID_EXECUTOR_INDEX); 214 ExecutorInfoHal info1 = {}; 215 info1.authType = 1; 216 info1.executorSensorHint = 20; 217 info1.executorRole = ALL_IN_ONE; 218 info1.executorIndex = 1267; 219 g_poolList->insert(g_poolList, static_cast<void *>(&info1)); 220 ExecutorInfoHal info2 = {}; 221 info2.authType = 1; 222 info2.executorSensorHint = 20; 223 info2.executorRole = COLLECTOR; 224 g_poolList->insert(g_poolList, static_cast<void *>(&info2)); 225 ExecutorInfoHal info3 = {}; 226 info3.authType = 1; 227 g_poolList->insert(g_poolList, static_cast<void *>(&info3)); 228 ExecutorInfoHal info4 = {}; 229 info4.authType = 4; 230 g_poolList->insert(g_poolList, static_cast<void *>(&info4)); 231 g_poolList->insert(g_poolList, nullptr); 232 EXPECT_EQ(QueryCredentialExecutorIndex(1, 20), info1.executorIndex); 233 g_poolList = nullptr; 234 } 235 236 HWTEST_F(PoolTest, TestSetExecutorConditionExecutorIndex, TestSize.Level0) 237 { 238 SetExecutorConditionExecutorIndex(nullptr, 10); 239 ExecutorCondition condition = {}; 240 SetExecutorConditionExecutorIndex(&condition, 10); 241 EXPECT_EQ(condition.executorIndex, 10); 242 EXPECT_EQ(condition.conditonFactor & EXECUTOR_CONDITION_INDEX, EXECUTOR_CONDITION_INDEX); 243 } 244 245 HWTEST_F(PoolTest, TestSetExecutorConditionAuthType, TestSize.Level0) 246 { 247 SetExecutorConditionAuthType(nullptr, 1); 248 ExecutorCondition condition = {}; 249 SetExecutorConditionAuthType(&condition, 1); 250 EXPECT_EQ(condition.authType, 1); 251 EXPECT_EQ(condition.conditonFactor & EXECUTOR_CONDITION_AUTH_TYPE, EXECUTOR_CONDITION_AUTH_TYPE); 252 } 253 254 HWTEST_F(PoolTest, TestSetExecutorConditionSensorHint, TestSize.Level0) 255 { 256 SetExecutorConditionSensorHint(nullptr, 20); 257 ExecutorCondition condition = {}; 258 SetExecutorConditionSensorHint(&condition, 20); 259 EXPECT_EQ(condition.executorSensorHint, 20); 260 EXPECT_EQ(condition.conditonFactor & EXECUTOR_CONDITION_SENSOR_HINT, EXECUTOR_CONDITION_SENSOR_HINT); 261 } 262 263 HWTEST_F(PoolTest, TestSetExecutorConditionExecutorRole, TestSize.Level0) 264 { 265 SetExecutorConditionExecutorRole(nullptr, 2136); 266 ExecutorCondition condition = {}; 267 SetExecutorConditionExecutorRole(&condition, 2136); 268 EXPECT_EQ(condition.executorRole, 2136); 269 EXPECT_EQ(condition.conditonFactor & EXECUTOR_CONDITION_ROLE, EXECUTOR_CONDITION_ROLE); 270 } 271 272 HWTEST_F(PoolTest, TestSetExecutorConditionExecutorMatcher, TestSize.Level0) 273 { 274 SetExecutorConditionExecutorMatcher(nullptr, 2363); 275 ExecutorCondition condition = {}; 276 SetExecutorConditionExecutorMatcher(&condition, 2363); 277 EXPECT_EQ(condition.executorMatcher, 2363); 278 EXPECT_EQ(condition.conditonFactor & EXECUTOR_CONDITION_MATCHER, EXECUTOR_CONDITION_MATCHER); 279 } 280 } // namespace UserAuth 281 } // namespace UserIam 282 } // namespace OHOS 283