telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTestMultipleClients.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTestMultipleClients.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTestMultipleClients.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,193 +1,193 @@
-// Copyright (c) 2002-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:
-// EtelPacketTestMultipleClients.cpp
-// This file tests the scenario of Multiple Clients using the Packet API simultaneously.
-// It is primarily used to exercise the mutex in the methods RPacketContext::OpenNewContext()
-// and RPacketContext::OpenNewSecondaryContext().
-// 
-//
-
-
-// Symbian OS includes
-#include <e32base.h>
-#include <e32std.h>
-
-#include <etelpckt.h>
-#include <pcktcs.h>
-
-#include "Te_EtelPacketTestStepBase.h"
-
-#include "testdef.h"
-
-#include "Te_EtelPacketTestMultipleClients.h"
-#include "Te_etelpckt_defs.h"
-
-
-// constructor
-CEtelPacketTestMultipleClients::CEtelPacketTestMultipleClients()
-{
-	// store the name of this test case
-	SetTestStepName(_L("Multiple_Clients"));
-}
-
-// destructor
-CEtelPacketTestMultipleClients::~CEtelPacketTestMultipleClients()
-{
-}
-
-
-enum TVerdict CEtelPacketTestMultipleClients::doTestStepL( void )
-/**
- * Test step Multiple_Clients tests simultaneous use of the API by Multiple clients.
- */
-{
-// Allocate the size of the stack and heap objects
-	const TInt KStackSize=0x8000;
-	const TInt KHeapSize=0x8000;
-	const TInt KMaxHeapSize=0x80000;
-
-// Create 2 RThread objects
-	_LIT(KClientApp1ThreadName,"ClientApp1");
-	_LIT(KClientApp2ThreadName,"ClientApp2");
-
-	RThread thread1;
-	RThread thread2;
-
-	TInt res1=thread1.Create(KClientApp1ThreadName,ContextCreationFunction,
-					    KStackSize,KHeapSize,KMaxHeapSize,this);
-
-	TInt res2=thread2.Create(KClientApp2ThreadName,ContextCreationFunction,
-					    KStackSize,KHeapSize,KMaxHeapSize,this);
-
-	TRequestStatus thread1Status;
-	TRequestStatus thread2Status;
-	TBool req1Complete=EFalse;
-	TBool req2Complete=EFalse;
-	
-// If both threads have been created successfully, start their execution
-	if (res1==KErrNone && res2==KErrNone)
-		{
-		thread1.Logon(thread1Status);
-		thread2.Logon(thread2Status);
-		thread1.Resume();
-		thread2.Resume();
-	 
-		while ( req1Complete==EFalse || req2Complete==EFalse)
-			{
-			User::WaitForAnyRequest();
-			if (thread1Status != KRequestPending && req1Complete==EFalse)
-				{
-				CHECKPOINT(thread1Status.Int(),KErrNone,CHP_CNTXT_CASE("A.MC2"));
-				req1Complete=ETrue;
-				}
-			if (thread2Status != KRequestPending && req2Complete==EFalse)
-				{
-				CHECKPOINT(thread2Status.Int(),KErrNone,CHP_CNTXT_CASE("A.MC3"));
-				req2Complete=ETrue;
-				}
-			} // while statement
-		} // if statement
-	
-	thread1.Close();
-	thread2.Close();
-
-	return TestStepResult();
-}
-
-
-TInt CEtelPacketTestMultipleClients::ContextCreationFunction(TAny* /*aThread*/ )
-/**
- * Static thread function. A primary and secondary context are created in this function.
- * The following sequence is carried out in order to create a secondary context:
- * Connect to the Telephony server, Load the Telephony module, open handles to a phone,
- * packet service and primary context object. 
- * Once the secondary context is created, all the handles are closed. Context 
- * functionality is exercised in other test modules and is not repeated here.
- * Note that logging is done explicitly in this function to the generated test result
- * file. This is to enable a tester examine the behaviour of this test without having to 
- * resort to checking the dummy TSY logs.
- *
- * Note The logging code has been temporarily commented out. This is because the logging
- * used by the test harness, scheduletest is not thread safe for multithreaded calls.
- * When the test harness has been modified (either by making it thread safe for multithreaded
- * calls or by using FLOGGER, the logging for this test case should be updated.
- * - 16/05/02
- */
-{
-	// Create a cleanup stack object
-	CTrapCleanup* cleanup=CTrapCleanup::New();
-	if (cleanup==NULL)
-		return KErrNoMemory;
-
-
-// Use the 'this' pointer to access functionality available to the test step class.
-	//CEtelPacketTestMultipleClients* ptr = (CEtelPacketTestMultipleClients*) aThreadData;
-	//ptr->INFO_PRINTF1(_L("Thread %d finished Wait()."), RThread().Id());
-	
-
-// Establish a connection to the ETel Server and open handles for this thread.
-// An arbitrary value of 20 is assigned for the buffer size for the context names.
-// Using a TName object would incur a significant load on the stack, which is 
-// unnecessary for this test code.
-	RTelServer server;
-	RPhone pcktPhone;
-	RPacketService wcdmaService;
-	RPacketContext primaryContext;
-	RPacketContext wcdmaContext;
-	TBuf<20>  contextName;
-	TBuf<20> secondaryContextName;
-	
-	TInt ret= KErrNone;
-	
-	if ( (ret=server.Connect())==KErrNone)
-		{
-		//ptr->INFO_PRINTF1(_L("Thread %d: Connect to ETel server - Pass."), RThread().Id());
-		if ( (ret=server.LoadPhoneModule(DPCKTTSY_MODULE_NAME))==KErrNone)
-			{
-			//ptr->INFO_PRINTF1(_L("Thread %d: Load phone module - Pass."), RThread().Id());
-			if ( (ret=pcktPhone.Open(server,DPCKTTSY_PHONE_NAME))==KErrNone)
-				{
-				//ptr->INFO_PRINTF1(_L("Thread %d: Open Packet phone - Pass."), RThread().Id());
-				if ( (ret=wcdmaService.Open(pcktPhone))==KErrNone)
-					{
-					//ptr->INFO_PRINTF1(_L("Thread %d: Open Packet service - Pass."), RThread().Id());
-					if ( (ret=primaryContext.OpenNewContext(wcdmaService, contextName))==KErrNone)
-						{
-						//ptr->INFO_PRINTF1(_L("Thread %d: Open Primary context - Pass."), RThread().Id());
-						if ( (ret=wcdmaContext.OpenNewSecondaryContext(wcdmaService, contextName, secondaryContextName))==KErrNone)
-							{
-							//ptr->INFO_PRINTF1(_L("Thread %d: Open Secondary context - Pass."), RThread().Id());
-							wcdmaContext.Close();
-							//ptr->INFO_PRINTF1(_L("Thread %d: Close Secondary context - Pass."), RThread().Id());
-							}
-						primaryContext.Close();
-						//ptr->INFO_PRINTF1(_L("Thread %d: Close Primary context - Pass."), RThread().Id());
-						}
-					wcdmaService.Close();
-					//ptr->INFO_PRINTF1(_L("Thread %d: Close Packet service - Pass."), RThread().Id());
-					}
-				pcktPhone.Close();
-				//ptr->INFO_PRINTF1(_L("Thread %d: Close Packet phone - Pass."), RThread().Id());
-				}
-			server.UnloadPhoneModule(DPCKTTSY_MODULE_NAME);
-			//ptr->INFO_PRINTF1(_L("Thread %d: Unload phone module - Pass."), RThread().Id());
-			}
-		server.Close();
-		//ptr->INFO_PRINTF1(_L("Thread %d: Close ETel server - Pass."), RThread().Id());
-		}
-
-	delete cleanup;
-
-	return ret;	
-}
+// Copyright (c) 2002-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:
+// EtelPacketTestMultipleClients.cpp
+// This file tests the scenario of Multiple Clients using the Packet API simultaneously.
+// It is primarily used to exercise the mutex in the methods RPacketContext::OpenNewContext()
+// and RPacketContext::OpenNewSecondaryContext().
+// 
+//
+
+
+// Symbian OS includes
+#include <e32base.h>
+#include <e32std.h>
+
+#include <etelpckt.h>
+#include <pcktcs.h>
+
+#include "Te_EtelPacketTestStepBase.h"
+
+#include "testdef.h"
+
+#include "Te_EtelPacketTestMultipleClients.h"
+#include "Te_etelpckt_defs.h"
+
+
+// constructor
+CEtelPacketTestMultipleClients::CEtelPacketTestMultipleClients()
+{
+	// store the name of this test case
+	SetTestStepName(_L("Multiple_Clients"));
+}
+
+// destructor
+CEtelPacketTestMultipleClients::~CEtelPacketTestMultipleClients()
+{
+}
+
+
+enum TVerdict CEtelPacketTestMultipleClients::doTestStepL( void )
+/**
+ * Test step Multiple_Clients tests simultaneous use of the API by Multiple clients.
+ */
+{
+// Allocate the size of the stack and heap objects
+	const TInt KStackSize=0x8000;
+	const TInt KHeapSize=0x8000;
+	const TInt KMaxHeapSize=0x80000;
+
+// Create 2 RThread objects
+	_LIT(KClientApp1ThreadName,"ClientApp1");
+	_LIT(KClientApp2ThreadName,"ClientApp2");
+
+	RThread thread1;
+	RThread thread2;
+
+	TInt res1=thread1.Create(KClientApp1ThreadName,ContextCreationFunction,
+					    KStackSize,KHeapSize,KMaxHeapSize,this);
+
+	TInt res2=thread2.Create(KClientApp2ThreadName,ContextCreationFunction,
+					    KStackSize,KHeapSize,KMaxHeapSize,this);
+
+	TRequestStatus thread1Status;
+	TRequestStatus thread2Status;
+	TBool req1Complete=EFalse;
+	TBool req2Complete=EFalse;
+	
+// If both threads have been created successfully, start their execution
+	if (res1==KErrNone && res2==KErrNone)
+		{
+		thread1.Logon(thread1Status);
+		thread2.Logon(thread2Status);
+		thread1.Resume();
+		thread2.Resume();
+	 
+		while ( req1Complete==EFalse || req2Complete==EFalse)
+			{
+			User::WaitForAnyRequest();
+			if (thread1Status != KRequestPending && req1Complete==EFalse)
+				{
+				CHECKPOINT(thread1Status.Int(),KErrNone,CHP_CNTXT_CASE("A.MC2"));
+				req1Complete=ETrue;
+				}
+			if (thread2Status != KRequestPending && req2Complete==EFalse)
+				{
+				CHECKPOINT(thread2Status.Int(),KErrNone,CHP_CNTXT_CASE("A.MC3"));
+				req2Complete=ETrue;
+				}
+			} // while statement
+		} // if statement
+	
+	thread1.Close();
+	thread2.Close();
+
+	return TestStepResult();
+}
+
+
+TInt CEtelPacketTestMultipleClients::ContextCreationFunction(TAny* /*aThread*/ )
+/**
+ * Static thread function. A primary and secondary context are created in this function.
+ * The following sequence is carried out in order to create a secondary context:
+ * Connect to the Telephony server, Load the Telephony module, open handles to a phone,
+ * packet service and primary context object. 
+ * Once the secondary context is created, all the handles are closed. Context 
+ * functionality is exercised in other test modules and is not repeated here.
+ * Note that logging is done explicitly in this function to the generated test result
+ * file. This is to enable a tester examine the behaviour of this test without having to 
+ * resort to checking the dummy TSY logs.
+ *
+ * Note The logging code has been temporarily commented out. This is because the logging
+ * used by the test harness, scheduletest is not thread safe for multithreaded calls.
+ * When the test harness has been modified (either by making it thread safe for multithreaded
+ * calls or by using FLOGGER, the logging for this test case should be updated.
+ * - 16/05/02
+ */
+{
+	// Create a cleanup stack object
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+	if (cleanup==NULL)
+		return KErrNoMemory;
+
+
+// Use the 'this' pointer to access functionality available to the test step class.
+	//CEtelPacketTestMultipleClients* ptr = (CEtelPacketTestMultipleClients*) aThreadData;
+	//ptr->INFO_PRINTF1(_L("Thread %d finished Wait()."), RThread().Id());
+	
+
+// Establish a connection to the ETel Server and open handles for this thread.
+// An arbitrary value of 20 is assigned for the buffer size for the context names.
+// Using a TName object would incur a significant load on the stack, which is 
+// unnecessary for this test code.
+	RTelServer server;
+	RPhone pcktPhone;
+	RPacketService wcdmaService;
+	RPacketContext primaryContext;
+	RPacketContext wcdmaContext;
+	TBuf<20>  contextName;
+	TBuf<20> secondaryContextName;
+	
+	TInt ret= KErrNone;
+	
+	if ( (ret=server.Connect())==KErrNone)
+		{
+		//ptr->INFO_PRINTF1(_L("Thread %d: Connect to ETel server - Pass."), RThread().Id());
+		if ( (ret=server.LoadPhoneModule(DPCKTTSY_MODULE_NAME))==KErrNone)
+			{
+			//ptr->INFO_PRINTF1(_L("Thread %d: Load phone module - Pass."), RThread().Id());
+			if ( (ret=pcktPhone.Open(server,DPCKTTSY_PHONE_NAME))==KErrNone)
+				{
+				//ptr->INFO_PRINTF1(_L("Thread %d: Open Packet phone - Pass."), RThread().Id());
+				if ( (ret=wcdmaService.Open(pcktPhone))==KErrNone)
+					{
+					//ptr->INFO_PRINTF1(_L("Thread %d: Open Packet service - Pass."), RThread().Id());
+					if ( (ret=primaryContext.OpenNewContext(wcdmaService, contextName))==KErrNone)
+						{
+						//ptr->INFO_PRINTF1(_L("Thread %d: Open Primary context - Pass."), RThread().Id());
+						if ( (ret=wcdmaContext.OpenNewSecondaryContext(wcdmaService, contextName, secondaryContextName))==KErrNone)
+							{
+							//ptr->INFO_PRINTF1(_L("Thread %d: Open Secondary context - Pass."), RThread().Id());
+							wcdmaContext.Close();
+							//ptr->INFO_PRINTF1(_L("Thread %d: Close Secondary context - Pass."), RThread().Id());
+							}
+						primaryContext.Close();
+						//ptr->INFO_PRINTF1(_L("Thread %d: Close Primary context - Pass."), RThread().Id());
+						}
+					wcdmaService.Close();
+					//ptr->INFO_PRINTF1(_L("Thread %d: Close Packet service - Pass."), RThread().Id());
+					}
+				pcktPhone.Close();
+				//ptr->INFO_PRINTF1(_L("Thread %d: Close Packet phone - Pass."), RThread().Id());
+				}
+			server.UnloadPhoneModule(DPCKTTSY_MODULE_NAME);
+			//ptr->INFO_PRINTF1(_L("Thread %d: Unload phone module - Pass."), RThread().Id());
+			}
+		server.Close();
+		//ptr->INFO_PRINTF1(_L("Thread %d: Close ETel server - Pass."), RThread().Id());
+		}
+
+	delete cleanup;
+
+	return ret;	
+}