• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 "sqlite_utils.h"
17 
18 #include <gtest/gtest.h>
19 
20 #include <climits>
21 #include <string>
22 
23 using namespace testing::ext;
24 using namespace OHOS::NativeRdb;
25 
26 class SqliteUtilsTest : public testing::Test {
27 public:
28     static void SetUpTestCase(void);
29     static void TearDownTestCase(void);
SetUp(void)30     void SetUp(void) {};
TearDown(void)31     void TearDown(void) {};
32 };
33 
SetUpTestCase(void)34 void SqliteUtilsTest::SetUpTestCase(void)
35 {
36 }
37 
TearDownTestCase(void)38 void SqliteUtilsTest::TearDownTestCase(void)
39 {
40 }
41 
42 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_001, TestSize.Level1)
43 {
44     EXPECT_EQ(SqliteUtils::Anonymous("30005245854585524412855412_rdb_test.db"), "300***.db");
45 }
46 
47 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_007, TestSize.Level1)
48 {
49     EXPECT_EQ(
50         SqliteUtils::Anonymous("file /data/stage/el2/database/rdb/ddddddd/30005245854585524412855412_rdb_test.db"),
51         "file /***/el2/***/300***.db");
52 }
53 
54 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_009, TestSize.Level1)
55 {
56     EXPECT_EQ(
57         SqliteUtils::Anonymous("file /data/stage/el2/database/rdb/ddddddd/3E00mnj5H54efg5G4K1ABC5412_rdb_test.db"),
58         "file /***/el2/***/3E0***.db");
59 }
60 
61 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0011, TestSize.Level1)
62 {
63     EXPECT_EQ(SqliteUtils::Anonymous("30005245854585524412855412.db"), "300***.db");
64 }
65 
66 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0013, TestSize.Level1)
67 {
68     EXPECT_EQ(SqliteUtils::Anonymous("123edf4.db"), "123***.db");
69 }
70 
71 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0016, TestSize.Level1)
72 {
73     EXPECT_EQ(SqliteUtils::Anonymous("__23edf__.db"), "__2***.db");
74 }
75 
76 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0021, TestSize.Level1)
77 {
78     EXPECT_EQ(SqliteUtils::Anonymous("linker_reborn.db-wal"), "lin***wal");
79 }
80 
81 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0022, TestSize.Level1)
82 {
83     EXPECT_EQ(SqliteUtils::Anonymous("linker_grow.db-wal"), "lin***wal");
84 }
85 
86 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0023, TestSize.Level1)
87 {
88     EXPECT_EQ(SqliteUtils::Anonymous("file /data/stage/el2/database/rdb/ddddddd/linker_reborn.db-wal"),
89         "file /***/el2/***/lin***wal");
90 }
91 
92 HWTEST_F(SqliteUtilsTest, Anonymous_001, TestSize.Level0)
93 {
94     EXPECT_EQ(SqliteUtils::Anonymous(""), "");
95     EXPECT_EQ(SqliteUtils::Anonymous("x"), "x**");
96     EXPECT_EQ(SqliteUtils::Anonymous("xx"), "x**");
97     EXPECT_EQ(SqliteUtils::Anonymous("xxx"), "x**");
98     EXPECT_EQ(SqliteUtils::Anonymous("xxxx"), "xxx***");
99     EXPECT_EQ(SqliteUtils::Anonymous("xxxxx"), "xxx***");
100     EXPECT_EQ(SqliteUtils::Anonymous("xxxxxx"), "xxx***");
101     EXPECT_EQ(SqliteUtils::Anonymous("xxxxxxx"), "xxx***");
102     EXPECT_EQ(SqliteUtils::Anonymous("xxxxxxxx"), "xxx***");
103     EXPECT_EQ(SqliteUtils::Anonymous("xxxxxxxxx"), "xxx***xxx");
104     EXPECT_EQ(SqliteUtils::Anonymous("xxxxxxxxxx"), "xxx***xxx");
105 }
106 
107 HWTEST_F(SqliteUtilsTest, SqlAnonymous_001, TestSize.Level0)
108 {
109     EXPECT_EQ(SqliteUtils::SqlAnonymous("SELECT * FROM users WHERE id = 1"), "SELECT * FROM use*** WHERE i** = 1");
110     EXPECT_EQ(SqliteUtils::SqlAnonymous(
111                   "statement abort at 11: [ SELECT COUNT(1) AS count FROM Photos WHERE type = 'screenshot'"),
112         "statement abort at 11: [ SELECT COUNT(1) AS count FROM Pho*** WHERE type = 'scr***hot'");
113     EXPECT_EQ(SqliteUtils::SqlAnonymous("errno is:25 ambiguous column name:"
114                                         " name in \"SELECT name FROM tableA JOIN tableB ON tableA.id = tableB.a_id;\""),
115         "errno is:25 ambiguous column name:"
116         " name in \"SELECT name FROM tab*** JOIN tab*** ON tab***.i** = tab***.a_i***;\"");
117     EXPECT_EQ(
118         SqliteUtils::SqlAnonymous("errno is:25 ambiguous column name:"
119                                   " story in \"SELECT story FROM tableA JOIN tableB ON tableA.id = tableB.a_id;\""),
120         "errno is:25 ambiguous column name:"
121         " sto*** in \"SELECT sto*** FROM tab*** JOIN tab*** ON tab***.i** = tab***.a_i***;\"");
122     EXPECT_EQ(SqliteUtils::SqlAnonymous(
123                   "errno is:25 2 values for 1 columns in \"INSERT INTO tableA(story) Values(1, '你好中文字符')\"."),
124         "errno is:25 2 values for 1 col*** in \"INSERT INTO tab***(sto***) Values(1, '***')\".");
125     EXPECT_EQ(
126         SqliteUtils::SqlAnonymous("errno is:0 no such table: CommonAddressModel in"
127                                   " \"SELECT * FROM CommonAddressModel WHERE addressType IN (? , ?)AND uid = ? \""),
128         "errno is:0 no such table: Com***del in \"SELECT * FROM Com***del WHERE add***ype IN (? , ?)AND u** = ? \"");
129     EXPECT_EQ(SqliteUtils::SqlAnonymous("abort at 14 in [INSERT INTO SETTINGSDATA(KEYWORD,VALUE) VALUES (?,?)]: "
130                                         "UNIQUE constraint failed: SETTINGSDATA.KEYWORD"),
131         "abort at 14 in [INSERT INTO SET***ATA(KEY***,VAL***) VALUES (?,?)]: "
132         "UNIQUE constraint failed: SET***ATA.KEY***");
133     EXPECT_EQ(SqliteUtils::SqlAnonymous("error is:2 misuse at line 57f4b3 if [6cd587f]"),
134         "error is:2 misuse at line ***4b3 if [***587f]");
135 
136     EXPECT_EQ(SqliteUtils::SqlAnonymous("[SQLite]BusyLine:63706, idx:0, type:4, fileLock:0, len:1, handleLocks:none"),
137         "[SQLite]BusyLine:63706, idx:0, type:4, fileLock:0, len:1, handleLocks:none");
138     EXPECT_EQ(SqliteUtils::SqlAnonymous("[SQLite]acqLock:1, dbRef:2, lockCnt:2, curLock:1, processLock:0"),
139         "[SQLite]acqLock:1, dbRef:2, lockCnt:2, curLock:1, processLock:0");
140     EXPECT_EQ(SqliteUtils::SqlAnonymous("[SQLite]Trx locks: <shared_first, pid:1030, F_RDLCK>"),
141         "[SQLite]Trx locks: <shared_first, pid:1030, F_RDLCK>");
142     EXPECT_EQ(SqliteUtils::SqlAnonymous("hello 简体中文 world"), "hel*** *** wor***");
143     EXPECT_EQ(SqliteUtils::SqlAnonymous("hello简体cplus中文world"), "hel******cpl******wor***");
144 }
145 
146 HWTEST_F(SqliteUtilsTest, SqlAnonymous_002, TestSize.Level0)
147 {
148     EXPECT_EQ(SqliteUtils::SqlAnonymous(
149                   "[SQLite]Wal locks: <write, -1, tid:3325><write, pid:3226, F_WRLCK><read1, 1, tid:3325>"
150                   "<read1, pid:3226, F_RDLCK><wal_dms, pid:1030, F_RDLCK>"),
151         "[SQLite]Wal locks: <write, -1, tid:3325><write, pid:3226, F_WRLCK><rea***, 1, tid:3325>"
152         "<rea***, pid:3226, F_RDLCK><wal_dms, pid:1030, F_RDLCK>");
153     EXPECT_EQ(SqliteUtils::SqlAnonymous(
154                   "statement aborts at 32: [UPDATE SETTINGSDATA SET KEYWORD=?,VALUE=? WHERE KEYWORD = ? ]"
155                   " database schema has changed"),
156         "statement aborts at 32: [UPDATE SET***ATA SET KEY***=?,VAL***=? WHERE KEY*** = ? ]"
157         " database schema has changed");
158     EXPECT_EQ(
159         SqliteUtils::SqlAnonymous("abort at 14 in [INSERT INTO USER_SETTINGSDATA_100(KEYWORD,VALUE) VALUES (?,?)]: "
160                                   "UNIQUE constraint failed: USER_SETTINGSDATA_100.KEYWORD"),
161         "abort at 14 in [INSERT INTO USE***100(KEY***,VAL***) VALUES (?,?)]: "
162         "UNIQUE constraint failed: USE***100.KEY***");
163     EXPECT_EQ(SqliteUtils::SqlAnonymous(
164                   "errno is:2 near \"IF\": syntax error in \"CREATE TRIGGER IF NOT EXISTS [update_contact_data_version]"
165                   " AFTER UPDATE ON [contact_data] BEGIN IF UPDATE [version] RETURN; UPDATE [contact_data] "
166                   "SET [version] = [OLD].[version] + 1 WHERE [id] = [OLD].[id]; END\"."),
167         "errno is:2 near \"IF\": syntax error in \"CREATE TRIGGER IF NOT EXISTS [upd***ion]"
168         " AFTER UPDATE ON [con***ata] BEGIN IF UPDATE [ver***] RET***; UPDATE [con***ata] "
169         "SET [ver***] = [O**].[ver***] + 1 WHERE [i**] = [O**].[i**]; END\".");
170     EXPECT_EQ(SqliteUtils::SqlAnonymous("Fd 7 enable del monitor go wrong, errno = 13"),
171         "Fd 7 enable del monitor go wrong, errno = 13");
172     EXPECT_EQ(SqliteUtils::SqlAnonymous(
173                   "errno is:95 duplicate column name: Timestamp in \"ALTER TABLE BSD ADD COLUMN Timestamp TE."),
174         "errno is:95 duplicate column name: Tim***amp in \"ALTER TABLE B** ADD COLUMN Tim***amp T**.");
175     EXPECT_EQ(
176         SqliteUtils::SqlAnonymous("recovered 9 frames from WAL file /data/storage/el1/database/entry/hello.db-wal"),
177         "recovered 9 frames from WAL file /dat***/sto***/e**/database/ent***/hel***.db-wal");
178 }
179 
180 HWTEST_F(SqliteUtilsTest, SqlAnonymous_003, TestSize.Level1)
181 {
182     EXPECT_EQ(SqliteUtils::SqlAnonymous("30005245854585524412855412 123edf4 30005 300052"),
183         "***5412 ***edf4 30005 ***052");
184 }
185 
186 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0024, TestSize.Level1)
187 {
188     EXPECT_EQ(0, SqliteUtils::DeleteFolder("non_exist_folder/random123"));
189 }
190 
191 HWTEST_F(SqliteUtilsTest, SqliteUtils_Test_0025, TestSize.Level1)
192 {
193     EXPECT_NE(0, SqliteUtils::SetSlaveRestoring("non_exist_folder/non_exist_file"));
194 }
195 
196 HWTEST_F(SqliteUtilsTest, HandleNormalPath, TestSize.Level1)
197 {
198     EXPECT_EQ(SqliteUtils::GetParentModes("/data/service/el1/public/database/distributeddata/meta", 3),
199         "pub***:mode:d711 <- dat***:mode:d711 <- dis***:mode:d770");
200 }
201 
202 HWTEST_F(SqliteUtilsTest, ExceedPathDepth, TestSize.Level1)
203 {
204     EXPECT_EQ(SqliteUtils::GetParentModes("a/backup/c", 5), "a:access_fail <- bac***:access_fail");
205 }
206 
207 HWTEST_F(SqliteUtilsTest, UnixRootPath, TestSize.Level1)
208 {
209     EXPECT_EQ(SqliteUtils::GetParentModes("/", 1), "no_parent");
210 }
211 
212 HWTEST_F(SqliteUtilsTest, AccessFailureCase, TestSize.Level1)
213 {
214     EXPECT_NE(SqliteUtils::GetParentModes("a/non_existing_path", 1).find("access_fail"), std::string::npos);
215 }
216 
217 HWTEST_F(SqliteUtilsTest, LongDirectoryName, TestSize.Level1)
218 {
219     std::string longName(20, 'a');
220     EXPECT_NE(SqliteUtils::GetParentModes(longName + "/b", 1).find("aaa***"), std::string::npos);
221 }
222