author | William Roberts <williamr@symbian.org> |
Mon, 28 Jun 2010 11:25:30 +0100 | |
branch | GCC_SURGE |
changeset 184 | 0e2270015475 |
parent 109 | b3a1d9898418 |
permissions | -rw-r--r-- |
// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" // which accompanies this distribution, and is available // at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. // // Contributors: // // Description: // f32test\filesystem\fat\t_nonrugged.cpp // Functional tests for the non-Rugged file mode (also called the File Sequential mode) // Only perform tests on the Rugged FAT file system // #define __E32TEST_EXTENSION__ #include <f32file.h> #include <e32test.h> #include "t_server.h" #include "fat_utils.h" using namespace Fat_Test_Utils; RTest test(_L("T_NONRUGGED")); TInt gDriveNum; _LIT(KTestPath, ":\\F32-TST\\T_NONRUGGED\\"); // 22 enum TNonRuggedFileMode { ENormalFileMode, // File is in normal (Rugged) mode ENonRuggedFileMode // File is in non-Rugged file mode (EFileSequential) }; enum TNonRuggedControlIO /* * ControlIo enum values */ { EControlIOIsRuggedFSys = 4, // Defined as EIsRuggedFSys in \fileserver\sfat32\common_constants.h EControlIOIsFileSequential = KMaxTInt-23 // Defined as KControlIoIsFileSequential in \fileserver\inc\f32dbg.h }; void CreateFile(RFile& aFile, const TDesC& aPath, TUint aFileMode) /* * Creates/opens a file in Rugged/non-Rugged mode after emptying the trace buffer */ { TInt r = TheFs.MkDirAll(aPath); test_Value(r, r == KErrNone || r == KErrAlreadyExists); r = aFile.Replace(TheFs, aPath, aFileMode); test_KErrNone(r); } void DeleteFileAndDir(const TDesC& aPath) /* * Deletes a single file and the directory containing it */ { TInt r = TheFs.Delete(aPath); test_KErrNone(r); r = TheFs.RmDir(aPath); test_KErrNone(r); } void SingleClientTest() /* * Unit test for Non-Rugged File mode with a single client *********************************************************************************** * 1. Create a file in non-Rugged file mode and then close the file. * 2. Open the file in normal Rugged file mode and then close it. * 3. Open the file in non-Rugged file mode again and then close it. * Expected Results: * 1. File is in non-Rugged file mode. * 2. File is in normal Rugged file mode. * 3. File is in non-Rugged file mode. *********************************************************************************** */ { test.Next(_L("Test single client")); TBuf<34> singleFile; singleFile.Append(gDriveToTest); // 1 singleFile.Append(KTestPath); // 22 singleFile.Append(_L("file.single")); // 11 TInt r = TheFs.Delete(singleFile); test_Value(r, r == KErrNone || r == KErrNotFound || r == KErrPathNotFound); TBuf8<KMaxPath> singleFilePkg; singleFilePkg.Copy(singleFile.Mid(2)); TUint8 fileMode = 0; TPtr8 fileModePkg(&fileMode, 1, 1); test.Printf(_L("Create file in non-Rugged file mode\n")); RFile file; CreateFile(file, singleFile, (EFileWrite | EFileSequential)); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, singleFilePkg, fileModePkg); test_KErrNone(r); test_Equal(ENonRuggedFileMode, fileMode); file.Close(); test.Printf(_L("Open file in normal mode\n")); CreateFile(file, singleFile, EFileWrite); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, singleFilePkg, fileModePkg); test_KErrNone(r); test_Equal(ENormalFileMode, fileMode); file.Close(); test.Printf(_L("Open file in non-Rugged file mode again\n")); CreateFile(file, singleFile, (EFileWrite | EFileSequential)); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, singleFilePkg, fileModePkg); test_KErrNone(r); test_Equal(ENonRuggedFileMode, fileMode); file.Close(); DeleteFileAndDir(singleFile); } void MultipleClientsTest() /* * Unit tests for Non-Rugged File mode with multiple clients accessing the same file */ { /*********************************************************************************** * Use Case 1: * 1. Client1 opens a file in non-Rugged file mode. * 2. Client2 then opens the same file in normal Rugged file mode. * Expected Results: * 1. File is in non-Rugged file mode. * 2. File changed to normal Rugged file mode. *********************************************************************************** */ test.Next(_L("Test multiple clients - Use case 1")); TBuf<33> fileName1; fileName1.Append(gDriveToTest); // 1 fileName1.Append(KTestPath); // 22 fileName1.Append(_L("file1.mult")); // 10 TInt r = TheFs.Delete(fileName1); test_Value(r, r == KErrNone || r == KErrNotFound || r == KErrPathNotFound); TBuf8<31> fileName1Pkg; fileName1Pkg.Copy(fileName1.Mid(2)); TUint8 fileMode = 0; TPtr8 fileModePkg(&fileMode, 1, 1); // Use Case 1.1, Client 1 (Non-Rugged Client) ------------------------------------ test.Printf(_L("Client1 create file in non-Rugged file mode\n")); RFile file1; CreateFile(file1, fileName1, (EFileWrite | EFileSequential | EFileShareAny)); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, fileName1Pkg, fileModePkg); test_KErrNone(r); test_Equal(ENonRuggedFileMode, fileMode); // Use Case 1.2, Client 2 (Rugged Client) ---------------------------------------- test.Printf(_L("Client2 open file in 'normal' Rugged file mode\n")); RFile file2; CreateFile(file2, fileName1, (EFileWrite | EFileShareAny)); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, fileName1Pkg, fileModePkg); test_KErrNone(r); test_Equal(ENormalFileMode, fileMode); file1.Close(); file2.Close(); r = TheFs.Delete(fileName1); test_KErrNone(r); /*********************************************************************************** * Use Case 2: * 1. Client1 opens a file in normal Rugged file mode. * 2. Client2 then opens the same file in non-Rugged file mode. * Expected Results: * 1. File is in normal Rugged file mode. * 2. File does not change to non-Rugged file mode. *********************************************************************************** */ test.Next(_L("Test multiple clients - Use case 2")); TBuf<34> fileName2; fileName2.Append(gDriveToTest); // 1 fileName2.Append(KTestPath); // 22 fileName2.Append(_L("file2.mult")); // 10 r = TheFs.Delete(fileName2); test_Value(r, r == KErrNone || r == KErrNotFound || r == KErrPathNotFound); TBuf8<KMaxPath> fileName2Pkg; fileName2Pkg.Copy(fileName2.Mid(2)); // Use Case 2.1, Client 1 (Rugged Client) ---------------------------------------- test.Printf(_L("Client1 create file in 'normal' Rugged file mode\n")); CreateFile(file1, fileName2, (EFileWrite | EFileShareAny)); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, fileName2Pkg, fileModePkg); test_KErrNone(r); test_Equal(ENormalFileMode, fileMode); // Use Case 2.2, Client 2 (Non-Rugged Client) ------------------------------------ test.Printf(_L("Client2 open file in non-Rugged file mode\n")); CreateFile(file2, fileName2, (EFileWrite | EFileSequential | EFileShareAny)); r = TheFs.ControlIo(gDriveNum, EControlIOIsFileSequential, fileName2Pkg, fileModePkg); test_KErrNone(r); test_Equal(ENormalFileMode, fileMode); file1.Close(); file2.Close(); DeleteFileAndDir(fileName2); } void CallTestsL() /* * Start point of T_NONRUGGED */ { #ifndef _DEBUG test.Printf(_L("T_NONRUGGED skipped. To run only on debug builds.\n")); return; #else TInt r = TheFs.CharToDrive(gDriveToTest, gDriveNum); test_KErrNone(r); // Currently only FAT file system supports Rugged drive if (!Is_Fat(TheFs, gDriveNum)) { test.Printf(_L("T_NONRUGGED skipped. Requires FAT filesystem to run.\n")); return; } // Use this to set filesystem to Rugged if it is not set as such #if(0) { // Ensure that the FAT filesystem is Rugged TUint8 ruggedVal = 0; TPtr8 ruggedPkg(&ruggedVal, 1, 1); r = TheFs.ControlIo(gDriveNum, EControlIOIsRuggedFSys, ruggedPkg); test_KErrNone(r); if (!ruggedVal) { r = TheFs.ControlIo(gDriveNumber, KControlIoRuggedOn); test_KErrNone(r); } } #endif // Test to run only on a rugged FAT drive TUint8 ruggedVal = 0; TPtr8 ruggedPkg(&ruggedVal, 1, 1); r = TheFs.ControlIo(gDriveNum, EControlIOIsRuggedFSys, ruggedPkg); test_KErrNone(r); if (!ruggedVal) { test.Printf(_L("T_NONRUGGED skipped. Requires Rugged FAT to run.\n")); return; } test.Start(_L("T_NONRUGGED Test Start")); // Run tests SingleClientTest(); MultipleClientsTest(); // Use this to unset filesystem to non-Rugged if it has been set above #if(0) // Set filesystem back to non-Rugged if (!ruggedVal) { r = TheFs.ControlIo(gDriveNumber, KControlIoRuggedOff); test_KErrNone(r); } #endif test.End(); test.Close(); #endif }