equal
deleted
inserted
replaced
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 } |