39 |
39 |
40 RSqlDatabase TheDb; |
40 RSqlDatabase TheDb; |
41 RTest TheTest(_L("t_sqlsecurity4 test")); |
41 RTest TheTest(_L("t_sqlsecurity4 test")); |
42 |
42 |
43 _LIT(KTestDbName, "c:[21212125]t_ab.db"); |
43 _LIT(KTestDbName, "c:[21212125]t_ab.db"); |
|
44 _LIT(KTestDbName2, "c:\\test\\t_sqlsecurity4_2.db"); |
44 |
45 |
45 /////////////////////////////////////////////////////////////////////////////////////// |
46 /////////////////////////////////////////////////////////////////////////////////////// |
46 //Restore original test database function |
47 //Restore original test database function |
47 void RestoreOriginalDb() |
48 void RestoreOriginalDb() |
48 { |
49 { |
82 } |
83 } |
83 #define TEST(arg) ::Check1((arg), __LINE__) |
84 #define TEST(arg) ::Check1((arg), __LINE__) |
84 #define TEST2(aValue, aExpected) ::Check2(aValue, aExpected, __LINE__) |
85 #define TEST2(aValue, aExpected) ::Check2(aValue, aExpected, __LINE__) |
85 |
86 |
86 /////////////////////////////////////////////////////////////////////////////////////// |
87 /////////////////////////////////////////////////////////////////////////////////////// |
|
88 |
|
89 //This functnion is called while there is an open secure connection. |
|
90 //The function will create a new, non-secure connection and check that the non-secure database schema can be modified, |
|
91 //while there is another alive, secure database connection. |
|
92 void NonSecureDbTest() |
|
93 { |
|
94 (void)RSqlDatabase::Delete(KTestDbName2); |
|
95 RSqlDatabase db; |
|
96 TInt err = db.Create(KTestDbName2); |
|
97 TEST2(err, KErrNone); |
|
98 |
|
99 err = db.Exec(_L("CREATE TABLE A(I1 INTEGER, I2 INTEGER)")); |
|
100 TEST(err >= 0); |
|
101 err = db.Exec(_L("CREATE TEMP TABLE B(I1 INTEGER, I2 INTEGER)")); |
|
102 TEST(err >= 0); |
|
103 |
|
104 //"CREATE VIRTUAL TABLE" statement not supported |
|
105 err = db.Exec(_L("CREATE VIRTUAL TABLE V1 USING FTS3(ColOne TEXT, ColTwo DATETIME)")); |
|
106 TPtrC msg = db.LastErrorMessage(); |
|
107 TheTest.Printf(_L("*** \"CREATE VIRTUAL TABLE\" expected failure, msg=\"%S\", err=%d\r\n"), &msg, err); |
|
108 TEST(err != KErrNone); |
|
109 |
|
110 err = db.Exec(_L("CREATE TRIGGER T1 AFTER INSERT ON A BEGIN INSERT INTO B VALUES(new.I1, new.I2); END;")); |
|
111 TEST(err >= 0); |
|
112 err = db.Exec(_L("DROP TRIGGER T1")); |
|
113 TEST(err >= 0); |
|
114 err = db.Exec(_L("CREATE TEMP TRIGGER T2 AFTER UPDATE OF I1 ON A BEGIN UPDATE B SET I1 = new.I1; END;")); |
|
115 TEST(err >= 0); |
|
116 err = db.Exec(_L("DROP TRIGGER T2")); |
|
117 TEST(err >= 0); |
|
118 |
|
119 err = db.Exec(_L("CREATE VIEW V1 AS SELECT * FROM A")); |
|
120 TEST(err >= 0); |
|
121 err = db.Exec(_L("DROP VIEW V1")); |
|
122 TEST(err >= 0); |
|
123 err = db.Exec(_L("CREATE TEMP VIEW V2 AS SELECT * FROM A")); |
|
124 TEST(err >= 0); |
|
125 err = db.Exec(_L("DROP VIEW V2")); |
|
126 TEST(err >= 0); |
|
127 |
|
128 err = db.Exec(_L("CREATE INDEX Idx1 ON A(I1)")); |
|
129 TEST(err >= 0); |
|
130 err = db.Exec(_L("ANALYZE A")); |
|
131 TEST(err >= 0); |
|
132 err = db.Exec(_L("DROP INDEX Idx1")); |
|
133 TEST(err >= 0); |
|
134 err = db.Exec(_L("CREATE INDEX Idx2 ON B(I1)")); |
|
135 TEST(err >= 0); |
|
136 err = db.Exec(_L("DROP INDEX Idx2")); |
|
137 TEST(err >= 0); |
|
138 |
|
139 err = db.Exec(_L("DROP TABLE B")); |
|
140 TEST(err >= 0); |
|
141 err = db.Exec(_L("DROP TABLE A")); |
|
142 TEST(err >= 0); |
|
143 |
|
144 db.Close(); |
|
145 (void)RSqlDatabase::Delete(KTestDbName2); |
|
146 } |
87 |
147 |
88 /** |
148 /** |
89 @SYMTestCaseID SYSLIB-SQL-CT-1646 |
149 @SYMTestCaseID SYSLIB-SQL-CT-1646 |
90 @SYMTestCaseDesc Testing database operations on a secure database. |
150 @SYMTestCaseDesc Testing database operations on a secure database. |
91 The test application's capabilities allow read/write access to the test secure database. |
151 The test application's capabilities allow read/write access to the test secure database. |
103 TEST2(err, KErrNone); |
163 TEST2(err, KErrNone); |
104 |
164 |
105 //Attempt to modify the database schema |
165 //Attempt to modify the database schema |
106 err = TheDb.Exec(_L("CREATE TABLE C(FFF TEXT)")); |
166 err = TheDb.Exec(_L("CREATE TABLE C(FFF TEXT)")); |
107 TEST2(err, KErrPermissionDenied); |
167 TEST2(err, KErrPermissionDenied); |
|
168 err = TheDb.Exec(_L("CREATE TEMP TABLE TBL1(COL1 INTEGER, COL2 INTEGER)")); |
|
169 TEST(err >= 0); |
|
170 err = TheDb.Exec(_L("CREATE TEMP TRIGGER del1 AFTER DELETE ON TBL1 BEGIN DELETE FROM A; END;")); |
|
171 TEST(err >= 0); |
|
172 err = TheDb.Exec(_L("DROP TRIGGER del1")); |
|
173 TEST(err >= 0); |
|
174 err = TheDb.Exec(_L("CREATE TEMP VIEW V1 AS SELECT * FROM TBL1")); |
|
175 TEST(err >= 0); |
|
176 err = TheDb.Exec(_L("DROP VIEW V1")); |
|
177 TEST(err >= 0); |
|
178 err = TheDb.Exec(_L("CREATE INDEX I1 ON TBL1(COL2)")); |
|
179 TEST(err >= 0); |
|
180 err = TheDb.Exec(_L("DROP INDEX I1")); |
|
181 TEST(err >= 0); |
|
182 err = TheDb.Exec(_L("DROP TABLE TBL1")); |
|
183 TEST(err >= 0); |
|
184 err = TheDb.Exec(_L("ANALYZE A")); |
|
185 TEST2(err, KErrPermissionDenied); |
|
186 err = TheDb.Exec(_L("CREATE VIEW V2 AS SELECT * FROM A")); |
|
187 TEST2(err, KErrPermissionDenied); |
108 //Attempt to update the user data (but it includes a READ operation) |
188 //Attempt to update the user data (but it includes a READ operation) |
109 err = TheDb.Exec(_L("UPDATE A SET F1 = 11 WHERE F1 = 1")); |
189 err = TheDb.Exec(_L("UPDATE A SET F1 = 11 WHERE F1 = 1")); |
110 TEST(err >= 0); |
190 TEST(err >= 0); |
111 //Attempt to update the user data (unconditional UPDATE, no READ operations) |
191 //Attempt to update the user data (unconditional UPDATE, no READ operations) |
112 err = TheDb.Exec(_L("UPDATE A SET F1 = 11")); |
192 err = TheDb.Exec(_L("UPDATE A SET F1 = 11")); |