diff -r 000000000000 -r bde4ae8d615e os/persistentdata/persistentstorage/store/TCRYPT/t_storcrypt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/persistentdata/persistentstorage/store/TCRYPT/t_storcrypt.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,766 @@ +// Copyright (c) 1998-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: +// + +#include +#include +#include +#include +#include +#include + +const TInt KTestCleanupStack=0x20; + +// This is a path specification and should not be used as is +_LIT(KFileLocationSpec, "Z:\\STOR-TST\\T_CRYPT.DAT"); +const TUint8* KTestData=_S8("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); +const TInt KTestLength=36; +const TInt KTestTotal=KTestLength*(KTestLength+1); +const TPtrC8 KTestDes(KTestData,KTestLength); +const TPBPassword KTestPassword(_L("The password")); + +LOCAL_D CTrapCleanup* TheTrapCleanup; +LOCAL_D RTest test(_L("t_storcrypt")); +LOCAL_D RFs TheFs; +LOCAL_D TStreamId TheTempId; +LOCAL_D TBuf8 TheBuf; + +LOCAL_D CPBEncryptSet* thePBEKey; + +/** +@SYMTestCaseID SYSLIB-STORE-CT-1126 +@SYMTestCaseDesc Tests for writing and reading an encrypted data to store +@SYMTestPriority High +@SYMTestActions Encrypt data and write to a store.Read the encrypted data for decrypting and compare the result. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void testEncryptionDataL() + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1126 ")); + CPBEncryptElement* elementKey = CPBEncryptElement::NewLC(KTestPassword); + TParsePtrC parse(KFileLocationSpec); + + RFileWriteStream writeStream; + writeStream.PushL(); + User::LeaveIfError(writeStream.Replace(TheFs, parse.NameAndExt(), EFileWrite)); + + REncryptStream encryptStream; + encryptStream.OpenLC(writeStream, *elementKey); + + encryptStream << KTestDes; + encryptStream.CommitL(); + writeStream.CommitL(); + CleanupStack::PopAndDestroy(2); // encryptStream, writeStream + + const CPBEncryptionData& encryptData = elementKey->EncryptionData(); + + CPBEncryptElement* newElementKey = CPBEncryptElement::NewLC(encryptData, KTestPassword); + + RFileReadStream readStream; + readStream.PushL(); + User::LeaveIfError(readStream.Open(TheFs, parse.NameAndExt(), EFileWrite)); + + RDecryptStream decryptStream; + decryptStream.OpenLC(readStream, *newElementKey); + + decryptStream >> TheBuf; + + test(KTestDes == TheBuf); + + CleanupStack::PopAndDestroy(4, elementKey); + } + +/** +@SYMTestCaseID SYSLIB-STORE-CT-1127 +@SYMTestCaseDesc Stream encryption test. + Tests the functionality of REncryptStream and RDecryptStream classes +@SYMTestPriority High +@SYMTestActions Tests for writing an encrypted string to a stream,reading back the data,decrypt and + check with the original data. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void testSimpleStreamEncryptionL() + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1127 ")); + CPBEncryptElement* elementKey = CPBEncryptElement::NewL(KTestPassword); + CleanupStack::PushL(elementKey); + TParsePtrC parse(KFileLocationSpec); + + RFileWriteStream writeStream; + writeStream.PushL(); + User::LeaveIfError(writeStream.Replace(TheFs, parse.NameAndExt(), EFileWrite)); + + REncryptStream encryptStream; + encryptStream.OpenLC(writeStream, *elementKey); + + encryptStream << KTestDes; + encryptStream.CommitL(); + writeStream.CommitL(); + CleanupStack::PopAndDestroy(2); // encryptStream, writeStream + + RFileReadStream readStream; + readStream.PushL(); + User::LeaveIfError(readStream.Open(TheFs, parse.NameAndExt(), EFileWrite)); + + RDecryptStream decryptStream; + decryptStream.OpenLC(readStream, *elementKey); + + decryptStream >> TheBuf; + + test(KTestDes == TheBuf); + + CleanupStack::PopAndDestroy(3, elementKey); // decryptStream, readStream + } + +/** +@SYMTestCaseID PDS-STORE-CT-4042 +@SYMTestCaseDesc Tests for attaching write stream and read stream to an encrypted stream. +@SYMTestPriority High +@SYMTestActions Encrypt data and write to a store.Read the encrypted data for decrypting and compare the result. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF135804 +*/ +LOCAL_C void testEncryptionDataAttachL() + { + test.Next(_L(" @SYMTestCaseID:PDS-STORE-CT-4042 ")); + CPBEncryptElement* elementKey = CPBEncryptElement::NewLC(KTestPassword); + TParsePtrC parse(KFileLocationSpec); + + RFileWriteStream writeStream; + writeStream.PushL(); + User::LeaveIfError(writeStream.Replace(TheFs, parse.NameAndExt(), EFileWrite)); + + REncryptStream encryptStream; + TRAPD(ret, encryptStream.AttachL(writeStream, *elementKey)); + test(ret == KErrNone); + encryptStream.PushL(); + + encryptStream << KTestDes; + encryptStream.CommitL(); + writeStream.CommitL(); + + CleanupStack::PopAndDestroy(2); // encryptStream, writeStream + + const CPBEncryptionData& encryptData = elementKey->EncryptionData(); + + CPBEncryptElement* newElementKey = CPBEncryptElement::NewLC(encryptData, KTestPassword); + + RFileReadStream readStream; + readStream.PushL(); + User::LeaveIfError(readStream.Open(TheFs, parse.NameAndExt(), EFileWrite)); + + + RDecryptStream decryptStream; + decryptStream.AttachL(readStream, *newElementKey); + decryptStream.PushL(); + + decryptStream >> TheBuf; + + test(KTestDes == TheBuf); + + CleanupStack::PopAndDestroy(4, elementKey); + } + + +// +// Test writing to a store +// +// Writes two streams in a store - the first containing sections of +// the test data repeated, and the the second containing the test data +// and the id of the first stream. Returns the id of the second +// stream. +// +LOCAL_C TStreamId testWriteL(CStreamStore& aStore) + { + test.Next(_L("Writing...")); + RStoreWriteStream out; + TStreamId id=out.CreateLC(aStore); + for (TInt i=0;i<=KTestLength;++i) + { + out.WriteL(KTestDes,i); + out.WriteL(&KTestData[i],KTestLength-i); + } + out.CommitL(); + out.Close(); + TStreamId head=out.CreateL(aStore); + out<=0;--i) + { + aStream.ReadL(TheBuf,i); + test(TheBuf.Length()==i); + TheBuf.SetMax(); + aStream.ReadL(&TheBuf[i],KTestLength-i); + TheBuf.SetLength(KTestLength); + test(TheBuf==KTestDes); + } + } + +// +// Test reading from a store +// +// Reads back and checks the data written to a store by testWriteL(), +// given the store and the id returned. +// +LOCAL_C void testReadL(const CStreamStore& aStore,TStreamId anId) + { + test.Next(_L("Reading...")); + RStoreReadStream in; + in.OpenLC(aStore,anId); + in>>TheBuf; + TStreamId id; + in>>id; + in.Close(); + in.OpenL(aStore,id); + testReadL(in); + CleanupStack::PopAndDestroy(); + } + +// +// Test copying from one stream to another. +// +// +// +LOCAL_C void testCopyL(RWriteStream& aWriteStream,RReadStream& aReadStream) + { + test.Next(_L("Copying")); + for (TInt i=KTestLength;i>=0;--i) + { + aWriteStream.WriteL(aReadStream,i); + aReadStream.ReadL(aWriteStream,KTestLength-i); + } + } +/** +@SYMTestCaseID SYSLIB-STORE-CT-1128 +@SYMTestCaseDesc Tests for writing to a store +@SYMTestPriority High +@SYMTestActions Attempt for writing to a root store and empty store. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void testWriteL() + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1128 Replacing host file ")); + + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + CFileStore* file=CPermanentFileStore::ReplaceLC(TheFs,parse.NameAndExt(),EFileWrite); + file->SetTypeL(file->Layout()); +// + test.Next(_L("Writing root store")); + RStoreWriteStream stream; + TStreamId embed=stream.CreateL(*file); + CEmbeddedStore* store=CEmbeddedStore::NewLC(stream); + + CSecureStore* secure=CSecureStore::NewLC(*store, *thePBEKey); + + store->SetRootL(testWriteL(*secure)); + CleanupStack::PopAndDestroy(secure); + store->CommitL(); + CleanupStack::PopAndDestroy(); + + __UHEAP_MARK; + TStreamId root=stream.CreateLC(*file); + REncryptStream encrypt; + encrypt.AttachLC(stream,*thePBEKey); + + encrypt<<_L8(" root")<SetRootL(root); +// + test.Next(_L("Writing temp store")); + embed=stream.CreateL(*file); + store=CEmbeddedStore::NewLC(stream); + secure = CSecureStore::NewLC(*store, *thePBEKey); + + store->SetRootL(testWriteL(*secure)); + CleanupStack::PopAndDestroy(secure); + store->CommitL(); + CleanupStack::PopAndDestroy(); + + __UHEAP_MARK; + TheTempId=stream.CreateLC(*file); + encrypt.OpenLC(stream,*thePBEKey); + + encrypt<<_L8(" temp")<CommitL(); + CleanupStack::PopAndDestroy(file); + } +/** +@SYMTestCaseID SYSLIB-STORE-CT-1129 +@SYMTestCaseDesc Tests for reading from a store +@SYMTestPriority High +@SYMTestActions Attempt for reading from a root store and temporary store +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void testReadL() + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1129 Opening host file ")); + + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + CFileStore* file=CFileStore::OpenLC(TheFs,parse.NameAndExt(),EFileRead); +// + test.Next(_L("Reading from root store")); + TStreamId root=file->Root(); + RStoreReadStream stream; + stream.OpenLC(*file,root); + RDecryptStream decrypt; + decrypt.AttachLC(stream,*thePBEKey); + + TStreamId embed; + TBuf8<5> b; + decrypt>>b>>embed; + test(b==_L8(" root")); + CleanupStack::PopAndDestroy(2); + stream.OpenL(*file,embed); + CEmbeddedStore* store=CEmbeddedStore::FromLC(stream); + CSecureStore* secure=NULL; + secure=CSecureStore::NewLC(*store,*thePBEKey); + + testReadL(*secure,store->Root()); + CleanupStack::PopAndDestroy(2); +// + test.Next(_L("Reading from temp store")); + stream.OpenLC(*file,TheTempId); + decrypt.OpenLC(stream,*thePBEKey); + + decrypt>>b>>embed; + test(b==_L8(" temp")); + CleanupStack::PopAndDestroy(2); + stream.OpenL(*file,embed); + store=CEmbeddedStore::FromLC(stream); + secure=CSecureStore::NewLC(*store,*thePBEKey); + + testReadL(*secure,store->Root()); +// + CleanupStack::PopAndDestroy(3); + } +/** +@SYMTestCaseID SYSLIB-STORE-CT-1130 +@SYMTestCaseDesc Tests copying from one stream to another stream +@SYMTestPriority High +@SYMTestActions Attempt for copying using different transfer sizes +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void testCopyL() + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1130 Opening host file ")); + + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + CFileStore* file=CFileStore::OpenLC(TheFs,parse.NameAndExt(),EFileRead|EFileWrite); +// + test.Next(_L("Opening source (root) store")); + TStreamId root=file->Root(); + RStoreReadStream src; + src.OpenLC(*file,root); + RDecryptStream decrypt; + decrypt.OpenLC(src,*thePBEKey); + + TBuf8<5> b; + TStreamId embed; + decrypt>>b>>embed; + test(b==_L8(" root")); + CleanupStack::PopAndDestroy(2); // src, decrypt + src.OpenL(*file,embed); + CEmbeddedStore* source=CEmbeddedStore::FromLC(src); + CSecureStore* ssource=NULL; + ssource=CSecureStore::NewLC(*source,*thePBEKey); + + test.Next(_L("Creating target store")); + RStoreWriteStream trg; + trg.CreateL(*file); + CEmbeddedStore* target=CEmbeddedStore::NewLC(trg); + CSecureStore* starget=NULL; + starget=CSecureStore::NewLC(*target,*thePBEKey); + + test.Next(_L("Copying using small transfers")); + RStoreReadStream in; + in.OpenL(*ssource,source->Root()); + in>>TheBuf; + TStreamId copyId; + in>>copyId; + in.Close(); + in.OpenL(*ssource,copyId); + RStoreWriteStream out; + TStreamId id=out.CreateL(*starget); + testCopyL(out,in); + out.CommitL(); + out.Close(); + in.Close(); + in.OpenL(*starget,id); + testReadL(in); + in.Close(); +// + test.Next(_L("Copying using a single big transfer")); + in.OpenL(*ssource,copyId); + id=out.CreateL(*starget); + in.ReadL(out,KTestTotal); + out.CommitL(); + out.Close(); + in.Close(); + in.OpenL(*starget,id); + testReadL(in); + in.Close(); + in.OpenL(*ssource,copyId); + id=out.CreateL(*starget); + out.WriteL(in,KTestTotal); + out.CommitL(); + out.Close(); + in.Close(); + in.OpenL(*starget,id); + testReadL(in); + in.Close(); +// + CleanupStack::PopAndDestroy(5); + } +/** +@SYMTestCaseID SYSLIB-STORE-CT-1131 +@SYMTestCaseDesc Writing and reading back a long stream test +@SYMTestPriority High +@SYMTestActions Attempt to write long data to a stream and read back and test for the integrity of the data. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void testBugL() + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1131 Opening host file ")); + + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + CFileStore* file=CDirectFileStore::ReplaceLC(TheFs,parse.NameAndExt(),EFileRead|EFileWrite); + file->SetTypeL(file->Layout()); + CSecureStore* secure=NULL; + + secure=CSecureStore::NewLC(*file,*thePBEKey); + + test.Next(_L("Writing long stream")); + RStoreWriteStream out; + TStreamId id=out.CreateLC(*secure); + TInt ii; + for (ii=0;ii<400;++ii) + out<<_L("a goodly length of data"); + out.CommitL(); + CleanupStack::PopAndDestroy(); + file->SetRootL(out.CreateLC(*secure)); + out<<_L("spam")<CommitL(); + CleanupStack::PopAndDestroy(); +// + test.Next(_L("Opening host file")); + file=CFileStore::OpenLC(TheFs,parse.NameAndExt(),EFileRead); + secure=CSecureStore::NewLC(*file,*thePBEKey); +// + TBuf<30> buf; + test.Next(_L("Reading")); + RStoreReadStream in; + in.OpenLC(*secure,file->Root()); + in>>buf>>id; + CleanupStack::PopAndDestroy(); + test(buf==_L("spam")); + in.OpenLC(*secure,id); + for (ii=0;ii<400;++ii) + { + in>>buf; + test (buf==_L("a goodly length of data")); + } + CleanupStack::PopAndDestroy(3); + } + +/** +@SYMTestCaseID PDS-STORE-CT-4016 +@SYMTestCaseDesc Tests for CPBEncryptElement +@SYMTestPriority High +@SYMTestActions Externalizing and internalizing CPBEncryptionData. Tests for constructors. +@SYMTestExpectedResults Externalizing must not fail. After internalization CPBEncryptionData object should + be valid. Object created with all constructors should be valid. +@SYMDEF DEF135804 +*/ +LOCAL_C void testForgottenAPI_L() + { + test.Next(_L("@SYMTestCaseID PDS-STORE-CT-4016: Tests for CPBEncryptElement")); + CBufFlat* buffer = CBufFlat::NewL(10*1024); + CleanupStack::PushL(buffer); + RBufWriteStream wstr(*buffer,0); + + CPBEncryptElement* elementKey = CPBEncryptElement::NewLC(KTestPassword); + const CPBEncryptionData& encryptData = elementKey->EncryptionData(); + wstr << encryptData; + CleanupStack::PopAndDestroy(); + + wstr.CommitL(); + wstr.Close(); + + RBufReadStream rstr(*buffer,0); + CPBEncryptionData* enData = CPBEncryptionData::NewL(rstr); + test(enData != NULL); + delete enData; + enData = NULL; + rstr.Close(); + rstr.Open(*buffer,0); + enData = CPBEncryptionData::NewLC(rstr); + test(enData != NULL); + CleanupStack::PopAndDestroy(); + enData = NULL; + + rstr.Close(); + + CleanupStack::PopAndDestroy(); + } + +/** +@SYMTestCaseID PDS-STORE-CT-4019 +@SYMTestCaseDesc Tests adding and deleting a stream from securestore +@SYMTestPriority High +@SYMTestActions Create a new stream and Delete it again +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF135804 +*/ +LOCAL_C void testExtendDeleteL() + { + test.Next(_L("@SYMTestCaseID PDS-STORE-CT-4019")); + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + test.Next(_L("Testing Extend")); + CFileStore* file=CPermanentFileStore::ReplaceLC(TheFs,parse.NameAndExt(),EFileRead|EFileWrite); + file->SetTypeL(file->Layout()); + CSecureStore* secure=NULL; + + secure=CSecureStore::NewLC(*file,*thePBEKey); + TStreamId id = secure->ExtendL(); + test(id != NULL); + test.Next(_L("Testing Delete")); + TRAPD(r, secure->DeleteL(id)); + test(r == KErrNone); + TRAP(r, secure->DeleteL(id)); + test(r == KErrNotFound); + + CleanupStack::PopAndDestroy(2); + + } + +/** +@SYMTestCaseID PDS-STORE-CT-4020 +@SYMTestCaseDesc Tests writing and replacing a stream from securestore +@SYMTestPriority High +@SYMTestActions Create a new stream in the store and then open it for replacement +@SYMTestExpectedResults stream is created and writtenn to successfully +@SYMDEF DEF135804 +*/ +LOCAL_C void testWriteReplaceL() + { + test.Next(_L("@SYMTestCaseID PDS-STORE-CT-4020")); + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + test.Next(_L("Testing Extend")); + CFileStore* file=CPermanentFileStore::ReplaceLC(TheFs,parse.NameAndExt(),EFileRead|EFileWrite); + file->SetTypeL(file->Layout()); + CSecureStore* secure=NULL; + + secure=CSecureStore::NewLC(*file,*thePBEKey); + RStoreWriteStream out; + TStreamId id = out.CreateL(*secure); + test(id != NULL); + out.Close(); + TRAPD(r, out.OpenL(*secure, id) ); + test(r == KErrNone); + out.WriteL(KTestDes,8); + out.CommitL(); + out.Close(); + r = secure->Commit(); + test(r == KErrNone); + + TRAP(r,out.ReplaceL(*secure, id)); + test(r == KErrNone); + out.WriteL(KTestDes,8); + out.CommitL(); + out.Close(); + secure->Revert(); + out.Close(); + + CleanupStack::PopAndDestroy(2); + + } + + +LOCAL_C void setupTestDirectory() +// +// Prepare the test directory. +// + { + TInt r=TheFs.Connect(); + test(r==KErrNone); +// + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + + r=TheFs.MkDir(parse.DriveAndPath()); + test(r==KErrNone||r==KErrAlreadyExists); + r=TheFs.SetSessionPath(parse.DriveAndPath()); + test(r==KErrNone); + } + +LOCAL_C void setupCleanup() +// +// Initialise the cleanup stack. +// + { + TheTrapCleanup=CTrapCleanup::New(); + test(TheTrapCleanup!=NULL); + TRAPD(r,\ + {\ + for (TInt i=KTestCleanupStack;i>0;i--)\ + CleanupStack::PushL((TAny*)0);\ + CleanupStack::Pop(KTestCleanupStack);\ + }); + test(r==KErrNone); + } + +LOCAL_C void runTestsL() + { + test.Start(_L("Test direct file store")); + TInt r = KErrNone; + +// New PBE tests + TRAP(r,testEncryptionDataL()); + test(r==KErrNone); + TRAP(r,testSimpleStreamEncryptionL()); + test(r==KErrNone); + + + TRAP(r,testEncryptionDataAttachL()); + test(r==KErrNone); + + +// Old API tests with new PBE parameters + thePBEKey = CPBEncryptSet::NewL(KTestPassword); + + TRAP(r,testWriteL()); + test(r==KErrNone); + TRAP(r,testReadL()); + test(r==KErrNone); + TRAP(r,testCopyL()); + test(r==KErrNone); + TRAP(r,testBugL()); + test(r==KErrNone); + TRAP(r,testForgottenAPI_L()); + test(r==KErrNone); + TRAP(r,testExtendDeleteL()); + test(r==KErrNone); + TRAP(r,testWriteReplaceL()); + test(r==KErrNone); + + delete thePBEKey; + + } + +LOCAL_C void DeleteDataFile(const TDesC& aFullName) + { + RFs fsSession; + TInt err = fsSession.Connect(); + if(err == KErrNone) + { + TEntry entry; + if(fsSession.Entry(aFullName, entry) == KErrNone) + { + RDebug::Print(_L("Deleting \"%S\" file.\n"), &aFullName); + err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly); + if(err != KErrNone) + { + RDebug::Print(_L("Error %d changing \"%S\" file attributes.\n"), err, &aFullName); + } + err = fsSession.Delete(aFullName); + if(err != KErrNone) + { + RDebug::Print(_L("Error %d deleting \"%S\" file.\n"), err, &aFullName); + } + } + fsSession.Close(); + } + else + { + RDebug::Print(_L("Error %d connecting file session. File: %S.\n"), err, &aFullName); + } + } + +GLDEF_C TInt E32Main() +// +// Test streaming conversions. +// + { + test.Title(); + setupTestDirectory(); + setupCleanup(); + __UHEAP_MARK; +// + TRAPD(r, runTestsL()); + test(r == KErrNone); + + //deletion of data files must be before call to .End() - DEF047652 + TDriveUnit drive(static_cast(RFs::GetSystemDrive())); + TParse parse; + parse.Set(drive.Name(), &KFileLocationSpec, NULL); + ::DeleteDataFile(parse.FullName()); + + test.End(); +// + __UHEAP_MARKEND; + + delete TheTrapCleanup; + TheFs.Close(); + test.Close(); + return r!=KErrNone; + }