diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatemgr/test/testapps/src/ssmcletestapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatemgr/test/testapps/src/ssmcletestapp.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,173 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "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: +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + + #include +#include +#include +#include "ssmcletestapp.h" +#include "ssmdebug.h" + +void XSsmCleTestApp::WriteStartTimeL(RFs aFs, const TDesC& aLogPrefix) + { + TBuf logFileName; + logFileName.Format(_L("%Stime"), &aLogPrefix); + TTime now; + now.UniversalTime(); + TUint32 high = 0; + TUint32 low = 0; + high = I64HIGH(now.Int64()); + low = I64LOW(now.Int64()); + RFileWriteStream ws; + User::LeaveIfError(ws.Replace(aFs, logFileName, EFileWrite)); + ws.PushL(); + ws.WriteUint32L(high); + ws.WriteUint32L(low); + ws.CommitL(); + CleanupStack::PopAndDestroy(); // ws + } + +void XSsmCleTestApp::WriteResultL(RFs aFs, const TDesC& aLogPrefix, const TCleTestFailHow& aFailHow) + { + TBuf logFileName, logFileNameExitReason; + TInt result, err; + RFileWriteStream fileWriteStream; + + //For Getting the Exit Reason + if(aFailHow == EBadRendezvous) + { + //This is done because for BadRendezvous Case, we need to do 2 things: + //1. Write the constant KErrBadRendezvousTest as the Exit Reason for the process in a separate file. + //2. Write the EBadRendezvous value to a separate file, hence separate close and pop operations required. + logFileNameExitReason.Format(_L("%Sreason"), &aLogPrefix); + result = KErrBadRendezvousTest; + err =fileWriteStream.Replace(aFs, logFileNameExitReason, EFileWrite); + CleanupClosePushL(fileWriteStream); + User::LeaveIfError(err); + fileWriteStream.WriteUint32L(result); + fileWriteStream.CommitL(); + CleanupStack::PopAndDestroy(); // fileWriteStream + } + + logFileName.Format(_L("%Sresult"), &aLogPrefix); + result = aFailHow; + err =fileWriteStream.Replace(aFs, logFileName, EFileWrite); + CleanupClosePushL(fileWriteStream); + User::LeaveIfError(err); + fileWriteStream.WriteUint32L(result); + fileWriteStream.CommitL(); + CleanupStack::PopAndDestroy(); // fileWriteStream + } + +TInt XSsmCleTestApp::GetRunCountL(RFs aFs, const TDesC& aLogPrefix) + { + TBuf logFileName; + logFileName.Format(_L("%Scount"), &aLogPrefix); + + RFileReadStream file; + TInt err = 0; + err = file.Open(aFs, logFileName, EFileRead); + TInt result = 0; + if (err != KErrNotFound && err != KErrPathNotFound) + { + file.PushL(); + User::LeaveIfError(err); + result = file.ReadInt32L(); + file.Close(); + CleanupStack::PopAndDestroy(); //file + } + return result; + } + +TInt XSsmCleTestApp::IncrementRunCountL(RFs aFs, const TDesC& aLogPrefix) + { + TInt runcount = GetRunCountL(aFs, aLogPrefix); + TBuf logFileName; + logFileName.Format(_L("%Scount"), &aLogPrefix); + + runcount++; + + RFileWriteStream file; + User::LeaveIfError(file.Replace(aFs, logFileName, EFileWrite)); + file.PushL(); + file.WriteInt32L(runcount); + file.Close(); + + CleanupStack::PopAndDestroy();//file + return runcount; + } + +void XSsmCleTestApp::GetCommandLineArgsL(TSsmCleTestAppArgs& aArgStruct) + { + DEBUGPRINT1A("Parsing commandline argument"); + TBuf commandLine; + commandLine.SetLength(0); + if(User::CommandLineLength() > commandLine.MaxLength()) + { + User::Leave(KErrTooBig); + } + User::CommandLine(commandLine); + + DEBUGPRINT3(_L("ssmcletestapp.cpp %d: Argument string: %S"), __LINE__, &commandLine); + aArgStruct.iWaitTime = 0; + aArgStruct.iSucceedOnRun = 0; + aArgStruct.iFailHow = EDontFail; + + TLex cmdLnLex(commandLine); + + if (cmdLnLex.Eos()) // If there aren't any arguments, that is an error + { + DEBUGPRINT1A("Argument error"); + User::Leave(KErrArgument); + } + else + { + TPtrC token(cmdLnLex.NextToken()); + aArgStruct.iLogPrefix.SetLength(0); + aArgStruct.iLogPrefix.Format(_L("%S%S"), &KTestAppLogFileLoc, &token); + DEBUGPRINT4(_L("ssmcletestapp.cpp %d: Log file prefix (length: %d): %S"), __LINE__, aArgStruct.iLogPrefix.Length(), &(aArgStruct.iLogPrefix)); + } + + if(!cmdLnLex.Eos()) // If there was only one argument, we are finished and there was no timeout requested. + { + TPtrC token(cmdLnLex.NextToken()); + TLex timeoutLex(token); + User::LeaveIfError(timeoutLex.Val(aArgStruct.iWaitTime)); // If Val() returns an error the second argument wasn't an integer, which it should have been + } + DEBUGPRINT2A("Wait time: %d", aArgStruct.iWaitTime); + + if(!cmdLnLex.Eos()) // If we've run out of arguments, we are finished and there was no failed runs requested. + { + TPtrC token(cmdLnLex.NextToken()); + TLex timeoutLex(token); + User::LeaveIfError(timeoutLex.Val(aArgStruct.iSucceedOnRun)); // If Val() returns an error the third argument wasn't an integer, which it should have been + } + DEBUGPRINT2A("Times to fail: %d", aArgStruct.iSucceedOnRun); + + if(!cmdLnLex.Eos()) // If we've run out of arguments, we are finished and there was no failure mode requested. + { + TInt temp; + TPtrC token(cmdLnLex.NextToken()); + TLex timeoutLex(token); + User::LeaveIfError(timeoutLex.Val(temp)); // If Val() returns an error the third argument wasn't an integer, which it should have been + aArgStruct.iFailHow = static_cast(temp); + } + DEBUGPRINT2A("Failure mode: %d", aArgStruct.iFailHow); + }