kerneltest/f32test/filesystem/fat/t_fatcorrupt.cpp
branchRCL_3
changeset 257 3e88ff8f41d5
parent 256 c1f20ce4abcf
equal deleted inserted replaced
256:c1f20ce4abcf 257:3e88ff8f41d5
    26 //! @SYMAuthor Ying Shi
    26 //! @SYMAuthor Ying Shi
    27 //! @SYMCreationDate 20/05/2005
    27 //! @SYMCreationDate 20/05/2005
    28 //! @See EFat and EFat32 components
    28 //! @See EFat and EFat32 components
    29 //! @file f32test\server\t_fatcorrupt.cpp
    29 //! @file f32test\server\t_fatcorrupt.cpp
    30 
    30 
    31 #define	__E32TEST_EXTENSION__
       
    32 #include <f32file.h>
    31 #include <f32file.h>
    33 #include <e32test.h>
    32 #include <e32test.h>
    34 #include <e32math.h>
    33 #include <e32math.h>
    35 
    34 
    36 #include "t_server.h"
    35 #include "t_server.h"
   101 void RestoreEnv()
   100 void RestoreEnv()
   102     {
   101     {
   103     test.Printf(_L("RestoreEnv()\n"));
   102     test.Printf(_L("RestoreEnv()\n"));
   104 
   103 
   105     TInt r = TheFs.DismountExtension(KExtName, gDrive);
   104     TInt r = TheFs.DismountExtension(KExtName, gDrive);
   106     test_KErrNone(r);
   105     test(r==KErrNone);
   107     r = TheFs.RemoveExtension(KExtName);
   106     r = TheFs.RemoveExtension(KExtName);
   108     test_KErrNone(r);
   107     test(r==KErrNone);
   109 
   108 
   110     if(gExtExists)      // remount existing secondary extension
   109     if(gExtExists)      // remount existing secondary extension
   111         {
   110         {
   112         test(TheFs.MountExtension(gExtName, gDrive)==KErrNone);
   111         test(TheFs.MountExtension(gExtName, gDrive)==KErrNone);
   113         }
   112         }
   114 
   113 
   115 
   114 
   116     //-- We need a full format, because quick format preserves bad sectors marked in FAT
   115     //-- We need a full format, because quick format preserves bad sectors marked in FAT
   117     r = FormatFatDrive(TheFs, gDrive, EFalse);
   116     r = FormatFatDrive(TheFs, gDrive, EFalse);
   118     test_KErrNone(r);
   117     test(r == KErrNone);
   119 
   118 
   120     }
   119     }
   121 
   120 
   122 //-------------------------------------------------------------
   121 //-------------------------------------------------------------
   123 
   122 
   125 TBool PrepareMount()
   124 TBool PrepareMount()
   126     {
   125     {
   127     test.Printf(_L("PrepareMountL(), drive:%d \n"),gDrive);
   126     test.Printf(_L("PrepareMountL(), drive:%d \n"),gDrive);
   128 
   127 
   129     TInt r = TheFs.AddExtension(KExtName);
   128     TInt r = TheFs.AddExtension(KExtName);
   130     test_Value(r, r == KErrNone || r==KErrAlreadyExists);
   129     test(r==KErrNone || r==KErrAlreadyExists);
   131     r = TheFs.ExtensionName(gExtName,gDrive,0);
   130     r = TheFs.ExtensionName(gExtName,gDrive,0);
   132     if (r == KErrNone)              // an extension already exists -> dismount it
   131     if (r == KErrNone)              // an extension already exists -> dismount it
   133         {
   132         {
   134         test.Printf(_L("Drive %d has extension, attempt dismounting it\n"),gDrive);
   133         test.Printf(_L("Drive %d has extension, attempt dismounting it\n"),gDrive);
   135         r=TheFs.DismountExtension(gExtName,gDrive);
   134         r=TheFs.DismountExtension(gExtName,gDrive);
   137             {
   136             {
   138             test.Printf(_L("Drive %d has primary extension, skip\n"),gDrive);
   137             test.Printf(_L("Drive %d has primary extension, skip\n"),gDrive);
   139             test(TheFs.RemoveExtension(KExtName) == KErrNone);
   138             test(TheFs.RemoveExtension(KExtName) == KErrNone);
   140             return EFalse;
   139             return EFalse;
   141             }
   140             }
   142         test_KErrNone(r);
   141         test(r==KErrNone);
   143         gExtExists=ETrue;
   142         gExtExists=ETrue;
   144         }
   143         }
   145     test_Value(r, r == KErrNone || r==KErrNotFound);
   144     test(r == KErrNone || r==KErrNotFound);
   146     r = TheFs.MountExtension(KExtName, gDrive);
   145     r = TheFs.MountExtension(KExtName, gDrive);
   147     if (r != KErrNone)
   146     if (r != KErrNone)
   148         test(TheFs.RemoveExtension(KExtName) == KErrNone);
   147         test(TheFs.RemoveExtension(KExtName) == KErrNone);
   149     test_KErrNone(r);
   148     test(r==KErrNone);
   150     return ETrue;
   149     return ETrue;
   151     }
   150     }
   152 
   151 
   153 //-------------------------------------------------------------
   152 //-------------------------------------------------------------
   154 
   153 
   559 
   558 
   560     //Mark cluster 2 as bad by raw access.
   559     //Mark cluster 2 as bad by raw access.
   561     RRawDisk rawDisk;
   560     RRawDisk rawDisk;
   562 
   561 
   563     TInt r=rawDisk.Open(TheFs,gSessionPath[0]-'A');
   562     TInt r=rawDisk.Open(TheFs,gSessionPath[0]-'A');
   564     test_KErrNone(r);
   563     test(r==KErrNone);
   565 
   564 
   566     //Mark Cluster 2  & 3 as bad
   565     //Mark Cluster 2  & 3 as bad
   567     const TInt fatStartPos = BootSector.FirstFatSector() * BootSector.BytesPerSector();
   566     const TInt fatStartPos = BootSector.FirstFatSector() * BootSector.BytesPerSector();
   568     TInt64 pos = 8 + fatStartPos;
   567     TInt64 pos = 8 + fatStartPos;
   569 
   568 
   572     data[1] = 0xFF;
   571     data[1] = 0xFF;
   573     data[2] = 0xFF;
   572     data[2] = 0xFF;
   574     data[3] = 0x0F;
   573     data[3] = 0x0F;
   575 
   574 
   576     r=rawDisk.Write(pos, data);
   575     r=rawDisk.Write(pos, data);
   577     test_KErrNone(r);
   576     test(r==KErrNone);
   578 
   577 
   579     pos += 4;
   578     pos += 4;
   580     r = rawDisk.Write(pos, data);
   579     r = rawDisk.Write(pos, data);
   581     test_KErrNone(r);
   580     test(r==KErrNone);
   582 
   581 
   583     rawDisk.Close();
   582     rawDisk.Close();
   584 
   583 
   585     //-- quick format the drive
   584     //-- quick format the drive
   586     r = FormatFatDrive(TheFs, gDrive, ETrue);
   585     r = FormatFatDrive(TheFs, gDrive, ETrue);
   587     test_KErrNone(r);
   586     test(r==KErrNone);
   588 
   587 
   589     const TUint oldClusterNum = BootSector.RootClusterNum();
   588     const TUint oldClusterNum = BootSector.RootClusterNum();
   590     ReadBootSector();
   589     ReadBootSector();
   591 
   590 
   592     test.Printf(_L("Old Rool clNum:%d, new:%d\n"), oldClusterNum, BootSector.RootClusterNum());
   591     test.Printf(_L("Old Rool clNum:%d, new:%d\n"), oldClusterNum, BootSector.RootClusterNum());
   607     BootSector.SetVersionNumber(0x707); //-- corrupt Version number in the boot sector
   606     BootSector.SetVersionNumber(0x707); //-- corrupt Version number in the boot sector
   608 
   607 
   609     WriteVersionNumber();
   608     WriteVersionNumber();
   610 
   609 
   611     TInt r = TheFs.FileSystemName(name, gDrive);
   610     TInt r = TheFs.FileSystemName(name, gDrive);
   612     test_KErrNone(r);
   611     test(r == KErrNone);
   613 
   612 
   614     r = DismountFileSystem(TheFs, name, gDrive);
   613     r = DismountFileSystem(TheFs, name, gDrive);
   615     test_KErrNone(r);
   614     test(r == KErrNone);
   616 
   615 
   617     r = MountFileSystem(TheFs, name, gDrive);
   616     r = MountFileSystem(TheFs, name, gDrive);
   618 
   617 
   619     test_Value(r, r == KErrCorrupt);
   618     test(r == KErrCorrupt);
   620 
   619 
   621 }
   620 }
   622 
   621 
   623 
   622 
   624 //
   623 //
   634     ChangeVersionNumberAndMountL();
   633     ChangeVersionNumberAndMountL();
   635 
   634 
   636     // Test quick format
   635     // Test quick format
   637     RFormat formatQuick;
   636     RFormat formatQuick;
   638     TInt r = formatQuick.Open(TheFs, gDriveName, EQuickFormat, count);
   637     TInt r = formatQuick.Open(TheFs, gDriveName, EQuickFormat, count);
   639     test_KErrNone(r);
   638     test(r == KErrNone);
   640 
   639 
   641     r = DoFormatSteps(formatQuick, count);
   640     r = DoFormatSteps(formatQuick, count);
   642     test_KErrNone(r);
   641     test(r == KErrNone);
   643 
   642 
   644     formatQuick.Close();
   643     formatQuick.Close();
   645 
   644 
   646     ReadBootSector();
   645     ReadBootSector();
   647     r = TheFs.FileSystemName(name, gDrive);
   646     r = TheFs.FileSystemName(name, gDrive);
   648     test_KErrNone(r);
   647     test(r == KErrNone);
   649 
   648 
   650     r = DismountFileSystem(TheFs, name, gDrive);
   649     r = DismountFileSystem(TheFs, name, gDrive);
   651     test_KErrNone(r);
   650     test(r == KErrNone);
   652 
   651 
   653     r = MountFileSystem(TheFs, name, gDrive);
   652     r = MountFileSystem(TheFs, name, gDrive);
   654     test_KErrNone(r);
   653     test(r == KErrNone);
   655 
   654 
   656 }
   655 }
   657 
   656 
   658 //
   657 //
   659 // Test format disk with bad clusters
   658 // Test format disk with bad clusters
   733     TInt count;
   732     TInt count;
   734     RFormat formatFull;
   733     RFormat formatFull;
   735 
   734 
   736     //Mini SD cards works properly only with ESpecialFormat. Fix for Defect DEF091659
   735     //Mini SD cards works properly only with ESpecialFormat. Fix for Defect DEF091659
   737     TInt r = formatFull.Open(TheFs, gDriveName, ESpecialFormat, count);
   736     TInt r = formatFull.Open(TheFs, gDriveName, ESpecialFormat, count);
   738     test_KErrNone(r);
   737     test(r == KErrNone);
   739 
   738 
   740     r = DoFormatSteps(formatFull, count);
   739     r = DoFormatSteps(formatFull, count);
   741     test_KErrNone(r);
   740     test(r == KErrNone);
   742 
   741 
   743     formatFull.Close();
   742     formatFull.Close();
   744 
   743 
   745     ReadBootSector();
   744     ReadBootSector();
   746     //...and create the bad sector list
   745     //...and create the bad sector list
   761     return;
   760     return;
   762 #else
   761 #else
   763     // Only test FAT filesystem
   762     // Only test FAT filesystem
   764     TInt r;
   763     TInt r;
   765     r = TheFs.CharToDrive(gDriveToTest, gDrive);
   764     r = TheFs.CharToDrive(gDriveToTest, gDrive);
   766     test_KErrNone(r);
   765     test(r == KErrNone);
   767     gDriveName[0] = (TText)gDriveToTest;
   766     gDriveName[0] = (TText)gDriveToTest;
   768     gDriveName[1] = ':';
   767     gDriveName[1] = ':';
   769 
   768 
   770     //-- set up console output
   769     //-- set up console output
   771     Fat_Test_Utils::SetConsole(test.Console());
   770     Fat_Test_Utils::SetConsole(test.Console());
   780         }
   779         }
   781 
   780 
   782     // No need for variable size disk
   781     // No need for variable size disk
   783     TDriveInfo info;
   782     TDriveInfo info;
   784     r = TheFs.Drive(info, gDrive);
   783     r = TheFs.Drive(info, gDrive);
   785     test_KErrNone(r);
   784     test(r == KErrNone);
   786     if (info.iMediaAtt & KMediaAttVariableSize)
   785     if (info.iMediaAtt & KMediaAttVariableSize)
   787         {
   786         {
   788         test.Printf(_L("Drive %d is variable-size disk, skip\n"),gDrive);
   787         test.Printf(_L("Drive %d is variable-size disk, skip\n"),gDrive);
   789         return;
   788         return;
   790         }
   789         }