kerneltest/f32test/filesystem/fat/t_tscan32.cpp
branchRCL_3
changeset 43 c1f20ce4abcf
parent 42 a179b74831c9
child 44 3e88ff8f41d5
equal deleted inserted replaced
42:a179b74831c9 43:c1f20ce4abcf
     9 // Nokia Corporation - initial contribution.
     9 // Nokia Corporation - initial contribution.
    10 //
    10 //
    11 // Contributors:
    11 // Contributors:
    12 //
    12 //
    13 // Description:
    13 // Description:
    14 // f32test\scndrv\t_tscan32.cpp
    14 // f32test\filesystem\fat\t_tscan32.cpp
    15 // 
    15 // 
    16 //
    16 
       
    17 #define __E32TEST_EXTENSION__
    17 
    18 
    18 #include <f32file.h>
    19 #include <f32file.h>
    19 #include <e32test.h>
    20 #include <e32test.h>
    20 
    21 
    21 #include "t_server.h"
    22 #include "t_server.h"
    34 
    35 
    35 GLDEF_D TFileName StartupExeName=_L(""); // initialised at run time
    36 GLDEF_D TFileName StartupExeName=_L(""); // initialised at run time
    36 
    37 
    37 #ifdef _DEBUG
    38 #ifdef _DEBUG
    38 GLREF_D RTest test;
    39 GLREF_D RTest test;
    39 GLDEF_D TInt TheFunctionNumber;
    40 GLDEF_D TInt TheFunctionNumber;	// Indicates which test to run
    40 GLDEF_D TInt TheOpNumber;
    41 GLDEF_D TInt TheOpNumber;		// Indicates which file operation to be tested
    41 GLDEF_D TInt TheFailCount;
    42 GLDEF_D TInt TheFailCount;		
    42 GLDEF_D TBool IsReset;
    43 GLDEF_D TBool IsReset;
    43 GLDEF_D TFileName TestExeName=_L("?:\\T_SCANDR.EXE"); //Renaming it to fit in one root dir entry.
    44 GLDEF_D TFileName TestExeName=_L("?:\\T_SCANDR.EXE"); //Renaming it to fit in one root dir entry.
    44 GLDEF_D TFileName LogFileName=_L("?:\\T_SCANDR.LOG"); //Renaming it to fit in one root dir entry.
    45 GLDEF_D TFileName LogFileName=_L("?:\\T_SCANDR.LOG"); //Renaming it to fit in one root dir entry.
    45 
    46 
    46 const TInt KControlIoWriteFailOn=0;		// commands to pass into RFs::ControlIo
    47 const TInt KControlIoWriteFailOn=0;		// commands to pass into RFs::ControlIo
    54 const TInt KDirAttrArchive   = 0x20;
    55 const TInt KDirAttrArchive   = 0x20;
    55 const TInt KDirAttrLongName  = KDirAttrReadOnly | KDirAttrHidden | KDirAttrSystem | KDirAttrVolumeId;
    56 const TInt KDirAttrLongName  = KDirAttrReadOnly | KDirAttrHidden | KDirAttrSystem | KDirAttrVolumeId;
    56 const TInt KDirAttrLongMask  = KDirAttrLongName | KDirAttrDirectory | KDirAttrArchive;
    57 const TInt KDirAttrLongMask  = KDirAttrLongName | KDirAttrDirectory | KDirAttrArchive;
    57 const TInt KDirLastLongEntry = 0x40;
    58 const TInt KDirLastLongEntry = 0x40;
    58 
    59 
    59 GLDEF_D TInt WriteFailValue;
    60 GLDEF_D TInt WriteFailValue;	// Indicates what error should return from a write failure
    60 
    61 								// Value assigned in t_scn32dr2 and t_scn32dr3
    61 LOCAL_C TFatBootSector BootSector;	
    62 LOCAL_C TFatBootSector BootSector;	
    62 LOCAL_D RRawDisk TheRawDisk;
    63 LOCAL_D RRawDisk TheRawDisk;
    63 
    64 
    64 static TFatType gDiskType = EInvalid;
    65 static TFatType gDiskType = EInvalid;
    65 
    66 
    77 LOCAL_D TInt gClusterCount;
    78 LOCAL_D TInt gClusterCount;
    78 
    79 
    79 LOCAL_D HBufC8* gFatBuf  = NULL;
    80 LOCAL_D HBufC8* gFatBuf  = NULL;
    80 LOCAL_D TInt    gFatAddr = -1;
    81 LOCAL_D TInt    gFatAddr = -1;
    81 
    82 
    82 enum TFatChain {EChainStd,EChainAlternate,EChainBackwards,EChainForwards};
    83 enum TFatChain
       
    84 	{
       
    85 	EChainStd,			// Cluster chain grows contiguously
       
    86 	EChainAlternate,	// Cluster chain grows forward but not contiguously
       
    87 	EChainBackwards,	// Cluster chain first goes backwards(up to 3.5kb for fat16 file) and then forwards
       
    88 	EChainForwards		// Cluster chain first goes forward (upto 3.5kb for fat16 file) and then backwards
       
    89 	};
    83 
    90 
    84 LOCAL_C TBool IsInternalRam()
    91 LOCAL_C TBool IsInternalRam()
    85 //
    92 //
    86 // Returns true if the selected drive is variable size (i.e. RAM drive)
    93 // Returns true if the selected drive is variable size (i.e. RAM drive)
    87 //
    94 //
    88 	{
    95 	{
    89 	TVolumeInfo v;
    96 	TVolumeInfo v;
    90 	TInt r=TheFs.Volume(v,gSessionPath[0]-'A');
    97 	TInt r=TheFs.Volume(v,gSessionPath[0]-'A');
    91 	test(r==KErrNone);
    98 	test_KErrNone(r);
    92 	return(v.iDrive.iMediaAtt&KMediaAttVariableSize);
    99 	return(v.iDrive.iMediaAtt&KMediaAttVariableSize);
    93 	}
   100 	}
    94 
   101 
    95 LOCAL_C void WriteLogFile()
   102 LOCAL_C void WriteLogFile()
    96 //
   103 //
   100 	test.Printf(_L("Writelogfile()\n"));
   107 	test.Printf(_L("Writelogfile()\n"));
   101 	RFile log;
   108 	RFile log;
   102 	TInt r=log.Open(TheFs,LogFileName,EFileShareExclusive|EFileWrite);
   109 	TInt r=log.Open(TheFs,LogFileName,EFileShareExclusive|EFileWrite);
   103 	if(r!=KErrNone)
   110 	if(r!=KErrNone)
   104 		test.Printf(_L("error=%d\n"),r);
   111 		test.Printf(_L("error=%d\n"),r);
   105 	test(r==KErrNone);
   112 	test_KErrNone(r);
   106 	TInt size;
   113 	TInt size;
   107 	r=log.Size(size);
   114 	r=log.Size(size);
   108 	test(r==KErrNone);
   115 	test_KErrNone(r);
   109 	TBuf8<16> buf;
   116 	TBuf8<16> buf;
   110 	buf.SetLength(4);
   117 	buf.SetLength(4);
   111 	buf[0]=(TUint8)TheFunctionNumber;
   118 	buf[0]=(TUint8)TheFunctionNumber;
   112 	buf[1]=(TUint8)TheOpNumber;
   119 	buf[1]=(TUint8)TheOpNumber;
   113 	buf[2]=(TUint8)TheFailCount;
   120 	buf[2]=(TUint8)TheFailCount;
   114 	buf[3]='\n';
   121 	buf[3]='\n';
   115 	r=log.Write(size,buf,buf.Length());
   122 	r=log.Write(size,buf,buf.Length());
   116 	test(r==KErrNone);
   123 	test_KErrNone(r);
   117 	test.Printf(_L("Written func=%d,op=%d,fail=%d\n"),TheFunctionNumber,TheOpNumber,TheFailCount);
   124 	test.Printf(_L("Written func=%d,op=%d,fail=%d\n"),TheFunctionNumber,TheOpNumber,TheFailCount);
   118 	log.Close();
   125 	log.Close();
   119 	}
   126 	}
   120 
   127 
   121 LOCAL_C TInt SetWriteFailOn(TInt aFailCount)
   128 LOCAL_C TInt SetWriteFailOn(TInt aFailCount)
   139 	test.Next(_L("ReadLogFile"));
   146 	test.Next(_L("ReadLogFile"));
   140 	RFile log;
   147 	RFile log;
   141 	TInt r=log.Open(TheFs,LogFileName,EFileShareExclusive);
   148 	TInt r=log.Open(TheFs,LogFileName,EFileShareExclusive);
   142 	if(r!=KErrNone)
   149 	if(r!=KErrNone)
   143 		test.Printf(_L("error in ReadLogFile()=%d\n"),r);
   150 		test.Printf(_L("error in ReadLogFile()=%d\n"),r);
   144 	test(r==KErrNone);
   151 	test_KErrNone(r);
   145 	test(r==KErrNone);
   152 	
   146 	TInt fileSize;
   153 	TInt fileSize;
   147 	r=log.Size(fileSize);
   154 	r=log.Size(fileSize);
   148 	if(fileSize==0)
   155 	if(fileSize==0)
   149 		{
   156 		{
   150 		TheFunctionNumber=0;
   157 		TheFunctionNumber=0;
   185 /**
   192 /**
   186     Fill media with zeroes from aStartPos to aEndPos
   193     Fill media with zeroes from aStartPos to aEndPos
   187 */
   194 */
   188 static void DoZeroFillMedia(TInt64 aStartPos, TInt64 aEndPos, RRawDisk& aWriter)
   195 static void DoZeroFillMedia(TInt64 aStartPos, TInt64 aEndPos, RRawDisk& aWriter)
   189 {
   196 {
   190     test(aStartPos >=0 && aEndPos >=0 && aStartPos < aEndPos);
   197 	test(aStartPos >=0 && aEndPos >=0 && aStartPos < aEndPos);
   191     
   198     
   192     if(aStartPos == aEndPos)
   199     if(aStartPos == aEndPos)
   193         return;
   200         return;
   194 
   201 
   195     RBuf8 buf;
   202     RBuf8 buf;
   196     TInt  nRes;  
   203     TInt  nRes;  
   197 
   204 
   198     const TUint32 KBufSz=65536*2; //-- buffer with zeroes
   205     const TUint32 KBufSz=65536*2; //-- buffer with zeroes
   199     
   206     
   200     nRes = buf.CreateMax(KBufSz);
   207     nRes = buf.CreateMax(KBufSz);
   201     test(nRes == KErrNone);
   208     test_KErrNone(nRes);
   202 
   209 
   203     buf.FillZ();
   210     buf.FillZ();
   204 
   211 
   205     TUint32 rem = (TUint32)(aEndPos - aStartPos);
   212     TUint32 rem = (TUint32)(aEndPos - aStartPos);
   206     while(rem)
   213     while(rem)
   207     {
   214     {
   208         const TUint32 bytesToWrite=Min(rem, KBufSz);
   215         const TUint32 bytesToWrite=Min(rem, KBufSz);
   209     
   216     
   210         TPtrC8 ptr(buf.Ptr(), bytesToWrite);
   217         TPtrC8 ptr(buf.Ptr(), bytesToWrite);
   211         nRes = aWriter.Write(aStartPos, ptr);
   218         nRes = aWriter.Write(aStartPos, ptr);
   212         test(nRes == KErrNone || nRes == KErrDiskFull);
   219         test_Value(nRes, nRes == KErrNone || nRes == KErrDiskFull);
   213 
   220 
   214         aStartPos+=bytesToWrite;
   221         aStartPos+=bytesToWrite;
   215         rem-=bytesToWrite;
   222         rem-=bytesToWrite;
   216     }
   223     }
   217 
   224 
   225 //
   232 //
   226 LOCAL_C void ClearDiskData()
   233 LOCAL_C void ClearDiskData()
   227 	{
   234 	{
   228 
   235 
   229 	TInt r=TheRawDisk.Open(TheFs,gSessionPath[0]-'A');
   236 	TInt r=TheRawDisk.Open(TheFs,gSessionPath[0]-'A');
   230 	test(r==KErrNone);
   237 	test_KErrNone(r);
   231 
   238 
   232 	TUint32 startPos = gDataStartBytes;
   239 	TUint32 startPos = gDataStartBytes;
   233 	if (gDiskType == EFat32)
   240 	if (gDiskType == EFat32)
   234 		startPos += gBytesPerCluster;
   241 		startPos += gBytesPerCluster;
   235 
   242 
   267 
   274 
   268 static void DoReadBootSector()
   275 static void DoReadBootSector()
   269 	{
   276 	{
   270 	
   277 	
   271     TInt nRes = ReadBootSector(TheFs, CurrentDrive(), KBootSectorNum<<KDefaultSectorLog2, BootSector);
   278     TInt nRes = ReadBootSector(TheFs, CurrentDrive(), KBootSectorNum<<KDefaultSectorLog2, BootSector);
   272     test(nRes == KErrNone);
   279     test_KErrNone(nRes);
   273 
   280 
   274     if(!BootSector.IsValid())
   281     if(!BootSector.IsValid())
   275         {
   282         {
   276         test.Printf(_L("Wrong bootsector! Dump:\n"));
   283         test.Printf(_L("Wrong bootsector! Dump:\n"));
   277         BootSector.PrintDebugInfo();
   284         BootSector.PrintDebugInfo();
   321 
   328 
   322 
   329 
   323 	if (!gFatBuf)
   330 	if (!gFatBuf)
   324 		{
   331 		{
   325 		gFatBuf=HBufC8::New(gBytesPerCluster);
   332 		gFatBuf=HBufC8::New(gBytesPerCluster);
   326 		test(gFatBuf!=NULL);
   333 		test_NotNull(gFatBuf);
   327 		gFatAddr = -1;
   334 		gFatAddr = -1;
   328 		}
   335 		}
   329 
   336 
   330 	const TUint8* ptr;
   337 	const TUint8* ptr;
   331 
   338 
   337 		{
   344 		{
   338 		TInt pos = PosInBytes(aIndex) + gFatStartBytes;
   345 		TInt pos = PosInBytes(aIndex) + gFatStartBytes;
   339 		if (gFatAddr < 0 || pos < gFatAddr || pos >= gFatAddr + gBytesPerCluster)
   346 		if (gFatAddr < 0 || pos < gFatAddr || pos >= gFatAddr + gBytesPerCluster)
   340 			{
   347 			{
   341 			TPtr8 ptr=gFatBuf->Des();
   348 			TPtr8 ptr=gFatBuf->Des();
   342 		TInt r=TheRawDisk.Open(TheFs,gSessionPath[0]-'A');
   349 			TInt r=TheRawDisk.Open(TheFs,gSessionPath[0]-'A');
   343 			test(r==KErrNone);
   350 			test_KErrNone(r);
   344 			r=TheRawDisk.Read(pos, ptr);
   351 			r=TheRawDisk.Read(pos, ptr);
   345 			test(r==KErrNone);
   352 			test_KErrNone(r);
   346 			TheRawDisk.Close();
   353 			TheRawDisk.Close();
   347 			gFatAddr = pos;
   354 			gFatAddr = pos;
   348 			}
   355 			}
   349 		ptr = gFatBuf->Ptr() + pos-gFatAddr;
   356 		ptr = gFatBuf->Ptr() + pos-gFatAddr;
   350 		}
   357 		}
   629 	for (TInt cluster = aStart; cluster < aEnd; cluster++)
   636 	for (TInt cluster = aStart; cluster < aEnd; cluster++)
   630 		{
   637 		{
   631 		if (GetFatEntry(cluster, aFat) != 0)
   638 		if (GetFatEntry(cluster, aFat) != 0)
   632 			{
   639 			{
   633 			HBufC8* buf=HBufC8::New(gBytesPerCluster);
   640 			HBufC8* buf=HBufC8::New(gBytesPerCluster);
   634 			test(buf!=NULL);
   641 			test_NotNull(buf);
   635 			TPtr8 ptr=buf->Des();
   642 			TPtr8 ptr=buf->Des();
   636 			TInt r=TheRawDisk.Open(TheFs,gSessionPath[0]-'A');
   643 			TInt r=TheRawDisk.Open(TheFs,gSessionPath[0]-'A');
   637 			test(r==KErrNone);
   644 			test_KErrNone(r);
   638 			r=TheRawDisk.Read(ClusterToByte(cluster), ptr);
   645 			r=TheRawDisk.Read(ClusterToByte(cluster), ptr);
   639 			test(r==KErrNone);
   646 			test_KErrNone(r);
   640 			TheRawDisk.Close();
   647 			TheRawDisk.Close();
   641 			RDebug::Print(_L("Cluster %d @ 0x%08X:"), cluster, ClusterToByte(cluster));
   648 			RDebug::Print(_L("Cluster %d @ 0x%08X:"), cluster, ClusterToByte(cluster));
   642 			DumpDirCluster(ptr.Ptr());
   649 			DumpDirCluster(ptr.Ptr());
   643 			delete buf;
   650 			delete buf;
   644 			}
   651 			}
   718 	while(entriesSoFar<maxRootEntries)
   725 	while(entriesSoFar<maxRootEntries)
   719 		{
   726 		{
   720 		dir[1]=TUint16(count/26+'a');
   727 		dir[1]=TUint16(count/26+'a');
   721 		dir[2]=TUint16(count%26+'a');
   728 		dir[2]=TUint16(count%26+'a');
   722 		r=TheFs.MkDir(dir);
   729 		r=TheFs.MkDir(dir);
   723 		test(r==KErrNone);
   730 		test_KErrNone(r);
   724 		entriesSoFar+=2;
   731 		entriesSoFar+=2;
   725 		++count;
   732 		++count;
   726 		}
   733 		}
   727 	}
   734 	}
   728 
   735 
   743 	while(entriesSoFar>existing)
   750 	while(entriesSoFar>existing)
   744 		{
   751 		{
   745 		dir[1]=TUint16(count/26+'a');
   752 		dir[1]=TUint16(count/26+'a');
   746 		dir[2]=TUint16(count%26+'a');
   753 		dir[2]=TUint16(count%26+'a');
   747 		r=TheFs.RmDir(dir);
   754 		r=TheFs.RmDir(dir);
   748 		test(r==KErrNone);
   755 		test_KErrNone(r);
   749 		entriesSoFar-=2;
   756 		entriesSoFar-=2;
   750 		++count;
   757 		++count;
   751 		}
   758 		}
   752 	}
   759 	}
   753 
   760 
   765 // Returns ETrue if aName is found
   772 // Returns ETrue if aName is found
   766 //
   773 //
   767 	{
   774 	{
   768 	TEntry entry;
   775 	TEntry entry;
   769 	TInt r=TheFs.Entry(aName,entry);
   776 	TInt r=TheFs.Entry(aName,entry);
   770 	test(r==KErrNone||r==KErrNotFound);
   777 	test_Value(r, r==KErrNone||r==KErrNotFound);
   771 	return(r==KErrNone?(TBool)ETrue:(TBool)EFalse);
   778 	return(r==KErrNone?(TBool)ETrue:(TBool)EFalse);
   772 	}
   779 	}
   773 
   780 
   774 LOCAL_C TInt EntriesPerFatSector()
   781 LOCAL_C TInt EntriesPerFatSector()
   775 //
   782 //
   804 //
   811 //
   805 // returns entry details for the entry with aName
   812 // returns entry details for the entry with aName
   806 //
   813 //
   807 	{
   814 	{
   808 	TInt r=TheFs.Entry(aName,aEntry);
   815 	TInt r=TheFs.Entry(aName,aEntry);
   809 	test(r==KErrNone);
   816 	test_KErrNone(r);
   810 	}
   817 	}
   811 
   818 
   812 LOCAL_C TBool IsSameEntryDetails(TEntry aOldEntry,TEntry aNewEntry)
   819 LOCAL_C TBool IsSameEntryDetails(TEntry aOldEntry,TEntry aNewEntry)
   813 //
   820 //
   814 // 
   821 // 
   827 	TInt entries=EntriesPerFatSector();
   834 	TInt entries=EntriesPerFatSector();
   828 	RFile file1,file2;
   835 	RFile file1,file2;
   829 	TInt size1,size2;
   836 	TInt size1,size2;
   830 	size1=size2=0;
   837 	size1=size2=0;
   831 	TInt r=file1.Create(TheFs,aNameOne,EFileShareAny);
   838 	TInt r=file1.Create(TheFs,aNameOne,EFileShareAny);
   832 	test(r==KErrNone);
   839 	test_KErrNone(r);
   833 	r=file2.Create(TheFs,aNameTwo,EFileShareAny);
   840 	r=file2.Create(TheFs,aNameTwo,EFileShareAny);
   834 	test(r==KErrNone);
   841 	test_KErrNone(r);
   835 	// one entry for file1 for every 40 entries for file2
   842 	// one entry for file1 for every 40 entries for file2
   836 	// if file 1 subseqently deleted then 7 entries available
   843 	// if file 1 subseqently deleted then 7 entries available
   837 	// in that fat sector - ~3.5kb file size - for fat16
   844 	// in that fat sector - ~3.5kb file size - for fat16
   838 	TInt ratio=40;
   845 	TInt ratio=40;
   839 	TBool first=ETrue;
   846 	TBool first=ETrue;
   841 		{
   848 		{
   842 		if(first)
   849 		if(first)
   843 			{
   850 			{
   844 			size1+=gBytesPerCluster;
   851 			size1+=gBytesPerCluster;
   845 			r=file1.SetSize(size1);
   852 			r=file1.SetSize(size1);
   846 			test(r==KErrNone);
   853 			test_KErrNone(r);
   847 			first=EFalse;
   854 			first=EFalse;
   848 			--entries;
   855 			--entries;
   849 			}
   856 			}
   850 		else
   857 		else
   851 			{
   858 			{
   852 			size2+=gBytesPerCluster*ratio;
   859 			size2+=gBytesPerCluster*ratio;
   853 			r=file1.SetSize(size1);
   860 			r=file2.SetSize(size2);
   854 			test(r==KErrNone);
   861 			test_KErrNone(r);
   855 			first=ETrue;
   862 			first=ETrue;
   856 			entries-=ratio;
   863 			entries-=ratio;
   857 			}
   864 			}
   858 		}
   865 		}
   859 	file1.Close();
   866 	file1.Close();
   902 		while (fn.Length() < maxFileNameLen)
   909 		while (fn.Length() < maxFileNameLen)
   903 			fn.Append('0');
   910 			fn.Append('0');
   904 		TFileName fullName(aName);
   911 		TFileName fullName(aName);
   905 		fullName.Append(fn);
   912 		fullName.Append(fn);
   906 		TInt r = TheFs.Delete(fullName);
   913 		TInt r = TheFs.Delete(fullName);
   907 		test(r == KErrNone);
   914 		test_KErrNone(r);
   908 		entry += 1 + (fn.Length() + 12) / 13;
   915 		entry += 1 + (fn.Length() + 12) / 13;
   909 		}
   916 		}
   910 	RDebug::Print(_L("CleanDirectory(%S, %d)"), &aName, aClusters);
   917 	RDebug::Print(_L("CleanDirectory(%S, %d)"), &aName, aClusters);
   911 	}
   918 	}
   912 
   919 
   937 			fn.Append('0');
   944 			fn.Append('0');
   938 		TFileName fullName(aName);
   945 		TFileName fullName(aName);
   939 		fullName.Append(fn);
   946 		fullName.Append(fn);
   940 		RFile file;
   947 		RFile file;
   941 		TInt r = file.Create(TheFs,fullName,EFileShareAny);
   948 		TInt r = file.Create(TheFs,fullName,EFileShareAny);
   942 		test(r == KErrNone);
   949 		test_KErrNone(r);
   943 		file.Close();
   950 		file.Close();
   944 		entry += 1 + (fn.Length() + 12) / 13;
   951 		entry += 1 + (fn.Length() + 12) / 13;
   945 		}
   952 		}
   946 	// to leave a directory expanded by aClusters but with no additional entries
   953 	// to leave a directory expanded by aClusters but with no additional entries
   947 	RDebug::Print(_L("ExpandDirectory(%S, %d)"), &aName, aClusters);
   954 	RDebug::Print(_L("ExpandDirectory(%S, %d)"), &aName, aClusters);
   952 //
   959 //
   953 // Deletes entry aName and corresponding entries created for EChainAlternate
   960 // Deletes entry aName and corresponding entries created for EChainAlternate
   954 //
   961 //
   955 	{
   962 	{
   956 	TInt r=TheFs.Delete(_L("\\fat\\file2"));
   963 	TInt r=TheFs.Delete(_L("\\fat\\file2"));
   957 	test(r==KErrNone||KErrNotFound);
   964 	test_Value(r, r==KErrNone||r==KErrNotFound);
   958 	if(aIsDir)
   965 	if(aIsDir)
   959 		return(TheFs.RmDir(aName));
   966 		return(TheFs.RmDir(aName));
   960 	else
   967 	else
   961 		return(TheFs.Delete(aName));
   968 		return(TheFs.Delete(aName));
   962 	}
   969 	}
   966 // Creates entry with aName where cluster chain grows forward but not contiguously.
   973 // Creates entry with aName where cluster chain grows forward but not contiguously.
   967 // Assumes that no holes in fat clusters.
   974 // Assumes that no holes in fat clusters.
   968 //
   975 //
   969 	{
   976 	{
   970 	TInt r=DeleteAlternateEntry(aName,aIsDir);
   977 	TInt r=DeleteAlternateEntry(aName,aIsDir);
   971 	test(r==KErrNone||r==KErrNotFound);
   978 	test_Value(r, r==KErrNone||r==KErrNotFound);
   972 	RFile file;
   979 	RFile file;
   973 	if(aIsDir)
   980 	if(aIsDir)
   974 		{
   981 		{
   975 		r=TheFs.MkDir(aName);
   982 		r=TheFs.MkDir(aName);
   976 		if(r!=KErrNone)
   983 		if(r!=KErrNone)
   980 		{
   987 		{
   981 		r=file.Create(TheFs,aName,EFileShareAny);
   988 		r=file.Create(TheFs,aName,EFileShareAny);
   982 		if(r!=KErrNone)
   989 		if(r!=KErrNone)
   983 			return(r);
   990 			return(r);
   984 		r=file.SetSize(1); //ensure file allocated a start cluster
   991 		r=file.SetSize(1); //ensure file allocated a start cluster
   985 		test(r==KErrNone);
   992 		test_KErrNone(r);
   986 		}
   993 		}
   987 	CreateAlternate(_L("\\fat\\file1"),_L("\\fat\\file2"));
   994 	CreateAlternate(_L("\\fat\\file1"),_L("\\fat\\file2"));
   988 	r=TheFs.Delete(_L("\\fat\\file1"));
   995 	r=TheFs.Delete(_L("\\fat\\file1"));
   989 	test(r==KErrNone);
   996 	test_KErrNone(r);
   990 	if(aIsDir)
   997 	if(aIsDir)
   991 		ExpandDirectory(aName,aSize);
   998 		ExpandDirectory(aName,aSize);
   992 	else
   999 	else
   993 		{
  1000 		{
   994 		r=file.SetSize(aSize);
  1001 		r=file.SetSize(aSize);
   995 		test(r==KErrNone);
  1002 		test_KErrNone(r);
   996 		file.Close();
  1003 		file.Close();
   997 		}
  1004 		}
   998 	return(KErrNone);
  1005 	return(KErrNone);
   999 	}
  1006 	}
  1000 
  1007 
  1002 //
  1009 //
  1003 // Deletes entry with aName and corresponding entries created for EChainForward
  1010 // Deletes entry with aName and corresponding entries created for EChainForward
  1004 //
  1011 //
  1005 	{
  1012 	{
  1006 	TInt r=TheFs.Delete(_L("\\fat\\file2"));
  1013 	TInt r=TheFs.Delete(_L("\\fat\\file2"));
  1007 	test(r==KErrNone||r==KErrNotFound);
  1014 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1008 	r=TheFs.Delete(_L("\\fat\\file4"));
  1015 	r=TheFs.Delete(_L("\\fat\\file4"));
  1009 	test(r==KErrNone||r==KErrNotFound);
  1016 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1010 	r=TheFs.Delete(_L("\\fat\\file5"));
  1017 	r=TheFs.Delete(_L("\\fat\\file5"));
  1011 	test(r==KErrNone||r==KErrNotFound);
  1018 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1012 	if(aIsDir)
  1019 	if(aIsDir)
  1013 		r=TheFs.RmDir(aName);
  1020 		r=TheFs.RmDir(aName);
  1014 	else
  1021 	else
  1015 		r=TheFs.Delete(aName);
  1022 		r=TheFs.Delete(aName);
  1016 	return r;
  1023 	return r;
  1021 // Creates an entry whose cluster chain first goes forward (upto 3.5kb for fat16 file)
  1028 // Creates an entry whose cluster chain first goes forward (upto 3.5kb for fat16 file)
  1022 // and then backwards
  1029 // and then backwards
  1023 //	
  1030 //	
  1024 	{
  1031 	{
  1025 	TInt r=DeleteForwardEntry(aName,aIsDir);
  1032 	TInt r=DeleteForwardEntry(aName,aIsDir);
  1026 	test(r==KErrNone||r==KErrNotFound);
  1033 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1027 	RFile file1,file2,entry;
  1034 	RFile file1,file2,entry;
  1028 	r=file1.Create(TheFs,_L("\\fat\\file1"),EFileShareAny);
  1035 	r=file1.Create(TheFs,_L("\\fat\\file1"),EFileShareAny);
  1029 	test(r==KErrNone);
  1036 	test_KErrNone(r);
  1030 	r=file1.SetSize(EntriesPerFatSector()*gBytesPerCluster);
  1037 	r=file1.SetSize(EntriesPerFatSector()*gBytesPerCluster);
  1031 	test(r==KErrNone);
  1038 	test_KErrNone(r);
  1032 	r=file2.Create(TheFs,_L("\\fat\\file2"),EFileShareAny);
  1039 	r=file2.Create(TheFs,_L("\\fat\\file2"),EFileShareAny);
  1033 	test(r==KErrNone);
  1040 	test_KErrNone(r);
  1034 	r=file2.SetSize(EntriesPerFatSector()*gBytesPerCluster);
  1041 	r=file2.SetSize(EntriesPerFatSector()*gBytesPerCluster);
  1035 	test(r==KErrNone);
  1042 	test_KErrNone(r);
  1036 	if(aIsDir)
  1043 	if(aIsDir)
  1037 		{
  1044 		{
  1038 		r=TheFs.MkDir(aName);
  1045 		r=TheFs.MkDir(aName);
  1039 		if(r!=KErrNone)
  1046 		if(r!=KErrNone)
  1040 			return(r);
  1047 			return(r);
  1043 		{
  1050 		{
  1044 		r=entry.Create(TheFs,aName,EFileShareAny);
  1051 		r=entry.Create(TheFs,aName,EFileShareAny);
  1045 		if(r!=KErrNone)
  1052 		if(r!=KErrNone)
  1046 			return(r);
  1053 			return(r);
  1047 		r=entry.SetSize(1);	// ensure entry has start cluster allocated
  1054 		r=entry.SetSize(1);	// ensure entry has start cluster allocated
  1048 		test(r==KErrNone);
  1055 		test_KErrNone(r);
  1049 		}
  1056 		}
  1050 	CreateAlternate(_L("\\fat\\file3"),_L("\\fat\\file4"));
  1057 	CreateAlternate(_L("\\fat\\file3"),_L("\\fat\\file4"));
  1051 	RFile file5;
  1058 	RFile file5;
  1052 	r=file5.Create(TheFs,_L("\\fat\\file5"),EFileShareAny);
  1059 	r=file5.Create(TheFs,_L("\\fat\\file5"),EFileShareAny);
  1053 	test(r==KErrNone);
  1060 	test_KErrNone(r);
  1054 	r=file5.SetSize(EntriesPerFatSector()*gBytesPerCluster*2);
  1061 	r=file5.SetSize(EntriesPerFatSector()*gBytesPerCluster*2);
  1055 	test(r==KErrNone);
  1062 	test_KErrNone(r);
  1056 	file1.Close();
  1063 	file1.Close();
  1057 	file2.Close();
  1064 	file2.Close();
  1058 	file5.Close();
  1065 	file5.Close();
  1059 	r=TheFs.Delete(_L("\\fat\\file1"));
  1066 	r=TheFs.Delete(_L("\\fat\\file1"));
  1060 	test(r==KErrNone);
  1067 	test_KErrNone(r);
  1061 	r=TheFs.Delete(_L("\\fat\\file3"));
  1068 	r=TheFs.Delete(_L("\\fat\\file3"));
  1062 	test(r==KErrNone);
  1069 	test_KErrNone(r);
  1063 	if(aIsDir)
  1070 	if(aIsDir)
  1064 		ExpandDirectory(aName,aSize);
  1071 		ExpandDirectory(aName,aSize);
  1065 	else
  1072 	else
  1066 		{
  1073 		{
  1067 		r=entry.SetSize(aSize);
  1074 		r=entry.SetSize(aSize);
  1068 		test(r==KErrNone);
  1075 		test_KErrNone(r);
  1069 		entry.Close();
  1076 		entry.Close();
  1070 		}
  1077 		}
  1071 	return(KErrNone);
  1078 	return(KErrNone);
  1072 	}
  1079 	}
  1073 
  1080 
  1075 //
  1082 //
  1076 // Deletes entry with aName and corresponding entries created for EChainBackwards
  1083 // Deletes entry with aName and corresponding entries created for EChainBackwards
  1077 //
  1084 //
  1078 	{
  1085 	{
  1079 	TInt r=TheFs.Delete(_L("\\fat\\file2"));
  1086 	TInt r=TheFs.Delete(_L("\\fat\\file2"));
  1080 	test(r==KErrNone||r==KErrNotFound);
  1087 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1081 	r=TheFs.Delete(_L("\\fat\\file3"));
  1088 	r=TheFs.Delete(_L("\\fat\\file3"));
  1082 	test(r==KErrNone||r==KErrNotFound);
  1089 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1083 	if(aIsDir)
  1090 	if(aIsDir)
  1084 		r=TheFs.RmDir(aName);
  1091 		r=TheFs.RmDir(aName);
  1085 	else
  1092 	else
  1086 		r=TheFs.Delete(aName);
  1093 		r=TheFs.Delete(aName);
  1087 	return r;
  1094 	return r;
  1092 // Creates an entry whose fat cluster chain first goes backwards(upto 3.5kb for fat16 file)
  1099 // Creates an entry whose fat cluster chain first goes backwards(upto 3.5kb for fat16 file)
  1093 // and then forwards
  1100 // and then forwards
  1094 //
  1101 //
  1095 	{
  1102 	{
  1096 	TInt r=DeleteBackwardEntry(aName,aIsDir);
  1103 	TInt r=DeleteBackwardEntry(aName,aIsDir);
  1097 	test(r==KErrNone||r==KErrNotFound);
  1104 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1098 	CreateAlternate(_L("\\fat\\file1"),_L("\\fat\\file2"));
  1105 	CreateAlternate(_L("\\fat\\file1"),_L("\\fat\\file2"));
  1099 	RFile entry;
  1106 	RFile entry;
  1100 	if(aIsDir)
  1107 	if(aIsDir)
  1101 		{
  1108 		{
  1102 		r=TheFs.MkDir(aName);
  1109 		r=TheFs.MkDir(aName);
  1107 		{
  1114 		{
  1108 		r=entry.Create(TheFs,aName,EFileShareAny);
  1115 		r=entry.Create(TheFs,aName,EFileShareAny);
  1109 		if(r!=KErrNone)
  1116 		if(r!=KErrNone)
  1110 			return(r);
  1117 			return(r);
  1111 		r=entry.SetSize(1);
  1118 		r=entry.SetSize(1);
  1112 		test(r==KErrNone);
  1119 		test_KErrNone(r);
  1113 		}
  1120 		}
  1114 	RFile file3;
  1121 	RFile file3;
  1115 	r=file3.Create(TheFs,_L("\\fat\\file3"),EFileShareAny);
  1122 	r=file3.Create(TheFs,_L("\\fat\\file3"),EFileShareAny);
  1116 	test(r==KErrNone);
  1123 	test_KErrNone(r);
  1117 	r=file3.SetSize(EntriesPerFatSector()*gBytesPerCluster);
  1124 	r=file3.SetSize(EntriesPerFatSector()*gBytesPerCluster);
  1118 	test(r==KErrNone);
  1125 	test_KErrNone(r);
  1119 	r=TheFs.Delete(_L("\\fat\\file1"));
  1126 	r=TheFs.Delete(_L("\\fat\\file1"));
  1120 	test(r==KErrNone);
  1127 	test_KErrNone(r);
  1121 	file3.Close();
  1128 	file3.Close();
  1122 	if(aIsDir)
  1129 	if(aIsDir)
  1123 		ExpandDirectory(aName,aSize);
  1130 		ExpandDirectory(aName,aSize);
  1124 	else
  1131 	else
  1125 		{
  1132 		{
  1126 		r=entry.SetSize(aSize);
  1133 		r=entry.SetSize(aSize);
  1127 		test(r==KErrNone);
  1134 		test_KErrNone(r);
  1128 		entry.Close();
  1135 		entry.Close();
  1129 		}
  1136 		}
  1130 	return(KErrNone);	
  1137 	return(KErrNone);	
  1131 	}
  1138 	}
  1132 
  1139 
  1145 //
  1152 //
  1146 // Creates entry with aName where the cluster chain grows contiguously
  1153 // Creates entry with aName where the cluster chain grows contiguously
  1147 //
  1154 //
  1148 	{
  1155 	{
  1149 	TInt r=DeleteStdEntry(aName,aIsDir);
  1156 	TInt r=DeleteStdEntry(aName,aIsDir);
  1150 	test(r==KErrNone||r==KErrNotFound);
  1157 	test_Value(r, r==KErrNone||r==KErrNotFound);
  1151 	if(aIsDir)
  1158 	if(aIsDir)
  1152 		{
  1159 		{
  1153 		r=TheFs.MkDir(aName);
  1160 		r=TheFs.MkDir(aName);
  1154 		if(r==KErrNone)
  1161 		if(r==KErrNone)
  1155 			ExpandDirectory(aName,aSize);
  1162 			ExpandDirectory(aName,aSize);
  1160 		RFile file;
  1167 		RFile file;
  1161 		r=file.Create(TheFs,aName,EFileShareAny);
  1168 		r=file.Create(TheFs,aName,EFileShareAny);
  1162 		if(r==KErrNone)
  1169 		if(r==KErrNone)
  1163 			{
  1170 			{
  1164 			r=file.SetSize(aSize);
  1171 			r=file.SetSize(aSize);
  1165 			test(r==KErrNone);
  1172 			test_KErrNone(r);
  1166 			}
  1173 			}
  1167 		else if(r==KErrAlreadyExists)
  1174 		else if(r==KErrAlreadyExists)
  1168 			{
  1175 			{
  1169 			TInt res =file.Open(TheFs,aName,EFileShareAny);
  1176 			TInt res =file.Open(TheFs,aName,EFileShareAny);
  1170 			test(res==KErrNone);
  1177 			test_KErrNone(res);
  1171 			}
  1178 			}
  1172 		else
  1179 		else
  1173 			return(r);
  1180 			return(r);
  1174 		file.Close();
  1181 		file.Close();
  1175 		return(r);
  1182 		return(r);
  1216 	test.Start(_L("TestRFsDelete"));
  1223 	test.Start(_L("TestRFsDelete"));
  1217 	FOREVER
  1224 	FOREVER
  1218 		{
  1225 		{
  1219 		test.Printf(_L("failCount=%d\n"),failCount);
  1226 		test.Printf(_L("failCount=%d\n"),failCount);
  1220 		r=CreateEntry(aName,EFalse,aChain,aFileSize);
  1227 		r=CreateEntry(aName,EFalse,aChain,aFileSize);
  1221 		test(r==KErrNone||r==KErrAlreadyExists);
  1228 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1222 		if(IsReset)
  1229 		if(IsReset)
  1223 			{
  1230 			{
  1224 			++TheFailCount;
  1231 			++TheFailCount;
  1225 			WriteLogFile();
  1232 			WriteLogFile();
  1226 			}
  1233 			}
  1227 		r=SetWriteFailOn(failCount);
  1234 		r=SetWriteFailOn(failCount);
  1228 		test(r==KErrNone);
  1235 		test_KErrNone(r);
  1229 		r=TheFs.Delete(aName);
  1236 		r=TheFs.Delete(aName);
  1230 		if(r==KErrNone)
  1237 		if(r==KErrNone)
  1231 			break;
  1238 			break;
  1232 		test(r==WriteFailValue);
  1239 		test_Equal(WriteFailValue,r);
  1233 		r=TheFs.ScanDrive(gSessionPath);
  1240 		r=TheFs.ScanDrive(gSessionPath);
  1234 		test(r==KErrNone);
  1241 		test_KErrNone(r);
  1235 		r=TheFs.CheckDisk(gSessionPath);
  1242 		r=TheFs.CheckDisk(gSessionPath);
  1236 		test(r==KErrNone);
  1243 		test_KErrNone(r);
  1237 		++failCount;
  1244 		++failCount;
  1238 		}
  1245 		}
  1239 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1246 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1240 	test(r==KErrNone);
  1247 	test_KErrNone(r);
  1241 	r=TheFs.CheckDisk(gSessionPath);
  1248 	r=TheFs.CheckDisk(gSessionPath);
  1242 	test(r==KErrNone);
  1249 	test_KErrNone(r);
  1243 	test(!EntryExists(aName));
  1250 	test(!EntryExists(aName));
  1244 	++TheOpNumber;
  1251 	++TheOpNumber;
  1245 	TheFailCount=0;
  1252 	TheFailCount=0;
  1246 	}
  1253 	}
  1247 
  1254 
  1272 		}
  1279 		}
  1273 	FOREVER
  1280 	FOREVER
  1274 		{
  1281 		{
  1275 		test.Printf(_L("failCount=%d\n"),failCount);
  1282 		test.Printf(_L("failCount=%d\n"),failCount);
  1276 		r=CreateEntry(aName,ETrue,aChain,aDirSize);
  1283 		r=CreateEntry(aName,ETrue,aChain,aDirSize);
  1277 		test(r==KErrNone||r==KErrAlreadyExists);
  1284 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1278 		if(IsReset)
  1285 		if(IsReset)
  1279 			{
  1286 			{
  1280 			++TheFailCount;
  1287 			++TheFailCount;
  1281 			WriteLogFile();
  1288 			WriteLogFile();
  1282 			}
  1289 			}
  1283 		r=SetWriteFailOn(failCount);
  1290 		r=SetWriteFailOn(failCount);
  1284 		test(r==KErrNone);
  1291 		test_KErrNone(r);
  1285 		r=TheFs.RmDir(aName);
  1292 		r=TheFs.RmDir(aName);
  1286 		if(r==KErrNone)
  1293 		if(r==KErrNone)
  1287 			break;
  1294 			break;
  1288 		test(r==WriteFailValue);
  1295 		test_Equal(WriteFailValue,r);
  1289 		r=TheFs.ScanDrive(gSessionPath);
  1296 		r=TheFs.ScanDrive(gSessionPath);
  1290 		RDebug::Print(_L("%6d: ScanDrive = %d"), __LINE__, r);
  1297 		RDebug::Print(_L("%6d: ScanDrive = %d"), __LINE__, r);
  1291 		if (r != KErrNone)
  1298 		if (r != KErrNone)
  1292 		{
  1299 		{
  1293 			RDebug::Print(_L("ScanDrive fail %d"), r);
  1300 			RDebug::Print(_L("ScanDrive fail %d"), r);
  1294 			DumpFat();
  1301 			DumpFat();
  1295 			DumpData(NULL, 0, 200);
  1302 			DumpData(NULL, 0, 200);
  1296 		}
  1303 		}
  1297 		test(r==KErrNone);
  1304 		test_KErrNone(r);
  1298 		r=TheFs.CheckDisk(gSessionPath);
  1305 		r=TheFs.CheckDisk(gSessionPath);
  1299 		RDebug::Print(_L("%6d: CheckDisk = %d"), __LINE__, r);
  1306 		RDebug::Print(_L("%6d: CheckDisk = %d"), __LINE__, r);
  1300 		test(r==KErrNone);
  1307 		test_KErrNone(r);
  1301 		++failCount;
  1308 		++failCount;
  1302 		}
  1309 		}
  1303 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1310 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1304 	test(r==KErrNone);
  1311 	test_KErrNone(r);
  1305 	r=TheFs.CheckDisk(gSessionPath);
  1312 	r=TheFs.CheckDisk(gSessionPath);
  1306 	test(r==KErrNone);
  1313 	test_KErrNone(r);
  1307 	test(!EntryExists(aName));
  1314 	test(!EntryExists(aName));
  1308 	++TheOpNumber;
  1315 	++TheOpNumber;
  1309 	TheFailCount=0;
  1316 	TheFailCount=0;
  1310 	}
  1317 	}
  1311 
  1318 
  1319 	test.Next(_L("TestRFsMkDir"));
  1326 	test.Next(_L("TestRFsMkDir"));
  1320 	FOREVER
  1327 	FOREVER
  1321 		{
  1328 		{
  1322 		test.Printf(_L("failCount=%d\n"),failCount);
  1329 		test.Printf(_L("failCount=%d\n"),failCount);
  1323 		r=DeleteEntry(aName,ETrue,EChainStd);
  1330 		r=DeleteEntry(aName,ETrue,EChainStd);
  1324 		test(r==KErrNone||r==KErrNotFound);
  1331 		test_Value(r, r==KErrNone||r==KErrNotFound);
  1325 		if(IsReset)
  1332 		if(IsReset)
  1326 			{
  1333 			{
  1327 			++TheFailCount;
  1334 			++TheFailCount;
  1328 			WriteLogFile();
  1335 			WriteLogFile();
  1329 			}
  1336 			}
  1330 		r=SetWriteFailOn(failCount);
  1337 		r=SetWriteFailOn(failCount);
  1331 		test(r==KErrNone);
  1338 		test_KErrNone(r);
  1332 		r=TheFs.MkDir(aName);
  1339 		r=TheFs.MkDir(aName);
  1333 		if(r==KErrNone)
  1340 		if(r==KErrNone)
  1334 			break;
  1341 			break;
  1335 		test(r==WriteFailValue);
  1342 		test_Equal(WriteFailValue,r);
  1336 		r=TheFs.ScanDrive(gSessionPath);
  1343 		r=TheFs.ScanDrive(gSessionPath);
  1337 		test(r==KErrNone);
  1344 		test_KErrNone(r);
  1338 		r=TheFs.CheckDisk(gSessionPath);
  1345 		r=TheFs.CheckDisk(gSessionPath);
  1339 		test(r==KErrNone);
  1346 		test_KErrNone(r);
  1340 		++failCount;
  1347 		++failCount;
  1341 		}
  1348 		}
  1342 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1349 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1343 	test(r==KErrNone);
  1350 	test_KErrNone(r);
  1344 	r=TheFs.CheckDisk(gSessionPath);
  1351 	r=TheFs.CheckDisk(gSessionPath);
  1345 	test(r==KErrNone);
  1352 	test_KErrNone(r);
  1346 	test(EntryExists(aName));
  1353 	test(EntryExists(aName));
  1347 	r=DeleteEntry(aName,ETrue,EChainStd);
  1354 	r=DeleteEntry(aName,ETrue,EChainStd);
  1348 	test(r==KErrNone);
  1355 	test_KErrNone(r);
  1349 	++TheOpNumber;
  1356 	++TheOpNumber;
  1350 	TheFailCount=0;
  1357 	TheFailCount=0;
  1351 	}
  1358 	}
  1352 
  1359 
  1353 LOCAL_C void TestRFsRename(const TDesC& aOldName,const TDesC& aNewName,TBool aIsDir,TFatChain aChain,TInt aSize)
  1360 LOCAL_C void TestRFsRename(const TDesC& aOldName,const TDesC& aNewName,TBool aIsDir,TFatChain aChain,TInt aSize)
  1361 	TEntry oldEntryInfo,newEntryInfo;
  1368 	TEntry oldEntryInfo,newEntryInfo;
  1362 	FOREVER
  1369 	FOREVER
  1363 		{
  1370 		{
  1364 		test.Printf(_L("failCount=%d\n"),failCount);
  1371 		test.Printf(_L("failCount=%d\n"),failCount);
  1365 		r=CreateEntry(aOldName,aIsDir,aChain,aSize);
  1372 		r=CreateEntry(aOldName,aIsDir,aChain,aSize);
  1366 		test(r==KErrNone||r==KErrAlreadyExists);
  1373 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1367 		r=DeleteEntry(aNewName,aIsDir,aChain);
  1374 		r=DeleteEntry(aNewName,aIsDir,aChain);
  1368 		test(r==KErrNone||r==KErrNotFound);
  1375 		test_Value(r, r==KErrNone||r==KErrNotFound);
  1369 		GetEntryDetails(aOldName,oldEntryInfo);
  1376 		GetEntryDetails(aOldName,oldEntryInfo);
  1370 		if(IsReset)
  1377 		if(IsReset)
  1371 			{
  1378 			{
  1372 			++TheFailCount;
  1379 			++TheFailCount;
  1373 			WriteLogFile();
  1380 			WriteLogFile();
  1374 			}
  1381 			}
  1375 		r=SetWriteFailOn(failCount);
  1382 		r=SetWriteFailOn(failCount);
  1376 		test(r==KErrNone);
  1383 		test_KErrNone(r);
  1377 		r=TheFs.Rename(aOldName,aNewName);
  1384 		r=TheFs.Rename(aOldName,aNewName);
  1378 		if(r==KErrNone)
  1385 		if(r==KErrNone)
  1379 			break;
  1386 			break;
  1380 		if(r!=WriteFailValue)
  1387 		test_Equal(WriteFailValue,r);
  1381 			{
       
  1382 			test.Printf(_L("r=%d\n"),r);
       
  1383 			test(EFalse);
       
  1384 			}
       
  1385 		test(r==WriteFailValue);
       
  1386 		r=TheFs.ScanDrive(gSessionPath);
  1388 		r=TheFs.ScanDrive(gSessionPath);
  1387 		test(r==KErrNone);
  1389 		test_KErrNone(r);
  1388 		r=TheFs.CheckDisk(gSessionPath);
  1390 		r=TheFs.CheckDisk(gSessionPath);
  1389 		test(r==KErrNone);
  1391 		test_KErrNone(r);
  1390 		// no start cluster if aSize==0
  1392 		// no start cluster if aSize==0
  1391 		if(aSize!=0)
  1393 		if(aSize!=0)
  1392 			test(OneEntryExists(aOldName,aNewName));
  1394 			test(OneEntryExists(aOldName,aNewName));
  1393 		++failCount;
  1395 		++failCount;
  1394 		}
  1396 		}
  1395 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1397 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1396 	test(r==KErrNone);
  1398 	test_KErrNone(r);
  1397 	r=TheFs.CheckDisk(gSessionPath);
  1399 	r=TheFs.CheckDisk(gSessionPath);
  1398 	test(r==KErrNone);
  1400 	test_KErrNone(r);
  1399 	test(EntryExists(aNewName) && !EntryExists(aOldName));
  1401 	test(EntryExists(aNewName) && !EntryExists(aOldName));
  1400 	GetEntryDetails(aNewName,newEntryInfo);
  1402 	GetEntryDetails(aNewName,newEntryInfo);
  1401 	test(IsSameEntryDetails(oldEntryInfo,newEntryInfo));
  1403 	test(IsSameEntryDetails(oldEntryInfo,newEntryInfo));
  1402 	r=DeleteEntry(aNewName,aIsDir,aChain);
  1404 	r=DeleteEntry(aNewName,aIsDir,aChain);
  1403 	test(r==KErrNone);
  1405 	test_KErrNone(r);
  1404 	++TheOpNumber;
  1406 	++TheOpNumber;
  1405 	TheFailCount=0;
  1407 	TheFailCount=0;
  1406 	}
  1408 	}
  1407 
  1409 
  1408 LOCAL_C void TestRFsReplace(const TDesC& aOldName, const TDesC& aNewName,TBool aBothExist,TFatChain aChain,TInt aFileSize)
  1410 LOCAL_C void TestRFsReplace(const TDesC& aOldName, const TDesC& aNewName,TBool aBothExist,TFatChain aChain,TInt aFileSize)
  1420 	TEntry oldEntryInfo,newEntryInfo;
  1422 	TEntry oldEntryInfo,newEntryInfo;
  1421 	FOREVER
  1423 	FOREVER
  1422 		{
  1424 		{
  1423 		test.Printf(_L("failCount=%d\n"),failCount);
  1425 		test.Printf(_L("failCount=%d\n"),failCount);
  1424 		r=CreateEntry(aOldName,EFalse,aChain,aFileSize);
  1426 		r=CreateEntry(aOldName,EFalse,aChain,aFileSize);
  1425 		test(r==KErrNone||r==KErrAlreadyExists);
  1427 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1426 		if(aBothExist)
  1428 		if(aBothExist)
  1427 			{
  1429 			{
  1428 			r=CreateEntry(aNewName,EFalse,aChain,aFileSize);
  1430 			r=CreateEntry(aNewName,EFalse,aChain,aFileSize);
  1429 			test(r==KErrNone||r==KErrAlreadyExists);
  1431 			test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1430 			}
  1432 			}
  1431 		else
  1433 		else
  1432 			{
  1434 			{
  1433 			r=DeleteEntry(aNewName,EFalse,aChain);
  1435 			r=DeleteEntry(aNewName,EFalse,aChain);
  1434 			test(r==KErrNone||r==KErrNotFound);
  1436 			test_Value(r, r==KErrNone||r==KErrNotFound);
  1435 			}
  1437 			}
  1436 		GetEntryDetails(aOldName,oldEntryInfo);
  1438 		GetEntryDetails(aOldName,oldEntryInfo);
  1437 		if(IsReset)
  1439 		if(IsReset)
  1438 			{
  1440 			{
  1439 			++TheFailCount;
  1441 			++TheFailCount;
  1440 			WriteLogFile();
  1442 			WriteLogFile();
  1441 			}
  1443 			}
  1442 		r=SetWriteFailOn(failCount);
  1444 		r=SetWriteFailOn(failCount);
  1443 		test(r==KErrNone);
  1445 		test_KErrNone(r);
  1444 		r=TheFs.Replace(aOldName,aNewName);
  1446 		r=TheFs.Replace(aOldName,aNewName);
  1445 		if(r==KErrNone)
  1447 		if(r==KErrNone)
  1446 			break;
  1448 			break;
  1447 		test(r==WriteFailValue);
  1449 		test_Equal(WriteFailValue,r);
  1448 		r=TheFs.ScanDrive(gSessionPath);
  1450 		r=TheFs.ScanDrive(gSessionPath);
  1449 		test(r==KErrNone);
  1451 		test_KErrNone(r);
  1450 		r=TheFs.CheckDisk(gSessionPath);
  1452 		r=TheFs.CheckDisk(gSessionPath);
  1451 		test(r==KErrNone);
  1453 		test_KErrNone(r);
  1452 		if(!aBothExist && aFileSize!=0)
  1454 		if(!aBothExist && aFileSize!=0)
  1453 			test(OneEntryExists(aOldName,aNewName));
  1455 			test(OneEntryExists(aOldName,aNewName));
  1454 		else if(aBothExist)
  1456 		else if(aBothExist)
  1455 			test(EntryExists(aOldName)||EntryExists(aNewName));
  1457 			test(EntryExists(aOldName)||EntryExists(aNewName));
  1456 		++failCount;
  1458 		++failCount;
  1457 		}
  1459 		}
  1458 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1460 	r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1459 	test(r==KErrNone);
  1461 	test_KErrNone(r);
  1460 	r=TheFs.CheckDisk(gSessionPath);
  1462 	r=TheFs.CheckDisk(gSessionPath);
  1461 	test(r==KErrNone);
  1463 	test_KErrNone(r);
  1462 	test(EntryExists(aNewName) && !EntryExists(aOldName));
  1464 	test(EntryExists(aNewName) && !EntryExists(aOldName));
  1463 	GetEntryDetails(aNewName,newEntryInfo);
  1465 	GetEntryDetails(aNewName,newEntryInfo);
  1464 	test(IsSameEntryDetails(oldEntryInfo,newEntryInfo));
  1466 	test(IsSameEntryDetails(oldEntryInfo,newEntryInfo));
  1465 	r=DeleteEntry(aNewName,EFalse,aChain);
  1467 	r=DeleteEntry(aNewName,EFalse,aChain);
  1466 	test(r==KErrNone);
  1468 	test_KErrNone(r);
  1467 	++TheOpNumber;
  1469 	++TheOpNumber;
  1468 	TheFailCount=0;
  1470 	TheFailCount=0;
  1469 	}
  1471 	}
  1470 
  1472 
  1471 LOCAL_C void TestRFileCreate(const TDesC& aName)
  1473 LOCAL_C void TestRFileCreate(const TDesC& aName)
  1478 	test.Next(_L("TestRFileCreate"));
  1480 	test.Next(_L("TestRFileCreate"));
  1479 	FOREVER
  1481 	FOREVER
  1480 		{
  1482 		{
  1481 		test.Printf(_L("failCount=%d\n"),failCount);
  1483 		test.Printf(_L("failCount=%d\n"),failCount);
  1482 		r=DeleteEntry(aName,EFalse,EChainStd);
  1484 		r=DeleteEntry(aName,EFalse,EChainStd);
  1483 		test(r==KErrNone||r==KErrNotFound);
  1485 		test_Value(r, r==KErrNone||r==KErrNotFound);
  1484 		if(IsReset)
  1486 		if(IsReset)
  1485 			{
  1487 			{
  1486 			++TheFailCount;
  1488 			++TheFailCount;
  1487 			WriteLogFile();
  1489 			WriteLogFile();
  1488 			}
  1490 			}
  1489 		r=SetWriteFailOn(failCount);
  1491 		r=SetWriteFailOn(failCount);
  1490 		test(r==KErrNone);
  1492 		test_KErrNone(r);
  1491 		RFile file;
  1493 		RFile file;
  1492 		r=file.Create(TheFs,aName,EFileShareAny);
  1494 		r=file.Create(TheFs,aName,EFileShareAny);
  1493 		if(r==KErrNone)
  1495 		if(r==KErrNone)
  1494 			{
  1496 			{
  1495 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1497 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1496 			test(r==KErrNone);
  1498 			test_KErrNone(r);
  1497 			file.Close();
  1499 			file.Close();
  1498 			break;
  1500 			break;
  1499 			}
  1501 			}
  1500 		test(r==WriteFailValue);
  1502 		test_Equal(WriteFailValue,r);
  1501 		r=TheFs.ScanDrive(gSessionPath);
  1503 		r=TheFs.ScanDrive(gSessionPath);
  1502 		test(r==KErrNone);
  1504 		test_KErrNone(r);
  1503 		r=TheFs.CheckDisk(gSessionPath);
  1505 		r=TheFs.CheckDisk(gSessionPath);
  1504 		test(r==KErrNone);
  1506 		test_KErrNone(r);
  1505 		++failCount;
  1507 		++failCount;
  1506 		}
  1508 		}
  1507 	r=TheFs.CheckDisk(gSessionPath);
  1509 	r=TheFs.CheckDisk(gSessionPath);
  1508 	test(r==KErrNone);
  1510 	test_KErrNone(r);
  1509 	test(EntryExists(aName));
  1511 	test(EntryExists(aName));
  1510 	r=DeleteEntry(aName,EFalse,EChainStd);
  1512 	r=DeleteEntry(aName,EFalse,EChainStd);
  1511 	test(r==KErrNone);
  1513 	test_KErrNone(r);
  1512 	++TheOpNumber;
  1514 	++TheOpNumber;
  1513 	TheFailCount=0;
  1515 	TheFailCount=0;
  1514 	}
  1516 	}
  1515 
  1517 
  1516 LOCAL_C void TestRFileTemp(const TDesC& aPath)
  1518 LOCAL_C void TestRFileTemp(const TDesC& aPath)
  1529 			{
  1531 			{
  1530 			++TheFailCount;
  1532 			++TheFailCount;
  1531 			WriteLogFile();
  1533 			WriteLogFile();
  1532 			}
  1534 			}
  1533 		r=SetWriteFailOn(failCount);
  1535 		r=SetWriteFailOn(failCount);
  1534 		test(r==KErrNone);
  1536 		test_KErrNone(r);
  1535 		RFile file;
  1537 		RFile file;
  1536  		r=file.Temp(TheFs,aPath,temp,EFileShareAny);
  1538  		r=file.Temp(TheFs,aPath,temp,EFileShareAny);
  1537 		if(r==KErrNone)
  1539 		if(r==KErrNone)
  1538 			{
  1540 			{
  1539 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1541 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1540 			test(r==KErrNone);
  1542 			test_KErrNone(r);
  1541 			file.Close();
  1543 			file.Close();
  1542 			break;
  1544 			break;
  1543 			}
  1545 			}
  1544 		test(r==WriteFailValue);
  1546 		test(r==WriteFailValue);
  1545 		r=TheFs.ScanDrive(gSessionPath);
  1547 		r=TheFs.ScanDrive(gSessionPath);
  1546 		test(r==KErrNone);
  1548 		test_KErrNone(r);
  1547 		r=TheFs.CheckDisk(gSessionPath);
  1549 		r=TheFs.CheckDisk(gSessionPath);
  1548 		test(r==KErrNone);
  1550 		test_KErrNone(r);
  1549 		++failCount;
  1551 		++failCount;
  1550 		}
  1552 		}
  1551 	r=TheFs.CheckDisk(gSessionPath);
  1553 	r=TheFs.CheckDisk(gSessionPath);
  1552 	test(r==KErrNone);
  1554 	test_KErrNone(r);
  1553 	test(EntryExists(temp));
  1555 	test(EntryExists(temp));
  1554 	r=DeleteEntry(temp,EFalse,EChainStd);
  1556 	r=DeleteEntry(temp,EFalse,EChainStd);
  1555 	test(r==KErrNone);
  1557 	test_KErrNone(r);
  1556 	++TheOpNumber;
  1558 	++TheOpNumber;
  1557 	TheFailCount=0;
  1559 	TheFailCount=0;
  1558 	}
  1560 	}
  1559 
  1561 
  1560 LOCAL_C void TestRFileRename(const TDesC& aOldName, const TDesC& aNewName,TFatChain aChain,TInt aFileSize)
  1562 LOCAL_C void TestRFileRename(const TDesC& aOldName, const TDesC& aNewName,TFatChain aChain,TInt aFileSize)
  1568 	TEntry oldEntryInfo,newEntryInfo;
  1570 	TEntry oldEntryInfo,newEntryInfo;
  1569 	FOREVER
  1571 	FOREVER
  1570 		{
  1572 		{
  1571 		test.Printf(_L("failCount=%d\n"),failCount);
  1573 		test.Printf(_L("failCount=%d\n"),failCount);
  1572 		r=CreateEntry(aOldName,EFalse,aChain,aFileSize);
  1574 		r=CreateEntry(aOldName,EFalse,aChain,aFileSize);
  1573 		test(r==KErrNone||r==KErrAlreadyExists);
  1575 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1574 		r=DeleteEntry(aNewName,EFalse,aChain);
  1576 		r=DeleteEntry(aNewName,EFalse,aChain);
  1575 		test(r==KErrNone||r==KErrNotFound);
  1577 		test_Value(r, r==KErrNone||r==KErrNotFound);
  1576 		GetEntryDetails(aOldName,oldEntryInfo);
  1578 		GetEntryDetails(aOldName,oldEntryInfo);
  1577 		if(IsReset)
  1579 		if(IsReset)
  1578 			{
  1580 			{
  1579 			++TheFailCount;
  1581 			++TheFailCount;
  1580 			WriteLogFile();
  1582 			WriteLogFile();
  1581 			}
  1583 			}
  1582 		RFile file;
  1584 		RFile file;
  1583 		r=file.Open(TheFs,aOldName,EFileShareExclusive|EFileWrite);
  1585 		r=file.Open(TheFs,aOldName,EFileShareExclusive|EFileWrite);
  1584 		test(r==KErrNone);
  1586 		test_KErrNone(r);
  1585 		r=SetWriteFailOn(failCount);
  1587 		r=SetWriteFailOn(failCount);
  1586 		test(r==KErrNone);
  1588 		test_KErrNone(r);
  1587 		r=file.Rename(aNewName);
  1589 		r=file.Rename(aNewName);
  1588 		if(r==KErrNone)
  1590 		if(r==KErrNone)
  1589 			{
  1591 			{
  1590 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1592 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1591 			test(r==KErrNone);
  1593 			test_KErrNone(r);
  1592 			file.Close();
  1594 			file.Close();
  1593 			break;
  1595 			break;
  1594 			}
  1596 			}
  1595 		test(r==WriteFailValue);
  1597 		test_Equal(WriteFailValue,r);
  1596 		file.Close();
  1598 		file.Close();
  1597 		r=TheFs.ScanDrive(gSessionPath);
  1599 		r=TheFs.ScanDrive(gSessionPath);
  1598 		test(r==KErrNone);
  1600 		test_KErrNone(r);
  1599 		r=TheFs.CheckDisk(gSessionPath);
  1601 		r=TheFs.CheckDisk(gSessionPath);
  1600 		test(r==KErrNone);
  1602 		test_KErrNone(r);
  1601 		if(aFileSize)
  1603 		if(aFileSize)
  1602 			test(OneEntryExists(aOldName,aNewName));
  1604 			test(OneEntryExists(aOldName,aNewName));
  1603 		++failCount;
  1605 		++failCount;
  1604 		}
  1606 		}
  1605 	r=TheFs.CheckDisk(gSessionPath);
  1607 	r=TheFs.CheckDisk(gSessionPath);
  1606 	test(r==KErrNone);
  1608 	test_KErrNone(r);
  1607 	test(EntryExists(aNewName) && !EntryExists(aOldName));
  1609 	test(EntryExists(aNewName) && !EntryExists(aOldName));
  1608 	GetEntryDetails(aNewName,newEntryInfo);
  1610 	GetEntryDetails(aNewName,newEntryInfo);
  1609 	test(IsSameEntryDetails(oldEntryInfo,newEntryInfo));
  1611 	test(IsSameEntryDetails(oldEntryInfo,newEntryInfo));
  1610 	r=DeleteEntry(aNewName,EFalse,aChain);
  1612 	r=DeleteEntry(aNewName,EFalse,aChain);
  1611 	test(r==KErrNone);
  1613 	test_KErrNone(r);
  1612 	++TheOpNumber;
  1614 	++TheOpNumber;
  1613 	TheFailCount=0;
  1615 	TheFailCount=0;
  1614 	}
  1616 	}
  1615 
  1617 
  1616 LOCAL_C void TestRFileReplace(const TDesC& aName,TBool aAlreadyExists,TFatChain aChain,TInt aFileSize)
  1618 LOCAL_C void TestRFileReplace(const TDesC& aName,TBool aAlreadyExists,TFatChain aChain,TInt aFileSize)
  1625 		{
  1627 		{
  1626 		test.Printf(_L("failCount=%d\n"),failCount);
  1628 		test.Printf(_L("failCount=%d\n"),failCount);
  1627 		if(aAlreadyExists)
  1629 		if(aAlreadyExists)
  1628 			{
  1630 			{
  1629 			r=CreateEntry(aName,EFalse,aChain,aFileSize);
  1631 			r=CreateEntry(aName,EFalse,aChain,aFileSize);
  1630 			test(r==KErrNone||r==KErrAlreadyExists);
  1632 			test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1631 			}
  1633 			}
  1632 		else
  1634 		else
  1633 			{
  1635 			{
  1634 			r=DeleteEntry(aName,EFalse,aChain);
  1636 			r=DeleteEntry(aName,EFalse,aChain);
  1635 			test(r==KErrNone||r==KErrNotFound);
  1637 			test_Value(r, r==KErrNone||r==KErrNotFound);
  1636 			}
  1638 			}
  1637 		if(IsReset)
  1639 		if(IsReset)
  1638 			{
  1640 			{
  1639 			++TheFailCount;
  1641 			++TheFailCount;
  1640 			WriteLogFile();
  1642 			WriteLogFile();
  1641 			}
  1643 			}
  1642 		r=SetWriteFailOn(failCount);
  1644 		r=SetWriteFailOn(failCount);
  1643 		test(r==KErrNone);
  1645 		test_KErrNone(r);
  1644 		RFile file;
  1646 		RFile file;
  1645 		r=file.Replace(TheFs,aName,EFileShareAny);
  1647 		r=file.Replace(TheFs,aName,EFileShareAny);
  1646 		if(r==KErrNone)
  1648 		if(r==KErrNone)
  1647 			{
  1649 			{
  1648 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1650 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1649 			test(r==KErrNone);
  1651 			test_KErrNone(r);
  1650 			file.Close();
  1652 			file.Close();
  1651 			break;
  1653 			break;
  1652 			}
  1654 			}
  1653 		test(r==WriteFailValue);
  1655 		test_Equal(WriteFailValue,r);
  1654 		r=TheFs.ScanDrive(gSessionPath);
  1656 		r=TheFs.ScanDrive(gSessionPath);
  1655 		test(r==KErrNone);
  1657 		test_KErrNone(r);
  1656 		r=TheFs.CheckDisk(gSessionPath);
  1658 		r=TheFs.CheckDisk(gSessionPath);
  1657 		test(r==KErrNone);
  1659 		test_KErrNone(r);
  1658 		++failCount;
  1660 		++failCount;
  1659 		}
  1661 		}
  1660 	r=TheFs.CheckDisk(gSessionPath);
  1662 	r=TheFs.CheckDisk(gSessionPath);
  1661 	test(r==KErrNone);
  1663 	test_KErrNone(r);
  1662 	test(EntryExists(aName));
  1664 	test(EntryExists(aName));
  1663 	r=DeleteEntry(aName,EFalse,aChain);
  1665 	r=DeleteEntry(aName,EFalse,aChain);
  1664 	test(r==KErrNone);
  1666 	test_KErrNone(r);
  1665 	if(!aAlreadyExists)
  1667 	if(!aAlreadyExists)
  1666 		{
  1668 		{
  1667 		++TheOpNumber;
  1669 		++TheOpNumber;
  1668 		TheFailCount=0;
  1670 		TheFailCount=0;
  1669 		}
  1671 		}
  1685 	test.Printf(_L("old size=%d new size=%d\n"),aOldFileSize,aNewFileSize);
  1687 	test.Printf(_L("old size=%d new size=%d\n"),aOldFileSize,aNewFileSize);
  1686 	FOREVER
  1688 	FOREVER
  1687 		{
  1689 		{
  1688 		test.Printf(_L("failCount=%d\n"),failCount);
  1690 		test.Printf(_L("failCount=%d\n"),failCount);
  1689 		r=CreateEntry(aName,EFalse,aChain,aOldFileSize);
  1691 		r=CreateEntry(aName,EFalse,aChain,aOldFileSize);
  1690 		test(r==KErrNone||r==KErrAlreadyExists);
  1692 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1691 		if(IsReset)
  1693 		if(IsReset)
  1692 			{
  1694 			{
  1693 			++TheFailCount;
  1695 			++TheFailCount;
  1694 			WriteLogFile();
  1696 			WriteLogFile();
  1695 			}
  1697 			}
  1696 		r=SetWriteFailOn(failCount);
  1698 		r=SetWriteFailOn(failCount);
  1697 		test(r==KErrNone);
  1699 		test_KErrNone(r);
  1698 		RFile file;
  1700 		RFile file;
  1699 		r=file.Open(TheFs,aName,EFileShareAny|EFileWrite);
  1701 		r=file.Open(TheFs,aName,EFileShareAny|EFileWrite);
  1700 		test(r==KErrNone);
  1702 		test_KErrNone(r);
  1701 		r=file.SetSize(aNewFileSize);
  1703 		r=file.SetSize(aNewFileSize);
  1702 		// close the file before testing the return value!
  1704 		// close the file before testing the return value!
  1703 		file.Close();
  1705 		file.Close();
  1704 		if(r==KErrNone)
  1706 		if(r==KErrNone)
  1705 			{
  1707 			{
  1706 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1708 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1707 			test(r==KErrNone);
  1709 			test_KErrNone(r);
  1708 			file.Close();
  1710 			file.Close();
  1709 			break;
  1711 			break;
  1710 			}
  1712 			}
  1711 		file.Close();
  1713 		file.Close();
  1712 		test(r==WriteFailValue);
  1714 		test_Equal(WriteFailValue,r);
  1713 		r=TheFs.ScanDrive(gSessionPath);
  1715 		r=TheFs.ScanDrive(gSessionPath);
  1714 		test(r==KErrNone);
  1716 		test_KErrNone(r);
  1715 		r=TheFs.CheckDisk(gSessionPath);
  1717 		r=TheFs.CheckDisk(gSessionPath);
  1716 		test(r==KErrNone);
  1718 		test_KErrNone(r);
  1717 		r=file.Open(TheFs,aName,EFileShareAny|EFileWrite);
  1719 		r=file.Open(TheFs,aName,EFileShareAny|EFileWrite);
  1718 		test(r==KErrNone);
  1720 		test_KErrNone(r);
  1719 		TInt size;
  1721 		TInt size;
  1720 		r=file.Size(size);
  1722 		r=file.Size(size);
  1721 		test(r==KErrNone);
  1723 		test_KErrNone(r);
  1722 		test(size==aNewFileSize||size==aOldFileSize);
  1724 		test_Value(size, size==aNewFileSize||size==aOldFileSize);
  1723 		file.Close();
  1725 		file.Close();
  1724 		++failCount;
  1726 		++failCount;
  1725 		}
  1727 		}
  1726 	r=TheFs.CheckDisk(gSessionPath);
  1728 	r=TheFs.CheckDisk(gSessionPath);
  1727 	test(r==KErrNone);
  1729 	test_KErrNone(r);
  1728 	RFile file;
  1730 	RFile file;
  1729 	r=file.Open(TheFs,aName,EFileShareAny);
  1731 	r=file.Open(TheFs,aName,EFileShareAny);
  1730 	test(r==KErrNone);
  1732 	test_KErrNone(r);
  1731 	TInt fileSize;
  1733 	TInt fileSize;
  1732 	r=file.Size(fileSize);
  1734 	r=file.Size(fileSize);
  1733 	test(r==KErrNone);
  1735 	test_KErrNone(r);
  1734 	test(aNewFileSize==fileSize);
  1736 	test_Equal(aNewFileSize,fileSize);
  1735 	file.Close();
  1737 	file.Close();
  1736 	r=DeleteEntry(aName,EFalse,aChain);
  1738 	r=DeleteEntry(aName,EFalse,aChain);
  1737 	test(r==KErrNone);
  1739 	test_KErrNone(r);
  1738 	++TheFunctionNumber;
  1740 	++TheFunctionNumber;
  1739 	TheFailCount=0;
  1741 	TheFailCount=0;
  1740 	}
  1742 	}
  1741 
  1743 
  1742 LOCAL_C void TestRFileWrite(const TDesC& aName,TFatChain aChain,TInt aFileSize,TInt aPos,TInt aLength)
  1744 LOCAL_C void TestRFileWrite(const TDesC& aName,TFatChain aChain,TInt aFileSize,TInt aPos,TInt aLength)
  1749 	test.Next(_L("TestRFileWrite"));
  1751 	test.Next(_L("TestRFileWrite"));
  1750 	test.Printf(_L("aFileSize=%d,aPos=%d,aLength=%d\n"),aFileSize,aPos,aLength);
  1752 	test.Printf(_L("aFileSize=%d,aPos=%d,aLength=%d\n"),aFileSize,aPos,aLength);
  1751 	TInt newSize=(aFileSize>=aPos+aLength)?aFileSize:aPos+aLength;
  1753 	TInt newSize=(aFileSize>=aPos+aLength)?aFileSize:aPos+aLength;
  1752 	HBufC8* desPtr;
  1754 	HBufC8* desPtr;
  1753 	desPtr=HBufC8::New(aLength);
  1755 	desPtr=HBufC8::New(aLength);
  1754 	test(desPtr!=NULL);
  1756 	test_NotNull(desPtr);
  1755 	TPtr8 des=desPtr->Des();
  1757 	TPtr8 des=desPtr->Des();
  1756 	des.SetLength(aLength);
  1758 	des.SetLength(aLength);
  1757 	InitialiseWriteBuffer(des);
  1759 	InitialiseWriteBuffer(des);
  1758 	FOREVER
  1760 	FOREVER
  1759 		{
  1761 		{
  1760 		test.Printf(_L("failCount=%d\n"),failCount);
  1762 		test.Printf(_L("failCount=%d\n"),failCount);
  1761 		r=CreateEntry(aName,EFalse,aChain,aFileSize);
  1763 		r=CreateEntry(aName,EFalse,aChain,aFileSize);
  1762 		test(r==KErrNone||r==KErrAlreadyExists);
  1764 		test_Value(r, r==KErrNone||r==KErrAlreadyExists);
  1763 		if(IsReset)
  1765 		if(IsReset)
  1764 			{
  1766 			{
  1765 			++TheFailCount;
  1767 			++TheFailCount;
  1766 			WriteLogFile();
  1768 			WriteLogFile();
  1767 			}
  1769 			}
  1768 		r=SetWriteFailOn(failCount);
  1770 		r=SetWriteFailOn(failCount);
  1769 		test(r==KErrNone);
  1771 		test_KErrNone(r);
  1770 		RFile file;
  1772 		RFile file;
  1771 		r=file.Open(TheFs,aName,EFileShareAny|EFileWrite);
  1773 		r=file.Open(TheFs,aName,EFileShareAny|EFileWrite);
  1772 		test(r==KErrNone);
  1774 		test_KErrNone(r);
  1773 		r=file.Write(aPos,des,aLength);
  1775 		r=file.Write(aPos,des,aLength);
  1774 		if(r==KErrNone)
  1776 		if(r==KErrNone)
  1775 			{
  1777 			{
  1776 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1778 			r=TheFs.ControlIo(gSessionPath[0]-'A',KControlIoWriteFailOff);
  1777 			test(r==KErrNone);
  1779 			test_KErrNone(r);
  1778 			file.Close();
  1780 			file.Close();
  1779 			break;
  1781 			break;
  1780 			}
  1782 			}
  1781 		test(r==WriteFailValue);
  1783 		test_Equal(WriteFailValue,r);
  1782 		file.Close();
  1784 		file.Close();
  1783 		r=TheFs.ScanDrive(gSessionPath);
  1785 		r=TheFs.ScanDrive(gSessionPath);
  1784 		test(r==KErrNone);
  1786 		test_KErrNone(r);
  1785 		r=TheFs.CheckDisk(gSessionPath);
  1787 		r=TheFs.CheckDisk(gSessionPath);
  1786 		test(r==KErrNone);
  1788 		test_KErrNone(r);
  1787 		file.Open(TheFs,aName,EFileShareAny);
  1789 		file.Open(TheFs,aName,EFileShareAny);
  1788 		test(r==KErrNone);
  1790 		test_KErrNone(r);
  1789 		TInt fileSize;
  1791 		TInt fileSize;
  1790 		r=file.Size(fileSize);
  1792 		r=file.Size(fileSize);
  1791 		// with fair scheduling enabled it's possible for the file 
  1793 		// with fair scheduling enabled it's possible for the file 
  1792 		// size to grow even if the write appears to have failed...
  1794 		// size to grow even if the write appears to have failed...
  1793 //		test(fileSize==aFileSize||fileSize==newSize);
  1795 //		test_Value(fileSize, fileSize==aFileSize||fileSize==newSize);
  1794 		test(fileSize>=aFileSize && fileSize <= newSize);
  1796 		test_Value(fileSize, fileSize>=aFileSize && fileSize <= newSize);
  1795 
  1797 
  1796 		file.Close();
  1798 		file.Close();
  1797 		++failCount;
  1799 		++failCount;
  1798 		}
  1800 		}
  1799 	r=TheFs.CheckDisk(gSessionPath);
  1801 	r=TheFs.CheckDisk(gSessionPath);
  1800 	test(r==KErrNone);
  1802 	test_KErrNone(r);
  1801 	RFile file;
  1803 	RFile file;
  1802 	r=file.Open(TheFs,aName,EFileShareAny);
  1804 	r=file.Open(TheFs,aName,EFileShareAny);
  1803 	test(r==KErrNone);
  1805 	test_KErrNone(r);
  1804 	TInt fileSize;
  1806 	TInt fileSize;
  1805 	r=file.Size(fileSize);
  1807 	r=file.Size(fileSize);
  1806 	test(r==KErrNone);
  1808 	test_KErrNone(r);
  1807 	test(newSize==fileSize);
  1809 	test_Equal(newSize,fileSize);
  1808 	HBufC8* desPtr2;
  1810 	HBufC8* desPtr2;
  1809 	desPtr2=HBufC8::New(aLength);
  1811 	desPtr2=HBufC8::New(aLength);
  1810 	test(desPtr2!=NULL);
  1812 	test_NotNull(desPtr2);
  1811 	TPtr8 des2=desPtr2->Des();
  1813 	TPtr8 des2=desPtr2->Des();
  1812 	des2.SetLength(aLength);
  1814 	des2.SetLength(aLength);
  1813 	r=file.Read(aPos,des2,des2.Length());
  1815 	r=file.Read(aPos,des2,des2.Length());
  1814 	test(r==KErrNone);
  1816 	test_KErrNone(r);
  1815 	r=des2.Compare(des);
  1817 	r=des2.Compare(des);
  1816 	test(r==0);
  1818 	test_KErrNone(r);
  1817 	file.Close();
  1819 	file.Close();
  1818 	r=DeleteEntry(aName,EFalse,aChain);
  1820 	r=DeleteEntry(aName,EFalse,aChain);
  1819 	test(r==KErrNone);
  1821 	test_KErrNone(r);
  1820 	delete desPtr;
  1822 	delete desPtr;
  1821 	delete desPtr2;
  1823 	delete desPtr2;
  1822 	++TheFunctionNumber;
  1824 	++TheFunctionNumber;
  1823 	TheFailCount=0;
  1825 	TheFailCount=0;
  1824 	}
  1826 	}
  1983 	DoReadBootSector();
  1985 	DoReadBootSector();
  1984 	DumpBootSector();
  1986 	DumpBootSector();
  1985 	ClearDiskData();
  1987 	ClearDiskData();
  1986 
  1988 
  1987 	r=TheFs.SetSessionPath(gSessionPath);
  1989 	r=TheFs.SetSessionPath(gSessionPath);
  1988 	test(r==KErrNone);
  1990 	test_KErrNone(r);
  1989 
  1991 
  1990 	switch(TheFunctionNumber)
  1992 	switch(TheFunctionNumber)
  1991 		{
  1993 		{
  1992 		case(0):TestOperation0();
  1994 		case(0):TestOperation0();
  1993 		case(1):{
  1995 		case(1):{
  1994 				TestOperation1();
  1996 				TestOperation1();
  1995 				r=TheFs.MkDir(_L("\\fat\\"));
  1997 				r=TheFs.MkDir(_L("\\fat\\"));
  1996 				test(r==KErrNone);
  1998 				test_KErrNone(r);
  1997 				r=TheFs.MkDir(_L("\\test\\"));
  1999 				r=TheFs.MkDir(_L("\\test\\"));
  1998 				test(r==KErrNone);
  2000 				test_KErrNone(r);
  1999 				r=TheFs.MkDir(_L("\\ANother\\"));
  2001 				r=TheFs.MkDir(_L("\\ANother\\"));
  2000 				test(r==KErrNone);
  2002 				test_KErrNone(r);
  2001 				r=TheFs.MkDir(_L("\\test\\subdir1\\"));
  2003 				r=TheFs.MkDir(_L("\\test\\subdir1\\"));
  2002 				test(r==KErrNone);
  2004 				test_KErrNone(r);
  2003 				r=TheFs.MkDir(_L("\\test\\subdir2\\"));
  2005 				r=TheFs.MkDir(_L("\\test\\subdir2\\"));
  2004 				test(r==KErrNone);}
  2006 				test_KErrNone(r);}
  2005 		case(2):{
  2007 		case(2):{
  2006 				TestOperation2();
  2008 				TestOperation2();
  2007 				// add some filler files
  2009 				// add some filler files
  2008 				CreateEntry(_L("\\test\\subdir1\\FillerOne"),EFalse,EChainStd,512);
  2010 				CreateEntry(_L("\\test\\subdir1\\FillerOne"),EFalse,EChainStd,512);
  2009 				CreateEntry(_L("\\test\\subdir1\\FillerTwo"),EFalse,EChainStd,1024);}
  2011 				CreateEntry(_L("\\test\\subdir1\\FillerTwo"),EFalse,EChainStd,1024);}
  2047 	DeleteEntry(_L("\\test\\subdir1\\FillerFour"),EFalse,EChainStd);
  2049 	DeleteEntry(_L("\\test\\subdir1\\FillerFour"),EFalse,EChainStd);
  2048 	DeleteEntry(_L("\\ANother\\FillerThree"),EFalse,EChainStd);
  2050 	DeleteEntry(_L("\\ANother\\FillerThree"),EFalse,EChainStd);
  2049 	DeleteEntry(_L("\\test\\subdir1\\FillerTwo"),EFalse,EChainStd);
  2051 	DeleteEntry(_L("\\test\\subdir1\\FillerTwo"),EFalse,EChainStd);
  2050 	DeleteEntry(_L("\\test\\subdir1\\FillerOne"),EFalse,EChainStd);
  2052 	DeleteEntry(_L("\\test\\subdir1\\FillerOne"),EFalse,EChainStd);
  2051 	r=TheFs.RmDir(_L("\\test\\subdir2\\"));
  2053 	r=TheFs.RmDir(_L("\\test\\subdir2\\"));
  2052 	test(r==KErrNone);
  2054 	test_KErrNone(r);
  2053 	r=TheFs.RmDir(_L("\\test\\subdir1\\"));
  2055 	r=TheFs.RmDir(_L("\\test\\subdir1\\"));
  2054 	test(r==KErrNone);
  2056 	test_KErrNone(r);
  2055 	r=TheFs.RmDir(_L("\\ANother\\"));
  2057 	r=TheFs.RmDir(_L("\\ANother\\"));
  2056 	test(r==KErrNone);
  2058 	test_KErrNone(r);
  2057 	r=TheFs.RmDir(_L("\\test\\"));
  2059 	r=TheFs.RmDir(_L("\\test\\"));
  2058 	test(r==KErrNone);
  2060 	test_KErrNone(r);
  2059 	r=TheFs.RmDir(_L("\\fat\\"));
  2061 	r=TheFs.RmDir(_L("\\fat\\"));
  2060 	test(r==KErrNone);
  2062 	test_KErrNone(r);
  2061 	if (gFatBuf)
  2063 	if (gFatBuf)
  2062 		{
  2064 		{
  2063 		delete gFatBuf;
  2065 		delete gFatBuf;
  2064 		gFatBuf = NULL;
  2066 		gFatBuf = NULL;
  2065 		}
  2067 		}