• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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