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