diff -r 000000000000 -r 96e5fb8b040d kerneltest/f32test/demandpaging/t_denyclamp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/demandpaging/t_denyclamp.cpp Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,356 @@ +// Copyright (c) 2006-2009 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\demandpaging\t_denyclamp.cpp +// This test suite has a reduced set of the tests in T_CLAMP, to verify +// the behaviour when file clamping is attempted by an invalid user. +// 002 GetDriveLetters() Assign the first drive that matches the required criteria +// 003 Test1() Basic clamp operation +// 004 Test2() Invalid clamp requests +// 005 Test4() Clamp tests for non-writable file system +// 006 Test5() Clamp requests on non-clamping file systems +// This file has a reduced set of tests present in T_CLAMP, to verify +// the behaviour when file clamping is attempted by an invalid user +// +// + +//! @SYMTestCaseID KBASE-T_DENYCLAMP-0329 +//! @SYMTestType UT +//! @SYMPREQ PREQ1110 +//! @SYMTestCaseDesc Demand Paging File Clamp tests (Deny) +//! @SYMTestActions 001 Starting T_DENYCLAMP ... +//! @SYMTestExpectedResults All tests should pass. +//! @SYMTestPriority High +//! @SYMTestStatus Implemented + +#include +RTest test(_L("T_DENYCLAMP")); + +#if defined(_DEBUG) || defined(_DEBUG_RELEASE) + +#include +#include +RFs TheFs; + +_LIT(KFATName,"FAT"); +//_LIT(KFAT32Name,"FAT32"); +_LIT(KROFSName,"ROFS"); +_LIT(KLFFSName,"LFFS"); +_LIT(KCOMPName,"COMPOSITE"); // Z: name if Composite File System +//#ifdef __WINS__ +//_LIT(KROMName,"WIN32"); // Clamping is not supported for non-composite filing system on Z: +//#else +_LIT(KROMName,"ROM"); // Z: name if ROMFS (on hardware, not emulator) +//#endif + +TChar NandFatDrv='?'; +TChar RofsDrv='?'; +TChar LffsDrv='?'; +TChar CompDrv='?'; + + +LOCAL_C void Test1() + { +// Basic clamp operation + test.Next(_L("T_DENYCLAMP - Test1()")); + + TBuf<256> fileName; + TBuf<256> buf(_L("buffer for file used")); + + fileName = _L("clampFile.tst"); + RFile testFile; + TInt r=testFile.Replace(TheFs,fileName,EFileWrite); + test(r==KErrNone); + TPtrC8 pBuf((TUint8*)&buf); + testFile.Write(pBuf); + testFile.Flush(); + + // Attempt to clamp file should be rejected + RFileClamp handle; + r=handle.Clamp(testFile); + test(r==KErrPermissionDenied); + + // Attempt to unclamp a file should be rejected + // Using an invalid-content cookie is OK - the request should + // be rejected before the content is examined + handle.iCookie[0]=MAKE_TINT64(-1,-1); + handle.iCookie[1]=0; + r=handle.Close(TheFs); + test (r==KErrPermissionDenied); + + // Tidy up + testFile.Close(); + r=TheFs.Delete(_L("clampFile.tst")); + test (r==KErrNone); + } + + +LOCAL_C void Test2() + { +// Invalid clamp requests + test.Next(_L("T_DENYCLAMP - Test2()")); + + // Test attempt to clamp empty file is rejected + RFileClamp handle2; + TBuf<256> file2Name; + file2Name = _L("clampFile2.tst"); + RFile testFile2; + TInt r=testFile2.Replace(TheFs,file2Name,EFileWrite); + test(r==KErrNone); + r=handle2.Clamp(testFile2); + test(r==KErrPermissionDenied); + + + // Try to unclamp non-existant file + // Using a invalid-content cookie is OK - the request should + // be rejected before the content is examined + handle2.iCookie[0] = MAKE_TINT64(-1,-1); // iCookie[0] holds the unique ID + handle2.iCookie[1] = MAKE_TINT64(-1,-1); + r=handle2.Close(TheFs); + test (r==KErrPermissionDenied); + + // Tidy up + testFile2.Close(); + r=TheFs.Delete(_L("clampFile2.tst")); + test (r==KErrNone); + } + + +LOCAL_C void Test4(TDesC& aRoot) + { +// Clamp tests for non-writable file system + test.Next(_L("T_DENYCLAMP - Test4()")); + + TBuf<256> pathName; +#ifdef __WINS__ + if((aRoot[0]=='Z')||(aRoot[0]=='z')) + pathName=_L("clean.txt"); + else + pathName=_L("root.txt"); +#else + if((aRoot[0]=='Z')||(aRoot[0]=='z')) + pathName=_L("UnicodeData.txt"); + else + pathName=_L("\\Test\\clamp.txt"); // For (non-composite) ROFS drive +#endif + RFile testFile; + TInt r=testFile.Open(TheFs, pathName, EFileRead); + test(r==KErrNone); + + // Attempt to clamp file + RFileClamp handle; + r=handle.Clamp(testFile); + test(r==KErrPermissionDenied); + + // Unclamp file + // Using an invalid-content cookie is OK - the request should + // be rejected before the content is examined + handle.iCookie[0]=MAKE_TINT64(-1,-1); + handle.iCookie[1]=0; + r=handle.Close(TheFs); + test (r==KErrPermissionDenied); + + testFile.Close(); + } + + +LOCAL_C void Test5() + { +// Clamp requests on non-clamping file systems + test.Next(_L("T_DENYCLAMP - Test5()")); + + TBuf<256> unsuppFile; + unsuppFile = _L("unsuppFile.tst"); + RFile testFile; + TInt r=testFile.Replace(TheFs,unsuppFile,EFileWrite); + test(r==KErrNone); + + // Try to clamp a file on a file system that does + // not support clamping + RFileClamp handle; + r=handle.Clamp(testFile); + test(r==KErrPermissionDenied); + + // Tidy up + testFile.Close(); + r=TheFs.Delete(_L("unsuppFile.tst")); + test (r==KErrNone); + } + + +LOCAL_C void GetDriveLetters() + { +// Assign the first drive that matches the required criteria + test.Next(_L("T_DENYCLAMP - GetDriveLetters()")); + + TDriveList driveList; + TDriveInfo driveInfo; + TInt r=TheFs.DriveList(driveList); + test(r==KErrNone); + TInt drvNum; + TBool drivesFound = EFalse; + for(drvNum=0; (drvNum pathName; + + //************************************************************************ + // + // Test on FAT (writable file system) + // + //************************************************************************ + if(NandFatDrv!='?') + { + pathName=_L("?:\\CLAMP-TST\\"); // FAT on NAND + pathName[0]=(TText)NandFatDrv; + r=TheFs.MkDirAll(pathName); + test(r==KErrNone || r== KErrAlreadyExists); + TheFs.SetSessionPath(pathName); + test.Printf( _L("T_DENYCLAMP: testing FAT drive on %C\n"),(TText)NandFatDrv); + + Test1(); // Basic clamp operation + Test2(); // Invalid clamp requests +// Test3(pathName);// Denied FS requests when files are clamped - invalid for T_DENYCLAMP + + r=TheFs.RmDir(pathName); + test(r==KErrNone); + } + else + test.Printf( _L("T_DENYCLAMP: FAT drive not tested\n")); + + //************************************************************************ + // + // Test on ROFS (non-writable file system) + // + //************************************************************************ + if(RofsDrv!='?') + { + pathName=_L("?:\\"); + pathName[0]=(TText)RofsDrv; + TheFs.SetSessionPath(pathName); + test.Printf( _L("T_DENYCLAMP: testing ROFS drive on %C\n"),(TText)RofsDrv); + + Test4(pathName); // Clamp tests for non-writable file system + } + else + test.Printf( _L("T_DENYCLAMP: ROFS drive not tested\n")); + + //************************************************************************ + // + // Test on Z: - Composite File System, or ROMFS (non-writable file system) + // + //************************************************************************ + if(CompDrv!='?') + { + pathName=_L("?:\\TEST\\"); + pathName[0]=(TText)CompDrv; + TheFs.SetSessionPath(pathName); + test.Printf( _L("T_DENYCLAMP: testing Z drive (on %C)\n"),(TText)CompDrv); + + Test4(pathName); // Clamp tests for non-writable file system + } + else + test.Printf( _L("T_DENYCLAMP: Z drive not tested\n")); + + //************************************************************************ + // + // Test on LFFS (non-clampable file system) + // + //************************************************************************ + if(LffsDrv!='?') + { + TBuf<256> unsuppPath; + unsuppPath=_L("?:\\CLAMP-TST\\"); + unsuppPath[0]=(TText)LffsDrv; + r=TheFs.MkDirAll(unsuppPath); + test(r==KErrNone || r== KErrAlreadyExists); + TheFs.SetSessionPath(unsuppPath); + test.Printf( _L("T_DENYCLAMP: testing LFFS drive on %C\n"),(TText)LffsDrv); + + Test5(); // Clamp requests on non-clamping file systems + } + else + test.Printf( _L("T_DENYCLAMP: LFFS drive not tested\n")); + + test.End(); + return 0; + } + +#else + +TInt E32Main() + { + test.Title(); + test.Start(_L("Test does not run on UREL builds.")); + test.End(); + return 0; + } +#endif