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 #include "constant.h"
18 #include "data_translator.h"
19 #include "active_change_response_info.h"
20 #include "privacy_field_const.h"
21 #define private public
22 #include "permission_used_record_db.h"
23 #undef private
24
25 using namespace testing::ext;
26
27 namespace OHOS {
28 namespace Security {
29 namespace AccessToken {
30 class PermissionRecordDBTest : public testing::Test {
31 public:
32 static void SetUpTestCase();
33 static void TearDownTestCase();
34 void SetUp();
35 void TearDown();
36 };
37
SetUpTestCase()38 void PermissionRecordDBTest::SetUpTestCase()
39 {
40 }
41
TearDownTestCase()42 void PermissionRecordDBTest::TearDownTestCase()
43 {
44 }
45
SetUp()46 void PermissionRecordDBTest::SetUp()
47 {
48 }
49
TearDown()50 void PermissionRecordDBTest::TearDown()
51 {
52 }
53
54 /*
55 * @tc.name: CreateInsertPrepareSqlCmd001
56 * @tc.desc: PermissionUsedRecordDb::CreateInsertPrepareSqlCmd function test type not found
57 * @tc.type: FUNC
58 * @tc.require: issueI5YL6H
59 */
60 HWTEST_F(PermissionRecordDBTest, CreateInsertPrepareSqlCmd001, TestSize.Level1)
61 {
62 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
63 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateInsertPrepareSqlCmd(type));
64 }
65
66 /*
67 * @tc.name: CreateInsertPrepareSqlCmd002
68 * @tc.desc: PermissionUsedRecordDb::CreateInsertPrepareSqlCmd function test
69 * @tc.type: FUNC
70 * @tc.require: issueI5YL6H
71 */
72 HWTEST_F(PermissionRecordDBTest, CreateInsertPrepareSqlCmd002, TestSize.Level1)
73 {
74 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
75 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateInsertPrepareSqlCmd(type));
76 }
77
78 /*
79 * @tc.name: CreateDeletePrepareSqlCmd001
80 * @tc.desc: PermissionUsedRecordDb::CreateDeletePrepareSqlCmd function test type not found
81 * @tc.type: FUNC
82 * @tc.require: issueI5YL6H
83 */
84 HWTEST_F(PermissionRecordDBTest, CreateDeletePrepareSqlCmd001, TestSize.Level1)
85 {
86 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
87 std::vector<std::string> columnNames;
88 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateDeletePrepareSqlCmd(type, columnNames));
89 }
90
91 /*
92 * @tc.name: CreateUpdatePrepareSqlCmd001
93 * @tc.desc: PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd function test modifyColumns empty
94 * @tc.type: FUNC
95 * @tc.require: issueI5YL6H
96 */
97 HWTEST_F(PermissionRecordDBTest, CreateUpdatePrepareSqlCmd001, TestSize.Level1)
98 {
99 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
100 std::vector<std::string> modifyColumns;
101 std::vector<std::string> conditionColumns;
102 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateUpdatePrepareSqlCmd(type, modifyColumns,
103 conditionColumns));
104 }
105
106 /*
107 * @tc.name: CreateUpdatePrepareSqlCmd002
108 * @tc.desc: PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd function test type not found
109 * @tc.type: FUNC
110 * @tc.require: issueI5YL6H
111 */
112 HWTEST_F(PermissionRecordDBTest, CreateUpdatePrepareSqlCmd002, TestSize.Level1)
113 {
114 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
115 std::vector<std::string> modifyColumns;
116 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TOKEN_ID);
117 std::vector<std::string> conditionColumns;
118 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateUpdatePrepareSqlCmd(type, modifyColumns,
119 conditionColumns));
120 }
121
122 /*
123 * @tc.name: CreateUpdatePrepareSqlCmd003
124 * @tc.desc: PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd function test conditionColumns empty
125 * @tc.type: FUNC
126 * @tc.require: issueI5YL6H
127 */
128 HWTEST_F(PermissionRecordDBTest, CreateUpdatePrepareSqlCmd003, TestSize.Level1)
129 {
130 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
131 std::vector<std::string> modifyColumns;
132 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TOKEN_ID);
133 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP);
134 std::vector<std::string> conditionColumns;
135 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateUpdatePrepareSqlCmd(type, modifyColumns,
136 conditionColumns));
137 }
138
139 /*
140 * @tc.name: CreateUpdatePrepareSqlCmd004
141 * @tc.desc: PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd function test conditionColumns empty
142 * @tc.type: FUNC
143 * @tc.require: issueI5YL6H
144 */
145 HWTEST_F(PermissionRecordDBTest, CreateUpdatePrepareSqlCmd004, TestSize.Level1)
146 {
147 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
148 std::vector<std::string> modifyColumns;
149 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TOKEN_ID);
150 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP);
151 std::vector<std::string> conditionColumns;
152 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateUpdatePrepareSqlCmd(type, modifyColumns,
153 conditionColumns));
154 }
155
156 /*
157 * @tc.name: CreateUpdatePrepareSqlCmd005
158 * @tc.desc: PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd function test
159 * @tc.type: FUNC
160 * @tc.require: issueI5YL6H
161 */
162 HWTEST_F(PermissionRecordDBTest, CreateUpdatePrepareSqlCmd005, TestSize.Level1)
163 {
164 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
165 std::vector<std::string> modifyColumns;
166 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TOKEN_ID);
167 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP);
168 std::vector<std::string> conditionColumns;
169 modifyColumns.emplace_back(PrivacyFiledConst::FIELD_STATUS);
170 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateUpdatePrepareSqlCmd(type, modifyColumns,
171 conditionColumns));
172 }
173
174 /*
175 * @tc.name: CreateSelectByConditionPrepareSqlCmd001
176 * @tc.desc: PermissionUsedRecordDb::CreateSelectByConditionPrepareSqlCmd function test type not found
177 * @tc.type: FUNC
178 * @tc.require: issueI5YL6H
179 */
180 HWTEST_F(PermissionRecordDBTest, CreateSelectByConditionPrepareSqlCmd001, TestSize.Level1)
181 {
182 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
183 std::vector<std::string> andColumns;
184 std::vector<std::string> orColumns;
185 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateSelectByConditionPrepareSqlCmd(type, andColumns,
186 orColumns));
187 }
188
189 /*
190 * @tc.name: CreateSelectByConditionPrepareSqlCmd002
191 * @tc.desc: PermissionUsedRecordDb::CreateSelectByConditionPrepareSqlCmd function test
192 * @tc.type: FUNC
193 * @tc.require: issueI5YL6H
194 */
195 HWTEST_F(PermissionRecordDBTest, CreateSelectByConditionPrepareSqlCmd002, TestSize.Level1)
196 {
197 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
198 std::vector<std::string> andColumns;
199 andColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP_BEGIN);
200 std::vector<std::string> orColumns;
201 orColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP);
202 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateSelectByConditionPrepareSqlCmd(type, andColumns,
203 orColumns));
204 }
205
206 /*
207 * @tc.name: CreateCountPrepareSqlCmd001
208 * @tc.desc: PermissionUsedRecordDb::CreateCountPrepareSqlCmd function test type not found
209 * @tc.type: FUNC
210 * @tc.require: issueI5YL6H
211 */
212 HWTEST_F(PermissionRecordDBTest, CreateCountPrepareSqlCmd001, TestSize.Level1)
213 {
214 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
215 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateCountPrepareSqlCmd(type));
216 }
217
218 /*
219 * @tc.name: CreateDeleteExpireRecordsPrepareSqlCmd001
220 * @tc.desc: PermissionUsedRecordDb::CreateDeleteExpireRecordsPrepareSqlCmd function test
221 * @tc.type: FUNC
222 * @tc.require: issueI5YL6H
223 */
224 HWTEST_F(PermissionRecordDBTest, CreateDeleteExpireRecordsPrepareSqlCmd001, TestSize.Level1)
225 {
226 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100); // type not found
227 std::vector<std::string> andColumns;
228 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateDeleteExpireRecordsPrepareSqlCmd(type, andColumns));
229
230 type = PermissionUsedRecordDb::PERMISSION_RECORD; // field timestamp_begin and timestamp_end
231 andColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP_BEGIN);
232 andColumns.emplace_back(PrivacyFiledConst::FIELD_TIMESTAMP_END);
233 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateDeleteExpireRecordsPrepareSqlCmd(type, andColumns));
234 }
235
236 /*
237 * @tc.name: CreateDeleteExcessiveRecordsPrepareSqlCmd001
238 * @tc.desc: PermissionUsedRecordDb::CreateDeleteExcessiveRecordsPrepareSqlCmd function test type not found
239 * @tc.type: FUNC
240 * @tc.require: issueI5YL6H
241 */
242 HWTEST_F(PermissionRecordDBTest, CreateDeleteExcessiveRecordsPrepareSqlCmd001, TestSize.Level1)
243 {
244 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
245 uint32_t excessiveSize = 10;
246 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateDeleteExcessiveRecordsPrepareSqlCmd(type, excessiveSize));
247 }
248
249 /*
250 * @tc.name: CreateDeleteExcessiveRecordsPrepareSqlCmd002
251 * @tc.desc: PermissionUsedRecordDb::CreateDeleteExcessiveRecordsPrepareSqlCmd function test
252 * @tc.type: FUNC
253 * @tc.require: issueI5YL6H
254 */
255 HWTEST_F(PermissionRecordDBTest, CreateDeleteExcessiveRecordsPrepareSqlCmd002, TestSize.Level1)
256 {
257 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
258 uint32_t excessiveSize = 10;
259 ASSERT_NE("", PermissionUsedRecordDb::GetInstance().CreateDeleteExcessiveRecordsPrepareSqlCmd(type, excessiveSize));
260 }
261
262 /*
263 * @tc.name: CreateGetDistinctValue001
264 * @tc.desc: PermissionUsedRecordDb::CreateGetDistinctValue function test type not found
265 * @tc.type: FUNC
266 * @tc.require: issueI5YL6H
267 */
268 HWTEST_F(PermissionRecordDBTest, CreateGetDistinctValue001, TestSize.Level1)
269 {
270 PermissionUsedRecordDb::DataType type = static_cast<PermissionUsedRecordDb::DataType>(100);
271 std::string conditionColumns;
272 ASSERT_EQ("", PermissionUsedRecordDb::GetInstance().CreateGetDistinctValue(type, conditionColumns));
273 }
274
275 /*
276 * @tc.name: CreatePermissionRecordTable001
277 * @tc.desc: PermissionUsedRecordDb::CreatePermissionRecordTable function test
278 * @tc.type: FUNC
279 * @tc.require: issueI5YL6H
280 */
281 HWTEST_F(PermissionRecordDBTest, CreatePermissionRecordTable001, TestSize.Level1)
282 {
283 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().CreatePermissionRecordTable());
284
285 std::map<PermissionUsedRecordDb::DataType, SqliteTable> dataTypeToSqlTable;
286 dataTypeToSqlTable = PermissionUsedRecordDb::GetInstance().dataTypeToSqlTable_; // backup
287 PermissionUsedRecordDb::GetInstance().dataTypeToSqlTable_.clear();
288
289 ASSERT_EQ(Constant::FAILURE, PermissionUsedRecordDb::GetInstance().CreatePermissionRecordTable());
290 PermissionUsedRecordDb::GetInstance().dataTypeToSqlTable_ = dataTypeToSqlTable; // recovery
291 }
292
293 /*
294 * @tc.name: TranslationIntoGenericValues001
295 * @tc.desc: DataTranslator::TranslationIntoGenericValues function test
296 * @tc.type: FUNC
297 * @tc.require:
298 */
299 HWTEST_F(PermissionRecordDBTest, TranslationIntoGenericValues001, TestSize.Level1)
300 {
301 PermissionUsedRequest request;
302 GenericValues andGenericValues;
303 GenericValues orGenericValues;
304
305 request.beginTimeMillis = -1;
306 // begin < 0
307 ASSERT_EQ(Constant::FAILURE,
308 DataTranslator::TranslationIntoGenericValues(request, andGenericValues, orGenericValues));
309
310 request.beginTimeMillis = 10;
311 request.endTimeMillis = -1;
312 // begin > 0 + end < 0
313 ASSERT_EQ(Constant::FAILURE,
314 DataTranslator::TranslationIntoGenericValues(request, andGenericValues, orGenericValues));
315
316 request.endTimeMillis = 1;
317 // begin > 0 + end > 0 + begin > end
318 ASSERT_EQ(Constant::FAILURE,
319 DataTranslator::TranslationIntoGenericValues(request, andGenericValues, orGenericValues));
320
321 request.beginTimeMillis = 10; // begin != 0
322 request.endTimeMillis = 20; // end != 0
323 request.flag = static_cast<PermissionUsageFlag>(2);
324 // begin > 0 + end > 0 + begin < end + flag = 2
325 ASSERT_EQ(Constant::FAILURE,
326 DataTranslator::TranslationIntoGenericValues(request, andGenericValues, orGenericValues));
327
328 request.flag = PermissionUsageFlag::FLAG_PERMISSION_USAGE_DETAIL;
329 request.permissionList.emplace_back("ohos.com.CAMERA");
330 // begin > 0 + end > 0 + begin < end + flag = 1 + TransferPermissionToOpcode true
331 ASSERT_EQ(Constant::SUCCESS,
332 DataTranslator::TranslationIntoGenericValues(request, andGenericValues, orGenericValues));
333 }
334
335 /*
336 * @tc.name: TranslationGenericValuesIntoPermissionUsedRecord001
337 * @tc.desc: DataTranslator::TranslationGenericValuesIntoPermissionUsedRecord function test
338 * @tc.type: FUNC
339 * @tc.require:
340 */
341 HWTEST_F(PermissionRecordDBTest, TranslationGenericValuesIntoPermissionUsedRecord001, TestSize.Level1)
342 {
343 GenericValues inGenericValues;
344 PermissionUsedRecord permissionRecord;
345
346 int32_t opCode = static_cast<int32_t>(Constant::OpCode::OP_INVALID);
347 inGenericValues.Put(PrivacyFiledConst::FIELD_OP_CODE, opCode);
348 // TransferOpcodeToPermission fail
349 ASSERT_EQ(Constant::FAILURE,
350 DataTranslator::TranslationGenericValuesIntoPermissionUsedRecord(inGenericValues, permissionRecord));
351 inGenericValues.Remove(PrivacyFiledConst::FIELD_OP_CODE);
352
353 opCode = static_cast<int32_t>(Constant::OpCode::OP_CAMERA);
354 inGenericValues.Put(PrivacyFiledConst::FIELD_OP_CODE, opCode);
355 inGenericValues.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 10);
356 inGenericValues.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 1);
357 inGenericValues.Put(PrivacyFiledConst::FIELD_FLAG, 1);
358 // lastRejectTime > 0
359 ASSERT_EQ(Constant::SUCCESS,
360 DataTranslator::TranslationGenericValuesIntoPermissionUsedRecord(inGenericValues, permissionRecord));
361 }
362
363 /*
364 * @tc.name: Add001
365 * @tc.desc: PermissionUsedRecordDb::Add function test miss not null field
366 * @tc.type: FUNC
367 * @tc.require: issueI5YL6H
368 */
369 HWTEST_F(PermissionRecordDBTest, Add001, TestSize.Level1)
370 {
371 GenericValues value1;
372 value1.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 0);
373 value1.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
374 value1.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
375 value1.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 123); // 123 is random input
376 value1.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
377
378 GenericValues value2;
379 value2.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 0);
380 value2.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
381 value2.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
382 value1.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 123); // 123 is random input
383 value1.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
384
385 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
386 std::vector<GenericValues> values;
387 values.emplace_back(value1);
388 values.emplace_back(value2);
389 ASSERT_NE(0, PermissionUsedRecordDb::GetInstance().Add(type, values));
390 }
391
392 /*
393 * @tc.name: Add002
394 * @tc.desc: PermissionUsedRecordDb::Add function test
395 * @tc.type: FUNC
396 * @tc.require: issueI5YL6H
397 */
398 HWTEST_F(PermissionRecordDBTest, Add002, TestSize.Level1)
399 {
400 GenericValues value1;
401 value1.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 0);
402 value1.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
403 value1.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
404 value1.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 123); // 123 is random input
405 value1.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 123); // 123 is random input
406 value1.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
407 value1.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
408
409 GenericValues value2;
410 value2.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 1);
411 value2.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
412 value2.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
413 value1.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 123); // 123 is random input
414 value1.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 123); // 123 is random input
415 value1.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
416 value1.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
417
418 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
419 std::vector<GenericValues> values;
420 values.emplace_back(value1);
421 values.emplace_back(value2);
422 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Add(type, values));
423 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Remove(type, value1));
424 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Remove(type, value2));
425 }
426
427 /*
428 * @tc.name: Add003
429 * @tc.desc: PermissionUsedRecordDb::Add function test
430 * @tc.type: FUNC
431 * @tc.require: issueI5RWXF
432 */
433 HWTEST_F(PermissionRecordDBTest, Add003, TestSize.Level1)
434 {
435 std::vector<GenericValues> values;
436 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
437 PermissionUsedRecordDb::GetInstance().Add(type, values);
438 }
439
440 /*
441 * @tc.name: Modify001
442 * @tc.desc: PermissionUsedRecordDb::Modify function test
443 * @tc.type: FUNC
444 * @tc.require: issueI5YL6H
445 */
446 HWTEST_F(PermissionRecordDBTest, Modify001, TestSize.Level1)
447 {
448 GenericValues modifyValues;
449 modifyValues.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
450
451 GenericValues conditions;
452 conditions.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 0);
453 conditions.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
454 conditions.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
455 conditions.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
456
457 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
458 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Modify(type, modifyValues, conditions));
459 }
460
461 /*
462 * @tc.name: FindByConditions001
463 * @tc.desc: PermissionUsedRecordDb::FindByConditions function test
464 * @tc.type: FUNC
465 * @tc.require: issueI5YL6H
466 */
467 HWTEST_F(PermissionRecordDBTest, FindByConditions001, TestSize.Level1)
468 {
469 GenericValues value;
470 value.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 0);
471 value.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
472 value.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
473 value.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 123); // 123 is random input
474 value.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 123); // 123 is random input
475 value.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
476 value.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
477
478 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
479 std::vector<GenericValues> values;
480 values.emplace_back(value);
481 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Add(type, values));
482
483 GenericValues orConditions;
484 std::vector<GenericValues> results;
485
486 GenericValues andConditions; // no column
487 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().FindByConditions(type, andConditions, orConditions, results));
488
489 GenericValues andConditions1; // field timestamp
490 andConditions1.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 0);
491
492 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().FindByConditions(type, andConditions1, orConditions, results));
493
494 GenericValues andConditions2; // field access_duration
495 andConditions2.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 0);
496 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().FindByConditions(type, andConditions2, orConditions, results));
497
498 GenericValues andConditions3; // field not timestamp or access_duration
499 andConditions3.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
500 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().FindByConditions(type, andConditions3, orConditions, results));
501
502 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Remove(type, value));
503 }
504
505 /*
506 * @tc.name: GetDistinctValue001
507 * @tc.desc: PermissionUsedRecordDb::GetDistinctValue function test no column
508 * @tc.type: FUNC
509 * @tc.require: issueI5YL6H
510 */
511 HWTEST_F(PermissionRecordDBTest, GetDistinctValue001, TestSize.Level1)
512 {
513 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
514 std::string condition;
515 std::vector<GenericValues> results;
516 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().GetDistinctValue(type, condition, results));
517 }
518
519 /*
520 * @tc.name: GetDistinctValue002
521 * @tc.desc: PermissionUsedRecordDb::GetDistinctValue function test field token_id
522 * @tc.type: FUNC
523 * @tc.require: issueI5YL6H
524 */
525 HWTEST_F(PermissionRecordDBTest, GetDistinctValue002, TestSize.Level1)
526 {
527 GenericValues value;
528 value.Put(PrivacyFiledConst::FIELD_TOKEN_ID, 0);
529 value.Put(PrivacyFiledConst::FIELD_OP_CODE, Constant::OP_MICROPHONE);
530 value.Put(PrivacyFiledConst::FIELD_STATUS, ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND);
531 value.Put(PrivacyFiledConst::FIELD_TIMESTAMP, 123); // 123 is random input
532 value.Put(PrivacyFiledConst::FIELD_ACCESS_DURATION, 123); // 123 is random input
533 value.Put(PrivacyFiledConst::FIELD_ACCESS_COUNT, 1);
534 value.Put(PrivacyFiledConst::FIELD_REJECT_COUNT, 0);
535
536 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
537 std::vector<GenericValues> values;
538 values.emplace_back(value);
539 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Add(type, values));
540
541 std::string condition = PrivacyFiledConst::FIELD_TOKEN_ID;
542 std::vector<GenericValues> results;
543 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().GetDistinctValue(type, condition, results));
544 results.clear();
545
546 condition = PrivacyFiledConst::FIELD_TIMESTAMP;
547 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().GetDistinctValue(type, condition, results));
548 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().Remove(type, value));
549 }
550
551 /*
552 * @tc.name: DeleteExpireRecords001
553 * @tc.desc: PermissionUsedRecordDb::DeleteExpireRecords function test andColumns empty
554 * @tc.type: FUNC
555 * @tc.require: issueI5YL6H
556 */
557 HWTEST_F(PermissionRecordDBTest, DeleteExpireRecords001, TestSize.Level1)
558 {
559 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
560 GenericValues andConditions;
561 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().DeleteExpireRecords(type, andConditions));
562 }
563
564 /*
565 * @tc.name: DeleteExcessiveRecords001
566 * @tc.desc: PermissionUsedRecordDb::DeleteExcessiveRecords function test
567 * @tc.type: FUNC
568 * @tc.require: issueI5YL6H
569 */
570 HWTEST_F(PermissionRecordDBTest, DeleteExcessiveRecords001, TestSize.Level1)
571 {
572 PermissionUsedRecordDb::DataType type = PermissionUsedRecordDb::PERMISSION_RECORD;
573 uint32_t excessiveSize = 10;
574 ASSERT_EQ(0, PermissionUsedRecordDb::GetInstance().DeleteExcessiveRecords(type, excessiveSize));
575 }
576 } // namespace AccessToken
577 } // namespace Security
578 } // namespace OHOS
579