sysstatemgmt/systemstatemgr/test/testapps/src/ssmcletestapp.cpp
changeset 0 4e1aa6a622a0
--- /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);
+	}