--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/fsstress/t_remses.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,706 @@
+// 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 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:
+// f32test\fsstress\t_remses.cpp
+//
+//
+
+#if !defined(__T_REMFSY_H__)
+#include "t_remfsy.h"
+#endif
+
+GLDEF_D TFileName tPath;
+
+LOCAL_C void printDriveAtt(TInt aDrive,TUint anAtt,RTest& aTest);
+LOCAL_C void printDriveInfo(TInt aDrive,TDriveInfo& anInfo, RTest& aTest);
+LOCAL_C void DriveInformation(TInt aDrive,TDriveInfo& anInfo,RTest& aTest);
+
+
+void TMultipleSessionTest::Initialise(RFs& aFs)
+//
+// Initialise iFs
+//
+ {
+ iFs=aFs;
+ }
+
+
+void TMultipleSessionTest::SetSessionPath(TInt aDrive)
+//
+// Set the session path for a RFs connection to aDrive
+//
+ {
+ iSessionPath=(_L("?:\\MULTIPLE_SESSION_TEST\\"));
+ TChar driveLetter;
+ TInt r=iFs.DriveToChar(aDrive,driveLetter);
+ test(r==KErrNone);
+
+ iSessionPath[0]=(TText)driveLetter;
+ r=iFs.SetSessionPath(iSessionPath);
+ test(r==KErrNone);
+ r=iFs.MkDirAll(iSessionPath);
+ test(r==KErrNone || r==KErrAlreadyExists);
+ }
+
+
+void TMultipleSessionTest::RunTests(RTest& aTest)
+//
+// Run tests on iFs file server session
+//
+
+ {
+
+ testDriveList(aTest);
+ testDriveInfo(aTest);
+ testVolumeInfo(aTest);
+// testPowerDown(aTest);
+ testSetVolume(aTest);
+ testInitialisation(aTest);
+// testMediaChange(aTest);
+ testSubst(aTest);
+ MakeAndDeleteFiles(aTest);
+ }
+
+
+
+void TMultipleSessionTest::testDriveList(RTest& aTest)
+//
+// Test the drive list.
+//
+ {
+
+ aTest.Next(_L("The drive list"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ TDriveList list;
+ r=iFs.DriveList(list);
+ aTest(r==KErrNone);
+
+ for (TInt i=0;i<KMaxDrives;i++)
+ {
+ TInt att=list[i];
+ if (att)
+ printDriveAtt(i,att,aTest);
+ }
+ }
+
+void TMultipleSessionTest::testDriveInfo(RTest& aTest)
+//
+// Test the drive info.
+//
+ {
+
+ aTest.Next(_L("The drive info"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ TDriveList list;
+ r=iFs.DriveList(list);
+ aTest(r==KErrNone);
+ for (TInt i=0;i<KMaxDrives;i++)
+ {
+ TInt att=list[i];
+ if (att)
+ {
+ TDriveInfo d;
+ r=iFs.Drive(d,i);
+ //aTest(r==KErrNone);
+ printDriveInfo(i,d,aTest);
+ aTest.Printf(_L("\n"));
+ if (r==KErrNone)
+ DriveInformation(i,d, aTest);
+ }
+ }
+ }
+/*
+void TMultipleSessionTest::testPowerDown(RTest& aTest)
+//
+// Test the effect of multiple power downs
+//
+ {
+ aTest.Next(_L("Power Down"));
+
+ RTimer timer;
+ test(timer.CreateLocal()==KErrNone);
+ TTime time;
+ TRequestStatus status;
+
+ for (TInt index=0; index<5; index++)
+ {
+ aTest.Printf(_L("********** %d **********\n"),(5-index));
+ time.HomeTime();
+ time+=TTimeIntervalSeconds(8);
+ timer.At(status,time);
+ UserHal::SwitchOff(); // Switch off
+ User::WaitForRequest(status); // Switch back on
+ aTest(status==KErrNone);
+ }
+ }
+
+*/
+/*
+void TMultipleSessionTest::testMediaChange(RTest& aTest)
+//
+// Test the effect of multiple media changes
+//
+ {
+ aTest.Next(_L("Media Change"));
+ TInt drive=CurrentDrive(aTest);
+
+ if (drive>KMaxLocalDrives)
+ return;
+
+#if defined (__MARM__)
+ if (drive==EDriveC)
+ return;
+#endif
+
+ TLocalDrive theDrive;
+ TLocalDriveCaps info;
+ TBool changedFlag;
+ for (TInt index=0; index<5; index++)
+ {
+ aTest.Printf(_L("********** %d **********\n"),(5-index));
+ changedFlag=EFalse;
+ TInt r=theDrive.Connect(drive,changedFlag);
+ aTest(r==KErrNone);
+ UserSvr::ForceRemountMedia(ERemovableMedia0); // Generate media change
+ aTest(changedFlag);
+
+ do
+ {
+ r=theDrive.Caps(info);
+ } while (r==KErrNotReady);
+// Wait a second...
+// User::After(1000000);
+ }
+ }
+*/
+
+void TMultipleSessionTest::testVolumeInfo(RTest& aTest)
+//
+// Test volume info.
+//
+ {
+
+ aTest.Next(_L("The volume info"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ TDriveList list;
+ r=iFs.DriveList(list);
+ aTest(r==KErrNone);
+ for (TInt i=0;i<KMaxDrives;i++)
+ {
+ TVolumeInfo v;
+ if ((r=iFs.Volume(v,i))==KErrNone)
+ {
+ printDriveInfo(i,v.iDrive,aTest);
+ aTest.Printf(_L(" VOL=\"%S\" ID=%08x\n"),&v.iName,v.iUniqueID);
+ aTest.Printf(_L(" SIZE=%ldK FREE=%ldK\n"),v.iSize/1024,v.iFree/1024);
+ }
+ else if (r==KErrNotReady)
+ aTest.Printf(_L("%c: Not Ready\n"),i+'A');
+ else if (r==KErrPathNotFound)
+ aTest.Printf(_L("%c: Not Found\n"),i+'A');
+ else
+ {
+ aTest.Printf(_L("%c: Error %d\n"),i+'A',r);
+ aTest.Getch();
+ }
+ aTest.Printf(_L("\n"));
+ }
+ }
+
+
+void TMultipleSessionTest::testInitialisation(RTest& aTest)
+//
+// Modified from T_SESSION. Still tests that calls to CheckedClose() are
+// OK, ie, tests bug fix, but doesn't check returned error values since remote drive
+// doesn't necessarily return them.
+//
+ {
+ RFile file;
+ RDir dir;
+
+ aTest.Next(_L("Test calls to CheckedClose are OK"));
+
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ TInt count;
+ RFormat format;
+ r=format.Open(iFs,_L("Z:\\"),EFullFormat,count);
+
+ aTest((r==KErrAccessDenied)||(r==KErrInUse));
+
+ r=dir.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\ERRORTEST\\"),KEntryAttMatchMask);
+// aTest(r==KErrPathNotFound);
+ if (r==KErrNone)
+ dir.Close();
+
+ r=file.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\SessionTest1.txt"),EFileRead);
+// aTest(r==KErrNotFound);
+ if (r==KErrNone)
+ file.Close();
+
+ r=dir.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\ERRORTEST2\\"),KEntryAttMatchMask);
+// aTest(r==KErrPathNotFound);
+ if (r==KErrNone)
+ dir.Close();
+
+ r=file.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\SessionTest2.txt"),EFileRead);
+// aTest(r==KErrNotFound);
+ if (r==KErrNone)
+ file.Close();
+
+ r=dir.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\ERRORTEST3\\"),KEntryAttMatchMask);
+// aTest(r==KErrPathNotFound);
+ if (r==KErrNone)
+ dir.Close();
+
+ r=file.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\SessionTest3.txt"),EFileRead);
+// aTest(r==KErrNotFound);
+ if (r==KErrNone)
+ file.Close();
+
+ r=file.Open(iFs,_L("\\MULTIPLE_SESSION_TEST\\SessionTest4.txt"),EFileRead);
+// aTest(r==KErrNotFound);
+ if (r==KErrNone)
+ file.Close();
+ }
+
+
+void TMultipleSessionTest::testSubst(RTest& aTest)
+//
+// Test the substitute functions
+//
+ {
+
+ aTest.Next(_L("Test subst"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ TVolumeInfo v;
+ r=iFs.Volume(v);
+ aTest(r==KErrNone);
+
+ TDriveInfo driveInfo;
+ r=iFs.Drive(driveInfo,EDriveO);
+ aTest(r==KErrNone);
+
+ testSetVolume(aTest);
+
+ if (driveInfo.iDriveAtt==KDriveAttLocal)
+ return; // Subst local drives fails
+
+ TFileName n;
+ r=iFs.Subst(n,EDriveO);
+ aTest(r==KErrNone);
+ aTest(n.Length()==0);
+ r=iFs.SetSubst(iSessionPath,EDriveO);
+ aTest(r==KErrNone);
+ r=iFs.Subst(n,EDriveO);
+ aTest(r==KErrNone);
+ aTest(n==iSessionPath);
+ TVolumeInfo w;
+ r=iFs.Volume(w,EDriveO);
+ aTest(r==KErrNone);
+ aTest(w.iDrive.iType==v.iDrive.iType);
+ aTest(w.iDrive.iBattery==v.iDrive.iBattery);
+ aTest(w.iDrive.iDriveAtt==v.iDrive.iDriveAtt);
+ aTest(w.iDrive.iMediaAtt==v.iDrive.iMediaAtt);
+ aTest(w.iUniqueID==v.iUniqueID);
+ aTest(w.iSize==v.iSize);
+ aTest(w.iFree==v.iFree);
+ aTest(w.iName==v.iName);
+ TDriveInfo d;
+ r=iFs.Drive(d,EDriveO);
+ aTest(r==KErrNone);
+ aTest(d.iDriveAtt==KDriveAttSubsted);
+
+ aTest.Next(_L("Test real name"));
+ r=iFs.RealName(_L("O:\\FILE.XXX"),n);
+ aTest(r==KErrNone);
+ TFileName substedPath=iSessionPath;
+ substedPath.Append(_L("FILE.XXX"));
+ aTest(n==substedPath);
+
+ aTest.Next(_L("Test MkDir, Rename and RmDir on Substed drive"));
+ r=iFs.MkDir(_L("C:\\MULTIPLE_SESSION_TEST\\TFSRV\\turgid\\"));
+ aTest(r==KErrNone);
+ r=iFs.Rename(_L("O:\\turgid"), _L("O:\\facile"));
+ aTest(r==KErrNone);
+ r=iFs.MkDir(_L("O:\\insipid\\"));
+ aTest(r==KErrNone);
+ r=iFs.Rename(_L("O:\\insipid"), _L("O:\\glib"));
+ aTest(r==KErrNone);
+ r=iFs.RmDir(_L("O:\\facile\\"));
+ aTest(r==KErrNone);
+ r=iFs.RmDir(_L("C:\\MULTIPLE_SESSION_TEST\\TFSRV\\glib\\"));
+ aTest(r==KErrNone);
+
+ r=iFs.SetSubst(_L(""),EDriveO);
+ aTest(r==KErrNone);
+ r=iFs.Subst(n,EDriveO);
+ aTest(r==KErrNone);
+ aTest(n==_L(""));
+ r=iFs.Drive(d,EDriveO);
+ aTest(r==KErrNone);
+ aTest(d.iDriveAtt==0);
+
+ }
+
+
+LOCAL_C TInt CreateFileX(const TDesC& aBaseName,TInt aX, RFs iFs, RTest& aTest)
+//
+// Create a large file. Return KErrEof or KErrNone
+//
+ {
+
+ TBuf<128> fileName=aBaseName;
+ fileName.AppendNum(aX);
+
+ RFile file;
+ TInt r=file.Replace(iFs,fileName,EFileWrite);
+ if (r==KErrDiskFull)
+ return(r);
+ if (r!=KErrNone)
+ {
+ aTest.Printf(_L("ERROR:: Replace returned %d\n"),r);
+ aTest.Getch();
+ return(KErrDiskFull);
+ }
+ r=file.SetSize(65536);
+ if (r==KErrDiskFull)
+ {
+ file.Close();
+ return(r);
+ }
+ if (r!=KErrNone)
+ {
+ aTest.Printf(_L("ERROR:: SetSize returned %d\n"),r);
+ aTest.Getch();
+ file.Close();
+ return(KErrDiskFull);
+ }
+ file.Close();
+ aTest.Printf(_L("Created file %d size 64k\n"),aX);
+ return(KErrNone);
+ }
+
+LOCAL_C TInt DeleteFileX(TBuf<128>& aBaseName,TInt aX, RFs iFs, TInt aDrive,RTest& aTest)
+//
+// Delete a file.
+//
+ {
+
+ TBuf<128> fileName=aBaseName;
+ fileName.AppendNum(aX);
+
+ TInt r=iFs.Delete(fileName);
+ if (aDrive!=EDriveQ) // T_REMFSY may return incorrect value on WINS
+ aTest(r==KErrNone);
+ aTest.Printf(_L("Deleted File %d\n"),aX);
+ return(KErrNone);
+ }
+
+void TMultipleSessionTest::MakeAndDeleteFiles(RTest& aTest)
+//
+// Create and delete large files in a randomish order
+//
+ {
+
+ aTest.Next(_L("Create and delete large files"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ r=iFs.MkDirAll(_L("\\MULTIPLE_SESSION_TEST\\SMALLDIRECTORY\\"));
+
+ if (CurrentDrive(aTest)!=EDriveQ) // T_REMFSY may return incorrect result on WINS
+ aTest(r==KErrNone || r==KErrAlreadyExists);
+
+ TBuf<128> fileName=_L("\\MULTIPLE_SESSION_TEST\\SMALLDIRECTORY\\FILE");
+ r=CreateFileX(fileName,0,iFs,aTest);
+ aTest(r==KErrNone);
+ r=CreateFileX(fileName,1,iFs,aTest);
+ aTest(r==KErrNone);
+ r=DeleteFileX(fileName,0,iFs,CurrentDrive(aTest),aTest);
+ aTest(r==KErrNone);
+ r=CreateFileX(fileName,2,iFs,aTest);
+ aTest(r==KErrNone);
+ r=CreateFileX(fileName,1,iFs,aTest);
+ aTest(r==KErrNone);
+ r=CreateFileX(fileName,3,iFs,aTest);
+ aTest(r==KErrNone);
+ r=DeleteFileX(fileName,1,iFs,CurrentDrive(aTest),aTest);
+ aTest(r==KErrNone);
+ r=CreateFileX(fileName,4,iFs,aTest);
+ aTest(r==KErrNone);
+ r=DeleteFileX(fileName,2,iFs,CurrentDrive(aTest),aTest);
+ aTest(r==KErrNone);
+ r=DeleteFileX(fileName,3,iFs,CurrentDrive(aTest),aTest);
+ aTest(r==KErrNone);
+ r=DeleteFileX(fileName,4,iFs,CurrentDrive(aTest),aTest);
+ aTest(r==KErrNone);
+ r=CreateFileX(fileName,1,iFs,aTest);
+ aTest(r==KErrNone);
+ r=DeleteFileX(fileName,1,iFs,CurrentDrive(aTest),aTest);
+ aTest(r==KErrNone);
+
+ r=iFs.CheckDisk(fileName);
+ if (r!=KErrNone && r!=KErrNotSupported)
+ aTest.Printf(_L("ERROR:: CheckDisk returned %d\n"),r);
+ }
+
+void TMultipleSessionTest::FillUpDisk(RTest& aTest)
+//
+// Test that a full disk is ok
+//
+ {
+
+ aTest.Next(_L("Fill disk to capacity"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ r=iFs.MkDirAll(_L("\\MULTIPLE_SESSION_TEST\\BIGDIRECTORY\\"));
+ if (CurrentDrive(aTest)!=EDriveQ) // T_REMFSY may return incorrect result on WINS
+ aTest(r==KErrNone || r==KErrAlreadyExists);
+ TInt count=0;
+ TFileName sessionPath;
+ r=iFs.SessionPath(sessionPath);
+ test(sessionPath==iSessionPath);
+ aTest(r==KErrNone);
+ TBuf<128> fileName=_L("\\MULTIPLE_SESSION_TEST\\BIGDIRECTORY\\FILE");
+ FOREVER
+ {
+ TInt r=CreateFileX(fileName,count,iFs, aTest);
+ if (r==KErrDiskFull)
+ break;
+ aTest(r==KErrNone);
+ count++;
+ #if defined(__WINS__)
+ if (count==32 && sessionPath[0]=='C') // Don't fill up disk on NT
+ break;
+ #endif
+ }
+
+ r=iFs.CheckDisk(fileName);
+ if (r!=KErrNone && r!=KErrNotSupported)
+ {
+ aTest.Printf(_L("ERROR:: CheckDisk returned %d\n"),r);
+ aTest.Getch();
+ }
+
+ while(count--)
+ DeleteFileX(fileName,count,iFs,CurrentDrive(aTest),aTest);
+
+ r=iFs.CheckDisk(fileName);
+ if (r!=KErrNone && r!=KErrNotSupported)
+ {
+ aTest.Printf(_L("ERROR:: CheckDisk returned %d\n"),r);
+ aTest.Getch();
+ }
+ }
+
+
+void TMultipleSessionTest::testSetVolume(RTest& aTest)
+//
+// Test setting the volume info.
+//
+ {
+
+ aTest.Next(_L("Test setting the volume label"));
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ aTest(r==KErrNone);
+#if defined(_UNICODE)
+ aTest.Printf(_L("Unicode volume label set not implemented ****\n"));
+ return;
+#else
+ TInt driveNum=CurrentDrive(aTest);
+ TVolumeInfo v;
+ r=iFs.Volume(v,driveNum);
+ aTest(r==KErrNone);
+ TFileName n=v.iName;
+ aTest.Printf(_L("VOL=\"%S\"\n"),&n);
+
+ aTest.Next(_L("Set volume label to nothing"));
+ r=iFs.SetVolumeLabel(_L(""),driveNum);
+ if (r==KErrGeneral)
+ return;
+ aTest(r==KErrNone);
+ r=iFs.Volume(v,driveNum);
+ aTest(r==KErrNone);
+ aTest(v.iName==_L(""));
+ aTest.Printf(_L("VOL=\"%S\"\n"),&v.iName);
+
+ aTest.Next(_L("Set volume label to ABCDEFGHIJK"));
+ r=iFs.SetVolumeLabel(_L("ABCDEFGHIJK"),driveNum);
+ aTest(r==KErrNone);
+ r=iFs.Volume(v,driveNum);
+ aTest(r==KErrNone);
+ aTest(v.iName==_L("ABCDEFGHIJK"));
+ aTest.Printf(_L("VOL=\"%S\"\n"),&v.iName);
+
+ aTest.Next(_L("Set volume label back to nothing"));
+ r=iFs.SetVolumeLabel(_L(""),driveNum);
+ aTest(r==KErrNone);
+ r=iFs.Volume(v,driveNum);
+ aTest(r==KErrNone);
+ aTest(v.iName==_L(""));
+ aTest.Printf(_L("VOL=\"%S\"\n"),&v.iName);
+
+ aTest.Next(_L("Set volume label to original"));
+ r=iFs.SetVolumeLabel(n,driveNum);
+ aTest(r==KErrNone);
+ r=iFs.Volume(v,driveNum);
+ aTest(r==KErrNone);
+ aTest(v.iName==n);
+ aTest.Printf(_L("VOL=\"%S\"\n"),&v.iName);
+
+#endif
+ }
+
+
+LOCAL_C void printDriveAtt(TInt aDrive,TUint anAtt,RTest& aTest)
+//
+// Print a drive attribute.
+//
+ {
+
+ aTest.Printf(_L("%c: "),aDrive+'A');
+ if (anAtt&KDriveAttRemote)
+ aTest.Printf(_L("REMOTE "));
+ else if (anAtt&KDriveAttLocal)
+ aTest.Printf(_L("LOCAL "));
+ if (anAtt&KDriveAttRom)
+ aTest.Printf(_L("ROM "));
+ if (anAtt&KDriveAttRedirected)
+ aTest.Printf(_L("REDIRECTED "));
+ if (anAtt&KDriveAttSubsted)
+ aTest.Printf(_L("SUBST "));
+ if (anAtt&KDriveAttInternal)
+ aTest.Printf(_L("INTERNAL "));
+ if (anAtt&KDriveAttRemovable)
+ aTest.Printf(_L("REMOVABLE "));
+ aTest.Printf(_L("\n"));
+ }
+
+LOCAL_C void printDriveInfo(TInt aDrive,TDriveInfo& anInfo,RTest& aTest)
+//
+// Print a drive info.
+//
+ {
+
+ printDriveAtt(aDrive,anInfo.iDriveAtt,aTest);
+ aTest.Printf(_L(" MEDIA-ATT="));
+ if (anInfo.iMediaAtt==0)
+ aTest.Printf(_L("<none>"));
+ if (anInfo.iMediaAtt&KMediaAttVariableSize)
+ aTest.Printf(_L("VariableSize "));
+ if (anInfo.iMediaAtt&KMediaAttDualDensity)
+ aTest.Printf(_L("DualDensity "));
+ if (anInfo.iMediaAtt&KMediaAttFormattable)
+ aTest.Printf(_L("Formattable "));
+ if (anInfo.iMediaAtt&KMediaAttWriteProtected)
+ aTest.Printf(_L("WProtected "));
+ aTest.Printf(_L("\n BATTERY="));
+ switch(anInfo.iBattery)
+ {
+ case EBatNotSupported: aTest.Printf(_L("Not supported\n")); break;
+ case EBatGood: aTest.Printf(_L("Good\n")); break;
+ case EBatLow: aTest.Printf(_L("Low\n")); break;
+ default:
+ aTest.Printf(_L("Unknown value\n"));
+ }
+ aTest.Printf(_L(" MEDIA="));
+ switch(anInfo.iType)
+ {
+ case EMediaNotPresent: aTest.Printf(_L("Not present\n")); break;
+ case EMediaUnknown: aTest.Printf(_L("Unknown\n")); break;
+ case EMediaFloppy: aTest.Printf(_L("Floppy\n")); break;
+ case EMediaHardDisk: aTest.Printf(_L("Hard disk\n")); break;
+ case EMediaCdRom: aTest.Printf(_L("CD Rom\n")); break;
+ case EMediaRam: aTest.Printf(_L("Ram\n")); break;
+ case EMediaFlash: aTest.Printf(_L("Flash\n")); break;
+ case EMediaRom: aTest.Printf(_L("Rom\n")); break;
+ case EMediaRemote: aTest.Printf(_L("Remote\n")); break;
+ default:
+ aTest.Printf(_L("Unknown value\n"));
+ }
+ }
+
+LOCAL_C void DriveInformation(TInt aDrive,TDriveInfo& anInfo,RTest& aTest)
+//
+// Test the drive info is reasonable
+//
+ {
+
+ aTest(anInfo.iBattery==EBatLow || anInfo.iBattery==EBatGood || anInfo.iBattery==EBatNotSupported);
+
+ if (aDrive==EDriveZ)
+ {
+ if (anInfo.iType==EMediaNotPresent)
+ return;
+
+ aTest(anInfo.iMediaAtt==KMediaAttWriteProtected);
+ aTest(anInfo.iDriveAtt==(KDriveAttRom|KDriveAttInternal));
+ aTest(anInfo.iType==EMediaRom);
+ }
+
+ else if (aDrive==EDriveC || aDrive==EDriveY)
+ {
+ if (anInfo.iType==EMediaNotPresent)
+ return;
+
+ aTest(anInfo.iDriveAtt==(KDriveAttLocal|KDriveAttInternal));
+ aTest(anInfo.iType==EMediaHardDisk);
+ aTest(anInfo.iMediaAtt==(KMediaAttVariableSize|KMediaAttFormattable));
+ }
+ else if (aDrive==EDriveD || aDrive==EDriveX)
+ {
+ if (anInfo.iType==EMediaNotPresent)
+ return;
+
+ aTest(anInfo.iDriveAtt==(KDriveAttLocal|KDriveAttRemovable));
+ aTest(anInfo.iType==EMediaHardDisk);
+ aTest(anInfo.iMediaAtt==KMediaAttFormattable);
+ }
+ }
+
+
+
+GLDEF_C void ReportCheckDiskFailure(TInt aRet,RTest& aTest)
+//
+// Report the failure of checkdisk
+//
+ {
+
+ aTest.Printf(_L("CHECKDISK FAILED: "));
+ switch(aRet)
+ {
+ case 1: aTest.Printf(_L("File cluster chain contains a bad value (<2 or >maxCluster)\n")); break;
+ case 2: aTest.Printf(_L("Two files are linked to the same cluster\n")); break;
+ case 3: aTest.Printf(_L("Unallocated cluster contains a value != 0\n")); break;
+ case 4: aTest.Printf(_L("Size of file != number of clusters in chain\n")); break;
+ default: aTest.Printf(_L("Undefined Error value %d\n"),aRet);
+ }
+ aTest.Printf(_L("Press any key to continue\n"));
+ aTest.Getch();
+ }
+
+
+
+TInt TMultipleSessionTest::CurrentDrive(RTest& aTest)
+//
+// Return the current drive number
+//
+ {
+ TInt r=iFs.SetSessionPath(iSessionPath);
+ aTest(r==KErrNone);
+ TInt driveNum;
+ r=iFs.CharToDrive(iSessionPath[0],driveNum);
+ aTest(r==KErrNone);
+ return(driveNum);
+ }
+
+
+
+