persistentstorage/sql/TEST/t_sqlsecurity4.cpp
branchRCL_3
changeset 8 fa9941cf3867
parent 0 08ec8eefde2f
equal deleted inserted replaced
6:5ffdb8f2067f 8:fa9941cf3867
    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"));
   154 	err = stmt.ColumnText(0, p);
   234 	err = stmt.ColumnText(0, p);
   155 	TEST2(err, KErrNone);
   235 	TEST2(err, KErrNone);
   156 	RDebug::Print(_L("Value=%S\r\n"), &p);
   236 	RDebug::Print(_L("Value=%S\r\n"), &p);
   157 	stmt.Close();
   237 	stmt.Close();
   158 	
   238 	
       
   239 	NonSecureDbTest();
       
   240 	
   159 	TheDb.Close();
   241 	TheDb.Close();
   160 	}
   242 	}
   161 	
   243 	
   162 /**
   244 /**
   163 @SYMTestCaseID			SYSLIB-SQL-UT-4097
   245 @SYMTestCaseID			SYSLIB-SQL-UT-4097