sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // DBMS security policy - testing new APIs sl@0: // All tests assume that drive C is presented in the system and is not a ROM drive. sl@0: // Please, ensure that t_dbenvcreate test is executed before t_dbplatsec/t_dbplatsecperf tests! sl@0: // Please, ensure that t_dbenvdestroy test is executed after t_dbplatsec/t_dbplatsecperf tests! sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include "t_dbplatsecdef.h" sl@0: #include "t_dbplatsecutl.h" sl@0: #include "t_dbplatsecdb.h" sl@0: #include "t_dbplatsectbl.h" sl@0: sl@0: //Global definitions sl@0: RTest TheTest(_L("t_dbplatsec : DBMS platform security testing")); sl@0: RDbs TheDbs; sl@0: RDbNamedDatabase TheDb1; sl@0: RDbNamedDatabase TheDb2; sl@0: RDbTable TheTbl1; sl@0: RDbTable TheTbl2; sl@0: sl@0: void DeleteDatabases(); sl@0: TDBSCUtils TheDbscUtils(TheTest, &DeleteDatabases); sl@0: sl@0: void DeleteDatabases() sl@0: { sl@0: TheTbl1.Close(); sl@0: TheTbl2.Close(); sl@0: TheDb2.Close(); sl@0: TheDb1.Close(); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb2Name); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb3Name); sl@0: } sl@0: sl@0: static void GetDatabaseRPolicyTest() sl@0: { sl@0: TSecurityPolicy policy; sl@0: TInt err = TheDbs.GetDatabasePolicy(KSecureDbUid, RDbs::EReadPolicy, policy); sl@0: TEST2(err, KErrNone); sl@0: TCompiledSecurityPolicy testSecurityPolicy(policy); sl@0: TSecurityPolicy::TType type = testSecurityPolicy.Type(); sl@0: TEST(type == TSecurityPolicy::ETypeC3); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityCommDD)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityPowerMgmt)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityTrustedUI)); sl@0: } sl@0: sl@0: static void GetDatabaseWPolicyTest() sl@0: { sl@0: TSecurityPolicy policy; sl@0: TInt err = TheDbs.GetDatabasePolicy(KSecureDbUid, RDbs::EWritePolicy, policy); sl@0: TEST2(err, KErrNone); sl@0: TCompiledSecurityPolicy testSecurityPolicy(policy); sl@0: TSecurityPolicy::TType type = testSecurityPolicy.Type(); sl@0: TEST(type == TSecurityPolicy::ETypeC3); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityMultimediaDD)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityReadDeviceData)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, static_cast (TUint8(ECapability_None)))); sl@0: } sl@0: sl@0: static void GetDatabaseSPolicyTest() sl@0: { sl@0: TSecurityPolicy policy; sl@0: TInt err = TheDbs.GetDatabasePolicy(KSecureDbUid, RDbs::ESchemaPolicy, policy); sl@0: TEST2(err, KErrNone); sl@0: TCompiledSecurityPolicy testSecurityPolicy(policy); sl@0: TSecurityPolicy::TType type = testSecurityPolicy.Type(); sl@0: TEST(type == TSecurityPolicy::ETypeC7); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityWriteDeviceData)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityDRM)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityProtServ)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityDiskAdmin)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityNetworkControl)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilityWriteUserData)); sl@0: TEST(TDBSCUtils::HasCapability(testSecurityPolicy, ECapabilitySwEvent)); sl@0: } sl@0: sl@0: static void GetTablePolicyTest(const TDesC& aTableName, sl@0: RDbs::TPolicyType aPolicyType, sl@0: TSecurityPolicy::TType aType, sl@0: TSecureId aSecureId, sl@0: TVendorId aVendorId, sl@0: const TCapability* aCapabilities, TInt aCapCount) sl@0: { sl@0: TSecurityPolicy policy; sl@0: TInt err = TheDbs.GetTablePolicy(KSecureDbUid, aTableName, aPolicyType, policy); sl@0: TEST2(err, KErrNone); sl@0: TCompiledSecurityPolicy testSecurityPolicy(policy); sl@0: TEST(testSecurityPolicy.Type() == aType); sl@0: for(TInt i=0;i (100), policy); sl@0: TEST2(err, KErrArgument); sl@0: err = TheDbs.GetTablePolicy(KSecureDbUid, KTableName2, static_cast (101), policy); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Table name, which is not in the policy file\n")); sl@0: _LIT(KMissingTableName, "AAAAAA"); sl@0: err = TheDbs.GetTablePolicy(KSecureDbUid, KMissingTableName, RDbs::EWritePolicy, policy); sl@0: TEST2(err, KErrNone);//This must be the related database policy sl@0: TSecurityPolicy dbPolicy; sl@0: err = TheDbs.GetDatabasePolicy(KSecureDbUid, RDbs::EWritePolicy, dbPolicy); sl@0: TEST2(err, KErrNone); sl@0: TCompiledSecurityPolicy sp1(policy); sl@0: TCompiledSecurityPolicy sp2(dbPolicy); sl@0: TEST(sp1 == sp2); sl@0: sl@0: TheTest.Printf(_L("--Table name - zero length\n")); sl@0: _LIT(KInvTableName, ""); sl@0: err = TheDbs.GetTablePolicy(KSecureDbUid, KInvTableName, RDbs::EWritePolicy, policy); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Table name - Schema policy request\n")); sl@0: err = TheDbs.GetTablePolicy(KSecureDbUid, KTableName3, RDbs::ESchemaPolicy, policy); sl@0: TEST2(err, KErrNotSupported); sl@0: } sl@0: sl@0: //Returns a valid drive number, but not presented in the system sl@0: static TDriveNumber FirstNotPresentedDriveNumber() sl@0: { sl@0: RFs fs; sl@0: TEST2(fs.Connect(), KErrNone); sl@0: TDriveNumber drvNumber = static_cast (1000); sl@0: for(TInt i=EDriveA;i<=EDriveZ;++i) sl@0: { sl@0: TDriveInfo driveInfo; sl@0: if(fs.Drive(driveInfo, static_cast (i)) == KErrNone) sl@0: { sl@0: if(driveInfo.iType == EMediaNotPresent) sl@0: { sl@0: drvNumber = static_cast (i); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: fs.Close(); sl@0: TEST(drvNumber <= EDriveZ); sl@0: return drvNumber; sl@0: } sl@0: sl@0: //Returns the first valid ROM drive number. sl@0: static TDriveNumber FirstROMDriveNumber() sl@0: { sl@0: RFs fs; sl@0: TEST2(fs.Connect(), KErrNone); sl@0: TDriveNumber drvNumber = static_cast (1000); sl@0: for(TInt i=EDriveA;i<=EDriveZ;++i) sl@0: { sl@0: TDriveInfo driveInfo; sl@0: if(fs.Drive(driveInfo, static_cast (i)) == KErrNone) sl@0: { sl@0: if(driveInfo.iDriveAtt & KDriveAttRom) sl@0: { sl@0: drvNumber = static_cast (i); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: fs.Close(); sl@0: TEST(drvNumber <= EDriveZ); sl@0: return drvNumber; sl@0: } sl@0: sl@0: //Tests RDbs::DatabaseNamesL() with invalid arguments sl@0: static void InvalidPolicyArgTests2L() sl@0: { sl@0: CDbDatabaseNames* dbNames = NULL; sl@0: sl@0: TheTest.Printf(_L("--Invalid UID\n")); sl@0: const TUid KInvalidUid = {0x490122}; sl@0: TRAPD(err, dbNames = TheDbs.DatabaseNamesL(EDriveC, KInvalidUid)); sl@0: TEST2(err, KErrArgument); sl@0: TEST(dbNames == NULL); sl@0: sl@0: TheTest.Printf(_L("--Null UID\n")); sl@0: TRAP(err, dbNames = TheDbs.DatabaseNamesL(EDriveC, KNullUid)); sl@0: TEST2(err, KErrArgument); sl@0: TEST(dbNames == NULL); sl@0: sl@0: TheTest.Printf(_L("--Invalid drive\n")); sl@0: TRAP(err, dbNames = TheDbs.DatabaseNamesL(static_cast (-1), KSecureDbUid)); sl@0: TEST2(err, KErrBadName); sl@0: TEST(dbNames == NULL); sl@0: TRAP(err, TheDbs.DatabaseNamesL(static_cast (1765), KSecureDbUid)); sl@0: TEST2(err, KErrBadName); sl@0: TEST(dbNames == NULL); sl@0: sl@0: TheTest.Printf(_L("--Valid drive number, but not presented in the system\n")); sl@0: TDriveNumber driveNumber = ::FirstNotPresentedDriveNumber(); sl@0: TRAP(err, dbNames = TheDbs.DatabaseNamesL(driveNumber, KSecureDbUid)); sl@0: TEST2(err, KErrNotReady); sl@0: TEST(dbNames == NULL); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-DBMS-CT-0003 sl@0: @SYMTestCaseDesc Test RDbs::GetDatabasePolicy(), RDbs::GetTablePolicy() sl@0: getting database or table security policies. sl@0: @SYMTestPriority High sl@0: @SYMTestActions A call with valid arguments and result check. sl@0: A call with an invalid UID. sl@0: A call with an invalid security policy type. sl@0: A call with a table name, not presented in the policy file. sl@0: A call requesting schema security policy of a table. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ REQ2429 sl@0: DBMS shall provide an API to apply security policies to database tables. sl@0: */ sl@0: static void GetPolicyTestL() sl@0: { sl@0: TheTest.Printf(_L("--Simple GetDatabasePolicy() tests\n")); sl@0: ::GetDatabaseRPolicyTest(); sl@0: ::GetDatabaseWPolicyTest(); sl@0: ::GetDatabaseSPolicyTest(); sl@0: sl@0: ::InvalidPolicyArgTestsL(); sl@0: sl@0: TheTest.Printf(_L("--Simple GetTablePolicy() tests\n")); sl@0: TCapability caps1[] = {ECapabilityCommDD, ECapabilityPowerMgmt, ECapabilityTrustedUI}; sl@0: TCapability caps2[] = {ECapabilityMultimediaDD, ECapabilityReadDeviceData}; sl@0: ::GetTablePolicyTest(KTableName1, RDbs::EReadPolicy, TSecurityPolicy::ETypeC3, 0, 0, caps1, 3); sl@0: ::GetTablePolicyTest(KTableName1, RDbs::EWritePolicy, TSecurityPolicy::ETypeC3, 0, 0, caps2, 2); sl@0: sl@0: TCapability caps3[] = {static_cast (TUint8(ECapability_None))}; sl@0: ::GetTablePolicyTest(KTableName2, RDbs::EReadPolicy, TSecurityPolicy::ETypeC3, 0, 0, caps3, 1); sl@0: ::GetTablePolicyTest(KTableName2, RDbs::EWritePolicy, TSecurityPolicy::ETypeC3, 0, 0, caps2, 2); sl@0: sl@0: TCapability caps4[] = {ECapabilityReadUserData}; sl@0: ::GetTablePolicyTest(KTableName3, RDbs::EReadPolicy, TSecurityPolicy::ETypeC3, 0, 0, caps1, 3); sl@0: ::GetTablePolicyTest(KTableName3, RDbs::EWritePolicy, TSecurityPolicy::ETypeC3, 0, 0, caps4, 1); sl@0: sl@0: TCapability caps5[] = {ECapabilityWriteUserData}; sl@0: ::GetTablePolicyTest(KTableName4, RDbs::EReadPolicy, TSecurityPolicy::ETypeC3, 0, 0, caps5, 1); sl@0: ::GetTablePolicyTest(KTableName4, RDbs::EWritePolicy, TSecurityPolicy::ETypeC3, 0, 0, caps2, 2); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-DBMS-CT-0004 sl@0: @SYMTestCaseDesc Test RDbs::DatabaseNamesL(TDriveNumber, const TDesC&, TUid) - sl@0: getting a list of secure shared databases. sl@0: @SYMTestPriority High sl@0: @SYMTestActions A call with valid arguments and result check sl@0: A call with an invalid drive number. sl@0: A call with a valid, but not presented in the system, drive number. sl@0: A call with an invalid UID. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ REQ2429 sl@0: DBMS shall provide an API to apply security policies to database tables. sl@0: */ sl@0: static void GetDatabaseListTestL() sl@0: { sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb2Name); sl@0: sl@0: TheDb1 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb1.Close(); sl@0: sl@0: TheDb2 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb2Name); sl@0: TheDb2.Close(); sl@0: sl@0: TBuf<32> dbName; sl@0: dbName.Copy(KDb1Name().Mid(KDatabaseNamePos)); sl@0: TEST(TDBSCUtils::IsDatabaseThereL(TheDbs, KSecureDbUid, EDriveC, dbName)); sl@0: dbName.Copy(KDb2Name().Mid(KDatabaseNamePos)); sl@0: TEST(TDBSCUtils::IsDatabaseThereL(TheDbs, KSecureDbUid, EDriveC, dbName)); sl@0: sl@0: TheTest.Printf(_L("--An attempt to retrieve the list of database names for an UID, which security policy cannot be satisfied by the current test application\n")); sl@0: CDbDatabaseNames* dbNames = NULL; sl@0: TRAPD(err, dbNames = TheDbs.DatabaseNamesL(EDriveZ, KSecureDbUid2)); sl@0: delete dbNames; sl@0: TEST2(err, KErrNone); sl@0: sl@0: ::InvalidPolicyArgTests2L(); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-DBMS-CT-0005 sl@0: @SYMTestCaseDesc Test RDbs::CopyDatabase(const TDesC&, const TDesC&, TUid) - sl@0: copying secure shared database . sl@0: @SYMTestPriority High sl@0: @SYMTestActions A call with valid arguments and result check sl@0: A call with an invalid source database name. sl@0: A call with an invalid target database name. sl@0: A call with an invalid UID. sl@0: An attempt to copy an opened database. sl@0: An attempt to copy a database, which security policy cannot be satisfied. sl@0: An attempt to copy a database with path specified in the database name. sl@0: An attempt to copy non-existing database. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ REQ2429 sl@0: DBMS shall provide an API to apply security policies to database tables. sl@0: */ sl@0: static void CopyDatabaseTestL() sl@0: { sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb1 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb1.Close(); sl@0: sl@0: TheTest.Printf(_L("--Simple copy test\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb3Name); sl@0: TInt err = TheDbs.CopyDatabase(KDb1Name, KDb3Name, KSecureDbUid); sl@0: TEST2(err, KErrNone); sl@0: TBuf<32> dbName; sl@0: dbName.Copy(KDb3Name().Mid(KDatabaseNamePos)); sl@0: TEST(TDBSCUtils::IsDatabaseThereL(TheDbs, KSecureDbUid, EDriveC, dbName)); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb3Name); sl@0: sl@0: TheTest.Printf(_L("--An attempt to copy a source database, which security policy cannot be satisfied by the current test application\n")); sl@0: err = TheDbs.CopyDatabase(KProtDb1ZName, KDb3Name, KSecureDbUid2); sl@0: TEST2(err, KErrPermissionDenied); sl@0: sl@0: TheTest.Printf(_L("--Null source database name\n")); sl@0: err = TheDbs.CopyDatabase(KNullDesC, KDb3Name, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb3Name); sl@0: sl@0: TheTest.Printf(_L("--Source database name with not presented drive number\n")); sl@0: TDriveNumber driveNumber = ::FirstNotPresentedDriveNumber(); sl@0: TChar driveChar; sl@0: TEST2(RFs::DriveToChar(driveNumber, driveChar), KErrNone); sl@0: TBuf drvBuf; sl@0: drvBuf.Append(driveChar); sl@0: drvBuf.Append(':'); sl@0: dbName.Copy(drvBuf); sl@0: dbName.Append(KDb1Name().Mid(KDatabaseNamePos)); sl@0: err = TheDbs.CopyDatabase(dbName, KDb3Name, KSecureDbUid); sl@0: TEST2(err, KErrNotReady); sl@0: sl@0: TheTest.Printf(_L("--Source database name - only with a drive letter and \":\"\n")); sl@0: err = TheDbs.CopyDatabase(drvBuf, KDb3Name, KSecureDbUid); sl@0: TEST2(err, KErrNotReady); sl@0: sl@0: TheTest.Printf(_L("--Source database name - only with a drive letter\n")); sl@0: drvBuf.SetLength(1); sl@0: err = TheDbs.CopyDatabase(drvBuf, KDb3Name, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Null destination database name\n")); sl@0: err = TheDbs.CopyDatabase(KDb1Name, KNullDesC, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Destination database name with not presented drive number\n")); sl@0: drvBuf.Append(':'); sl@0: dbName.Copy(drvBuf); sl@0: dbName.Append(KDb3Name().Mid(KDatabaseNamePos)); sl@0: err = TheDbs.CopyDatabase(KDb1Name, dbName, KSecureDbUid); sl@0: TEST2(err, KErrNotReady); sl@0: sl@0: TheTest.Printf(_L("--Destination database - ROM drive\n")); sl@0: TDriveNumber romDriveNumber = ::FirstROMDriveNumber(); sl@0: TEST2(RFs::DriveToChar(romDriveNumber, driveChar), KErrNone); sl@0: drvBuf[0] = static_cast (driveChar); sl@0: dbName.Copy(drvBuf); sl@0: dbName.Append(KDb3Name().Mid(KDatabaseNamePos)); sl@0: err = TheDbs.CopyDatabase(KDb1Name, dbName, KSecureDbUid); sl@0: TEST2(err, KErrAccessDenied); sl@0: sl@0: TheTest.Printf(_L("--A source database with a valid name, but not presented in the system\n")); sl@0: _LIT(KMissingDb, "C:asdhasfsudfygusdfuierfb.db"); sl@0: err = TheDbs.CopyDatabase(KMissingDb, KDb3Name, KSecureDbUid); sl@0: TEST2(err, KErrNotFound); sl@0: sl@0: TheTest.Printf(_L("--A test with an open source database\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb2 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: err = TheDbs.CopyDatabase(KDb1Name, KDb3Name, KSecureDbUid); sl@0: TheDb2.Close(); sl@0: TEST2(err, KErrInUse); sl@0: sl@0: TheTest.Printf(_L("--An atempt to copy over an existing database\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb2Name); sl@0: TheDb1 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb2Name); sl@0: TheDb1.Close(); sl@0: err = TheDbs.CopyDatabase(KDb1Name, KDb2Name, KSecureDbUid); sl@0: TEST2(err, KErrAlreadyExists); sl@0: sl@0: TheTest.Printf(_L("--Too long destination database name > KDbMaxName symbols\n")); sl@0: _LIT(KTooLongDbName, "A_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789.db"); sl@0: err = TheDbs.CopyDatabase(KDb1Name, KTooLongDbName, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Null UID\n")); sl@0: err = TheDbs.CopyDatabase(KDb1Name, KDb3Name, KNullUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Invalid UID\n")); sl@0: const TUid KInvalidUid = {0x490122}; sl@0: err = TheDbs.CopyDatabase(KDb1Name, KDb3Name, KInvalidUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--An attempt to copy a database with the path specified in the name\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb2Name); sl@0: _LIT(KSrcDbName2, "C:\\a.Db"); sl@0: _LIT(KDestDbName2, "C:\\b.dB"); sl@0: err = TheDbs.CopyDatabase(KSrcDbName2, KDestDbName2, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-DBMS-CT-0006 sl@0: @SYMTestCaseDesc Test RDbs::Delete(const TDesC&, TUid) - deleting secure shared database . sl@0: @SYMTestPriority High sl@0: @SYMTestActions A call with valid arguments and result check sl@0: A call with an invalid UID. sl@0: A call with an invalid database name. sl@0: An attempt to delete an opened database. sl@0: An attempt to delete a database, which security policy cannot be satisfied. sl@0: An attempt to delete a database with path specified in the database name. sl@0: An attempt to delete non-existing database. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ REQ2429 sl@0: DBMS shall provide an API to apply security policies to database tables. sl@0: */ sl@0: static void DeleteDatabaseTestL() sl@0: { sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb1 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb1.Close(); sl@0: sl@0: TheTest.Printf(_L("--Simple delete database test\n")); sl@0: TInt err = TheDbs.DeleteDatabase(KDb1Name, KSecureDbUid); sl@0: TEST2(err, KErrNone); sl@0: sl@0: TheTest.Printf(_L("--Null UID\n")); sl@0: err = TheDbs.DeleteDatabase(KDb1Name, KNullUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Invalid UID\n")); sl@0: const TUid KInvalidUid = {0x490122}; sl@0: err = TheDbs.DeleteDatabase(KDb1Name, KInvalidUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Null database name\n")); sl@0: err = TheDbs.DeleteDatabase(KNullDesC, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Non-existing database - no drive letter (the name is invalid)\n")); sl@0: _LIT(KTooLongDbName, "A_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789.db"); sl@0: err = TheDbs.DeleteDatabase(KTooLongDbName, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: _LIT(KInvDbName1, "UI789.db"); sl@0: err = TheDbs.DeleteDatabase(KInvDbName1, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Non-existing database - valid db name\n")); sl@0: _LIT(KMissingDbName1, "C:A0192345.db"); sl@0: err = TheDbs.DeleteDatabase(KMissingDbName1, KSecureDbUid); sl@0: TEST2(err, KErrNotFound); sl@0: sl@0: TheTest.Printf(_L("--An attempt to delete a database with the path specified in the name\n")); sl@0: _LIT(KMissingDbName2, "C:\\TEMP\\A0192345.db"); sl@0: err = TheDbs.DeleteDatabase(KMissingDbName2, KSecureDbUid); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--An attempt to delete a database, which security policy cannot be satisfied by the current test application\n")); sl@0: err = TheDbs.DeleteDatabase(KProtDb1CName, KSecureDbUid2); sl@0: TEST2(err, KErrPermissionDenied); sl@0: sl@0: TheTest.Printf(_L("--An attempt to delete an open database\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TheDb1 = TDBSCUtils::CreateDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: err = TheDbs.DeleteDatabase(KDb1Name, KSecureDbUid); sl@0: TEST2(err, KErrInUse); sl@0: TheDb1.Close(); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-DBMS-CT-0007 sl@0: @SYMTestCaseDesc Test RDbNamedDatabase::Create(RDbs&, const TDesC&, const TDesC&) - sl@0: secure shared database creation. sl@0: @SYMTestPriority High sl@0: @SYMTestActions A call with valid arguments and result check sl@0: An attempt to create already existing database. sl@0: An attempt to create already existing and opened database. sl@0: RDbNamedDatabase::Create() called with an invalid format string. sl@0: RDbNamedDatabase::Create() called with a database name containing '\' symbols. sl@0: An attempt to create a database, which security policy cannot be satisfied. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ REQ2429 sl@0: DBMS shall provide an API to apply security policies to database tables. sl@0: */ sl@0: static void CreateDatabaseL() sl@0: { sl@0: TheTest.Printf(_L("--Simple create database test\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: TBuf<32> format; sl@0: format.Copy(KSecure); sl@0: format.Append(KSecureDbUid.Name()); sl@0: TInt err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TEST2(err, KErrNone); sl@0: sl@0: TheTest.Printf(_L("--An atempt to recreate an open database\n")); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TEST2(err, KErrAlreadyExists); sl@0: TheDb1.Close(); sl@0: sl@0: TheTest.Printf(_L("--An atempt to recreate an existing database\n")); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TEST2(err, KErrAlreadyExists); sl@0: sl@0: TheTest.Printf(_L("--Format string with \"SECURE\" keyword and some other words too\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(_L("A ")); sl@0: format.Append(KSecure); sl@0: format.Append(_L(" B")); sl@0: format.Append(KSecureDbUid.Name()); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrNotSupported); sl@0: sl@0: TheTest.Printf(_L("--Format string with \"SeCuRe\" keyword\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(_L("SeCuRe")); sl@0: format.Append(KSecureDbUid.Name()); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrNone); sl@0: sl@0: TheTest.Printf(_L("--Format string with \"SECURED\" keyword\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(_L("SECURED")); sl@0: format.Append(KSecureDbUid.Name()); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrNotSupported); sl@0: sl@0: TheTest.Printf(_L("--Format string with a null uid\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(_L("SECURE")); sl@0: format.Append(KNullUid.Name()); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Format string with an invalid uid\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(_L("SECURE")); sl@0: const TUid KInvalidUid = {0x490122}; sl@0: format.Append(KInvalidUid.Name()); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--Format string with a uid only\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(KSecureDbUid.Name()); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrNotSupported); sl@0: sl@0: TheTest.Printf(_L("--Blank format string\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Zero(); sl@0: err = TheDb1.Create(TheDbs, KDb1Name, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrNotSupported); sl@0: sl@0: TheTest.Printf(_L("--Valid format string + database name with a path\n")); sl@0: TDBSCUtils::DeleteDatabase(TheDbs, KSecureDbUid, KDb1Name); sl@0: format.Copy(KSecure); sl@0: format.Append(KSecureDbUid.Name()); sl@0: _LIT(KSrcDbName2, "C:\\a.Db"); sl@0: err = TheDb1.Create(TheDbs, KSrcDbName2, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: TheTest.Printf(_L("--An attempt to create a database, which security policy cannot be satisfied by the current test application\n")); sl@0: format.Copy(KSecure); sl@0: format.Append(KSecureDbUid2.Name()); sl@0: err = TheDb1.Create(TheDbs, KProtDb2CName, format); sl@0: TheDb1.Close(); sl@0: TEST2(err, KErrPermissionDenied); sl@0: } sl@0: sl@0: static void INC057327L() sl@0: { sl@0: TRAPD(err,delete TheDbs.DatabaseNamesL(EDriveZ, TUid::Uid(0x12344321))); sl@0: TheTest(err == KErrNone); sl@0: } sl@0: sl@0: static void DoRunL() sl@0: { sl@0: TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0003 Get database/table policies ")); sl@0: ::GetPolicyTestL(); sl@0: sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0004 Get databases list ")); sl@0: ::GetDatabaseListTestL(); sl@0: sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0005 Copy database ")); sl@0: ::CopyDatabaseTestL(); sl@0: sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0006 Delete database ")); sl@0: ::DeleteDatabaseTestL(); sl@0: sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0007 Create database ")); sl@0: ::CreateDatabaseL(); sl@0: sl@0: TheTest.Next(_L("Database security")); sl@0: ::DoDbTestL(); sl@0: sl@0: TheTest.Next(_L("Table security")); sl@0: ::DoTblTestL(); sl@0: sl@0: TheTest.Next(_L("Test for INC057327")); sl@0: ::INC057327L(); sl@0: } sl@0: sl@0: TInt E32Main() sl@0: { sl@0: __UHEAP_MARK; sl@0: CTrapCleanup* tc = CTrapCleanup::New(); sl@0: TEST(tc != NULL); sl@0: sl@0: TInt err = TheDbs.Connect(); sl@0: TEST2(err, KErrNone); sl@0: sl@0: TRAP(err, ::DoRunL()); sl@0: TEST2(err, KErrNone); sl@0: sl@0: ::DeleteDatabases(); sl@0: TheDbs.Close(); sl@0: sl@0: TheTest.End(); sl@0: TheTest.Close(); sl@0: sl@0: delete tc; sl@0: sl@0: __UHEAP_MARKEND; sl@0: User::Heap().Check(); sl@0: return KErrNone; sl@0: }