--- /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 <e32base.h>
+#include <f32file.h>
+#include <s32file.h>
+#include "ssmcletestapp.h"
+#include "ssmdebug.h"
+
+void XSsmCleTestApp::WriteStartTimeL(RFs aFs, const TDesC& aLogPrefix)
+ {
+ TBuf<KTestCommandLineMaxLength> 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<KTestCommandLineMaxLength> 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<KTestCommandLineMaxLength> 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<KTestCommandLineMaxLength> 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<KTestCommandLineMaxLength> 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<TCleTestFailHow>(temp);
+ }
+ DEBUGPRINT2A("Failure mode: %d", aArgStruct.iFailHow);
+ }