lbs/lbsclient/src/ctlbsclientpostp201.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/lbsclient/src/ctlbsclientpostp201.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,188 @@
+// Copyright (c) 2001-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 "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+
+// INCLUDE FILES
+#include "ctlbsclientpostp201.h"
+#include <LbsPositionInfo.h>
+#include <Lbs.h>
+#include <LbsCommon.h>
+#include <LbsRequestor.h>
+#include <s32file.h>
+#include "ctlbsclientobserver.h"
+
+// CONSTANTS
+const TInt KSecond = 1*1000*1000;
+const TInt KMaxSentenceLength = 60; //Max length of each line in EXEClient-logfile
+const TInt KNoOfEXCalls = 3; // Nr of calls to ExeClient
+_LIT(KExeClientPath, "ctlbsexeclient");
+_LIT(KExeResultPath, "c:\\logs\\execlientresult%d.txt");
+_LIT(KSucce, "Test %d was successful");
+_LIT(KFail, "Test %d failed");
+_LIT8(KSuccess, "SUCCESS"); //String to search for that indicates the test was succesful
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp201::CT_LbsClientPosTp201(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+	{  
+	_LIT(KTestName, "TP201 - Exe Client");
+	SetTestStepName(KTestName); 
+	}
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp201::~CT_LbsClientPosTp201()
+	{
+	}
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp201::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp201::StartL()
+    {
+	
+    //This test can be run on emulator now.
+	TInt result;
+	TInt i;
+	TInt foundsucces; 
+	RProcess execlient[KNoOfEXCalls];
+	RFile file;
+	RFileReadStream fstream;
+	RFs fileSession;
+	User::LeaveIfError(fileSession.Connect());
+	CleanupClosePushL(fileSession);
+	CleanupClosePushL(fstream);
+	CleanupClosePushL(file);
+	CFileMan* fileMan = CFileMan::NewL(fileSession);
+	CleanupStack::PushL(fileMan);
+
+	_LIT(KRemoveFiles, "Remove files");
+	INFO_PRINTF1(KRemoveFiles);
+
+	//1. First check for old ExeClientResult-files to remove.
+	TBuf<40> filepath;
+    filepath.Append(KExeResultPath);
+	for ( i = 1; i<=KNoOfEXCalls; i++)
+		{
+		filepath.Format(KExeResultPath,i);
+		TInt err = fileMan->Delete(filepath, CFileMan::EOverWrite);
+		if (err != KErrNone && err != KErrNotFound)
+			{
+			_LIT(KErrRemoveDll, "Removal of a previous ExeClientResult-file failed!");
+			TBuf<50> buf;
+			buf.Format(KErrRemoveDll, err);
+			LogErrorAndLeaveL(buf);
+			}
+		}	
+	
+	_LIT(KStartClients, "Start clients");
+	INFO_PRINTF1(KStartClients);
+
+	//2. Make 3 calls to ExeClient.
+	for ( i = 1; i<= KNoOfEXCalls; i++)
+		{
+		//Start the execlient-process
+		result = execlient[i-1].Create(KExeClientPath, KNullDesC);
+		User::LeaveIfError(result);
+		execlient[i-1].Resume();	//make the execlient visible
+		User::After(6000000);
+		}
+	
+	CT_LbsClientObserver::WaitForEPosShutdown(); //Wait for Epos to complete
+    User::After(KSecond); //Wait for completion of writing to files. 1 minute.
+	for ( i = 0; i < KNoOfEXCalls; i++)
+		{	
+		TRequestStatus closed;
+		execlient[i].Logon(closed);
+		User::WaitForRequest(closed);
+
+	    TBuf<100> exit;
+	    _LIT(KExitClient, "Client %d exited: Type %d, Reason %d");
+	    exit.Format(KExitClient, 
+            	    i+1, execlient[i].ExitType(), execlient[i].ExitReason());
+        INFO_PRINTF1(exit);
+
+		execlient[i].Close(); //Close handle to exe-client
+		}
+	_LIT(KCheckResults, "Check results");
+	INFO_PRINTF1(KCheckResults);
+
+	//3. See if all calls were successes
+	TBuf<40> successinfo;
+	successinfo.Append(KSucce);
+	TBuf<40> failinfo;
+	failinfo.Append(KFail);
+	for ( i = 1; i <= KNoOfEXCalls; i++)
+		{
+		filepath.Format(KExeResultPath,i);
+		User::LeaveIfError(file.Open(fileSession, filepath, EFileShareReadersOnly));//open read only
+		fstream.Attach(file);
+
+		TBuf8<KMaxSentenceLength> dbuffer; //Buffer to place read data from file
+		TBuf8<KMaxSentenceLength> prevbuffer; //Buffer to place previous read data from file
+		TBool search = ETrue;
+		const TChar eoline(';');
+		while (search) 
+			{ 
+			dbuffer.Delete(0, KMaxSentenceLength);
+			TRAPD(ferr, (fstream.ReadL(dbuffer,eoline)));
+			if ( ferr == KErrEof) 
+				{
+				search = EFalse; //stop searching
+				}
+			else if ( ferr == KErrNone)
+				{
+				prevbuffer.Delete(0, KMaxSentenceLength);
+				prevbuffer = dbuffer;
+				}
+			else 
+				{
+				_LIT(KReadError, "Error when reading from log-file.");
+				LogErrorAndLeaveL(KReadError);
+				}
+			}
+		//Check if success
+		foundsucces = prevbuffer.Find(KSuccess);
+		if ( foundsucces != KErrNotFound)
+			{
+			successinfo.Format(KSucce,i);
+			INFO_PRINTF1(successinfo);
+			}
+		else
+			{
+			failinfo.Format(KFail,i);
+			LogErrorAndLeaveL(failinfo);
+			}
+		} //for
+
+	_LIT(KDone, "Done.");
+	INFO_PRINTF1(KDone);
+
+	//4. Let's clean...
+	CleanupStack::PopAndDestroy(fileMan); //fileMan
+	CleanupStack::PopAndDestroy(&file); //file
+	CleanupStack::PopAndDestroy(&fstream); //fstream
+	CleanupStack::PopAndDestroy(&fileSession); //fileSession
+	}
+
+// End of File