diff -r 000000000000 -r a41df078684a kerneltest/f32test/server/t_ftrace.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/server/t_ftrace.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,423 @@ +// Copyright (c) 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\t_ftrace.cpp +// +// + +#include +#include +#include +#include "t_server.h" + +#include "../../../kernel/eka/include/d32btrace.h" +#include "../../../kernel/eka/include/e32btrace.h" +#include + +RTest test(_L("T_FTRACE")); + +RBTrace Trace; + +void SetBTraceFilter(const TUint32* aNew,TUint32* aOld) + { + TUint category = 0; + do + { + TUint32 newBits = *aNew++; + TUint32 oldBits = 0; + do + { + oldBits >>= 1; + if(Trace.SetFilter(category,newBits&1)) + oldBits |= 0x80000000u; + newBits >>= 1; + ++category; + } + while(category&31); + if(aOld) + *aOld++ = oldBits; + } + while(category<256); + } + + + +//--------------------------------------------------------------------------------------------------------------------- +//! @SYMTestCaseID KBASE-T_FTRACE-0001 +//! @SYMTestCaseDesc Test File Server Tracing of RFile::Replace() +//! @SYMTestType UT +//! @SYMPREQ PREQ1617 +//! @SYMTestPriority Medium +//! @SYMTestActions +//! 1. Call RFile::Replace() to create a file +//! 2. Get trace data from BTrace and verify that the expected trace data is present +//! +//! @SYMTestExpectedResults +//! 1. Trace data payload should be as expected, i.e. it should contain the file name, mode etc. +//--------------------------------------------------------------------------------------------------------------------- +void TestRFileReplace() + { + test.Start(_L("Test trace output from creating a file")); + RFile file; + TFileName testFileName = _L("File.txt"); + + TheFs.Delete(testFileName); + + Trace.Empty(); + + TInt r = file.Replace(TheFs,testFileName,EFileStreamText); + test(r==KErrNone); + + + TBool funcInFound = EFalse; + TBool funcOutFound = EFalse; + + TBuf8<1024> buf; + for(;;) + { + TUint8* record; + TInt dataSize = Trace.GetData(record); + if(!dataSize) + break; + TUint8* end = record+dataSize; + + while(record0) ? *(TUint32*)(data) : 0; + TUint32 data1 = (size>4) ? *(TUint32*)(data+4) : 0; + TPtrC8 des(0,0); + if(size>=8) + des.Set(data+8,size-8); + + buf.AppendFormat(_L8("size:%d flags:%02x cat:%d,%d data: "),size,flags,category,subCategory); + for(TUint i=0; i= (buf.Length()*2)); + RDebug::RawPrint(buf.Expand()); + + + if (category == UTF::EBorder && subCategory == 0 && data0 == EF32TraceUidEfsrv) + { + if (data1 == UTraceModuleEfsrv::EFileReplace) + { + TInt sessionHandle = (size>8) ? *(TUint32*)(data+8) : 0; + TUint32 fileMode = (size>12) ? *(TUint32*)(data+12) : 0; + TInt fileNameLen = (size>16) ? *(TUint32*)(data+16) : 0; + fileNameLen/= 2; // convert to unicode length + TText16* fileName = (TText16*) ((size>20) ? (data+20) : NULL); + + test(sessionHandle == TheFs.Handle()); + test(fileMode == EFileStreamText); + test(fileNameLen == testFileName.Length()); + TPtrC16 fileNamePtr (fileName, fileNameLen); + test(fileName != NULL); + test(testFileName.Compare(fileNamePtr) == 0); + funcInFound = ETrue; + } + else if (data1 == UTraceModuleEfsrv::EFileReplaceReturn) + { + TInt retCode = (size>8) ? *(TUint32*)(data+8) : 0; + TInt subsessionHandle = (size>12) ? *(TUint32*)(data+12) : 0; + + test(retCode == KErrNone); + test(subsessionHandle == file.SubSessionHandle()); + funcOutFound = ETrue; + } + } + + record = BTrace::NextRecord(record); + } + Trace.DataUsed(); + } + + file.Close(); + TheFs.Delete(testFileName); + + test (funcInFound); + test (funcOutFound); + } + +//--------------------------------------------------------------------------------------------------------------------- +//! @SYMTestCaseID KBASE-T_FTRACE-0002 +//! @SYMTestCaseDesc Test File Server Tracing of RFs::Rename() +//! @SYMTestType UT +//! @SYMPREQ PREQ1617 +//! @SYMTestPriority Medium +//! @SYMTestActions +//! 1. Call RFile::Replace() to create a file +//! 2. Close the file +//! 3. Call RFs::Rename to rename the file +//! 4. Get trace data from BTrace and verify that the expected trace data is present +//! +//! @SYMTestExpectedResults +//! 1. Trace data payload should be as expected, i.e. it should contain both file names, etc. +//--------------------------------------------------------------------------------------------------------------------- +void TestRFsRename() + { + test.Start(_L("Test trace output from renaming a file")); + RFile file; + TFileName testFileName1 = _L("File1.txt"); + TFileName testFileName2 = _L("File2.txt"); + + TheFs.Delete(testFileName1); + TheFs.Delete(testFileName2); + + TInt r = file.Replace(TheFs,testFileName1,EFileStreamText); + test(r==KErrNone || KErrAlreadyExists); + file.Close(); + + Trace.Empty(); + + r = TheFs.Rename(testFileName1, testFileName2); + test(r==KErrNone); + + + TBool funcInFound = EFalse; + TBool funcOutFound = EFalse; + + TBuf8<1024> buf; + for(;;) + { + TUint8* record; + TInt dataSize = Trace.GetData(record); + if(!dataSize) + break; + TUint8* end = record+dataSize; + + while(record0) ? *(TUint32*)(data) : 0; + TUint32 data1 = (size>4) ? *(TUint32*)(data+4) : 0; + TPtrC8 des(0,0); + if(size>=8) + des.Set(data+8,size-8); + + buf.AppendFormat(_L8("size:%d flags:%02x cat:%d,%d data: "),size,flags,category,subCategory); + for(TUint i=0; i= (buf.Length()*2)); + RDebug::RawPrint(buf.Expand()); + + + if (category == UTF::EBorder && subCategory == 0 && data0 == EF32TraceUidEfsrv) + { + TUint8* recData = data+8; + if (data1 == UTraceModuleEfsrv::EFsRename) + { + TInt sessionHandle = *(TUint32*) recData; recData+= 4; + + TInt fileNameLen1 = *(TUint32*) recData; recData+= 4; + TText16* fileName1 = (TText16*) recData; recData+= ((fileNameLen1 +4) & ~3); + + TInt fileNameLen2 = *(TUint32*) recData; recData+= 4; + TText16* fileName2 = (TText16*) recData; recData+= fileNameLen2; + + fileNameLen1/= 2; // convert to unicode length + fileNameLen2/= 2; // convert to unicode length + + + test(sessionHandle == TheFs.Handle()); + + test(fileNameLen1 == testFileName1.Length()); + TPtrC16 fileNamePtr1 (fileName1, fileNameLen1); + test(fileName1 != NULL); + test(testFileName1.Compare(fileNamePtr1) == 0); + + test(fileNameLen2 == testFileName2.Length()); + TPtrC16 fileNamePtr2 (fileName2, fileNameLen2); + test(fileName2 != NULL); + test(testFileName2.Compare(fileNamePtr2) == 0); + + funcInFound = ETrue; + } + else if (data1 == UTraceModuleEfsrv::EFsRenameReturn) + { + TInt retCode = (size>8) ? *(TUint32*)(data+8) : 0; + + test(retCode == KErrNone); + + funcOutFound = ETrue; + } + } + + record = BTrace::NextRecord(record); + } + Trace.DataUsed(); + } + + + test (funcInFound); + test (funcOutFound); + + TheFs.Delete(testFileName1); + TheFs.Delete(testFileName2); + } + +void CallTestsL() + { + +// By default, file server trace-points are only compiled in in debug mode +#if defined(_DEBUG) + test.Title(); + TInt r; + + test.Start(_L("Open LDD")); + r = Trace.Open(); + test(r == KErrNone); + + + TUint32 OldTraceFilter[8] = {0}; + + TUint savedMode = Trace.Mode(); + SetBTraceFilter(OldTraceFilter,OldTraceFilter); + + Trace.ResizeBuffer(0x100000); + Trace.Empty(); + + Trace.SetMode(RBTrace::EEnable | RBTrace::EFreeRunning); + + TBool b; +// b = Trace.SetFilter(BTrace::EThreadIdentification, ETrue); +// test(b >= 0); + b = Trace.SetFilter(UTF::EPanic, ETrue); + test(b >= 0); + b = Trace.SetFilter(UTF::EError, ETrue); + test(b >= 0); + b = Trace.SetFilter(UTF::EBorder, ETrue); + test(b >= 0); + + b = Trace.SetFilter2(EF32TraceUidEfsrv, ETrue); + test(b >= 0); + + TestRFileReplace(); + TestRFsRename(); + + // restore trace settings... + Trace.SetMode(0); + SetBTraceFilter(OldTraceFilter,OldTraceFilter); + Trace.SetMode(savedMode); + + + test.Next(_L("Close LDD")); + Trace.Close(); + + test.End(); +#endif + } +