1 /*
2 * Copyright (c) 2021-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 "base_test.h"
17
18 #include <cstdio>
19 #include <fcntl.h>
20 #include "rdb_utils.h"
21 #include <sys/stat.h>
22 #include <sys/types.h>
23
24 #include "contacts_path.h"
25 #include "test_common.h"
26
27 namespace Contacts {
28 namespace Test {
BaseTest()29 BaseTest::BaseTest()
30 {
31 OHOS::Contacts::ContactsPath::RDB_PATH = DataPath::RDB_PATH;
32 OHOS::Contacts::ContactsPath::RDB_BACKUP_PATH = DataPath::RDB_BACKUP_PATH;
33 }
34
~BaseTest()35 BaseTest::~BaseTest()
36 {
37 }
38
ContactsRand()39 int BaseTest::ContactsRand()
40 {
41 int fd = 0;
42 int randNum = 0;
43 int result;
44 fd = open("/dev/urandom", O_RDONLY);
45 read(fd, &result, sizeof(randNum));
46 close(fd);
47 return result;
48 }
49
InitAbility()50 void BaseTest::InitAbility()
51 {
52 std::shared_ptr<OHOS::AppExecFwk::AbilityInfo> abilityInfo = std::make_shared<OHOS::AppExecFwk::AbilityInfo>();
53 abilityInfo->name = "AbilityClassName";
54 abilityInfo->type = OHOS::AppExecFwk::AbilityType::DATA;
55 abilityInfo->isNativeAbility = true;
56 std::shared_ptr<OHOS::AppExecFwk::AbilityLocalRecord> abilityLocalRecord =
57 std::make_shared<OHOS::AppExecFwk::AbilityLocalRecord>(abilityInfo, nullptr);
58 std::shared_ptr<OHOS::AppExecFwk::OHOSApplication> application;
59 std::shared_ptr<OHOS::AppExecFwk::AbilityHandler> handler;
60 OHOS::sptr<IRemoteObject> remoteObject;
61 calllogAbility.Init(abilityLocalRecord, application, handler, remoteObject);
62 voicemailAbility.Init(abilityLocalRecord, application, handler, remoteObject);
63 contactsDataAbility.Init(abilityLocalRecord, application, handler, remoteObject);
64 }
65
66 /**
67 * @brief check values and resultSet value
68 *
69 * @param rawContactValues of data source
70 * @param resultSet of database
71 * @param test name
72 */
CheckResultSet(OHOS::DataShare::DataShareValuesBucket &values, const std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string testName)73 void BaseTest::CheckResultSet(OHOS::DataShare::DataShareValuesBucket &values,
74 const std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string testName)
75 {
76 std::vector<std::string> columnNames;
77 resultSet->GetAllColumnNames(columnNames);
78 if (resultSet->GoToFirstRow() == OHOS::NativeRdb::E_OK) {
79 int size = columnNames.size();
80 for (int i = 0; i < size; i++) {
81 CheckData(values, resultSet, columnNames[i], testName);
82 }
83 }
84 resultSet->Close();
85 }
86
CheckData(OHOS::DataShare::DataShareValuesBucket &values, const std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string &columnName, std::string testName)87 void BaseTest::CheckData(OHOS::DataShare::DataShareValuesBucket &values,
88 const std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string &columnName,
89 std::string testName)
90 {
91 std::string typeValue = columnName;
92 int columnIndex = 0;
93 resultSet->GetColumnIndex(typeValue, columnIndex);
94 OHOS::DataShare::DataType columnType;
95 resultSet->GetDataType(columnIndex, columnType);
96 OHOS::NativeRdb::ValuesBucket valuesBucket = OHOS::RdbDataShareAdapter::RdbUtils::ToValuesBucket(values);
97 // Compare values and resultSet column value equality
98 if (columnType == OHOS::DataShare::DataType::TYPE_INTEGER) {
99 int resultSetIntValue = 0;
100 resultSet->GetInt(columnIndex, resultSetIntValue);
101 if (valuesBucket.HasColumn(typeValue)) {
102 int valuesIntValue = 0;
103 OHOS::NativeRdb::ValueObject valuesObject;
104 valuesBucket.GetObject(typeValue, valuesObject);
105 valuesObject.GetInt(valuesIntValue);
106 std::string tempName = testName;
107 tempName.append("CheckResultSet columnName : %{public}s insertValue = %{public}d ");
108 tempName.append("databaseValue = %{public}d");
109 HILOG_INFO(tempName.c_str(), typeValue.c_str(), valuesIntValue, resultSetIntValue);
110 EXPECT_EQ(resultSetIntValue, valuesIntValue);
111 }
112 } else if (columnType == OHOS::DataShare::DataType::TYPE_STRING) {
113 std::string resultSetStringValue;
114 resultSet->GetString(columnIndex, resultSetStringValue);
115 if (valuesBucket.HasColumn(typeValue)) {
116 OHOS::NativeRdb::ValueObject valuesObject;
117 std::string valuesStringValue;
118 valuesBucket.GetObject(typeValue, valuesObject);
119 valuesObject.GetString(valuesStringValue);
120 std::string tempName = testName;
121 tempName.append("CheckResultSet columnName : %{public}s insertValue = %{public}s ");
122 tempName.append("databaseValue = %{public}s");
123 HILOG_INFO(tempName.c_str(), typeValue.c_str(), valuesStringValue.c_str(), resultSetStringValue.c_str());
124 EXPECT_EQ(resultSetStringValue, valuesStringValue);
125 }
126 }
127 }
128
129 /**
130 * @brief check values and resultSet value
131 *
132 * @param values of data source
133 * @param resultSet of database
134 */
CheckResultSetList(std::vector<OHOS::DataShare::DataShareValuesBucket> &valuesVector, std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string testName)135 void BaseTest::CheckResultSetList(std::vector<OHOS::DataShare::DataShareValuesBucket> &valuesVector,
136 std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string testName)
137 {
138 std::vector<std::string> columnNames;
139 resultSet->GetAllColumnNames(columnNames);
140 int resultSetNum = resultSet->GoToFirstRow();
141 int index = 0;
142 while (resultSetNum == OHOS::NativeRdb::E_OK) {
143 OHOS::DataShare::DataShareValuesBucket values = valuesVector[index];
144 int size = columnNames.size();
145 for (int i = 0; i < size; i++) {
146 CheckData(valuesVector[index], resultSet, columnNames[i], testName);
147 }
148 resultSetNum = resultSet->GoToNextRow();
149 index++;
150 }
151 resultSet->Close();
152 }
153 } // namespace Test
154 } // namespace Contacts