diff -r 7333d7932ef7 -r 8b7f4e561641 installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesstep.cpp --- a/installationservices/swtransactionservices/test/tintegrityservices/source/tintegrityservicesstep.cpp Tue Aug 31 15:21:33 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1487 +0,0 @@ -/* -* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: -* -*/ - - -/** - @file - @test - @internalTechnology -*/ - -#include "tintegrityservicesstep.h" -#include -#include "journal.h" -#include "journalfile.h" - - -///////////////////////////////////////////////////////////////////// -// CIntegrityServicesStep -///////////////////////////////////////////////////////////////////// -CIntegrityServicesStepBase::CIntegrityServicesStepBase(CStsTestServer &aStsTestServer):CStsBaseTestStep(aStsTestServer) - { - } -void CIntegrityServicesStepBase::ImplTestStepPreambleL() - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::ImplTestStepPreambleL()")); - __UHEAP_MARK; - - // Install an active scheduler - CActiveScheduler* s = new (ELeave) CActiveScheduler; - s->Install(s); - - User::LeaveIfError(iIntegritySession.Connect()); - - ReadFailureSettingsL(); - } - -void CIntegrityServicesStepBase::ImplTestStepPostambleL() - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::ImplTestStepPostambleL()")); - // Remove the installed active scheduler - CActiveScheduler* s = CActiveScheduler::Current(); - s->Install(NULL); - delete s; - - iIntegritySession.Close(); - -__UHEAP_MARKEND; - - - } - -void CIntegrityServicesStepBase::GetStringArrayFromConfigL(const TDesC& aSectName, const TDesC& aKeyName, RArray& aArray) - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::GetStringArrayFromConfigL()")); - _LIT(KKeyFormat, "-%02d"); - HBufC* buf = HBufC::NewLC(aKeyName.Length() + KKeyFormat().Length()); - TPtr ptr(buf->Des()); - INFO_PRINTF2(_L("Parsing attribute: %S"), &aKeyName); - - TInt i = 0; - TBool cont = ETrue; - do - { - ++i; - ptr = aKeyName; - ptr.AppendFormat(KKeyFormat(), i); - TPtrC val; - - cont = GetStringFromConfig(aSectName, ptr, val); - if (cont) - { - User::LeaveIfError(aArray.Append(val)); - } - } while (cont); - - INFO_PRINTF2(_L("Element count: %d"), i-1); - CleanupStack::PopAndDestroy(buf); - } - -TBool CIntegrityServicesStepBase::CheckFilesL() - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::CheckFilesL()")); - TInt result = ETrue; - RArray fileArray; - CleanupClosePushL(fileArray); - - GetStringArrayFromConfigL(ConfigSection(), KPresent, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - if(FileExistsL(fileArray[file])) - { - INFO_PRINTF2(_L("%S was found"), &fileArray[file]); - } - else - { - ERR_PRINTF2(_L("%S was not found"), &fileArray[file]); - result = EFalse; - } - } - fileArray.Reset(); - - GetStringArrayFromConfigL(ConfigSection(), KAbsent, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - if(FileExistsL(fileArray[file])) - { - ERR_PRINTF2(_L("%S was found"), &fileArray[file]); - result = EFalse; - } - else - { - INFO_PRINTF2(_L("%S was not found"), &fileArray[file]); - } - } - fileArray.Reset(); - CleanupStack::PopAndDestroy(&fileArray); - return result; - } - -void CIntegrityServicesStepBase::ReadFailureSettingsL() - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::ReadFailureSettings()")); - TPtrC failType; - if(!GetStringFromConfig(ConfigSection(), KFailType, failType)) - { - failType.Set(KNullDesC); - } - - TPtrC failPosition; - if(!GetStringFromConfig(ConfigSection(), KFailPosition, failPosition)) - { - failPosition.Set(KNullDesC); - } - - TPtrC failFileName; - if(!GetStringFromConfig(ConfigSection(), KFailFileName, failFileName)) - { - failFileName.Set(KNullDesC); - } - - iIntegritySession.SetSimulatedFailureL(failType, failPosition, failFileName); - } - -void CIntegrityServicesStepBase::doInstallL() - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::doInstallL()")); - RArray fileArray; - CleanupClosePushL(fileArray); - - GetStringArrayFromConfigL(ConfigSection(), KRemoveFile, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - INFO_PRINTF2(_L("RemovingFile: %S"), &fileArray[file]); - - iIntegritySession.RemoveL(fileArray[file]); - } - fileArray.Reset(); - - - GetStringArrayFromConfigL(ConfigSection(), KAddFile, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - INFO_PRINTF2(_L("AddingFile: %S"), &fileArray[file]); - iIntegritySession.AddL(fileArray[file]); - iIntegritySession.CreateNewTestFileL(fileArray[file]); - } - fileArray.Reset(); - - GetStringArrayFromConfigL(ConfigSection(), KTempFile, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - INFO_PRINTF2(_L("TemporaryFile: %S"), &fileArray[file]); - iIntegritySession.TemporaryL(fileArray[file]); - iIntegritySession.CreateTempTestFileL(fileArray[file]); - } - fileArray.Reset(); - - RArray operationArray; - CleanupClosePushL(operationArray); - - GetStringArrayFromConfigL(ConfigSection(), KArbitraryOpFile, fileArray); - GetStringArrayFromConfigL(ConfigSection(), KOperation, operationArray); - TInt fileCount = fileArray.Count(); - - if (fileCount != operationArray.Count()) - { - ERR_PRINTF3(_L("Number of files (%d) does not match number of operations (%d)"), fileCount, operationArray.Count()); - SetTestStepResult(EFail); - } - else - { - for (TInt file = 0; file < fileCount;file++) - { - if (operationArray[file].CompareF(KAddFile) == 0) - { - INFO_PRINTF2(_L("AddingFile: %S"), &fileArray[file]); - iIntegritySession.AddL(fileArray[file]); - iIntegritySession.CreateNewTestFileL(fileArray[file]); - } - else if (operationArray[file].CompareF(KRemoveFile) == 0) - { - INFO_PRINTF2(_L("RemovingFile: %S"), &fileArray[file]); - iIntegritySession.RemoveL(fileArray[file]); - } - else if (operationArray[file].CompareF(KTempFile) == 0) - { - INFO_PRINTF2(_L("TemporaryFile: %S"), &fileArray[file]); - iIntegritySession.TemporaryL(fileArray[file]); - iIntegritySession.CreateTempTestFileL(fileArray[file]); - } - else - { - ERR_PRINTF3(_L("Operation %S not understood, skipping file %S"), &operationArray[file], &fileArray[file]); - } - } - } - CleanupStack::PopAndDestroy(2, &fileArray); - - iIntegritySession.CommitL(); - } - -void CIntegrityServicesStepBase::doRecoverL() - { - INFO_PRINTF1(_L("CIntegrityServicesStepBase::doRecoverL()")); - iIntegritySession.RollBackL(EFalse); - } - -void CIntegrityServicesStepBase::doCleanupL() - { - - INFO_PRINTF1(_L("CIntegrityServicesStepBase::doCleanupL()")); - RArray fileArray; - CleanupClosePushL(fileArray); - - GetStringArrayFromConfigL(ConfigSection(), KCleanupFile, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - TRAPD(err, DeleteFileL(fileArray[file])); - if(err != KErrNone && err != KErrPathNotFound && err != KErrNotFound) - { - User::Leave(err); - } - } - fileArray.Reset(); - GetStringArrayFromConfigL(ConfigSection(), KCleanupDirectory, fileArray); - for (TInt file = 0; file < fileArray.Count();file++) - { - TRAPD(err, DeleteFileL(fileArray[file])); - if(err != KErrNone && err != KErrPathNotFound && err != KErrNotFound) - { - User::Leave(err); - } - } - fileArray.Reset(); - CleanupStack::PopAndDestroy(&fileArray); - } - -///////////////////////////////////////////////////////////////////// -// CInstallStep -///////////////////////////////////////////////////////////////////// -CInstallStep::CInstallStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer) - { - SetTestStepName(KInstall); - } - -void CInstallStep::ImplTestStepL() - { - INFO_PRINTF1(_L("CInstallStep::ImplTestStepL()")); - TRAPD(err, doInstallL()); - - if(err == KErrNone || err == KIntegrityServicesSimulatedBatteryFailure) - { - if(CheckFilesL()) - { - SetTestStepResult(EPass); - } - else - { - SetTestStepResult(EFail); - } - } - else - { - User::Leave(err); - } - - } - -///////////////////////////////////////////////////////////////////// -// CRecoverStep -///////////////////////////////////////////////////////////////////// -CRecoverStep::CRecoverStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer) - { - SetTestStepName(KRecover); - } - -void CRecoverStep::ImplTestStepL() - { - INFO_PRINTF1(_L("CRecoverStep::ImplTestStepL()")); - // begin recovery - TRAPD(err, doRecoverL()); - - if(err == KErrNone || err == KIntegrityServicesSimulatedBatteryFailure) - { - if(CheckFilesL()) - { - SetTestStepResult(EPass); - } - else - { - SetTestStepResult(EFail); - } - } - else - { - User::Leave(err); - } - - - } - -///////////////////////////////////////////////////////////////////// -// CCleanupStep -///////////////////////////////////////////////////////////////////// -CCleanupStep::CCleanupStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer) - { - SetTestStepName(KCleanup); - } - -void CCleanupStep::ImplTestStepL() - { - INFO_PRINTF1(_L("CCleanupStep::ImplTestStepL()")); - doCleanupL(); - - SetTestStepResult(EPass); - - } - -///////////////////////////////////////////////////////////////////// -// CRecoverStep -///////////////////////////////////////////////////////////////////// -CCheckStep::CCheckStep(CStsTestServer &aStsTestServer):CIntegrityServicesStepBase(aStsTestServer) - { - SetTestStepName(KCheck); - } - -void CCheckStep::ImplTestStepL() - { - INFO_PRINTF1(_L("CCheckStep::ImplTestStepL()")); - // Just check for files - if(CheckFilesL()) - { - SetTestStepResult(EPass); - } - else - { - SetTestStepResult(EFail); - } - - - } - - -//---------- new unit tests developed as part of the STS framework ---------- -using namespace Usif; - -//define event names for logging purposes (used in journal file unit tests and journal unit tests -_LIT(KENone, "ENone"); -_LIT(KERemovedFile,"ERemovedFile"); -_LIT(KEBackupFile,"EBackupFile"); -_LIT(KETempFile,"ETempFile"); -_LIT(KEAddedFile,"EAddedFile"); -_LIT(KECommitted,"ECommitted"); -_LIT(KEBackupFilesRemoved,"EBackupFilesRemoved"); -_LIT(KEAddedFilesRemoved,"EAddedFilesRemoved"); -_LIT(KERemovedFilesRestored,"ERemovedFilesRestored"); -_LIT(KETempFilesRemoved, "ETempFilesRemoved"); - - -const TDesC* eventNames[] = { - &KENone, - &KERemovedFile, - &KEBackupFile, - &KETempFile, - &KEAddedFile, - &KECommitted, - &KEBackupFilesRemoved, - &KEAddedFilesRemoved, - &KERemovedFilesRestored, - &KETempFilesRemoved - }; - - -const TFileMode defaultJournalFileMode = TFileMode (TFileMode(EFileWrite) | TFileMode(EFileShareAny)); - -CJournalFileUnitTest::CJournalFileUnitTest(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer) - { - // Call base class method to set up the human readable name for logging - SetTestStepName(KJournalFileUnitTest); - } - -CJournalFileUnitTest::~CJournalFileUnitTest() - { - delete testJournalFile; - iFs.Close(); - iLoader.Close(); - } - - -void CJournalFileUnitTest::ImplTestStepPreambleL() -/** - @return - void code - Override of base class virtual - */ - { - INFO_PRINTF1(_L("JournalFileUnitTest Preamble")); - User::LeaveIfError(iFs.Connect()); - User::LeaveIfError(iLoader.Connect()); - testJournalFile = CTestFile::NewL(iFs); - SetTestStepResult(EPass); - - } - -void CJournalFileUnitTest::ImplTestStepL() -/** - @return - void code - Override of base class pure virtual - */ - { - INFO_PRINTF1(_L("JournalFileUnitTest in test step")); - SetTestStepResult(EPass); - - TPtrC journalFilePathInIni = GetTargetFilePathFromConfigL(); - TParsePtrC journalFilePathParse(journalFilePathInIni); - TDriveUnit journaldrive(journalFilePathParse.Drive()); - HBufC* targetFileName = HBufC::NewLC(KMaxFileName); - HBufC* backupFileName = HBufC::NewLC(KMaxFileName); - - CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - - //feed incorrect file to the journalfile (ie: file's on other drive) - TPtr targetFileNameBasePtr(targetFileName->Des()); - targetFileNameBasePtr.Append(TDriveUnit(journaldrive+1).Name()); - targetFileNameBasePtr.Append(journalFilePathParse.Path()); - - TPtr targetFileNamePtr(targetFileNameBasePtr); - targetFileNamePtr.Append(_L("dummyadd.txt")); - - TPtr targetBackupFileNamePtr(backupFileName->Des()); - - TInt err(0); - - TInt seekPosition(0); - TInt seekToEndPosition(0); - TIntValue intValue = {0}; - TIntValue extraByte = {0xFF}; - - TRAP(err, journalFile->AddL(targetFileNamePtr)); - if(err!=KErrBadName) - { - ERR_PRINTF2(_L("CJournalFile::AddL() returned incorrect error code. KErrBadName is expected %d is returned!"), err); - SetTestStepResult(EFail); - } - targetFileNamePtr.Set(targetFileNameBasePtr); - targetFileNamePtr.Append(_L("dummytemp.txt")); - TRAP(err, journalFile->TemporaryL(targetFileNamePtr)); - if(err!=KErrBadName) - { - ERR_PRINTF2(_L("CJournalFile::RemoveL() returned incorrect error code. KErrBadName is expected %d is returned!"), err); - SetTestStepResult(EFail); - } - - targetFileNamePtr.Set(targetFileNameBasePtr); - targetFileNamePtr.Append(_L("dummyremove.txt")); - TRAP(err, journalFile->RemoveL(targetFileNamePtr, targetBackupFileNamePtr)); - if(err!=KErrBadName) - { - ERR_PRINTF2(_L("CJournalFile::RemoveL() returned incorrect error code. KErrBadName is expected %d is returned!"), err); - SetTestStepResult(EFail); - } - - *targetFileName = KEmptyString; - targetFileNameBasePtr.Set(targetFileName->Des()); - targetFileNameBasePtr.Append(journalFilePathParse.DriveAndPath()); - - CleanupStack::PopAndDestroy(journalFile); - DeleteFileL(journalFilePathInIni); -//------------------------------------------------------------------------------------- -//Steps: -// 1.) create a CJournalFile object -// 2.) set last event by invoking CJournalFile::EventL() (this sets the iLastEvent as well as writes the event value to the journal file on disk) -// 3.) destroy object -// 4.) corrupt information by overwriting the event value in the file to requested invalid value -// 5.) recreate CjournalFile object -> this will trigger CJournalFile::ReadEntryL -// note: the purpose of this testcase to excersise the main switch-case in CJournalFile::ReadEntryL -//------------------------------------------------------------------------------------- - - TIntegrityServicesEvent eventsToSet[] = {ERemovedFile, - EBackupFile, - ETempFile, - EAddedFile, - ECommitted, - EBackupFilesRemoved, - EAddedFilesRemoved, - //ETempFilesRemoved, - ERemovedFilesRestored, - }; - TInt numOfInvalidEvents[] = {6, //number of invalid events for ERemovedFile - 1, //number of invalid events for EBackupFile - 6, //number of invalid events for ETempFile - 6, //number of invalid events for EAddedFile - 7, //number of invalid events for ECommitted - 9, //number of invalid events for EBackupFilesRemoved - 6, //number of invalid events for EAddedFilesRemoved - //ETempFilesRemoved - 9 //number of invalid events for ERemovedFilesRestored - }; - TIntegrityServicesEvent invalidEvents[][10] = {{EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for ERemovedFile - {EBackupFile}, //invalid events for EBackupFile, this is not really invalid value for EBackupFile, actually EBackupFile itself is invalid on its own in the file - {EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for ETempFile - {EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for EAddedFile - {ENone, EBackupFile, ECommitted, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for ECommitted - {ENone, ERemovedFile, EBackupFile, ETempFile, EAddedFile, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for EBackupFilesRemoved - {ENone, EBackupFile, EBackupFilesRemoved, EAddedFilesRemoved, ERemovedFilesRestored, ETempFilesRemoved}, //invalid events for EAddedFilesRemoved - //{}, //invalid events for ETempFilesRemoved - {ENone, ERemovedFile, EBackupFile, ETempFile, EAddedFile, ECommitted, EBackupFilesRemoved, ETempFilesRemoved, ERemovedFilesRestored} //invalid events for ERemovedFilesRestored - }; - - ASSERT(sizeof(eventsToSet)/sizeof(TIntegrityServicesEvent) == sizeof(numOfInvalidEvents)/sizeof(TInt) == sizeof(invalidEvents)/(sizeof(TIntegrityServicesEvent)*10)); - for (TInt i=0; iEventL(invalidEvents[i][j]); //set last event to any of the requested invalid events (also writes it to jounral file) - CleanupStack::PopAndDestroy(journalFile); - intValue.int32 = static_cast(eventsToSet[i]); - seekPosition=0; - OpenJournalFileL(journalFilePathInIni, defaultJournalFileMode); - SeekInJournalFileL(ESeekStart, seekPosition); - WriteIntToJournalFileL(intValue, Mode32Bit); //write the requested event to journal file (overwrites last event set by EventL()) - seekToEndPosition=0; - SeekInJournalFileL(ESeekEnd, seekToEndPosition); - WriteIntToJournalFileL(extraByte, Mode8Bit); - CloseJournalFile(); - //force a Sync and catch the error that should be KErrCorrupt - journalFile=0; - TRAPD(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrCorrupt) - { - ERR_PRINTF4(_L("CJournalFile::SynchL() returned incorrect error code. KErrCorrupt is expected and %d is returned! Conditions: last event set via EventL(): %S Event written into journal file: %S"), err, eventNames[invalidEvents[i][j]], eventNames[eventsToSet[i]]); - SetTestStepResult(EFail); - } - DeleteFileL(journalFilePathInIni); - } - } -//------------------------------------------------------------------------------------- -//Steps: -// 1.) create a journal file using CJournalFile::NewLC -// 2.) add an item via AddL() or TemporaryL() -// 2.) corrupt disk information in the filename written into the file -// 3.) try to recreate journal object using CJournalFile::NewLC -// 4.) expect KErrCorrupt -//------------------------------------------------------------------------------------- - - targetFileNamePtr.Set(targetFileNameBasePtr); - targetFileNamePtr.Append(_L("dummyadd_or_temp.txt")); - for(TInt i=0; i<2; i++) - { - //create a journal file and add an item via AddL() or TemporaryL() - journalFile=0; - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - if(i==0) - { - journalFile->AddL(targetFileNamePtr); - } - else if(i==1) - { - journalFile->TemporaryL(targetFileNamePtr); - } - CleanupStack::PopAndDestroy(journalFile); - //open journal file and corrupt it by overwriting the drive letter in the file's path - seekPosition=sizeof(TInt32)+1; - OpenJournalFileL(journalFilePathInIni, defaultJournalFileMode); - SeekInJournalFileL(ESeekStart, seekPosition); - intValue = ReadIntFromJournalFileL(Mode8Bit); - intValue.int8++; //corrupt drive letter (ie: 'c' ==> 'd') - SeekInJournalFileL(ESeekStart, seekPosition); - WriteIntToJournalFileL(intValue, Mode8Bit); - CloseJournalFile(); - //check that CJournalFile recognizes corruption - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrCorrupt) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - DeleteFileL(journalFilePathInIni); - } -//------------------------------------------------------------------------------------- -//Steps: -// 1.) create a journal file using CJournalFile::NewLC -// 2.) add an item via RemoveyL() -// 2.) corrupt disk information in various ways in the file -// 3.) try to recreate journal object using CJournalFile::NewL -// 4.) expect KErrCorrupt -//------------------------------------------------------------------------------------- - - journalFile=0; - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - targetFileNamePtr.Set(targetFileNameBasePtr); - targetFileNamePtr.Append(_L("dummyremove.txt")); - journalFile->RemoveL(targetFileNamePtr, targetBackupFileNamePtr); - CleanupStack::PopAndDestroy(journalFile); - - OpenJournalFileL(journalFilePathInIni, defaultJournalFileMode); - seekPosition=sizeof(TInt32)+1+targetFileNamePtr.Length(); - SeekInJournalFileL(ESeekStart, seekPosition); - intValue.int32 = static_cast(EAddedFile); //corrupt operation: originally EBackupFile is recorded here - WriteIntToJournalFileL(intValue, Mode32Bit); - - //check that CJournalFile recognizes corruption - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrCorrupt) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - - SeekInJournalFileL(ESeekStart, seekPosition); - intValue.int32 = static_cast(EBackupFile); //restore original record - WriteIntToJournalFileL(intValue, Mode32Bit); - - //check that journal file is not corrupted - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrNone) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrNone is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - - seekPosition=sizeof(TInt32)+1; - SeekInJournalFileL(ESeekStart, seekPosition); - intValue = ReadIntFromJournalFileL(Mode8Bit); //read first file's drive letter - intValue.int8++; //corrupt drive letter (ie: 'c' ==> 'd') - SeekInJournalFileL(ESeekStart, seekPosition); - WriteIntToJournalFileL(intValue, Mode8Bit); //write corrupt drive letter to file - - //check that CJournalFile recognizes corruption - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrCorrupt) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - - intValue.int8--; //restore original drive letter - SeekInJournalFileL(ESeekStart, seekPosition); - WriteIntToJournalFileL(intValue, Mode8Bit); //write original drive letter to file - - - //check that journal file is not corrupted - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrNone) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrNone is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - - seekPosition=sizeof(TInt32)+1+targetFileNamePtr.Length()+sizeof(TInt32)+1; - SeekInJournalFileL(ESeekStart, seekPosition); - intValue = ReadIntFromJournalFileL(Mode8Bit); //read second file's drive letter (backup file name) - intValue.int8++; //corrupt drive letter (ie: 'c' ==> 'd') - SeekInJournalFileL(ESeekStart, seekPosition); - WriteIntToJournalFileL(intValue, Mode8Bit); //write corrupt drive letter to file - - - //check that CJournalFile recognizes corruption - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrCorrupt) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrCorrupt is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - - intValue.int8--; //restore original drive letter - SeekInJournalFileL(ESeekStart, seekPosition); - WriteIntToJournalFileL(intValue, Mode8Bit); //write original drive letter to file - - //check that journal file is not corrupted - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrNone) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrNone is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - CloseJournalFile(); - INFO_PRINTF1(_L("Deleting journal file - Line 769")); - DeleteFileL(journalFilePathInIni); - - - CreateJournalFileL(journalFilePathInIni, TFileMode(TFileMode(EFileWrite) | TFileMode(EFileShareExclusive))); - journalFile=0; - TRAP(err, - journalFile = CJournalFile::NewLC(iFs, iLoader, journalFilePathInIni, journaldrive); - CleanupStack::PopAndDestroy(journalFile); - ); - if(err!=KErrInUse ) - { - ERR_PRINTF2(_L("CJournalFile::NewL() returned incorrect error code. KErrInUse is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - CloseJournalFile(); - INFO_PRINTF1(_L("Deleting journal file - Line 783")); - DeleteFileL(journalFilePathInIni); - - CleanupStack::PopAndDestroy(2, targetFileName); - } - -void CJournalFileUnitTest::ImplTestStepPostambleL() -/** - @return - void code - Override of base class virtual - */ - { - INFO_PRINTF1(_L("JournalFileUnitTest Postamble")); - delete testJournalFile; - testJournalFile=0; - iFs.Close(); - iLoader.Close(); - } - -void CJournalFileUnitTest::OpenJournalFileL(const TDesC& aFileName, TFileMode aMode) - { - testJournalFile->OpenJournalFileL(aFileName, aMode); - } - -void CJournalFileUnitTest::CreateJournalFileL(const TDesC& aFileName, TFileMode aMode) - { - testJournalFile->CreateJournalFileL(aFileName, aMode); - } - -void CJournalFileUnitTest::SeekInJournalFileL(TSeek aSeekMode, TInt &aPos) - { - testJournalFile->SeekInJournalFileL(aSeekMode, aPos); - } - -TIntValue CJournalFileUnitTest::ReadIntFromJournalFileL(TIntMode mode) - { - return testJournalFile->ReadIntFromJournalFileL(mode); - } - -void CJournalFileUnitTest::CloseJournalFile() - { - testJournalFile->CloseJournalFile(); - } - -void CJournalFileUnitTest::WriteIntToJournalFileL(TIntValue value, TIntMode mode) - { - testJournalFile->WriteIntToJournalFileL(value, mode); - } - - - -/*static*/ CTestFile* CTestFile::NewL(RFs& aFs) - { - CTestFile* self = new(ELeave) CTestFile(aFs); - return self; - } - -CTestFile::CTestFile(RFs& aFs): iFs(aFs) - { - - } - -CTestFile::~CTestFile() - { - CloseJournalFile(); - } - -void CTestFile::OpenJournalFileL(const TDesC& aFileName, TFileMode aMode) - { - TInt err = journalFile.Open(iFs, aFileName, aMode); - User::LeaveIfError(err); - } - -void CTestFile::CreateJournalFileL(const TDesC& aFileName, TFileMode aMode) - { - TInt err = iFs.MkDirAll(aFileName); - if(err != KErrNone && err != KErrAlreadyExists) - { - User::Leave(err); - } - err = journalFile.Create(iFs, aFileName, aMode); - User::LeaveIfError(err); - } - -void CTestFile::CloseJournalFile() - { - journalFile.Close(); - } - -void CTestFile::WriteIntToJournalFileL(TIntValue value, TIntMode mode) - { - HBufC8* fileIOBuffer = HBufC8::NewLC(10); - TPtr8 fileIOBufferPtr(fileIOBuffer->Des()); - TPckgC pckg(value.int32); - - switch(mode) - { - case Mode8Bit: - case Mode16Bit: - case Mode32Bit: - fileIOBufferPtr.Append(pckg); - User::LeaveIfError(journalFile.Write(fileIOBufferPtr, static_cast(mode))); - break; - default: - User::Leave(KErrArgument); - break; - } - - CleanupStack::PopAndDestroy(fileIOBuffer); - } - -TIntValue CTestFile::ReadIntFromJournalFileL(TIntMode mode) - { - HBufC8* fileIOBuffer = HBufC8::NewLC(10); - TPtr8 fileIOBufferPtr(fileIOBuffer->Des()); - User::LeaveIfError(journalFile.Read(fileIOBufferPtr, static_cast(mode))); - TIntValue ret = {0}; - - switch(mode) - { - case Mode8Bit: - case Mode16Bit: - case Mode32Bit: - { - for(TInt i=0; i(mode); ++i) - { - ret.int32 |= TInt32((*fileIOBuffer)[i]) << (8*i); - } - break; - } - default: - User::Leave(KErrArgument); - break; - } - CleanupStack::PopAndDestroy(fileIOBuffer); - return ret; - } - -void CTestFile::SeekInJournalFileL(TSeek aSeekMode, TInt &aPos) - { - User::LeaveIfError(journalFile.Seek(aSeekMode, aPos)); - } - - - -//------------------------------------------------------------------------------------------------------------ - -CJournalFileUnitTestScenarioBase::CJournalFileUnitTestScenarioBase(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer), iCleanupNeeded(ETrue) - { - } - -CJournalFileUnitTestScenarioBase::~CJournalFileUnitTestScenarioBase() - { - iFs.Close(); - iLoader.Close(); - delete iTargetFileName; - delete iBackupFileName; - } - - -void CJournalFileUnitTestScenarioBase::ImplTestStepPreambleL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestScenarioBase Preamble")); - iJournalFileName.Set(GetTargetFilePathFromConfigL()); - User::LeaveIfError(iFs.Connect()); - User::LeaveIfError(iLoader.Connect()); - iTargetFileName = HBufC::NewL(KMaxFileName); - iBackupFileName = HBufC::NewL(KMaxFileName); - TParsePtrC journalFilePathParse(iJournalFileName); - TPtr ptr(iTargetFileName->Des()); - ptr.Append(journalFilePathParse.DriveAndPath()); - ptr.Append(_L("journalfile_oom_test_dummyfile.txt")); - iJournaldrive = journalFilePathParse.Drive(); - SetTestStepResult(EPass); - - } - -void CJournalFileUnitTestScenarioBase::ImplTestStepL() - { - CleanupStack::PushL(TCleanupItem(&CJournalFileUnitTestScenarioBase::InTestCleanup, this)); - ImplTestCaseScenarioL(); - CleanupStack::PopAndDestroy(this); - } - -void CJournalFileUnitTestScenarioBase::ImplTestStepPostambleL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestScenarioBase Postamble")); - - delete iTargetFileName; - iTargetFileName=0; - delete iBackupFileName; - iBackupFileName=0; - iFs.Close(); - iLoader.Close(); - TRAP_IGNORE(DeleteFileL(iJournalFileName)); - } - -/*static*/void CJournalFileUnitTestScenarioBase::InTestCleanup(TAny* aObject) - { - CJournalFileUnitTestScenarioBase* object=static_cast(aObject); - object->INFO_PRINTF1(_L("CJournalFileUnitTestScenarioBase::InTestCleanup()")); - if(object->iCleanupNeeded) - { - TRAP_IGNORE(object->DeleteFileL(object->iJournalFileName)); - } - } - -//------------------------------------------------------------------------------------------------------------ -CJournalFileUnitTestAdd::CJournalFileUnitTestAdd(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer) - { - SetTestStepName(KJournalFileUnitTestAdd); - } -void CJournalFileUnitTestAdd::ImplTestCaseScenarioL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestAdd in test step")); - CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive); - journalFile->AddL(*iTargetFileName); - CleanupStack::PopAndDestroy(journalFile); - } -//------------------------------------------------------------------------------------------------------------ -CJournalFileUnitTestTemp::CJournalFileUnitTestTemp(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer) - { - SetTestStepName(KJournalFileUnitTestTemp); - } - -void CJournalFileUnitTestTemp::ImplTestCaseScenarioL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestTemp in test step")); - CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive); - journalFile->TemporaryL(*iTargetFileName); - CleanupStack::PopAndDestroy(journalFile); - } - -//------------------------------------------------------------------------------------------------------------ -CJournalFileUnitTestRemove::CJournalFileUnitTestRemove(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer) - { - SetTestStepName(KJournalFileUnitTestRemove); - } - -void CJournalFileUnitTestRemove::ImplTestCaseScenarioL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestRemove in test step")); - TPtr backupFileNamePtr(iBackupFileName->Des()); - CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive); - journalFile->RemoveL(*iTargetFileName, backupFileNamePtr); - CleanupStack::PopAndDestroy(journalFile); - } -//------------------------------------------------------------------------------------------------------------ -CJournalFileUnitTestRead::CJournalFileUnitTestRead(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer) - { - iCleanupNeeded=EFalse; - SetTestStepName(KJournalFileUnitTestRead); - } - -void CJournalFileUnitTestRead::ImplTestCaseScenarioL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestRead in test step")); - CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive); - CleanupStack::PopAndDestroy(journalFile); - } -//------------------------------------------------------------------------------------------------------------ -CJournalFileUnitTestEvent::CJournalFileUnitTestEvent(CStsTestServer &aStsTestServer): CJournalFileUnitTestScenarioBase(aStsTestServer) - { - } - -void CJournalFileUnitTestEvent::ImplTestCaseScenarioL() - { - INFO_PRINTF1(_L("CJournalFileUnitTestEvent in test step")); - CJournalFile* journalFile = CJournalFile::NewLC(iFs, iLoader, iJournalFileName, iJournaldrive); - journalFile->EventL(ECommitted); - CleanupStack::PopAndDestroy(journalFile); - } -//------------------------------------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------------------------------------ -CJournalUnitTest::CJournalUnitTest(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer) - { - // Call base class method to set up the human readable name for logging - SetTestStepName(KJournalUnitTest); - } - -CJournalUnitTest::~CJournalUnitTest() - { - delete iTestFileInterface; - iFs.Close(); - iLoader.Close(); - } - -void CJournalUnitTest::ImplTestStepPreambleL() - { - INFO_PRINTF1(_L("JournalFileUnitTest Preamble")); - iJournalPathInIni.Set(GetTargetFilePathFromConfigL()); - iTrID = GetTransactionIdFromConfigL(); - User::LeaveIfError(iFs.Connect()); - User::LeaveIfError(iLoader.Connect()); - iTestFileInterface = CTestFile::NewL(iFs); - SetTestStepResult(EPass); - - } - -void CJournalUnitTest::ImplTestStepL() - { - INFO_PRINTF1(_L("JournalUnitTest in test step")); - SetTestStepResult(EPass); - TestCase1L(); - } - -void CJournalUnitTest::ImplTestStepPostambleL() - { - INFO_PRINTF1(_L("JournalFileUnitTest Postamble")); - delete iTestFileInterface; - iTestFileInterface=0; - iFs.Close(); - iLoader.Close(); - } - -void CJournalUnitTest::TestCase1L() - { - INFO_PRINTF1(_L("JournalFileUnitTest Test Case1")); - -//------------------------------------------------------------------------------------- -//Steps: -// 1.) create a corrupt journal file on C drive (by writing invalid event into the file /eg: with a value of EAddedFile+1000/) -// 2.) Create a journal -// 3.) Add a file to the journal on C drive by invoking CJounral::AddL() -// 4.) this will create a new journal file object representing journal activity on drive C, however due to the corrupt file being already on the C drive CJournalFile::NewLC will throw KErrCorrupt -// 5.) expect KErrCorrupt -// note: the purpose of this testcase to excersise the conditional branches in CJournal::PrepareToWriteL -//------------------------------------------------------------------------------------- - - TInt err=0; - TDriveUnit driveUnitC(KDriveLetterC); - TDriveUnit driveUnitE(KDriveLetterE); - - - HBufC* journalFileName = HBufC::NewLC(KMaxFileName); - HBufC* targetFileName = HBufC::NewLC(KMaxFileName); - - TPtr journalFileNamePtr(journalFileName->Des()); - journalFileNamePtr.Append(driveUnitC.Name()); - CJournal::CreateJournalFileNameL(iTrID, iJournalPathInIni, journalFileNamePtr); - - //create file path base (eg: drive:\path\) - TPtr targetFileNameBasePtr(targetFileName->Des()); - targetFileNameBasePtr.Append(driveUnitC.Name()); - targetFileNameBasePtr.Append(iJournalPathInIni); - - //open up the file via the test file interface (for writing corrupt data) - iTestFileInterface->CreateJournalFileL(journalFileNamePtr, defaultJournalFileMode); - TInt seekPosition=0; - TIntValue intValue = {0}; - intValue.int32=static_cast(EAddedFile)+1000; //corrupt data in file (eg: write operation value to an invalid value) - //corrupt data in journal file - iTestFileInterface->SeekInJournalFileL(ESeekStart, seekPosition); - iTestFileInterface->WriteIntToJournalFileL(intValue, Mode32Bit); - iTestFileInterface->CloseJournalFile(); - - TPtr targetFileNamePtr(targetFileNameBasePtr); - targetFileNamePtr.Append(_L("dummyadd.txt")); - - //create a journal and add a file on C drive: that will force CJournalFile to read in and process the - //previously created corrupt file. As the file contains corrupt information CJournalFile construction is expected to fail with KErrCorrupt - CJournal* journal = CJournal::NewLC(iFs, iLoader, iTrID, iJournalPathInIni); - TRAP(err, journal->AddL(targetFileNamePtr)); - if(err!=KErrCorrupt) - { - ERR_PRINTF2(_L("CJournal::AddL() returned incorrect error code. KErrCorrupt is expected and %d is returned!"), err); - SetTestStepResult(EFail); - } - CleanupStack::PopAndDestroy(journal); journal=0; - - //clean up: delete created journal file and drive file (.drv) - DeleteFileL(*journalFileName); - //reuse targetFileName buffer to create .drv filename to delete that file - *targetFileName=KEmptyString; - targetFileNamePtr.Set(targetFileName->Des()); - CJournal::CreateDrvFileNameL(iTrID, iJournalPathInIni, targetFileNamePtr); - TRAP_IGNORE(DeleteFileL(targetFileNamePtr)); //clean up .drv file in case it's been created but avoid causing leave in case it hasn't - - CleanupStack::PopAndDestroy(targetFileName); - CleanupStack::PopAndDestroy(journalFileName); - } - -//------------------------------------------------------------------------------------------------------------ - - -CJournalUnitTestScenarioBase::CJournalUnitTestScenarioBase(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer) - { - iDriveUnitC = _L("c"); - iDriveUnitE = _L("e"); - } - -CJournalUnitTestScenarioBase::~CJournalUnitTestScenarioBase() - { - iFs.Close(); - iLoader.Close(); - delete iTargetFileName; - delete iJournalFileName; - delete iDrvFileName; - delete iBackupFileName; - } - -void CJournalUnitTestScenarioBase::ImplTestStepPreambleL() - { - INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::ImplTestStepPreambleL()")); - iJournalPathInIni.Set(GetTargetFilePathFromConfigL()); - iTrID = GetTransactionIdFromConfigL(); - User::LeaveIfError(iFs.Connect()); - User::LeaveIfError(iLoader.Connect()); - iTargetFileName = HBufC::NewL(KMaxFileName); - iJournalFileName = HBufC::NewL(KMaxFileName); - iDrvFileName = HBufC::NewL(KMaxFileName); - iBackupFileName = HBufC::NewL(KMaxFileName); - - TPtr ptr(iJournalFileName->Des()); - ptr.Append(iDriveUnitC.Name()); - ptr.Append(iJournalPathInIni); - ptr.AppendNumUC(iTrID, EHex); - ptr.Append(KKournalFileExt); - - ptr.Set(iTargetFileName->Des()); - ptr.Append(iDriveUnitC.Name()); - ptr.Append(iJournalPathInIni); - - ptr.Set(iDrvFileName->Des()); - CJournal::CreateDrvFileNameL(iTrID, iJournalPathInIni, ptr); - - SetTestStepResult(EPass); - } - -void CJournalUnitTestScenarioBase::ImplTestStepL() - { - INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::ImplTestStepL()")); - - TPtr basePathPtr(iTargetFileName->Des()); - TPtr fileNamePtr(basePathPtr); - TCleanupItem inTestCleanupItem(&CJournalUnitTestScenarioBase::InTestCleanUp, this); - CleanupStack::PushL(inTestCleanupItem); - - CJournal* journal = CJournal::NewLC(iFs, iLoader, iTrID, iJournalPathInIni); - - *iBackupFileName=KEmptyString; - TPtr backupFileNamePtr(iBackupFileName->Des()); - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("journal_oom_test_dummyremovefile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - journal->RemoveL(fileNamePtr, backupFileNamePtr); - *iBackupFileName=KEmptyString; - backupFileNamePtr.Set(iBackupFileName->Des()); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - journal->RemoveL(fileNamePtr, backupFileNamePtr); - - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("journal_oom_test_dummytempfile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - journal->TemporaryL(fileNamePtr); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - journal->TemporaryL(fileNamePtr); - - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("journal_oom_test_dummyaddfile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - journal->AddL(fileNamePtr); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - journal->AddL(fileNamePtr); - - ScenarioEndL(journal); - CleanupStack::PopAndDestroy(journal); - CleanupStack::PopAndDestroy(this); - } - -void CJournalUnitTestScenarioBase::ImplTestStepPostambleL() - { - INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::ImplTestStepPostambleL()")); - delete iTargetFileName; - iTargetFileName=0; - delete iJournalFileName; - iJournalFileName=0; - delete iDrvFileName; - iDrvFileName=0; - delete iBackupFileName; - iBackupFileName=0; - iFs.Close(); - iLoader.Close(); - } - -/*static*/ void CJournalUnitTestScenarioBase::InTestCleanUp(TAny* aObject) - { - CJournalUnitTestScenarioBase* object=static_cast(aObject); - object->INFO_PRINTF1(_L("CJournalUnitTestScenarioBase::InTestCleanUp()")); - - TPtr ptr(object->iJournalFileName->Des()); - ptr.Replace(0, 2, object->iDriveUnitC.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on C drive - ptr.Replace(0, 2, object->iDriveUnitE.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on E drive - TRAP_IGNORE(object->DeleteFileL(*(object->iDrvFileName))); //delete drv file on system drive - } - -//------------------------------------------------------------------------------------------------------------ - -CJournalUnitTestInstall::CJournalUnitTestInstall(CStsTestServer &aStsTestServer): CJournalUnitTestScenarioBase(aStsTestServer) - { - // Call base class method to set up the human readable name for logging - SetTestStepName(KJournalUnitTestInstall); - } - -void CJournalUnitTestInstall::ScenarioEndL(CJournal* aJournal) - { - aJournal->CommitL(); - } - -//------------------------------------------------------------------------------------------------------------ - -CJournalUnitTestRollback::CJournalUnitTestRollback(CStsTestServer &aStsTestServer): CJournalUnitTestScenarioBase(aStsTestServer) - { - // Call base class method to set up the human readable name for logging - SetTestStepName(KJournalUnitTestRollback); - } - -void CJournalUnitTestRollback::ScenarioEndL(CJournal* aJournal) - { - aJournal->RollBackL(); - } - -//------------------------------------------------------------------------------------------------------------ - - -CIntegrityServicesTestScenarioBase::CIntegrityServicesTestScenarioBase(CStsTestServer &aStsTestServer): CStsBaseTestStep(aStsTestServer) - { - iDriveUnitC = _L("c"); - iDriveUnitE = _L("e"); - } - -CIntegrityServicesTestScenarioBase::~CIntegrityServicesTestScenarioBase() - { - iFs.Close(); - iLoader.Close(); - delete iTargetFileName; - delete iJournalFileName; - delete iDrvFileName; - delete iBackupFileName; - delete iTransactionBackupDirectoryPath; - } - -void CIntegrityServicesTestScenarioBase::ImplTestStepPreambleL() - { - INFO_PRINTF1(_L("IntegrityServicesTestOOM Preamble")); - iTargetPathInIni.Set(GetTargetFilePathFromConfigL()); - iTrID = GetTransactionIdFromConfigL(); - User::LeaveIfError(iFs.Connect()); - User::LeaveIfError(iLoader.Connect()); - iTargetFileName = HBufC::NewL(KMaxFileName); - iJournalFileName = HBufC::NewL(KMaxFileName); - iDrvFileName = HBufC::NewL(KMaxFileName); - iBackupFileName = HBufC::NewL(KMaxFileName); - iTransactionBackupDirectoryPath = HBufC::NewL(KMaxFileName); - - TPtr ptr(iJournalFileName->Des()); - ptr.Append(iDriveUnitC.Name()); - CJournal::CreateJournalFileNameL(iTrID, KTransactionPath, ptr); - - ptr.Set(iDrvFileName->Des()); - CJournal::CreateDrvFileNameL(iTrID, KTransactionPath, ptr); - - TParsePtrC parse(*iDrvFileName); - ptr.Set(iTransactionBackupDirectoryPath->Des()); //this is the directory that holds the backup files for the transaction - ptr.Append(parse.DriveAndPath()); - ptr.Append(parse.Name()); - - ptr.Set(iTargetFileName->Des()); - ptr.Append(iDriveUnitC.Name()); - ptr.Append(iTargetPathInIni); - NormalizeDirectoryName(ptr); //removes trailing slash - - SetTestStepResult(EPass); - } - -void CIntegrityServicesTestScenarioBase::ImplTestStepL() - { - TPtr basePathPtr(iTargetFileName->Des()); - TPtr fileNamePtr(basePathPtr); - RFile newFile; - TUint fileMode(EFileShareExclusive | EFileWrite); - - TCleanupItem inTestCleanupItem(&CIntegrityServicesTestScenarioBase::InTestCleanUp, this); - CleanupStack::PushL(inTestCleanupItem); - - CIntegrityServices* integrityServices = CIntegrityServices::NewLC(iTrID); - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyremovefile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - integrityServices->RemoveL(fileNamePtr); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - integrityServices->RemoveL(fileNamePtr); - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyregistertempfile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - integrityServices->RegisterTemporaryL(fileNamePtr); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - integrityServices->RegisterTemporaryL(fileNamePtr); - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("\\integrityservices_oom_test_dummycreatetempfile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - CleanupClosePushL(newFile); - integrityServices->CreateTemporaryL(fileNamePtr, newFile, fileMode); - CleanupStack::PopAndDestroy(&newFile); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - CleanupClosePushL(newFile); - integrityServices->CreateTemporaryL(fileNamePtr, newFile, fileMode); - CleanupStack::PopAndDestroy(&newFile); - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyaddfile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - integrityServices->RegisterNewL(fileNamePtr); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - integrityServices->RegisterNewL(fileNamePtr); - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("\\integrityservices_oom_test_dummycreatenewfile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - CleanupClosePushL(newFile); - integrityServices->CreateNewL(fileNamePtr, newFile, fileMode); - CleanupStack::PopAndDestroy(&newFile); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - CleanupClosePushL(newFile); - integrityServices->CreateNewL(fileNamePtr, newFile, fileMode); - CleanupStack::PopAndDestroy(&newFile); - - fileNamePtr.Set(basePathPtr); - fileNamePtr.Append(_L("\\integrityservices_oom_test_dummyoverwritefile.txt")); - basePathPtr.Replace(0, 2, iDriveUnitC.Name()); - CleanupClosePushL(newFile); - integrityServices->OverwriteL(fileNamePtr, newFile, fileMode); - CleanupStack::PopAndDestroy(&newFile); - basePathPtr.Replace(0, 2, iDriveUnitE.Name()); - CleanupClosePushL(newFile); - integrityServices->OverwriteL(fileNamePtr, newFile, fileMode); - CleanupStack::PopAndDestroy(&newFile); - - ScenarioEndL(integrityServices); - CleanupStack::PopAndDestroy(integrityServices); - CleanupStack::PopAndDestroy(this); - } - -void CIntegrityServicesTestScenarioBase::ImplTestStepPostambleL() - { - INFO_PRINTF1(_L("IntegrityServicesTestOOM Postamble")); - delete iTargetFileName; - iTargetFileName=0; - delete iJournalFileName; - iJournalFileName=0; - delete iDrvFileName; - iDrvFileName=0; - delete iBackupFileName; - iBackupFileName=0; - delete iTransactionBackupDirectoryPath; - iTransactionBackupDirectoryPath=0; - iFs.Close(); - iLoader.Close(); - } - -/*static*/void CIntegrityServicesTestScenarioBase::InTestCleanUp(TAny* aObject) - { - CIntegrityServicesTestScenarioBase* object=static_cast(aObject); - //first clean up transaction related files - TPtr ptr(object->iJournalFileName->Des()); - ptr.Replace(0, 2, object->iDriveUnitC.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on C drive - ptr.Replace(0, 2, object->iDriveUnitE.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete journal file on E drive - TRAP_IGNORE(object->DeleteFileL(*(object->iDrvFileName))); //delete drv file on system drive - ptr.Set(object->iTransactionBackupDirectoryPath->Des()); - ptr.Replace(0, 2, object->iDriveUnitC.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete backup directory on C drive - ptr.Replace(0, 2, object->iDriveUnitE.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete backup directory on E drive - - //then clean up all the added/created/etc... files - ptr.Set(object->iTargetFileName->Des()); - ptr.Replace(0, 2, object->iDriveUnitC.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete target dir on C drive - ptr.Replace(0, 2, object->iDriveUnitE.Name()); - TRAP_IGNORE(object->DeleteFileL(ptr)); //delete target dir on E drive - - } - -void CIntegrityServicesTestScenarioBase::NormalizeDirectoryName(TDes& aFileName) -{ - TInt lastCharPos = aFileName.Length() - 1; - if ( lastCharPos >= 0 && aFileName[lastCharPos] == KPathDelimiter && - aFileName.Locate(KPathDelimiter) != lastCharPos) // Take care not to remove slash from "c:\" and the like - { - aFileName.Delete(lastCharPos, 1); - } -} - -//------------------------------------------------------------------------------------------------------------ - -CIntegrityServicesTestInstall::CIntegrityServicesTestInstall(CStsTestServer &aStsTestServer): CIntegrityServicesTestScenarioBase(aStsTestServer) - { - // Call base class method to set up the human readable name for logging - SetTestStepName(KIntegrityservicesUnitTestInstall); - } - -void CIntegrityServicesTestInstall::ScenarioEndL(Usif::CIntegrityServices* aIntegrServ) - { - aIntegrServ->CommitL(); - } - -//------------------------------------------------------------------------------------------------------------ - -CIntegrityServicesTestRollback::CIntegrityServicesTestRollback(CStsTestServer &aStsTestServer): CIntegrityServicesTestScenarioBase(aStsTestServer) - { - // Call base class method to set up the human readable name for logging - SetTestStepName(KIntegrityservicesUnitTestRollback); - } - -void CIntegrityServicesTestRollback::ScenarioEndL(Usif::CIntegrityServices* aIntegrServ) - { - aIntegrServ->RollBackL(); - }