2eadb35e3502fdaf5f16b00c713cc6321d5f763d
[platform/core/appfw/libslp-db-util.git] / unittest / db-util_gtest.cpp
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include "gtest/gtest.h"
6
7
8 #include <db-util.h>
9 #include <vconf.h>
10
11 #define FILE_LEN 255
12 #define COL_NAME_LEN 255
13 #define BUF_LEN 255
14
15 //=======================================================================================
16 class DbUtil : public ::testing::Test {
17         public:
18                 char    pszFilePath[FILE_LEN + 1];
19                 sqlite3 *db;
20                 int     nOption;
21                 int     flags;
22                 const char* zVfs;
23                 char    col_name[COL_NAME_LEN + 1];
24
25                 DbUtil() {
26                         strncpy(pszFilePath, "test.db", FILE_LEN);
27                         db = NULL;
28                         nOption = 0;
29                         flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
30
31                         zVfs = NULL;
32                 }
33
34                 void SetUp() {
35                 }
36
37                 void TearDown() {
38                         int rc;
39                         rc = system("rm -f test.db");
40                         rc = system("rm -f test.db-journal");
41                 }
42 };
43 //=======================================================================================
44 // Testing for util_func.c
45 //=======================================================================================
46 TEST_F(DbUtil, db_util_open_p) {
47         int rc;
48
49         rc = db_util_open(pszFilePath, &db, nOption);
50         ASSERT_EQ ( DB_UTIL_OK , rc );
51
52         rc = db_util_close(db);
53         ASSERT_EQ ( DB_UTIL_OK , rc );
54 }
55
56 TEST_F(DbUtil, db_util_open_n1) {
57         int rc;
58
59         // Invalid db name
60         rc = db_util_open(".", &db, nOption);
61         ASSERT_NE ( DB_UTIL_OK , rc );
62 }
63
64 TEST_F(DbUtil, db_util_open_n2) {
65         int rc;
66
67         // Invalid db pointer
68         rc = db_util_open(pszFilePath, NULL, nOption);
69         ASSERT_NE ( DB_UTIL_OK , rc );
70 }
71
72 TEST_F(DbUtil, db_util_close_n) {
73         int rc;
74
75         // Invalid db close
76         rc = db_util_close(NULL);
77         ASSERT_EQ ( DB_UTIL_OK , rc );
78 }
79
80 TEST_F(DbUtil, db_util_open_with_options_p) {
81         int rc;
82
83         rc = db_util_open_with_options(pszFilePath, &db, flags, zVfs);
84         ASSERT_EQ ( DB_UTIL_OK , rc );
85
86         rc = db_util_close(db);
87         ASSERT_EQ ( DB_UTIL_OK , rc );
88 }
89
90 TEST_F(DbUtil, db_util_open_with_options_n1) {
91         int rc;
92
93         // Invalid db name
94         rc = db_util_open_with_options(".", &db, flags, zVfs);
95         ASSERT_NE ( DB_UTIL_OK , rc );
96 }
97
98 TEST_F(DbUtil, db_util_open_with_options_n2) {
99         int rc;
100
101         // Invalid db name
102         rc = db_util_open_with_options(pszFilePath, NULL, flags, zVfs);
103         ASSERT_NE ( DB_UTIL_OK , rc );
104 }
105
106 TEST_F(DbUtil, db_util_open_n4) {
107         int rc;
108
109         rc = db_util_open(pszFilePath, &db, nOption);
110         ASSERT_EQ ( DB_UTIL_OK , rc );
111
112         // In case of (geteuid() != 0) && access(pszFilePath, R_OK)
113         system("chmod 000 test.db");
114
115         uid_t uid = getuid();
116         setuid(1000);
117
118         rc = db_util_open(pszFilePath, &db, nOption);
119
120         setuid(uid);
121         ASSERT_EQ ( SQLITE_PERM , rc );
122 }
123
124 TEST_F(DbUtil, db_util_busyhandler) {
125         int rc;
126
127         rc = db_util_open(pszFilePath, &db, nOption);
128         ASSERT_EQ ( DB_UTIL_OK , rc );
129
130         sqlite3_exec(db, "BEGIN EXCLUSIVE TRANSACTION;", NULL, NULL, NULL);
131
132         sqlite3 *db1;
133         rc = db_util_open(pszFilePath, &db1, nOption);
134         ASSERT_EQ ( DB_UTIL_OK , rc );
135
136         sqlite3_exec(db1, "BEGIN EXCLUSIVE TRANSACTION;", NULL, NULL, NULL);
137         sqlite3_exec(db1, "END EXCLUSIVE TRANSACTION;", NULL, NULL, NULL);
138         db_util_close(db1);
139
140         sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);
141         db_util_close(db);
142 }
143 //=======================================================================================
144 // Testing for collation.c
145 //=======================================================================================
146
147 int run_query(sqlite3 *db, char* col_name) {
148
149         int rc;
150
151         sqlite3_stmt *stmt = NULL;
152         char sql[BUF_LEN+1];
153         snprintf( sql, BUF_LEN, "SELECT key, value FROM collation order by value COLLATE %s", col_name);
154     rc = sqlite3_prepare(db, sql, -1, &stmt, 0);
155         if(rc == SQLITE_OK ){
156                 rc = sqlite3_step(stmt);
157                 while(rc == SQLITE_ROW){
158 #if 0
159                         printf("key : [%s] : Value [%s]\n",
160                                         sqlite3_column_text(stmt,0),
161                                         sqlite3_column_text(stmt,1) );
162 #endif
163                         rc = sqlite3_step(stmt);
164                 }
165         }
166
167         sqlite3_finalize(stmt);
168
169         return 0;
170 }
171
172 TEST_F(DbUtil, db_util_create_collation_p1) {
173         int rc;
174
175         rc = system("./test_collation_db.sh");
176
177         rc = db_util_open(pszFilePath, &db, nOption);
178         ASSERT_EQ ( DB_UTIL_OK , rc );
179
180         // set vconf data
181         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
182
183         strncpy(col_name,"COL_UCA_UTF8", COL_NAME_LEN);
184         rc = db_util_create_collation(db, DB_UTIL_COL_UCA, DB_UTIL_COL_UTF8, col_name );
185         ASSERT_EQ ( DB_UTIL_OK , rc );
186
187         rc = run_query(db, col_name);
188
189         rc = db_util_close(db);
190         ASSERT_EQ ( DB_UTIL_OK , rc );
191 }
192
193 TEST_F(DbUtil, db_util_create_collation_p2) {
194         int rc;
195
196         rc = system("./test_collation_db.sh");
197
198         rc = db_util_open(pszFilePath, &db, nOption);
199         ASSERT_EQ ( DB_UTIL_OK , rc );
200
201         // set vconf data
202         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
203
204         strncpy(col_name,"COL_LS_AS_CI_UTF8", COL_NAME_LEN);
205         rc = db_util_create_collation(db, DB_UTIL_COL_LS_AS_CI, DB_UTIL_COL_UTF8, col_name );
206         ASSERT_EQ ( DB_UTIL_OK , rc );
207
208         rc = run_query(db, col_name);
209
210         rc = db_util_close(db);
211         ASSERT_EQ ( DB_UTIL_OK , rc );
212 }
213
214 TEST_F(DbUtil, db_util_create_collation_p3) {
215         int rc;
216
217         rc = system("./test_collation_db.sh");
218
219         rc = db_util_open(pszFilePath, &db, nOption);
220         ASSERT_EQ ( DB_UTIL_OK , rc );
221
222         // set vconf data
223         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
224
225         strncpy(col_name,"COL_LS_AI_CI_UTF8", COL_NAME_LEN);
226         rc = db_util_create_collation(db, DB_UTIL_COL_LS_AI_CI, DB_UTIL_COL_UTF8, col_name );
227         ASSERT_EQ ( DB_UTIL_OK , rc );
228
229         rc = run_query(db, col_name);
230
231         rc = db_util_close(db);
232         ASSERT_EQ ( DB_UTIL_OK , rc );
233 }
234
235 TEST_F(DbUtil, db_util_create_collation_p4) {
236         int rc;
237
238         rc = system("./test_collation_db.sh");
239
240         rc = db_util_open(pszFilePath, &db, nOption);
241         ASSERT_EQ ( DB_UTIL_OK , rc );
242
243         // set vconf data
244         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
245
246         strncpy(col_name,"COL_LS_AI_CI_LC_UTF8", COL_NAME_LEN);
247         rc = db_util_create_collation(db, DB_UTIL_COL_LS_AI_CI_LC, DB_UTIL_COL_UTF8, col_name );
248         ASSERT_EQ ( DB_UTIL_OK , rc );
249
250         rc = run_query(db, col_name);
251
252         rc = db_util_close(db);
253         ASSERT_EQ ( DB_UTIL_OK , rc );
254 }
255
256 TEST_F(DbUtil, db_util_create_collation_p5) {
257         int rc;
258
259         rc = system("./test_collation_db.sh");
260
261         rc = db_util_open(pszFilePath, &db, nOption);
262         ASSERT_EQ ( DB_UTIL_OK , rc );
263
264         // set vconf data
265         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
266
267         strncpy(col_name,"COL_UCA_UTF16", COL_NAME_LEN);
268         rc = db_util_create_collation(db, DB_UTIL_COL_UCA, DB_UTIL_COL_UTF16, col_name );
269         ASSERT_EQ ( DB_UTIL_OK , rc );
270
271         rc = run_query(db, col_name);
272
273         rc = db_util_close(db);
274         ASSERT_EQ ( DB_UTIL_OK , rc );
275 }
276
277 TEST_F(DbUtil, db_util_create_collation_p6) {
278         int rc;
279
280         rc = system("./test_collation_db.sh");
281
282         rc = db_util_open(pszFilePath, &db, nOption);
283         ASSERT_EQ ( DB_UTIL_OK , rc );
284
285         // set vconf data
286         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
287
288         strncpy(col_name,"COL_LS_AS_CI_UTF16", COL_NAME_LEN);
289         rc = db_util_create_collation(db, DB_UTIL_COL_LS_AS_CI, DB_UTIL_COL_UTF16, col_name );
290         ASSERT_EQ ( DB_UTIL_OK , rc );
291
292         rc = run_query(db, col_name);
293
294         rc = db_util_close(db);
295         ASSERT_EQ ( DB_UTIL_OK , rc );
296 }
297
298 TEST_F(DbUtil, db_util_create_collation_p7) {
299         int rc;
300
301         rc = system("./test_collation_db.sh");
302
303         rc = db_util_open(pszFilePath, &db, nOption);
304         ASSERT_EQ ( DB_UTIL_OK , rc );
305
306         // set vconf data
307         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
308
309         strncpy(col_name,"COL_LS_AI_CI_UTF16", COL_NAME_LEN);
310         rc = db_util_create_collation(db, DB_UTIL_COL_LS_AI_CI, DB_UTIL_COL_UTF16, col_name );
311         ASSERT_EQ ( DB_UTIL_OK , rc );
312
313         rc = run_query(db, col_name);
314
315         rc = db_util_close(db);
316         ASSERT_EQ ( DB_UTIL_OK , rc );
317 }
318
319 TEST_F(DbUtil, db_util_create_collation_p8) {
320         int rc;
321
322         rc = system("./test_collation_db.sh");
323
324         rc = db_util_open(pszFilePath, &db, nOption);
325         ASSERT_EQ ( DB_UTIL_OK , rc );
326
327         // set vconf data
328         vconf_set_str("db/menu_widget/language", "en_US.UTF-8" );
329
330         strncpy(col_name,"COL_LS_AI_CI_LC_UTF16", COL_NAME_LEN);
331         rc = db_util_create_collation(db, DB_UTIL_COL_LS_AI_CI_LC, DB_UTIL_COL_UTF16, col_name );
332         ASSERT_EQ ( DB_UTIL_OK , rc );
333
334         rc = run_query(db, col_name);
335
336         rc = db_util_close(db);
337         ASSERT_EQ ( DB_UTIL_OK , rc );
338 }
339
340 TEST_F(DbUtil, db_util_create_collation_n1) {
341         int rc;
342
343         rc = db_util_open(pszFilePath, &db, nOption);
344         ASSERT_EQ ( DB_UTIL_OK , rc );
345
346         // vconf error
347         vconf_set_str("db/menu_widget/language", "" );
348
349         strncpy(col_name,"COL_UCA_UTF8", COL_NAME_LEN);
350         rc = db_util_create_collation(db, DB_UTIL_COL_UCA, DB_UTIL_COL_UTF8, col_name );
351         ASSERT_EQ ( DB_UTIL_OK , rc );
352
353         rc = db_util_close(db);
354         ASSERT_EQ ( DB_UTIL_OK , rc );
355 }
356
357 TEST_F(DbUtil, db_util_create_collation_n2) {
358         int rc;
359
360         rc = db_util_open(pszFilePath, &db, nOption);
361         ASSERT_EQ ( DB_UTIL_OK , rc );
362
363         // collate_type error
364         strncpy(col_name,"COL_KO_IC_UTF8", COL_NAME_LEN);
365         rc = db_util_create_collation(db, DB_UTIL_COL_KO_IC, DB_UTIL_COL_UTF8, col_name );
366         ASSERT_EQ ( DB_UTIL_ERROR , rc );
367
368         rc = db_util_close(db);
369         ASSERT_EQ ( DB_UTIL_OK , rc );
370 }
371
372 TEST_F(DbUtil, db_util_create_collation_n3) {
373         int rc;
374
375         rc = db_util_open(pszFilePath, &db, nOption);
376         ASSERT_EQ ( DB_UTIL_OK , rc );
377
378         // collate_type error
379         strncpy(col_name,"COL_KO_IC_LC_UTF8", COL_NAME_LEN);
380         rc = db_util_create_collation(db, DB_UTIL_COL_KO_IC_LC, DB_UTIL_COL_UTF8, col_name );
381         ASSERT_EQ ( DB_UTIL_ERROR , rc );
382
383         rc = db_util_close(db);
384         ASSERT_EQ ( DB_UTIL_OK , rc );
385 }
386
387 TEST_F(DbUtil, db_util_create_collation_n4) {
388         int rc;
389
390         rc = db_util_open(pszFilePath, &db, nOption);
391         ASSERT_EQ ( DB_UTIL_OK , rc );
392
393         // collate_textrep error
394         strncpy(col_name, "COL_UCA_UTF8", COL_NAME_LEN);
395         rc = db_util_create_collation(db, DB_UTIL_COL_UCA, (db_util_collate_textrep)3, col_name );
396         ASSERT_EQ ( DB_UTIL_ERROR , rc );
397
398         rc = db_util_close(db);
399         ASSERT_EQ ( DB_UTIL_OK , rc );
400 }
401
402 //=======================================================================================
403 int main(int argc, char** argv) {
404         ::testing::InitGoogleTest(&argc, argv);
405         return RUN_ALL_TESTS();
406 }