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 "gmock/gmock.h"
17 #include "rdb_helper.h"
18 #include "security_guard_define.h"
19 #define private public
20 #define protected public
21 #include "app_info_rdb_helper.h"
22 #undef private
23 #undef protected
24
25 using namespace testing;
26 using namespace testing::ext;
27 using namespace OHOS::Security::SecurityGuard;
28 namespace OHOS {
29 std::shared_ptr<NativeRdb::MockRdbHelperInterface> NativeRdb::RdbHelper::instance_ = nullptr;
30 std::mutex NativeRdb::RdbHelper::mutex_ {};
31 }
32 namespace OHOS::Security::SecurityGuardTest {
33 namespace {
34 constexpr int SUCCESS = 0;
35 }
36 class AppInfoDataBaseTest : public testing::Test {
37 public:
38 static void SetUpTestCase();
39
40 static void TearDownTestCase();
41
42 void SetUp() override;
43
44 void TearDown() override;
45 };
46
SetUpTestCase()47 void AppInfoDataBaseTest::SetUpTestCase()
48 {
49 }
50
TearDownTestCase()51 void AppInfoDataBaseTest::TearDownTestCase()
52 {
53 NativeRdb::RdbHelper::DelInterface();
54 }
55
SetUp()56 void AppInfoDataBaseTest::SetUp()
57 {
58 }
59
TearDown()60 void AppInfoDataBaseTest::TearDown()
61 {
62 }
63
64 HWTEST_F(AppInfoDataBaseTest, TestAppInfoRdbHelper001, TestSize.Level1)
65 {
66 auto rdbStoreMock = std::make_shared<NativeRdb::RdbStore>();
67 auto resultSetMock = std::make_shared<NativeRdb::ResultSet>();
68 EXPECT_CALL(*(NativeRdb::RdbHelper::GetInterface()), GetRdbStore)
69 .WillRepeatedly([&rdbStoreMock] (
__anon852fef0f0202( const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) 70 const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) {
71 errCode = SUCCESS;
72 return rdbStoreMock;
73 });
74 EXPECT_CALL(*rdbStoreMock, Query(_, _)).WillOnce(Return(nullptr))
75 .WillRepeatedly(
__anon852fef0f0302(const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) 76 [&resultSetMock] (const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) {
77 return resultSetMock;
78 });
79 EXPECT_CALL(*resultSetMock, GoToNextRow).WillOnce(Return(SUCCESS)).WillRepeatedly(Return(FAILED));
80 EXPECT_CALL(*resultSetMock, GetString).WillRepeatedly(Return(0));
81 EXPECT_CALL(*resultSetMock, GetInt).WillRepeatedly(Return(0));
82 EXPECT_CALL(*resultSetMock, GetRowCount).WillOnce(Return(-1)).WillRepeatedly(Return(0));
83 EXPECT_CALL(*resultSetMock, GetColumnCount).WillRepeatedly(Return(0));
84 EXPECT_CALL(*resultSetMock, GetAllColumnNames).WillRepeatedly(Return(0));
85 EXPECT_CALL(*resultSetMock, Close).WillRepeatedly(Return(0));
86 AppInfoRdbHelper helper;
87 int32_t ret = helper.Init();
88 EXPECT_EQ(ret, SUCCESS);
89 std::vector<AppInfo> events;
90 ret = helper.QueryAllAppInfo(events);
91 EXPECT_EQ(ret, DB_OPT_ERR);
92 ret = helper.QueryAllAppInfo(events);
93 EXPECT_EQ(ret, DB_LOAD_ERR);
94 ret = helper.QueryAllAppInfo(events);
95 EXPECT_EQ(ret, SUCCESS);
96 }
97
98 HWTEST_F(AppInfoDataBaseTest, TestAppInfoRdbHelper002, TestSize.Level1)
99 {
100 auto rdbStoreMock = std::make_shared<NativeRdb::RdbStore>();
101 auto resultSetMock = std::make_shared<NativeRdb::ResultSet>();
102 EXPECT_CALL(*(NativeRdb::RdbHelper::GetInterface()), GetRdbStore)
103 .WillRepeatedly([&rdbStoreMock] (
__anon852fef0f0402( const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) 104 const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) {
105 errCode = SUCCESS;
106 return rdbStoreMock;
107 });
108 EXPECT_CALL(*rdbStoreMock, Query(_, _))
109 .WillRepeatedly(
__anon852fef0f0502(const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) 110 [&resultSetMock] (const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) {
111 return resultSetMock;
112 });
113 EXPECT_CALL(*rdbStoreMock, BatchInsert).WillOnce(Return(FAILED)).WillOnce(Return(SUCCESS));
114 EXPECT_CALL(*resultSetMock, Close).WillRepeatedly(Return(0));
115 EXPECT_CALL(*rdbStoreMock, Insert).WillOnce(Return(FAILED)).WillOnce(Return(SUCCESS));
116 AppInfoRdbHelper helper;
117 int32_t ret = helper.Init();
118 EXPECT_EQ(ret, SUCCESS);
119 AppInfo event;
120 event.attrs.emplace_back("att");
121 event.attrs.emplace_back("att1");
122 ret = helper.InsertAppInfo(event);
123 EXPECT_EQ(ret, DB_OPT_ERR);
124 ret = helper.InsertAppInfo(event);
125 EXPECT_EQ(ret, SUCCESS);
126 std::vector<AppInfo> events;
127 events.emplace_back(event);
128 ret = helper.InsertAllAppInfo(events);
129 EXPECT_EQ(ret, DB_OPT_ERR);
130 ret = helper.InsertAllAppInfo(events);
131 EXPECT_EQ(ret, SUCCESS);
132 }
133
134 HWTEST_F(AppInfoDataBaseTest, TestAppInfoRdbHelper003, TestSize.Level1)
135 {
136 auto rdbStoreMock = std::make_shared<NativeRdb::RdbStore>();
137 auto resultSetMock = std::make_shared<NativeRdb::ResultSet>();
138 EXPECT_CALL(*(NativeRdb::RdbHelper::GetInterface()), GetRdbStore)
139 .WillRepeatedly([&rdbStoreMock] (
__anon852fef0f0602( const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) 140 const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) {
141 errCode = SUCCESS;
142 return rdbStoreMock;
143 });
144 EXPECT_CALL(*rdbStoreMock, Query(_, _)).WillOnce(Return(nullptr))
145 .WillRepeatedly(
__anon852fef0f0702(const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) 146 [&resultSetMock] (const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) {
147 return resultSetMock;
148 });
149 EXPECT_CALL(*rdbStoreMock, Delete).WillRepeatedly(Return(SUCCESS));
150 EXPECT_CALL(*rdbStoreMock, Attach).WillRepeatedly(Return(0));
151 EXPECT_CALL(*resultSetMock, GoToNextRow).WillOnce(Return(SUCCESS)).WillRepeatedly(Return(FAILED));
152 EXPECT_CALL(*resultSetMock, GetString).WillRepeatedly(Return(0));
153 EXPECT_CALL(*resultSetMock, GetLong).WillRepeatedly(Return(0));
154 EXPECT_CALL(*resultSetMock, GetInt).WillRepeatedly(Return(0));
155 EXPECT_CALL(*resultSetMock, GoToRow).WillRepeatedly(Return(0));
156 EXPECT_CALL(*resultSetMock, GetRowCount).WillOnce(Return(-1)).WillRepeatedly(Return(0));
157 EXPECT_CALL(*resultSetMock, GetColumnCount).WillRepeatedly(Return(0));
158 EXPECT_CALL(*resultSetMock, GetAllColumnNames).WillRepeatedly(Return(0));
159 EXPECT_CALL(*resultSetMock, Close).WillRepeatedly(Return(0));
160 AppInfoRdbHelper helper;
161 int32_t ret = helper.Init();
162 EXPECT_EQ(ret, SUCCESS);
163 std::vector<AppInfo> events;
164 std::string appName;
165 ret = helper.QueryAppInfosByName(appName, events);
166 EXPECT_EQ(ret, DB_OPT_ERR);
167 ret = helper.QueryAppInfosByName(appName, events);
168 EXPECT_EQ(ret, DB_LOAD_ERR);
169 ret = helper.QueryAppInfosByName(appName, events);
170 EXPECT_EQ(ret, SUCCESS);
171 }
172
173 HWTEST_F(AppInfoDataBaseTest, TestAppInfoRdbHelper004, TestSize.Level1)
174 {
175 auto rdbStoreMock = std::make_shared<NativeRdb::RdbStore>();
176 auto resultSetMock = std::make_shared<NativeRdb::ResultSet>();
177 EXPECT_CALL(*(NativeRdb::RdbHelper::GetInterface()), GetRdbStore)
178 .WillRepeatedly([&rdbStoreMock] (
__anon852fef0f0802( const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) 179 const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) {
180 errCode = SUCCESS;
181 return rdbStoreMock;
182 });
183 EXPECT_CALL(*rdbStoreMock, Query(_, _)).WillOnce(Return(nullptr))
184 .WillRepeatedly(
__anon852fef0f0902(const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) 185 [&resultSetMock] (const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) {
186 return resultSetMock;
187 });
188 EXPECT_CALL(*rdbStoreMock, Delete).WillOnce(Return(FAILED)).WillOnce(Return(SUCCESS));
189 EXPECT_CALL(*rdbStoreMock, Attach).WillRepeatedly(Return(0));
190 EXPECT_CALL(*resultSetMock, GoToNextRow).WillOnce(Return(SUCCESS)).WillRepeatedly(Return(FAILED));
191 EXPECT_CALL(*resultSetMock, GetString).WillRepeatedly(Return(0));
192 EXPECT_CALL(*resultSetMock, GetLong).WillRepeatedly(Return(0));
193 EXPECT_CALL(*resultSetMock, GetInt).WillRepeatedly(Return(0));
194 EXPECT_CALL(*resultSetMock, GoToRow).WillRepeatedly(Return(0));
195 EXPECT_CALL(*resultSetMock, GetRowCount).WillRepeatedly(Return(0));
196 EXPECT_CALL(*resultSetMock, GetColumnCount).WillRepeatedly(Return(0));
197 EXPECT_CALL(*resultSetMock, GetAllColumnNames).WillRepeatedly(Return(0));
198 EXPECT_CALL(*resultSetMock, Close).WillRepeatedly(Return(0));
199 AppInfoRdbHelper helper;
200 int32_t ret = helper.Init();
201 EXPECT_EQ(ret, SUCCESS);
202 std::vector<AppInfo> events;
203 std::string appName;
204 ret = helper.DeleteAppInfoByNameAndGlobbalFlag(appName, 0);
205 EXPECT_EQ(ret, DB_OPT_ERR);
206 ret = helper.DeleteAppInfoByNameAndGlobbalFlag(appName, 0);
207 EXPECT_EQ(ret, DB_OPT_ERR);
208 ret = helper.DeleteAppInfoByNameAndGlobbalFlag(appName, 0);
209 EXPECT_EQ(ret, SUCCESS);
210 }
211
212 HWTEST_F(AppInfoDataBaseTest, TestAppInfoRdbHelper005, TestSize.Level1)
213 {
214 auto rdbStoreMock = std::make_shared<NativeRdb::RdbStore>();
215 auto resultSetMock = std::make_shared<NativeRdb::ResultSet>();
216 EXPECT_CALL(*(NativeRdb::RdbHelper::GetInterface()), GetRdbStore)
217 .WillRepeatedly([&rdbStoreMock] (
__anon852fef0f0a02( const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) 218 const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) {
219 errCode = SUCCESS;
220 return rdbStoreMock;
221 });
222 EXPECT_CALL(*rdbStoreMock, Query(_, _)).WillOnce(Return(nullptr))
223 .WillRepeatedly(
__anon852fef0f0b02(const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) 224 [&resultSetMock] (const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) {
225 return resultSetMock;
226 });
227 EXPECT_CALL(*rdbStoreMock, Delete).WillRepeatedly(Return(SUCCESS));
228 EXPECT_CALL(*rdbStoreMock, Attach).WillRepeatedly(Return(0));
229 EXPECT_CALL(*resultSetMock, GoToNextRow).WillOnce(Return(SUCCESS)).WillRepeatedly(Return(FAILED));;
230 EXPECT_CALL(*resultSetMock, GetString).WillRepeatedly(Return(0));
231 EXPECT_CALL(*resultSetMock, GetLong).WillRepeatedly(Return(0));
232 EXPECT_CALL(*resultSetMock, GetInt).WillRepeatedly(Return(0));
233 EXPECT_CALL(*resultSetMock, GoToRow).WillRepeatedly(Return(0));
234 EXPECT_CALL(*resultSetMock, GetRowCount).WillOnce(Return(-1)).WillRepeatedly(Return(0));
235 EXPECT_CALL(*resultSetMock, GetColumnCount).WillRepeatedly(Return(0));
236 EXPECT_CALL(*resultSetMock, Close).WillRepeatedly(Return(0));
237 EXPECT_CALL(*resultSetMock, GetAllColumnNames).WillRepeatedly(
__anon852fef0f0c02(std::vector<std::string> &columnNames) 238 [] (std::vector<std::string> &columnNames) {
239 columnNames.emplace_back(ID);
240 columnNames.emplace_back(APP_NAME);
241 columnNames.emplace_back(APP_FINGERPRINT);
242 columnNames.emplace_back(APP_ATTRIBUTES);
243 columnNames.emplace_back(IS_GLOBAL_APP);
244 return SUCCESS;
245 });
246 std::vector<AppInfo> events;
247 std::string attr;
248 AppInfoRdbHelper helper;
249 helper.GetInstance();
250 int32_t ret = helper.Init();
251 EXPECT_EQ(ret, SUCCESS);
252 ret = helper.QueryAppInfoByAttribute(attr, events);
253 EXPECT_EQ(ret, DB_OPT_ERR);
254 ret = helper.QueryAppInfoByAttribute(attr, events);
255 EXPECT_EQ(ret, DB_LOAD_ERR);
256 ret = helper.QueryAppInfoByAttribute(attr, events);
257 EXPECT_EQ(ret, SUCCESS);
258 }
259
260 HWTEST_F(AppInfoDataBaseTest, TestAppInfoRdbHelper006, TestSize.Level1)
261 {
262 auto rdbStoreMock = std::make_shared<NativeRdb::RdbStore>();
263 auto resultSetMock = std::make_shared<NativeRdb::ResultSet>();
264 EXPECT_CALL(*(NativeRdb::RdbHelper::GetInterface()), GetRdbStore)
265 .WillRepeatedly([&rdbStoreMock] (
__anon852fef0f0d02( const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) 266 const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode) {
267 errCode = SUCCESS;
268 return rdbStoreMock;
269 });
270 EXPECT_CALL(*rdbStoreMock, Query(_, _)).WillOnce(Return(nullptr))
271 .WillRepeatedly(
__anon852fef0f0e02(const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) 272 [&resultSetMock] (const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns) {
273 return resultSetMock;
274 });
275 EXPECT_CALL(*rdbStoreMock, Delete).WillOnce(Return(FAILED)).WillOnce(Return(SUCCESS));
276 EXPECT_CALL(*rdbStoreMock, Attach).WillRepeatedly(Return(0));
277 EXPECT_CALL(*resultSetMock, GoToNextRow).WillOnce(Return(SUCCESS)).WillRepeatedly(Return(FAILED));
278 EXPECT_CALL(*resultSetMock, GetString).WillRepeatedly(Return(0));
279 EXPECT_CALL(*resultSetMock, GetLong).WillRepeatedly(Return(0));
280 EXPECT_CALL(*resultSetMock, GetInt).WillRepeatedly(Return(0));
281 EXPECT_CALL(*resultSetMock, GoToRow).WillRepeatedly(Return(0));
282 EXPECT_CALL(*resultSetMock, GetRowCount).WillRepeatedly(Return(0));
283 EXPECT_CALL(*resultSetMock, GetColumnCount).WillRepeatedly(Return(0));
284 EXPECT_CALL(*resultSetMock, GetAllColumnNames).WillRepeatedly(Return(0));
285 EXPECT_CALL(*resultSetMock, Close).WillRepeatedly(Return(0));
286 AppInfoRdbHelper helper;
287 int32_t ret = helper.Init();
288 EXPECT_EQ(ret, SUCCESS);
289 std::vector<AppInfo> events;
290 int global = 0;
291 ret = helper.DeleteAppInfoByIsGlobalApp(global);
292 EXPECT_EQ(ret, DB_OPT_ERR);
293 ret = helper.DeleteAppInfoByIsGlobalApp(global);
294 EXPECT_EQ(ret, DB_OPT_ERR);
295 ret = helper.DeleteAppInfoByIsGlobalApp(global);
296 EXPECT_EQ(ret, SUCCESS);
297 }
298 }
299