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