1 /*
2  * Copyright (c) 2023 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 <gtest/gtest.h>
17 
18 #include <climits>
19 #include <string>
20 
21 #include "sqlite_utils.h"
22 #include "string_utils.h"
23 
24 using namespace testing::ext;
25 using namespace OHOS::NativeRdb;
26 
27 class RdbUtilsTest : public testing::Test {
28 public:
29     static void SetUpTestCase(void);
30     static void TearDownTestCase(void);
SetUp(void)31     void SetUp(void){};
TearDown(void)32     void TearDown(void){};
33 };
34 
SetUpTestCase(void)35 void RdbUtilsTest::SetUpTestCase(void)
36 {
37 }
38 
TearDownTestCase(void)39 void RdbUtilsTest::TearDownTestCase(void)
40 {
41 }
42 
43 /**
44  * @tc.name: RdbStore_SqliteUtils_001
45  * @tc.desc: Normal testCase of sqlite_utils for IsSpecial, if sqlType is special
46  * @tc.type: FUNC
47  */
48 HWTEST_F(RdbUtilsTest, RdbStore_SqliteUtils_001, TestSize.Level1)
49 {
50     EXPECT_EQ(true, SqliteUtils::IsSpecial(5));
51     EXPECT_EQ(true, SqliteUtils::IsSpecial(6));
52     EXPECT_EQ(true, SqliteUtils::IsSpecial(7));
53 }
54 
55 /**
56  * @tc.name: RdbStore_SqliteUtils_004
57  * @tc.desc: Abnormal testCase of string_utils for SurroundWithQuote, if value is ""
58  * @tc.type: FUNC
59  */
60 HWTEST_F(RdbUtilsTest, RdbStore_SqliteUtils_004, TestSize.Level2)
61 {
62     EXPECT_EQ("", StringUtils::SurroundWithQuote("", "\""));
63 }
64 
65 /**
66  * @tc.name: RdbStore_SqliteUtils_005
67  * @tc.desc: Normal testCase of string_utils for SurroundWithQuote
68  * @tc.type: FUNC
69  */
70 HWTEST_F(RdbUtilsTest, RdbStore_SqliteUtils_005, TestSize.Level1)
71 {
72     EXPECT_EQ("\"AND\"", StringUtils::SurroundWithQuote("AND", "\""));
73 }
74 
75 /**
76  * @tc.name: RdbStore_SqliteUtils_006
77  * @tc.desc: Normal testCase of string_utils, if fileName is ""
78  * @tc.type: FUNC
79  */
80 HWTEST_F(RdbUtilsTest, RdbStore_SqliteUtils_006, TestSize.Level1)
81 {
82     // fileName size is 0
83     EXPECT_EQ(0, SqliteUtils::GetFileSize(""));
84 }
85 
86 /**
87  * @tc.name: RdbStore_SqliteUtils_007
88  * @tc.desc: AbNormal testCase of string_utils, if fileName is ""
89  * @tc.type: FUNC
90  */
91 HWTEST_F(RdbUtilsTest, RdbStore_SqliteUtils_007, TestSize.Level1)
92 {
93     EXPECT_EQ(0, SqliteUtils::GetFileSize("act.txt"));
94 }
95 
96 /**
97  * @tc.name: GetSqlStatementType_001
98  * @tc.desc: Normal testCase of GetSqlStatementType
99  * @tc.type: FUNC
100  */
101 HWTEST_F(RdbUtilsTest, GetSqlStatementType_001, TestSize.Level1)
102 {
103     EXPECT_EQ(SqliteUtils::STATEMENT_SELECT, SqliteUtils::GetSqlStatementType("select * from text"));
104     EXPECT_EQ(SqliteUtils::STATEMENT_UPDATE, SqliteUtils::GetSqlStatementType("update test set id = ?"));
105     EXPECT_EQ(SqliteUtils::STATEMENT_UPDATE, SqliteUtils::GetSqlStatementType("delete from test where id = ?"));
106     EXPECT_EQ(SqliteUtils::STATEMENT_UPDATE, SqliteUtils::GetSqlStatementType("Replace INTO test"));
107     EXPECT_EQ(SqliteUtils::STATEMENT_ATTACH, SqliteUtils::GetSqlStatementType("attach database ? as ?"));
108     EXPECT_EQ(SqliteUtils::STATEMENT_DETACH, SqliteUtils::GetSqlStatementType("detach database ?"));
109     EXPECT_EQ(SqliteUtils::STATEMENT_BEGIN, SqliteUtils::GetSqlStatementType("BEGIN TRANSACTION"));
110     EXPECT_EQ(SqliteUtils::STATEMENT_BEGIN, SqliteUtils::GetSqlStatementType("SAVEPOINT 1"));
111     EXPECT_EQ(SqliteUtils::STATEMENT_COMMIT, SqliteUtils::GetSqlStatementType("END TRANSACTION"));
112     EXPECT_EQ(SqliteUtils::STATEMENT_COMMIT, SqliteUtils::GetSqlStatementType("COMMIT"));
113     EXPECT_EQ(SqliteUtils::STATEMENT_ROLLBACK, SqliteUtils::GetSqlStatementType("ROLLBACK"));
114     EXPECT_EQ(SqliteUtils::STATEMENT_PRAGMA, SqliteUtils::GetSqlStatementType("PRAGMA user_version"));
115     EXPECT_EQ(SqliteUtils::STATEMENT_DDL, SqliteUtils::GetSqlStatementType("CREATE TABLE"));
116     EXPECT_EQ(SqliteUtils::STATEMENT_DDL, SqliteUtils::GetSqlStatementType("CREATE TRIGGER"));
117     EXPECT_EQ(SqliteUtils::STATEMENT_DDL, SqliteUtils::GetSqlStatementType("DROP TABLE"));
118     EXPECT_EQ(SqliteUtils::STATEMENT_DDL, SqliteUtils::GetSqlStatementType("ALTER TABLE"));
119     EXPECT_EQ(SqliteUtils::STATEMENT_INSERT, SqliteUtils::GetSqlStatementType("INSERT INTO test"));
120     EXPECT_EQ(SqliteUtils::STATEMENT_OTHER, SqliteUtils::GetSqlStatementType("EXPLAIN SELECT * FROM test"));
121     EXPECT_EQ(SqliteUtils::STATEMENT_OTHER, SqliteUtils::GetSqlStatementType("SAZZZZZZZ"));
122     EXPECT_EQ(SqliteUtils::STATEMENT_OTHER, SqliteUtils::GetSqlStatementType("SAAAAAAAA"));
123     EXPECT_EQ(SqliteUtils::STATEMENT_OTHER, SqliteUtils::GetSqlStatementType("PROCESS"));
124 }
125 
126 /**
127  * @tc.name: GetSqlStatementType_002
128  * @tc.desc: Normal testCase of GetSqlStatementType
129  *           1.Spaces before the sql
130  *           2.Enter before the sql
131  *           3.Non-alphanumeric and non-numeric before the sql
132  * @tc.type: FUNC
133  */
134 HWTEST_F(RdbUtilsTest, GetSqlStatementType_002, TestSize.Level1)
135 {
136     EXPECT_EQ(SqliteUtils::STATEMENT_SELECT, SqliteUtils::GetSqlStatementType("   select * from text"));
137     EXPECT_EQ(SqliteUtils::STATEMENT_UPDATE, SqliteUtils::GetSqlStatementType("\r\nupdate test set id = ?"));
138     EXPECT_EQ(SqliteUtils::STATEMENT_OTHER, SqliteUtils::GetSqlStatementType("~!@# attach database ? as ?"));
139 }