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