diff -r 000000000000 -r 96e5fb8b040d kerneltest/f32test/server/b_osfil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/server/b_osfil.cpp Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,432 @@ +// Copyright (c) 1996-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\server\b_osfil.cpp +// +// + +#include +#include +#include "t_server.h" + +const TInt KSizeExistsFile=26; +const TInt KSizeExistsFile2=25; + +GLDEF_D RTest test(_L("B_OSFIL")); + +/* these buffers get written to in order to change the file system */ +//LOCAL_D TBuf<5> fileSystemName =_L("LOC::"); /* default file system name */ +LOCAL_D TBuf<20> noDevice = _L("L:\\tmpfile.tmp"); +LOCAL_D TBuf<15> noDevicePath = _L("L:\\"); +LOCAL_D TBuf<28> noDirectory = _L("C:\\nodirect\\tmpfile.tmp"); +LOCAL_D TBuf<30> noDirectoryPath = _L("C:\\nodirect\\"); +LOCAL_D TBuf<20> noFile = _L("C:\\notafile.tmp"); +LOCAL_D TBuf<19> fileName = _L("C:\\tmpfile.tmp"); +LOCAL_D TBuf<20> existsFile = _L("C:\\tmpexst1.tmp"); +LOCAL_D TBuf<20> existsFile2 = _L("C:\\tmpexst2.tmp"); +LOCAL_D TBuf<21> renameFile1 = _L("C:\\tmpren1.tmp"); +LOCAL_D TBuf<21> renameFile2 = _L("C:\\tmpren2.tmp"); +LOCAL_D TBuf<34> directoryFile = _L("C:\\nodirect\\nodirect\\nodirect\\"); +LOCAL_D TBuf<14> openUniqueDir = _L("C:\\nodir2\\"); + +/*************************************************************************/ +LOCAL_C void TestInfo() +/* +Test the file info function +*/ + { + TEntry entry; + TInt r=TheFs.Entry(noDevice,entry); + test((r==KErrNotReady)||(r==KErrPathNotFound)); + r=TheFs.Entry(noDirectory,entry); + test(r==KErrPathNotFound); + r=TheFs.Entry(noFile,entry); + test(r==KErrNotFound); + r=TheFs.Entry(existsFile,entry); + test(r==KErrNone); + test(entry.iSize==KSizeExistsFile); + test(!entry.IsDir()); + test(!(entry.iAtt&KEntryAttDir)); + r=TheFs.Entry(existsFile2,entry); + test(r==KErrNone); + test(entry.iSize==KSizeExistsFile2); + test(!entry.IsDir()); + test(!(entry.iAtt&KEntryAttDir)); + } + +LOCAL_C void TestDelete() +/* +Test the delete +*/ + { + TInt r=TheFs.Delete(noDevice); + test((r==KErrNotReady)||(r==KErrPathNotFound)); + r=TheFs.Delete(noDirectory); + test(r==KErrPathNotFound); + r=TheFs.Delete(noFile); + test(r==KErrNotFound); + r=TheFs.Delete(existsFile); + test(r==KErrNone); + r=TheFs.Delete(existsFile2); + test(r==KErrNone); + TEntry entry; + r=TheFs.Entry(existsFile,entry); + test(r==KErrNotFound); + r=TheFs.Entry(existsFile2,entry); + test(r==KErrNotFound); + } + +LOCAL_C void TestRename() +/* +Test the rename +*/ + { + TInt r=TheFs.Rename(noDevice,fileName); + test(r==KErrArgument); + r=TheFs.Rename(noDirectory,fileName); + test(r==KErrPathNotFound); + r=TheFs.Rename(noFile,fileName); + test(r==KErrNotFound); + r=TheFs.Rename(existsFile,existsFile2); + test(r==KErrAlreadyExists); + r=TheFs.Delete(existsFile); + test(r==KErrNone); + r=TheFs.Rename(existsFile,existsFile); + test(r==KErrNotFound); + r=TheFs.Rename(existsFile2,existsFile); + test(r==KErrNone); + TEntry entry; + r=TheFs.Entry(existsFile2,entry); + test(r==KErrNotFound); + r=TheFs.Entry(existsFile,entry); + test(r==KErrNone); + r=TheFs.Delete(existsFile); + test(r==KErrNone); + } + +LOCAL_C void TestMkDir() + { + TParse fparse; + TInt r=TheFs.MkDirAll(directoryFile); + test(r==KErrNone); + TEntry entry; + r=TheFs.Entry(directoryFile.Left(directoryFile.Length()-1),entry); + test(r==KErrNone); + test(entry.IsDir()); + test(entry.iAtt&KEntryAttDir); + r=TheFs.RmDir(directoryFile); + test(r==KErrNone); + r=fparse.Set(directoryFile,NULL,NULL); + test(r==KErrNone); + r=fparse.PopDir(); + test(r==KErrNone); + r=TheFs.RmDir(fparse.DriveAndPath()); + test(r==KErrNone); + r=fparse.PopDir(); + test(r==KErrNone); + r=TheFs.RmDir(fparse.DriveAndPath()); + test(r==KErrNone); + } + + +LOCAL_C void TestOpenUnique() +/* +Test unique file name generator +*/ + { + RFile p1; + RFile p2; + + TInt r=p1.Open(TheFs,noDevice,EFileStreamText); + test((r==KErrNotReady)||(r==KErrPathNotFound)); + r=p1.Open(TheFs,noDirectory,EFileStreamText); + test(r==KErrPathNotFound); + TFileName generated1; + r=p1.Temp(TheFs,noDevicePath,generated1,EFileStreamText); + test((r==KErrNotReady)||(r==KErrPathNotFound)); + r=p1.Temp(TheFs,noDirectoryPath,generated1,EFileStreamText); + test(r==KErrPathNotFound); + + r=p1.Temp(TheFs,_L(""),generated1,EFileStreamText); + test(r==KErrNone); + TFileName generated2; + r=p2.Temp(TheFs,_L(""),generated2,EFileStreamText); + test(r==KErrNone); + test(generated1!=generated2); + p1.Close(); + TFileName generated3; + r=p1.Temp(TheFs,_L(""),generated3,EFileStream); + test(r==KErrNone); + test(generated3!=generated2); + test(generated3!=generated1); + p2.Close(); + p1.Close(); + + r=TheFs.Delete(generated1); + test(r==KErrNone); + r=TheFs.Delete(generated2); + test(r==KErrNone); + r=TheFs.Delete(generated3); + test(r==KErrNone); + + r=p1.Temp(TheFs,_L(""),generated1,EFileStreamText); + test(r==KErrNone); + r=p2.Temp(TheFs,_L(""),generated2,EFileStreamText); + test(r==KErrNone); + test(generated1!=generated2); + p1.Close(); + r=p1.Temp(TheFs,_L(""),generated3,EFileStream); + test(r==KErrNone); + test(generated3!=generated2); + test(generated3!=generated1); + p2.Close(); + p1.Close(); + + r=TheFs.Delete(generated1); + test(r==KErrNone); + r=TheFs.Delete(generated2); + test(r==KErrNone); + r=TheFs.Delete(generated3); + test(r==KErrNone); + + r=TheFs.MkDir(openUniqueDir); + test(r==KErrNone); + r=p1.Temp(TheFs,openUniqueDir,generated1,EFileStream); + test(r==KErrNone); + r=p2.Temp(TheFs,openUniqueDir,generated2,EFileStreamText|EFileWrite); + test(r==KErrNone); + r=p1.Write(_L8("junk"),4); + test(r==KErrNone); + TInt pos=0; + r=p1.Seek(ESeekCurrent,pos);//P_FSET + test(r==KErrNone); + p1.Close(); + p2.Close(); + + r=TheFs.Delete(generated1); + test(r==KErrNone); + r=TheFs.Delete(generated2); + test(r==KErrNone); + + r=p1.Temp(TheFs,openUniqueDir,generated1,EFileStream); + test(r==KErrNone); + r=p2.Temp(TheFs,openUniqueDir,generated2,EFileStreamText); + test(r==KErrNone); + p1.Close(); + + pos=0; + r=p2.Seek(ESeekStart,pos); + test(r==KErrNone); + p2.Close(); + r=TheFs.Delete(generated1); + test(r==KErrNone); + r=TheFs.Delete(generated2); + test(r==KErrNone); + r=TheFs.RmDir(openUniqueDir); + test(r==KErrNone); + } + +LOCAL_C void TestPaths() + { + TFileName path1; + TInt r=TheFs.SessionPath(path1); + test(r==KErrNone); + r=TheFs.SetSessionPath(path1); + test(r==KErrNone); + TFileName path2; + r=TheFs.SessionPath(path2); + test(r==KErrNone); + test(path1==path2); + RDir dir; + r=dir.Open(TheFs,path1,0); + test(r==KErrNone); + dir.Close(); + } + +LOCAL_C void TestFileStatus() + { + TEntry blk; + TInt r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + TEntry blk1=blk; + +/* Toggle the write attribute */ + TUint clear,set; /* were modifying write attrib */ + if (blk1.IsReadOnly()) + { + clear=KEntryAttReadOnly; + set=0; + } + else + { + clear=0; + set=KEntryAttReadOnly; + } + r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsReadOnly()) + test(!blk.IsReadOnly()); + else + test(blk.IsReadOnly()); + +/* set write attrib back */ + r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsReadOnly()) + test(blk.IsReadOnly()); + else + test(!blk.IsReadOnly()); + +/* toggle the archive bit */ + if (blk1.IsArchive()) + { + clear=KEntryAttArchive; + set=0; + } + else + { + clear=0; + set=KEntryAttArchive; + } + r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsArchive()) + test(!blk.IsArchive()); + else + test(blk.IsArchive()); +/* set archive attrib back */ + r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsArchive()) + test(blk.IsArchive()); + else + test(!blk.IsArchive()); + +/* toggle the hidden bit */ + if (blk1.IsHidden()) + { + clear=KEntryAttHidden; + set=0; + } + else + { + clear=0; + set=KEntryAttHidden; + } + r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsHidden()) + test(!blk.IsHidden()); + else + test(blk.IsHidden()); +/* set hidden attrib back */ + r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsHidden()) + test(blk.IsHidden()); + else + test(!blk.IsHidden()); + +/* toggle the system bit */ + if (blk1.IsSystem()) + { + clear=KEntryAttSystem; + set=0; + } + else + { + clear=0; + set=KEntryAttSystem; + } + r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsSystem()) + test(!blk.IsSystem()); + else + test(blk.IsSystem()); +/* set system attrib back */ + r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set); + test(r==KErrNone); + r=TheFs.Entry(existsFile,blk); + test(r==KErrNone); + if (blk1.IsSystem()) + test(blk.IsSystem()); + else + test(!blk.IsSystem()); + r=TheFs.Delete(existsFile); + test(r==KErrNone); + r=TheFs.Delete(existsFile2); + test(r==KErrNone); + } + + +LOCAL_C void CreateTestFiles() + { + RFile fcb; + TInt r=fcb.Replace(TheFs,existsFile,EFileWrite); + test(r==KErrNone); + r=fcb.Write(_L8("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),KSizeExistsFile); + test(r==KErrNone); + fcb.Close(); + + r=fcb.Replace(TheFs,existsFile2,EFileWrite); + test(r==KErrNone); + r=fcb.Write(_L8("bcdefghijklmnopqrstuvwxyz"),KSizeExistsFile2); + test(r==KErrNone); + fcb.Close(); + } + +GLDEF_C void CallTestsL(void) +// +// Do testing on aDrive +// + { + test.Title(); + + TVolumeInfo di; + TInt r=TheFs.Volume(di); + test(r==KErrNone); + test.Start(_L("Info()")); + CreateTestFiles(); + TestInfo(); + test.Next(_L("Delete()")); + CreateTestFiles(); + TestDelete(); + test.Next(_L("Rename()")); + CreateTestFiles(); + TestRename(); + test.Next(_L("MkDir()")); + TestMkDir(); + test.Next(_L("Temp()")); + TestOpenUnique(); + test.Next(_L("Paths")); + TestPaths(); + test.Next(_L("File status")); + CreateTestFiles(); + TestFileStatus(); + test.End(); + }