sl@0: // Copyright (c) 1998-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 the License "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: // f32test\fsstress\t_sesfs.cpp sl@0: // sl@0: // sl@0: #define __E32TEST_EXTENSION__ sl@0: #include "t_sess.h" sl@0: sl@0: GLDEF_D TFileName tPath; sl@0: GLREF_D TFileName gExeFileName; sl@0: sl@0: LOCAL_C void printDriveAtt(TInt aDrive,TUint anAtt); sl@0: LOCAL_C void printDriveInfo(TInt aDrive,TDriveInfo& anInfo); sl@0: LOCAL_C void DriveInfo(TInt aDrive,TDriveInfo& anInfo); sl@0: sl@0: sl@0: void TSessionTest::Initialise(RFs& aFs) sl@0: // sl@0: // Initialise iFs sl@0: // sl@0: { sl@0: iFs=aFs; sl@0: } sl@0: sl@0: sl@0: void TSessionTest::RunTests() sl@0: // sl@0: // Run tests on iFs file server session sl@0: // sl@0: sl@0: { sl@0: sl@0: testDriveList(); sl@0: testDriveInfo(); sl@0: testVolumeInfo(); sl@0: testSetVolume(); sl@0: testPath(); sl@0: CreateTestDirectory(_L("\\SESSION_TEST\\TFSRV\\")); sl@0: testInitialisation(); sl@0: testSubst(); sl@0: CopyFileToTestDirectory(); sl@0: MakeAndDeleteFiles(); sl@0: } sl@0: sl@0: sl@0: sl@0: void TSessionTest::testDriveList() sl@0: // sl@0: // Test the drive list. sl@0: // sl@0: { sl@0: sl@0: test.Start(_L("The drive list")); sl@0: TDriveList list; sl@0: TDriveInfo info; sl@0: TInt r=iFs.DriveList(list); sl@0: test_KErrNone(r); sl@0: for (TInt i=0;i fileName=aBaseName; sl@0: fileName.AppendNum(aX); sl@0: RFile file; sl@0: TInt r=file.Replace(iFs,fileName,EFileWrite); sl@0: if (r==KErrDiskFull) sl@0: return(r); sl@0: if (r!=KErrNone) sl@0: { sl@0: test.Printf(_L("ERROR:: Replace returned %d\n"),r); sl@0: return(KErrDiskFull); sl@0: } sl@0: r=file.SetSize(65536); sl@0: if (r==KErrDiskFull) sl@0: { sl@0: file.Close(); sl@0: return(r); sl@0: } sl@0: if (r!=KErrNone) sl@0: { sl@0: test.Printf(_L("ERROR:: SetSize returned %d\n"),r); sl@0: file.Close(); sl@0: return(KErrDiskFull); sl@0: } sl@0: file.Close(); sl@0: // r=iFs.CheckDisk(fileName); sl@0: // if (r!=KErrNone && r!=KErrNotSupported) sl@0: // { sl@0: // test.Printf(_L("ERROR:: CheckDisk returned %d\n"),r); sl@0: // test.Getch(); sl@0: // return(KErrDiskFull); sl@0: // } sl@0: test.Printf(_L("Created file %d size 64k\n"),aX); sl@0: return(KErrNone); sl@0: } sl@0: sl@0: LOCAL_C TInt DeleteFileX(TBuf<128>& aBaseName,TInt aX, RFs iFs) sl@0: // sl@0: // Delete a file. sl@0: // sl@0: { sl@0: sl@0: TBuf<128> fileName=aBaseName; sl@0: fileName.AppendNum(aX); sl@0: TInt r=iFs.Delete(fileName); sl@0: test_KErrNone(r); sl@0: // r=iFs.CheckDisk(fileName); sl@0: // if (r!=KErrNone && r!=KErrNotSupported) sl@0: // { sl@0: // test.Printf(_L("ERROR:: CheckDisk returned %d\n"),r); sl@0: // test_KErrNone(r); sl@0: // } sl@0: test.Printf(_L("Deleted File %d\n"),aX); sl@0: return(KErrNone); sl@0: } sl@0: sl@0: void TSessionTest::MakeAndDeleteFiles() sl@0: // sl@0: // Create and delete large files in a randomish order sl@0: // sl@0: { sl@0: sl@0: test.Start(_L("Create and delete large files")); sl@0: TInt r=iFs.MkDirAll(_L("\\SESSION_TEST\\SMALLDIRECTORY\\")); sl@0: test_Value(r, r==KErrNone || r==KErrAlreadyExists); sl@0: TBuf<128> fileName=_L("\\SESSION_TEST\\SMALLDIRECTORY\\FILE"); sl@0: r=CreateFileX(fileName,0,iFs); sl@0: test_KErrNone(r); sl@0: r=CreateFileX(fileName,1,iFs); sl@0: test_KErrNone(r); sl@0: r=DeleteFileX(fileName,0,iFs); sl@0: test_KErrNone(r); sl@0: r=CreateFileX(fileName,2,iFs); sl@0: test_KErrNone(r); sl@0: r=CreateFileX(fileName,1,iFs); sl@0: test_KErrNone(r); sl@0: r=CreateFileX(fileName,3,iFs); sl@0: test_KErrNone(r); sl@0: r=DeleteFileX(fileName,1,iFs); sl@0: test_KErrNone(r); sl@0: r=CreateFileX(fileName,4,iFs); sl@0: test_KErrNone(r); sl@0: r=DeleteFileX(fileName,2,iFs); sl@0: test_KErrNone(r); sl@0: r=DeleteFileX(fileName,3,iFs); sl@0: test_KErrNone(r); sl@0: r=DeleteFileX(fileName,4,iFs); sl@0: test_KErrNone(r); sl@0: r=CreateFileX(fileName,1,iFs); sl@0: test_KErrNone(r); sl@0: r=DeleteFileX(fileName,1,iFs); sl@0: test_KErrNone(r); sl@0: sl@0: r=iFs.CheckDisk(fileName); sl@0: test_Value(r, r==KErrNone || r==KErrNotSupported); sl@0: test.End(); sl@0: } sl@0: sl@0: void TSessionTest::FillUpDisk() sl@0: // sl@0: // Test that a full disk is ok sl@0: // sl@0: { sl@0: sl@0: test.Start(_L("Fill disk to capacity")); sl@0: TInt r=iFs.MkDirAll(_L("\\SESSION_TEST\\BIGDIRECTORY\\")); sl@0: test_Value(r, r==KErrNone || r==KErrAlreadyExists); sl@0: TInt count=0; sl@0: TFileName sessionPath; sl@0: r=iFs.SessionPath(sessionPath); sl@0: test_KErrNone(r); sl@0: TBuf<128> fileName=_L("\\SESSION_TEST\\BIGDIRECTORY\\FILE"); sl@0: FOREVER sl@0: { sl@0: TInt r=CreateFileX(fileName,count,iFs); sl@0: if (r==KErrDiskFull) sl@0: break; sl@0: test_KErrNone(r); sl@0: count++; sl@0: #if defined(__WINS__) sl@0: if (count==32 && sessionPath[0]=='C') // Don't fill up disk on NT sl@0: break; sl@0: #endif sl@0: } sl@0: sl@0: r=iFs.CheckDisk(fileName); sl@0: test_Value(r, r==KErrNone || r==KErrNotSupported); sl@0: sl@0: while(count--) sl@0: DeleteFileX(fileName,count,iFs); sl@0: sl@0: r=iFs.CheckDisk(fileName); sl@0: test_Value(r, r==KErrNone || r==KErrNotSupported); sl@0: sl@0: test.End(); sl@0: } sl@0: sl@0: void TSessionTest::CopyFileToTestDirectory() sl@0: // sl@0: // Make a copy of the file in ram sl@0: // sl@0: { sl@0: sl@0: TFileName fn = _L("Z:\\TEST\\T_FSRV.CPP"); sl@0: fn[0] = gExeFileName[0]; sl@0: TParse f; sl@0: TInt r=iFs.Parse(fn,f); sl@0: test_KErrNone(r); sl@0: test.Next(_L("Copying file to test directory")); sl@0: TParse fCopy; sl@0: r=iFs.Parse(f.NameAndExt(),fCopy); sl@0: test_KErrNone(r); sl@0: sl@0: RFile f1; sl@0: r=f1.Open(iFs,f.FullName(),EFileStreamText|EFileShareReadersOnly); sl@0: test.Printf(_L("r=%d\n"),r); sl@0: test_KErrNone(r); sl@0: RFile f2; sl@0: r=f2.Replace(iFs,fCopy.FullName(),EFileWrite); sl@0: test_KErrNone(r); sl@0: TBuf8<512> copyBuf; sl@0: TInt rem; sl@0: r=f1.Size(rem); sl@0: test_KErrNone(r); sl@0: TInt pos=0; sl@0: while (rem) sl@0: { sl@0: TInt s=Min(rem,copyBuf.MaxSize()); sl@0: r=f1.Read(pos,copyBuf,s); sl@0: test_KErrNone(r); sl@0: test(copyBuf.Length()==s); sl@0: r=f2.Write(pos,copyBuf,s); sl@0: test_KErrNone(r); sl@0: pos+=s; sl@0: rem-=s; sl@0: } sl@0: f1.Close(); sl@0: f2.Close(); sl@0: } sl@0: sl@0: sl@0: void TSessionTest::testSetVolume() sl@0: // sl@0: // Test setting the volume info. sl@0: // sl@0: { sl@0: sl@0: test.Start(_L("Test setting the volume label")); sl@0: sl@0: #if defined(_UNICODE) sl@0: test.Printf(_L("Unicode volume label set not implemented ****\n")); sl@0: test.End(); sl@0: return; sl@0: #else sl@0: TInt driveNum=CurrentDrive(); sl@0: TVolumeInfo v; sl@0: TInt r=iFs.Volume(v,driveNum); sl@0: test_KErrNone(r); sl@0: TFileName n=v.iName; sl@0: test.Printf(_L("VOL=\"%S\"\n"),&n); sl@0: sl@0: test.Next(_L("Set volume label to nothing")); sl@0: r=iFs.SetVolumeLabel(_L(""),driveNum); sl@0: #if defined(__WINS__) sl@0: if (r==KErrGeneral || r==KErrAccessDenied || r==KErrNotSupported) sl@0: { sl@0: test.Printf(_L("Error %d: Set volume label not testing on WINS\n"),r); sl@0: test.End(); sl@0: return; sl@0: } sl@0: #endif sl@0: test_KErrNone(r); sl@0: r=iFs.Volume(v,driveNum); sl@0: test_KErrNone(r); sl@0: test(v.iName==_L("")); sl@0: test.Printf(_L("VOL=\"%S\"\n"),&v.iName); sl@0: sl@0: test.Next(_L("Set volume label to ABCDEFGHIJK")); sl@0: r=iFs.SetVolumeLabel(_L("ABCDEFGHIJK"),driveNum); sl@0: test_KErrNone(r); sl@0: r=iFs.Volume(v,driveNum); sl@0: test_KErrNone(r); sl@0: test(v.iName==_L("ABCDEFGHIJK")); sl@0: test.Printf(_L("VOL=\"%S\"\n"),&v.iName); sl@0: sl@0: test.Next(_L("Set volume label back to nothing")); sl@0: r=iFs.SetVolumeLabel(_L(""),driveNum); sl@0: test_KErrNone(r); sl@0: r=iFs.Volume(v,driveNum); sl@0: test_KErrNone(r); sl@0: test(v.iName==_L("")); sl@0: test.Printf(_L("VOL=\"%S\"\n"),&v.iName); sl@0: sl@0: test.Next(_L("Set volume label to original")); sl@0: r=iFs.SetVolumeLabel(n,driveNum); sl@0: test_KErrNone(r); sl@0: r=iFs.Volume(v,driveNum); sl@0: test_KErrNone(r); sl@0: test(v.iName==n); sl@0: test.Printf(_L("VOL=\"%S\"\n"),&v.iName); sl@0: sl@0: test.End(); sl@0: #endif sl@0: } sl@0: sl@0: LOCAL_C void printDriveAtt(TInt aDrive,TUint anAtt) sl@0: // sl@0: // Print a drive attribute. sl@0: // sl@0: { sl@0: sl@0: test.Printf(_L("%c: "),aDrive+'A'); sl@0: if (anAtt&KDriveAttLocal) sl@0: test.Printf(_L("LOCAL ")); sl@0: if (anAtt&KDriveAttRom) sl@0: test.Printf(_L("ROM ")); sl@0: if (anAtt&KDriveAttRedirected) sl@0: test.Printf(_L("REDIR ")); sl@0: if (anAtt&KDriveAttSubsted) sl@0: test.Printf(_L("SUBST ")); sl@0: if (anAtt&KDriveAttInternal) sl@0: test.Printf(_L("INTERNAL ")); sl@0: if ((anAtt&KDriveAttRemovable) && !(anAtt&KDriveAttLogicallyRemovable)) sl@0: test.Printf(_L("PHYSICALLY-REMOVABLE ")); sl@0: if (anAtt&KDriveAttLogicallyRemovable) sl@0: test.Printf(_L("LOGICALLY-REMOVABLE ")); sl@0: if (anAtt&KDriveAttHidden) sl@0: test.Printf(_L("HIDDEN ")); sl@0: test.Printf(_L("\n")); sl@0: } sl@0: sl@0: LOCAL_C void printDriveInfo(TInt aDrive,TDriveInfo& anInfo) sl@0: // sl@0: // Print a drive info. sl@0: // sl@0: { sl@0: sl@0: printDriveAtt(aDrive,anInfo.iDriveAtt); sl@0: test.Printf(_L(" MEDIA-ATT=")); sl@0: if (anInfo.iMediaAtt==0) sl@0: test.Printf(_L("")); sl@0: if (anInfo.iMediaAtt&KMediaAttVariableSize) sl@0: test.Printf(_L("VariableSize ")); sl@0: if (anInfo.iMediaAtt&KMediaAttDualDensity) sl@0: test.Printf(_L("DualDensity ")); sl@0: if (anInfo.iMediaAtt&KMediaAttFormattable) sl@0: test.Printf(_L("Formattable ")); sl@0: if (anInfo.iMediaAtt&KMediaAttWriteProtected) sl@0: test.Printf(_L("WProtected ")); sl@0: test.Printf(_L("\n CONNECTION BUS=")); sl@0: switch(anInfo.iConnectionBusType) sl@0: { sl@0: case EConnectionBusInternal: test.Printf(_L("Internal\n")); break; sl@0: case EConnectionBusUsb: test.Printf(_L("USB\n")); break; sl@0: default: sl@0: test.Printf(_L("Unknown value\n")); sl@0: } sl@0: test.Printf(_L(" MEDIA=")); sl@0: switch(anInfo.iType) sl@0: { sl@0: case EMediaNotPresent: test.Printf(_L("Not present\n")); break; sl@0: case EMediaUnknown: test.Printf(_L("Unknown\n")); break; sl@0: case EMediaFloppy: test.Printf(_L("Floppy\n")); break; sl@0: case EMediaHardDisk: test.Printf(_L("Hard disk\n")); break; sl@0: case EMediaCdRom: test.Printf(_L("CD Rom\n")); break; sl@0: case EMediaRam: test.Printf(_L("Ram\n")); break; sl@0: case EMediaFlash: test.Printf(_L("Flash\n")); break; sl@0: case EMediaRom: test.Printf(_L("Rom\n")); break; sl@0: case EMediaRemote: test.Printf(_L("Remote\n")); break; sl@0: default: sl@0: test.Printf(_L("Unknown value\n")); sl@0: } sl@0: } sl@0: sl@0: LOCAL_C void DriveInfo(TInt aDrive,TDriveInfo& anInfo) sl@0: // sl@0: // Test the drive info is reasonable sl@0: // sl@0: { sl@0: sl@0: test(anInfo.iConnectionBusType==EConnectionBusInternal || anInfo.iConnectionBusType==EConnectionBusUsb); sl@0: sl@0: if (aDrive==EDriveZ) sl@0: { sl@0: if (anInfo.iType==EMediaNotPresent) sl@0: return; sl@0: sl@0: test(anInfo.iMediaAtt==KMediaAttWriteProtected); sl@0: test(anInfo.iDriveAtt==(KDriveAttRom|KDriveAttInternal)); sl@0: test(anInfo.iType==EMediaRom); sl@0: } sl@0: sl@0: /* sl@0: Why assume certain drive letters can only refer to certain drive types? sl@0: else if (aDrive==EDriveC || aDrive==EDriveY) sl@0: { sl@0: if (anInfo.iType==EMediaNotPresent) sl@0: return; sl@0: sl@0: // test(anInfo.iDriveAtt==(KDriveAttLocal|KDriveAttInternal)); sl@0: sl@0: test(anInfo.iDriveAtt&(KDriveAttLocal|KDriveAttInternal)==KDriveAttLocal|KDriveAttInternal); // LFFS sets KDriveAttTransaction as well sl@0: test(anInfo.iType==EMediaRam || anInfo.iType==EMediaFlash); sl@0: if(anInfo.iType==EMediaRam) test(anInfo.iMediaAtt==(KMediaAttVariableSize|KMediaAttFormattable)); sl@0: else if(anInfo.iType==EMediaFlash) test(anInfo.iMediaAtt==KMediaAttFormattable); sl@0: } sl@0: sl@0: else if (aDrive==EDriveD || aDrive==EDriveX) sl@0: { sl@0: if (anInfo.iType==EMediaNotPresent) sl@0: return; sl@0: sl@0: test(anInfo.iDriveAtt==(KDriveAttLocal|KDriveAttRemovable)); sl@0: test(anInfo.iType==EMediaHardDisk); sl@0: test(anInfo.iMediaAtt&KMediaAttFormattable); sl@0: } sl@0: */ sl@0: } sl@0: sl@0: void TSessionTest::CreateTestDirectory(const TDesC& aSessionPath) sl@0: // sl@0: // Create directory for test sl@0: // sl@0: { sl@0: TParsePtrC path(aSessionPath); sl@0: test(path.DrivePresent()==EFalse); sl@0: sl@0: TInt r=iFs.SetSessionPath(aSessionPath); sl@0: test_KErrNone(r); sl@0: r=iFs.SessionPath(gTestSessionPath); sl@0: test_KErrNone(r); sl@0: r=iFs.MkDirAll(gTestSessionPath); sl@0: test_Value(r, r==KErrNone || r==KErrAlreadyExists); sl@0: } sl@0: sl@0: TInt TSessionTest::CurrentDrive() sl@0: // sl@0: // Return the current drive number sl@0: // sl@0: { sl@0: sl@0: TInt driveNum; sl@0: TInt r=iFs.CharToDrive(gTestSessionPath[0],driveNum); sl@0: test_KErrNone(r); sl@0: return(driveNum); sl@0: } sl@0: