1115cd2caSopenharmony_ci/* 2115cd2caSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License. 5115cd2caSopenharmony_ci * You may obtain a copy of the License at 6115cd2caSopenharmony_ci * 7115cd2caSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8115cd2caSopenharmony_ci * 9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and 13115cd2caSopenharmony_ci * limitations under the License. 14115cd2caSopenharmony_ci */ 15115cd2caSopenharmony_ci 16115cd2caSopenharmony_ci#include "base_test.h" 17115cd2caSopenharmony_ci 18115cd2caSopenharmony_ci#include <cstdio> 19115cd2caSopenharmony_ci#include <fcntl.h> 20115cd2caSopenharmony_ci#include "rdb_utils.h" 21115cd2caSopenharmony_ci#include <sys/stat.h> 22115cd2caSopenharmony_ci#include <sys/types.h> 23115cd2caSopenharmony_ci 24115cd2caSopenharmony_ci#include "contacts_path.h" 25115cd2caSopenharmony_ci#include "test_common.h" 26115cd2caSopenharmony_ci 27115cd2caSopenharmony_cinamespace Contacts { 28115cd2caSopenharmony_cinamespace Test { 29115cd2caSopenharmony_ciBaseTest::BaseTest() 30115cd2caSopenharmony_ci{ 31115cd2caSopenharmony_ci OHOS::Contacts::ContactsPath::RDB_PATH = DataPath::RDB_PATH; 32115cd2caSopenharmony_ci OHOS::Contacts::ContactsPath::RDB_BACKUP_PATH = DataPath::RDB_BACKUP_PATH; 33115cd2caSopenharmony_ci} 34115cd2caSopenharmony_ci 35115cd2caSopenharmony_ciBaseTest::~BaseTest() 36115cd2caSopenharmony_ci{ 37115cd2caSopenharmony_ci} 38115cd2caSopenharmony_ci 39115cd2caSopenharmony_ciint BaseTest::ContactsRand() 40115cd2caSopenharmony_ci{ 41115cd2caSopenharmony_ci int fd = 0; 42115cd2caSopenharmony_ci int randNum = 0; 43115cd2caSopenharmony_ci int result; 44115cd2caSopenharmony_ci fd = open("/dev/urandom", O_RDONLY); 45115cd2caSopenharmony_ci read(fd, &result, sizeof(randNum)); 46115cd2caSopenharmony_ci close(fd); 47115cd2caSopenharmony_ci return result; 48115cd2caSopenharmony_ci} 49115cd2caSopenharmony_ci 50115cd2caSopenharmony_civoid BaseTest::InitAbility() 51115cd2caSopenharmony_ci{ 52115cd2caSopenharmony_ci std::shared_ptr<OHOS::AppExecFwk::AbilityInfo> abilityInfo = std::make_shared<OHOS::AppExecFwk::AbilityInfo>(); 53115cd2caSopenharmony_ci abilityInfo->name = "AbilityClassName"; 54115cd2caSopenharmony_ci abilityInfo->type = OHOS::AppExecFwk::AbilityType::DATA; 55115cd2caSopenharmony_ci abilityInfo->isNativeAbility = true; 56115cd2caSopenharmony_ci std::shared_ptr<OHOS::AppExecFwk::AbilityLocalRecord> abilityLocalRecord = 57115cd2caSopenharmony_ci std::make_shared<OHOS::AppExecFwk::AbilityLocalRecord>(abilityInfo, nullptr); 58115cd2caSopenharmony_ci std::shared_ptr<OHOS::AppExecFwk::OHOSApplication> application; 59115cd2caSopenharmony_ci std::shared_ptr<OHOS::AppExecFwk::AbilityHandler> handler; 60115cd2caSopenharmony_ci OHOS::sptr<IRemoteObject> remoteObject; 61115cd2caSopenharmony_ci calllogAbility.Init(abilityLocalRecord, application, handler, remoteObject); 62115cd2caSopenharmony_ci voicemailAbility.Init(abilityLocalRecord, application, handler, remoteObject); 63115cd2caSopenharmony_ci contactsDataAbility.Init(abilityLocalRecord, application, handler, remoteObject); 64115cd2caSopenharmony_ci} 65115cd2caSopenharmony_ci 66115cd2caSopenharmony_ci/** 67115cd2caSopenharmony_ci * @brief check values and resultSet value 68115cd2caSopenharmony_ci * 69115cd2caSopenharmony_ci * @param rawContactValues of data source 70115cd2caSopenharmony_ci * @param resultSet of database 71115cd2caSopenharmony_ci * @param test name 72115cd2caSopenharmony_ci */ 73115cd2caSopenharmony_civoid BaseTest::CheckResultSet(OHOS::DataShare::DataShareValuesBucket &values, 74115cd2caSopenharmony_ci const std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string testName) 75115cd2caSopenharmony_ci{ 76115cd2caSopenharmony_ci std::vector<std::string> columnNames; 77115cd2caSopenharmony_ci resultSet->GetAllColumnNames(columnNames); 78115cd2caSopenharmony_ci if (resultSet->GoToFirstRow() == OHOS::NativeRdb::E_OK) { 79115cd2caSopenharmony_ci int size = columnNames.size(); 80115cd2caSopenharmony_ci for (int i = 0; i < size; i++) { 81115cd2caSopenharmony_ci CheckData(values, resultSet, columnNames[i], testName); 82115cd2caSopenharmony_ci } 83115cd2caSopenharmony_ci } 84115cd2caSopenharmony_ci resultSet->Close(); 85115cd2caSopenharmony_ci} 86115cd2caSopenharmony_ci 87115cd2caSopenharmony_civoid BaseTest::CheckData(OHOS::DataShare::DataShareValuesBucket &values, 88115cd2caSopenharmony_ci const std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string &columnName, 89115cd2caSopenharmony_ci std::string testName) 90115cd2caSopenharmony_ci{ 91115cd2caSopenharmony_ci std::string typeValue = columnName; 92115cd2caSopenharmony_ci int columnIndex = 0; 93115cd2caSopenharmony_ci resultSet->GetColumnIndex(typeValue, columnIndex); 94115cd2caSopenharmony_ci OHOS::DataShare::DataType columnType; 95115cd2caSopenharmony_ci resultSet->GetDataType(columnIndex, columnType); 96115cd2caSopenharmony_ci OHOS::NativeRdb::ValuesBucket valuesBucket = OHOS::RdbDataShareAdapter::RdbUtils::ToValuesBucket(values); 97115cd2caSopenharmony_ci // Compare values and resultSet column value equality 98115cd2caSopenharmony_ci if (columnType == OHOS::DataShare::DataType::TYPE_INTEGER) { 99115cd2caSopenharmony_ci int resultSetIntValue = 0; 100115cd2caSopenharmony_ci resultSet->GetInt(columnIndex, resultSetIntValue); 101115cd2caSopenharmony_ci if (valuesBucket.HasColumn(typeValue)) { 102115cd2caSopenharmony_ci int valuesIntValue = 0; 103115cd2caSopenharmony_ci OHOS::NativeRdb::ValueObject valuesObject; 104115cd2caSopenharmony_ci valuesBucket.GetObject(typeValue, valuesObject); 105115cd2caSopenharmony_ci valuesObject.GetInt(valuesIntValue); 106115cd2caSopenharmony_ci std::string tempName = testName; 107115cd2caSopenharmony_ci tempName.append("CheckResultSet columnName : %{public}s insertValue = %{public}d "); 108115cd2caSopenharmony_ci tempName.append("databaseValue = %{public}d"); 109115cd2caSopenharmony_ci HILOG_INFO(tempName.c_str(), typeValue.c_str(), valuesIntValue, resultSetIntValue); 110115cd2caSopenharmony_ci EXPECT_EQ(resultSetIntValue, valuesIntValue); 111115cd2caSopenharmony_ci } 112115cd2caSopenharmony_ci } else if (columnType == OHOS::DataShare::DataType::TYPE_STRING) { 113115cd2caSopenharmony_ci std::string resultSetStringValue; 114115cd2caSopenharmony_ci resultSet->GetString(columnIndex, resultSetStringValue); 115115cd2caSopenharmony_ci if (valuesBucket.HasColumn(typeValue)) { 116115cd2caSopenharmony_ci OHOS::NativeRdb::ValueObject valuesObject; 117115cd2caSopenharmony_ci std::string valuesStringValue; 118115cd2caSopenharmony_ci valuesBucket.GetObject(typeValue, valuesObject); 119115cd2caSopenharmony_ci valuesObject.GetString(valuesStringValue); 120115cd2caSopenharmony_ci std::string tempName = testName; 121115cd2caSopenharmony_ci tempName.append("CheckResultSet columnName : %{public}s insertValue = %{public}s "); 122115cd2caSopenharmony_ci tempName.append("databaseValue = %{public}s"); 123115cd2caSopenharmony_ci HILOG_INFO(tempName.c_str(), typeValue.c_str(), valuesStringValue.c_str(), resultSetStringValue.c_str()); 124115cd2caSopenharmony_ci EXPECT_EQ(resultSetStringValue, valuesStringValue); 125115cd2caSopenharmony_ci } 126115cd2caSopenharmony_ci } 127115cd2caSopenharmony_ci} 128115cd2caSopenharmony_ci 129115cd2caSopenharmony_ci/** 130115cd2caSopenharmony_ci * @brief check values and resultSet value 131115cd2caSopenharmony_ci * 132115cd2caSopenharmony_ci * @param values of data source 133115cd2caSopenharmony_ci * @param resultSet of database 134115cd2caSopenharmony_ci */ 135115cd2caSopenharmony_civoid BaseTest::CheckResultSetList(std::vector<OHOS::DataShare::DataShareValuesBucket> &valuesVector, 136115cd2caSopenharmony_ci std::shared_ptr<OHOS::DataShare::DataShareResultSet> &resultSet, std::string testName) 137115cd2caSopenharmony_ci{ 138115cd2caSopenharmony_ci std::vector<std::string> columnNames; 139115cd2caSopenharmony_ci resultSet->GetAllColumnNames(columnNames); 140115cd2caSopenharmony_ci int resultSetNum = resultSet->GoToFirstRow(); 141115cd2caSopenharmony_ci int index = 0; 142115cd2caSopenharmony_ci while (resultSetNum == OHOS::NativeRdb::E_OK) { 143115cd2caSopenharmony_ci OHOS::DataShare::DataShareValuesBucket values = valuesVector[index]; 144115cd2caSopenharmony_ci int size = columnNames.size(); 145115cd2caSopenharmony_ci for (int i = 0; i < size; i++) { 146115cd2caSopenharmony_ci CheckData(valuesVector[index], resultSet, columnNames[i], testName); 147115cd2caSopenharmony_ci } 148115cd2caSopenharmony_ci resultSetNum = resultSet->GoToNextRow(); 149115cd2caSopenharmony_ci index++; 150115cd2caSopenharmony_ci } 151115cd2caSopenharmony_ci resultSet->Close(); 152115cd2caSopenharmony_ci} 153115cd2caSopenharmony_ci} // namespace Test 154115cd2caSopenharmony_ci} // namespace Contacts