commsconfig/commsdatabaseshim/ts_commdb/Teststepcommdb.cpp
changeset 72 ae47d0499bee
parent 68 5da8188e392b
child 77 c9776eadbffd
--- a/commsconfig/commsdatabaseshim/ts_commdb/Teststepcommdb.cpp	Tue Aug 24 14:43:02 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,642 +0,0 @@
-// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// This contains CTestCase which is the base class for all the TestCase DLLs
-// 
-//
-
-// EPOC includes
-#include <e32base.h>
-#include <commdb.h>
-#include <f32file.h>
-// Test system includes
-
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-#include <comms-infras/commdb/protection/protectdb.h>
-#include <comms-infras/commdb/protection/protectcpdb.h>
-#else
-//these headers are user includes in the new env.
-#include "protectdb.h"
-#include "protectcpdb.h"
-#endif
-
-#include <cdbpreftable.h>
-#include "CDBSTD.H"
-#include <networking/log.h>
-#include <networking/teststep.h>
-#include "Teststepcommdb.h"
-#include <networking/testsuite.h>
-#include "TestSuiteCommdb.h"
-
-
-// constructor
-CTestStepCommDb::CTestStepCommDb()
-	{
-	iRemoteObjects = EFalse;
-	}
-
-// destructor
-CTestStepCommDb::~CTestStepCommDb()
-	{
-	popAndDestroyDatabaseObjects();
-	}
-
-// file copy
-void CTestStepCommDb::copyFileL(const TDesC& anOld,const TDesC& aNew)
-	{
-	// create a fileserver
-	RFs fileSystem;
-
-	// connect to file server
-	User::LeaveIfError(fileSystem.Connect());
-	CleanupClosePushL(fileSystem);
-
-	// create a file manager
-	CFileMan * fileMan = CFileMan::NewL(fileSystem);
-	CleanupStack::PushL(fileMan);
-
-	// parse the filenames
-	TParse source;
-	User::LeaveIfError(source.Set(anOld, NULL, NULL));
-
-	// parse the filenames
-	TParse target;
-	User::LeaveIfError(target.Set(aNew, NULL, NULL));
-
-	// do the copy
-	User::LeaveIfError(fileMan->Copy(source.FullName(), target.FullName(), CFileMan::EOverWrite));
-
-	// make read/write
-	User::LeaveIfError(fileSystem.SetAtt(source.FullName(),NULL, KEntryAttReadOnly));
-
-	// clean up
-	CleanupStack::PopAndDestroy(fileMan);
-	CleanupStack::PopAndDestroy(&fileSystem);
-	}
-
-void CTestStepCommDb::deleteFileL(const TDesC& aFileName)
-	{
-	// create a fileserver
-	RFs  fileSystem;
-
-	User::LeaveIfError(fileSystem.Connect());
-	CleanupClosePushL(fileSystem);
-
-	Log(_L("Set file to read-write in order to delete"));
-
-	// Remove read only flag
-	TInt ret = fileSystem.SetAtt(aFileName, 0, KEntryAttReadOnly);
-	if (ret == KErrNotFound)
-		{
-		// If file already removed then no need to delete it
-		Log(_L("File not found"));
-		CleanupStack::PopAndDestroy(&fileSystem);
-		return;
-		}
-	User::LeaveIfError(ret);
-
-	// Delete file
-	User::LeaveIfError(fileSystem.Delete(aFileName));
-	Log(_L("deleted file"));
-
-	// clean up
-	CleanupStack::PopAndDestroy(&fileSystem);
-	}
-
-void CTestStepCommDb::DeleteCurrentDatabaseL()
-	{
-	RDbs rDbs;
-
-//	User::LeaveIfError(rDbs.Connect());
-	TInt ret(KErrNone);
-	ret = rDbs.Connect();
-	if(ret!=KErrNone)
-		{
-		Log(_L("CTestStepCommDb::DeleteCurrentDatabaseL : rDbs.Connect FAILED with %d"),ret );
-		User::Leave(ret);
-		}
-
-	CleanupClosePushL(rDbs);
-	TName commDb(KCDrive);
-	commDb.Append(KDbBaseName);
-	TUid KCommsDbFileUid = { 0x10004e1d };
-	// May need to make several
-	// attempts if it is transiently locked; report these and if
-	// not successful after a number of attempts report this and abort
-	TInt remainingTries = 5;
-//	TInt ret (KErrNone);
-	while(remainingTries-- > 0)
-		{
-		ret = rDbs.DeleteDatabase(commDb, KCommsDbFileUid);
-		if(ret == KErrNone || ret == KErrPathNotFound || ret == KErrNotFound)
-			{
-			ret = KErrNone;
-			break;
-			}
-		else
-			{
-			Log(_L("CTestStepCommDb::DeleteCurrentDatabaseL : rDbs.DeleteDatabase FAILED to delete %S %S with %d"),&KCDrive,&KDbBaseName,ret);
-			}
-		}
-	User::LeaveIfError(ret);
-	CleanupStack::PopAndDestroy(&rDbs);
-	}
-
-void CTestStepCommDb::CopyDatabaseL(const TDesC& aSource)
-	{
-	RFs fs;
-	User::LeaveIfError(fs.Connect());
-	CleanupClosePushL(fs);
-
-	RDbs rDbs;
-	User::LeaveIfError(rDbs.Connect());
-	CleanupClosePushL(rDbs);
-	const TUid KCommsDbFileUid = {0x10004e1d};
-
-	TInt remainingTries = 5;
-	TInt ret (KErrNone);
-	DeleteCurrentDatabaseL();
-	while(remainingTries-- > 0)
-		{
-		ret = rDbs.CopyDatabase(aSource, KDbFileName, KCommsDbFileUid);
-		if(ret == KErrNone || ret == KErrPathNotFound || ret == KErrNotFound)
-			{
-			break;
-			}
-		}
-	User::LeaveIfError(ret);
-	CleanupStack::PopAndDestroy(&rDbs);
-	CleanupStack::PopAndDestroy(&fs);
-	}
-
-
-TInt CTestStepCommDb::copyTestDatabase( TDatabaseNumber aDbNumber )
-	{
-	(void)aDbNumber;
-	return KErrNone;
-	}
-
-TInt CTestStepCommDb::copyDatabaseToDefault( TDatabaseNumber aDbNumber )
-	{
-	(void)aDbNumber;
-	return KErrNone;
-	}
-
-TBool CTestStepCommDb::openDbAndViewL( const TDesC16& aTable )
-	{
-	TBool created = EFalse;
-
-	//Only create Db and view objects if they're not already created
-	if ( ! iTheDb )
-		{
-		iTheDb=CCommsDatabase::NewL();
-		created = ETrue;
-		}
-
-	if ( !iTheView )
-		{
-		iTheView=iTheDb->OpenTableLC( aTable );
-		CleanupStack::Pop(); //no need to put it on the cleanup stack
-		}
-
-	return created;
-	}
-
-TVerdict CTestStepCommDb::doTestStepPostambleL()
-	{
-	if ( iTheView )
-		{
-		delete iTheView;
-		iTheView = 0;
-		}
-
-	if ( iTheDb )
-		{
-		delete iTheDb;
-		iTheDb = 0;
-		}
-
-	return EPass;
-	}
-
-
-
-void CTestStepCommDb::popAndDestroyDatabaseObjects()
-	{
-		// doTestStepPostambleL();
-	}
-
-TBool CTestStepCommDb::openDbL()
-	{
-
-	TBool created = EFalse;
-
-	if ( !iTheDb )
-		{
-		//Only open the Db if its not already open
-		TRAPD(ret,iTheDb=CCommsDatabase::NewL());
-		if(ret!=KErrNone)
-			{
-			Log(_L("CTestStepCommDb::openDbL : CCommsDatabase::NewL LEFT with %d"),ret);
-			User::Leave(ret);
-			}
-		created = ETrue;
-		}
-	return created;
-
-	}
-
-void CTestStepCommDb::setRemoteDatabaseObjects( CCommsDatabase* aDb, CCommsDbTableView* aDbView )
-	{
-		if ( !iTheDb )
-			{
-			//make sure that no-one else has already set the objects
-			iTheDb = aDb;
-			iTheView = aDbView;
-			iRemoteObjects = ETrue;
-			}
-	}
-
-
-void CTestStepCommDb::clearRemoteDatabaseObjects()
-	{
-		if( iRemoteObjects )
-			{
-			//Only clear objects if they were previously set remotly
-			iTheDb = 0;
-			iTheView = 0;
-			}
-	}
-
-TInt CTestStepCommDb::executeStepL()
-	{
-		return KErrGeneral;
-	}
-
-
-TInt CTestStepCommDb::executeStep(CTestStepCommDb& aTestStep)
-	{
-	TInt r,ret= KErrNone;
-
-	TRAP( r, ret = aTestStep.executeStepL() );
-
-	if ( r != KErrNone )
-		ret = r;
-
-	return ret;
-	}
-
-TInt CTestStepCommDb::executeStep( )
-	{
-	TInt ret=0;
-
-	TRAPD( r, ret = executeStepL() );
-
-	if ( r != KErrNone )
-		ret = r;
-
-	return ret;
-	}
-
-//
-//This heap failure member function is used when a test step needs a Database and a View
-//object.
-//
-TInt CTestStepCommDb::doTestStepWithHeapFailureL( CTestStepCommDb& aTestStep, TInt aReturnValue)
-	{
-	TInt ret=0;
-
-	for (TInt i=1; i< KHeapFailure ; i++)
-		{
-		aTestStep.doTestStepPreambleL();
-
-		__UHEAP_FAILNEXT(i);
-
-		ret = aTestStep.executeStep();
-
-		__UHEAP_RESET;
-
-		aTestStep.doTestStepPostambleL();
-
-		if ( ret == KErrNoMemory )
-			{
-			//The heap failure has been trapped correctly
-			continue;
-			}
-		else if ( ret == aReturnValue )
-			{
-			//Test step normal behaviour
-			TPtrC ExpectedErrortxt = CLog::EpocErrorToText(ret);
-			Log(_L("%s PASSED heap failure test, i = %d return code==%S"),
-				aTestStep.iTestStepName.PtrZ(), i, &ExpectedErrortxt );
-
-			break;
-			}
-		else
-			{
-			// test step has not returned the exepected error value ( which was either KErrNoMemory or aReturnValue )
-			TPtrC unexpectedErrortxt = CLog::EpocErrorToText(ret);
-			TPtrC Error = CLog::EpocErrorToText(aReturnValue);
-			Log(_L("%s *FAILED* heap failure test, i=%d return code:%S expected:%S"),
-				aTestStep.iTestStepName.PtrZ(), i, &unexpectedErrortxt, &Error );
-			iTestStepResult = EFail;
-			break;
-			}
-
-		}
-
-	return KErrNone;
-	}
-
-void CTestStepCommDb::CheckTableIsProtectedL(CCommsDbProtectTableView* aTable)
-	{
-
-	TESTL(iTheDb->BeginTransaction()==KErrNone);
-
-	if(aTable->GotoFirstRecord()==KErrNone)
-		{
-		// Check settings on Record
-		RDbRowSet::TAccess tableAccess = RDbRowSet::EUpdatable;
-		TInt ret = aTable->GetTableAccess(tableAccess);
-		TESTL(ret == KErrNone);
-		TESTL(tableAccess == RDbRowSet::EReadOnly);
-
-		// Test that first record cannot be updated
-		TRAP(ret,UpdateRecordL(aTable,KErrAccessDenied));
-		TESTL(ret == KErrNone);
-
-		// Test that cannot delete first record
-		TRAP(ret,DeleteRecordL(aTable,KErrAccessDenied));
-		TESTL(ret == KErrNone);
-
-		// Test that cannot insert new record
-		TRAP(ret,InsertRecordL(aTable,KErrAccessDenied));
-		TESTL(ret == KErrNone);
-
-		aTable->GotoFirstRecord();
-		}
-	TESTL(iTheDb->CommitTransaction()==KErrNone);
-	}
-
-
-void CTestStepCommDb::CheckTableIsProtectedL(CCommsDbProtectConnectPrefTableView* aTable)
-	{
-
-	TESTL(iTheDb->BeginTransaction()==KErrNone);
-	if(aTable->GotoFirstRecord()==KErrNone)
-		{
-		// Check settings on Record
-		RDbRowSet::TAccess tableAccess = RDbRowSet::EUpdatable;
-		TInt ret = aTable->GetTableAccess(tableAccess);
-		TESTL(ret == KErrNone);
-		TESTL(tableAccess == RDbRowSet::EReadOnly);
-
-		// Test that first record cannot be updated
-		TRAP(ret,UpdateRecordL(aTable,KErrAccessDenied));
-		TESTL(ret == KErrNone);
-
-		// Test that cannot delete first record
-		TRAP(ret,DeleteRecordL(aTable,KErrAccessDenied));
-		TESTL(ret == KErrNone);
-
-		// Test that cannot insert new record
-		TRAP(ret,InsertRecordL(aTable,KErrAccessDenied));
-		TESTL(ret == KErrNone);
-
-		aTable->GotoFirstRecord();
-		}
-	TESTL(iTheDb->CommitTransaction()==KErrNone);
-	}
-
-void CTestStepCommDb::CheckTableIsNotProtectedL(CCommsDbProtectTableView* aTable)
-	{
-	TESTL(iTheDb->BeginTransaction()==KErrNone);
-	if(aTable->GotoFirstRecord()==KErrNone)
-		{
-		// Check settings on Table
-		RDbRowSet::TAccess tableAccess = RDbRowSet::EReadOnly;
-		TInt ret = aTable->GetTableAccess(tableAccess);
-		TESTL(ret == KErrNone);
-		TESTL(tableAccess == RDbRowSet::EUpdatable);
-
-		// Test can update first record
-		TRAP(ret,UpdateRecordL(aTable,KErrNone));
-		TESTL(ret == KErrNone);
-
-		// Test that can delete record
-		TRAP(ret,DeleteRecordL(aTable,KErrNone));
-		TESTL(ret == KErrNone);
-
-		// Test that can insert new record
-		TRAP(ret,InsertRecordL(aTable,KErrNone));
-		TESTL(ret == KErrNone);
-
-		aTable->GotoFirstRecord();
-		}
-	TESTL(iTheDb->CommitTransaction()==KErrNone);
-	}
-
-void CTestStepCommDb::CheckTableIsNotProtectedL(CCommsDbProtectConnectPrefTableView* aTable)
-	{
-	TESTL(iTheDb->BeginTransaction()==KErrNone);
-	if(aTable->GotoFirstRecord()==KErrNone)
-		{
-		// Check settings on Table
-		RDbRowSet::TAccess tableAccess = RDbRowSet::EReadOnly;
-		TInt ret = aTable->GetTableAccess(tableAccess);
-		TESTL(ret == KErrNone);
-		TESTL(tableAccess == RDbRowSet::EUpdatable);
-
-		// Test can update first record
-		TRAP(ret,UpdateRecordL(aTable,KErrNone));
-		TESTL(ret == KErrNone);
-
-		// Test that can delete record
-		TRAP(ret,DeleteRecordL(aTable,KErrNone));
-		TESTL(ret == KErrNone);
-
-		// Test that can insert new record
-		TRAP(ret,InsertRecordL(aTable,KErrNone));
-		TESTL(ret == KErrNone);
-
-		aTable->GotoFirstRecord();
-		}
-	TESTL(iTheDb->CommitTransaction()==KErrNone);
-	}
-
-void CTestStepCommDb::GoToPositionL(CCommsDbProtectTableView* aTable,TInt aPos)
-	{
-	TESTL(aTable->GotoFirstRecord()==KErrNone);
-	for (TInt i = 0; i < aPos; i++)
-		{
-		TESTL(aTable->GotoNextRecord()==KErrNone);
-		}
-	}
-
-void CTestStepCommDb::ProtectRecordL(CCommsDbProtectTableView* aTable, TInt aResult)
-	{
-	TESTL(aTable->ProtectRecord()==aResult);
-	}
-
-void CTestStepCommDb::ProtectRecordL(CCommsDbProtectConnectPrefTableView* aTable, TInt aResult)
-	{
-	TESTL(aTable->ProtectRecord()==aResult);
-	}
-
-void CTestStepCommDb::UnprotectRecordL(CCommsDbProtectTableView* aTable, TInt aResult)
-	{
-	TESTL(aTable->UnprotectRecord()==aResult);
-	}
-
-void CTestStepCommDb::UnprotectRecordL(CCommsDbProtectConnectPrefTableView* aTable, TInt aResult)
-	{
-	TESTL(aTable->UnprotectRecord()==aResult);
-	}
-
-void CTestStepCommDb::UpdateRecordL(CCommsDbProtectTableView* aTable, TInt aResult)
-	{
-
-	TESTL(aTable->UpdateRecord()==aResult);
-	if (aResult == KErrNone)
-		{
-		ModifyRecordL(aTable);
-		TESTL(aTable->PutRecordChanges()==KErrNone);
-		}
-	}
-
-void CTestStepCommDb::UpdateRecordL(CCommsDbProtectConnectPrefTableView* aTable, TInt aExpectedResult)
-	{
-
-	TUint32 Ranking;
-	CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref RecordData;
-
-	TInt ErrVal = ChangeCPRankingL(aTable, Ranking); // Try modifying a field.
-
-	TESTL(ErrVal == aExpectedResult);
-
-	if (ErrVal == KErrNone)
-		{
-		// The change was allowed, so check it actually happened.
-		aTable->ReadConnectionPreferenceL(RecordData);
-		TESTL(Ranking == RecordData.iRanking);
-		}
-	}
-
-void CTestStepCommDb::DeleteRecordL(CCommsDbProtectTableView* aTable, TInt aResult)
-	{
-	TESTL(aTable->DeleteRecord()==aResult);
-	}
-
-void CTestStepCommDb::DeleteRecordL(CCommsDbProtectConnectPrefTableView* aTable, TInt aExpectedResult)
-	{
-	TRAPD(ErrVal, aTable->DeleteConnectionPreferenceL());
-	TESTL(ErrVal == aExpectedResult);
-	}
-
-void CTestStepCommDb::InsertRecordL(CCommsDbProtectTableView* aTable, TInt aExpectedResult)
-	{
-	TUint32 recordId;
-	TInt ret = aTable->InsertRecord(recordId);
-	TESTL(ret==aExpectedResult||ret==KErrAlreadyExists); //for some tables insertion fails
-											  //because they can only have
-											//one record (i.e. DEFAULT_GPRS)
-	if (ret == KErrNone)
-		{
-		PopulateInsertedRecordL(aTable);
-		TESTL(aTable->PutRecordChanges()==KErrNone);
-		}
-	}
-
-void CTestStepCommDb::InsertRecordL(CCommsDbProtectConnectPrefTableView* aTable, TInt aExpectedResult)
-	{
-	CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref PrefData1, PrefData2;
-
-	PrefData1.iRanking = 0;
-	PrefData1.iDirection = ECommDbConnectionDirectionOutgoing;
-	PrefData1.iDialogPref = ECommDbDialogPrefWarn;
-	PrefData1.iBearer.iBearerSet = ECommDbBearerCSD;
-	PrefData1.iBearer.iIapId = 1;
-
-	TRAPD(ErrVal, aTable->InsertConnectionPreferenceL(PrefData1));
-	TESTL(ErrVal==aExpectedResult); //for some tables insertion fails
-											  //because they can only have
-											//one record (i.e. DEFAULT_GPRS)
-	if (ErrVal == KErrNone)
-		{
-		aTable->ReadConnectionPreferenceL(PrefData2);
-		TESTL(PrefData1 == PrefData2);
-		}
-	}
-
-
-#define TEST_FCN(_F_)		{TRAPD(ret,_F_); TESTL(ret == KErrNone);}
-
-void CTestStepCommDb::ModifyRecordL(CCommsDbProtectTableView* aTable)
-//
-// Modify some field in current record
-//
-	{
-	TEST_FCN(aTable->WriteTextL(TPtrC(COMMDB_NAME),_L("test")));
-	}
-// Extract the protection state for the current record,
-// and leave if it's not the state expected
-void CTestStepCommDb::CheckRecordAccessL(CCommsDbProtectConnectPrefTableView* aTable, TInt aExpectedAccess)
-	{
-	TInt FoundAccess;
-	// Set the state to one not expected, so it will fail if not explicitly changed
-	if (aExpectedAccess == RDbRowSet::EUpdatable)
-		FoundAccess = RDbRowSet::EReadOnly;
-	else
-		FoundAccess = RDbRowSet::EUpdatable;
-
-	TESTL(aTable->GetRecordAccess(FoundAccess) == KErrNone);
-	TESTL(aExpectedAccess == FoundAccess);
-	}
-void CTestStepCommDb::PopulateInsertedRecordL(CCommsDbProtectTableView* aTable)
-//
-// Populate minimal set of fields in current newly inserted record.
-//
-	{
-	TBuf<50> tableName;
-	aTable->GetTableName(tableName);
-
-	if (tableName == TPtrC(DIAL_OUT_ISP))
-		{
-		TEST_FCN(aTable->WriteTextL(TPtrC(COMMDB_NAME),_L("Inserted Service")));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue));
-		TEST_FCN(aTable->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue));
-		}
-
-	// EXTEND OR MODIFY this function if want to use different table
-	}
-// Just a utility function - for checking the protection of the Connection Preferences
-// table and its records, we just try changing the ranking field of the first one.
-TInt CTestStepCommDb::ChangeCPRankingL(CCommsDbProtectConnectPrefTableView* aTable, TUint32& Ranking)
-	{
-	CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref  RecordData;
-
-	aTable->ReadConnectionPreferenceL(RecordData);
-	if(RecordData.iRanking == 1)
-		Ranking = 0;
-	else
-		Ranking = 1;
-	TRAPD(ErrVal, aTable->ChangeConnectionPreferenceRankL(Ranking));
-	return(ErrVal);
-	}
-
-#undef TEST_FCN