telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvStress.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvStress.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyutils/etel3rdpartyapi/Test/te_etelIsv/TE_EtelIsvStress.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,523 +1,523 @@
-// Copyright (c) 2003-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:
-// TE_ETELISVLINEINFO.CPP
-// 
-//
-
-#include "TE_EtelIsvbase.h"
-#include "TE_EtelIsvCallFunc.h"
-#include "TE_EtelIsvStress.h"
-#include "TE_EtelIsvPhoneSettings.h"
-#include "TE_EtelIsvNetworkInfo.h"
-
-/**
-*
-@SYMTestCaseID Etel3rdParty 27.1, TestStress
-@SYMTestCaseDesc Stress Test 3rd party APIs
-@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc,
-* REQ 2116.4.2, 2116.4.3, 2116.4.3, 2116.4.4, 2116.4.6, 2116.3.2
-*/  
- 
-
-CTestStress::CTestStress(TInt& aCallCount)
-/** Each test step initialises it's own name
-*/
-	: iCallCount(aCallCount)
-	{
-	// store the name of this test case
-	// this is the name that is used by the script file
-	SetTestStepName(_L("TestStress"));
-	}
-	
-	
-	
-enum TVerdict CTestStress::doTestStepL()
-	{
-/**
-This performs some simple stress testing using multiple clients.
-*/	
-	TTestData testData1;
-	TTestData testData2;
-	TBuf<100> testbuf1;
-	TBuf<100> testbuf2;	
-	
-	//
-	//Test repeated concurrent calls to GetPhoneId() and GetSignalStrength() from separate clients
-	//
-	SetTestNumber(35);	
-	
-	testData1.iTestStep = this;
-	testData1.iApiToTest = EGetPhoneIdAPI;
-	testData1.iClientId = 1;
-	testData1.iTestSuccess = EFalse;	
-	testData1.iRepCount = 4;	
-	
-	
-	testData2.iTestStep = this;
-	testData2.iApiToTest = EGetSignalStrengthAPI;
-	testData2.iClientId = 2;
-	testData2.iTestSuccess = EFalse;	
-	testData2.iRepCount = 4;
-	
-	testbuf1 = _L("Get Phone Id");
-	testbuf2 = _L("Get Signal Strength");	
-		
-	RunTestL(testData1,testData2,testbuf1, testbuf2);
-	
-	//
-	//Test repeated concurrent calls to DialNewCall() and GetPhoneId() from separate clients
-	//
-	testData1.iTestStep = this;
-	testData1.iApiToTest = EGetNetworkInfoAPI;
-	testData1.iClientId = 1;
-	testData1.iTestSuccess = EFalse;	
-	testData1.iRepCount = 4;	
-	
-	
-	testData2.iTestStep = this;
-	testData2.iApiToTest = EDialNewCallAPI;
-	testData2.iClientId = 2;
-	testData2.iTestSuccess = EFalse;	
-	testData2.iRepCount = 4;
-	
-	testbuf1 = _L("Get Network Info");
-	testbuf2 = _L("Dial New Call");	
-		
-	RunTestL(testData1,testData2,testbuf1, testbuf2);
-	
-	iMyAsyncOneShot = CMyAsyncOneShot::NewL();
-	iMyAsyncOneShot->StartOneShot();
-	CActiveScheduler::Start();
-	
-	return TestStepResult();
-	}
-	
-void CTestStress::RunTestL(TTestData& aTestData1, TTestData& aTestData2,const TDes& aTestName1,const TDes& aTestName2)
-/**
-Launch threads and wait for them to complete.  Check the success status of the result.
-*/
-	{
-	const TInt KStackSize=0x8000;
-	const TInt KHeapSize=0x8000;
-	const TInt KMaxHeapSize=0x80000;
-
-	_LIT(KClient1ThreadName,"ClientThread1");
-	_LIT(KClient2ThreadName,"ClientThread2");
-
-	RThread t1;
-	RThread t2;
-
-	TInt res1=t1.Create(KClient1ThreadName,StartThreadFunction,
-					    KStackSize,KHeapSize,KMaxHeapSize,&aTestData1);
-
-	TInt res2=t2.Create(KClient2ThreadName,StartThreadFunction,
-					    KStackSize,KHeapSize,KMaxHeapSize,&aTestData2);
-
-	TRequestStatus reqStatus1;
-	TRequestStatus reqStatus2;
-	TBool req1Complete=EFalse;
-	TBool req2Complete=EFalse;
-	
-	if (res1==KErrNone && res2==KErrNone)
-		{
-		t1.Resume();
-		t2.Resume();
-		t1.Logon(reqStatus1);
-		t2.Logon(reqStatus2);
-
-		while ( req1Complete==EFalse || req2Complete==EFalse)
-			{
-			User::WaitForAnyRequest();
-			if (reqStatus1 != KRequestPending && req1Complete==EFalse)
-				{
-				TInt res1=reqStatus1.Int();
-				TEST1(res1 == KErrNone,ETrue); 
-				TEST1(aTestData1.iTestSuccess != EFalse,ETrue); 
-				INFO_PRINTF4(_L("%S ClientId=%d TestSuccess = %d"), &aTestName1, aTestData1.iClientId,  aTestData1.iTestSuccess);
-				req1Complete=ETrue;
-				}
-			if (reqStatus2 != KRequestPending && req2Complete==EFalse)
-				{
-				TInt res2=reqStatus2.Int();
-				TEST1(res2 == KErrNone,ETrue);
-				TEST1(aTestData2.iTestSuccess != EFalse,ETrue); 
-				INFO_PRINTF4(_L("%S  ClientId=%d TestSuccess = %d"), &aTestName2, aTestData2.iClientId, aTestData2.iTestSuccess);
-				req2Complete=ETrue;
-				}
-			}
-		
-		}
-	
-	t1.Close();
-	t2.Close();
-	}
-	
-TInt CTestStress::StartThreadFunction(TAny* aThreadData)
-/**
-Thread has started. Check which API thread function is to be tested and set it going.
-*/
-	{
-	CTrapCleanup* cleanup;
-	if ((cleanup=CTrapCleanup::New())==NULL)
-		return KErrGeneral;
-		
-	CActiveScheduler* activeScheduler=new CActiveScheduler();
-	if(activeScheduler==NULL)
-		return KErrNoMemory;
-	CActiveScheduler::Install(activeScheduler);
-	
-	TTestData* testData = static_cast<TTestData*>(aThreadData);
-	
-	TInt ret = KErrNone;
-	if(testData->iApiToTest == EGetPhoneIdAPI)
-		{
-		TRAP(ret,GetPhoneIdThreadFunctionL(testData));
-		}	
-	else if(testData->iApiToTest == EGetSignalStrengthAPI)
-		{
-		TRAP(ret,GetSignalStrengthThreadFunctionL(testData));	
-		}	
-	else if(testData->iApiToTest == EDialNewCallAPI	)
-		{
-		TRAP(ret,MakeCallHangupThreadFunctionL(testData));	
-		}
-	else if(testData->iApiToTest == EGetNetworkInfoAPI	)
-		{
-		TRAP(ret,GetCurrentNetworkInfoThreadFunctionL(testData));	
-		}
-	else
-		{
-		ret = KErrNotFound;
-		}		
-		
-	delete activeScheduler;
-	delete cleanup;
-	
-	return ret;
-	}
-	
-TInt CTestStress::GetPhoneIdThreadFunctionL(TTestData* aTestData)
-/**
-Thread function which repeatedly calls GetPhoneId()
-*/
-	{	
-	//Open a new client
-	CTelephony* telephony = CTelephony::NewLC();	
-	
-	//expected data
-	_LIT16(manufacturerid, "PSION");
-	_LIT16(modelid, "666");
-	_LIT16(serialid, "1234567890");
-	CTelephony::TPhoneIdV1 ExpectedPhoneId;
-	ExpectedPhoneId.iManufacturer=manufacturerid;
-	ExpectedPhoneId.iModel=modelid;
-	ExpectedPhoneId.iSerialNumber=serialid;
-	TRequestStatus expStat=KErrNone;
-	CTelephony::TPhoneIdV1Pckg ExpectedPhoneIdPckg(ExpectedPhoneId);
-	
-	CTestGetPhoneIdAct* GetPhoneIdAct = CTestGetPhoneIdAct::NewLC(aTestData->iTestStep, telephony, EFalse);
-	
-	for(int i = 0; i < aTestData->iRepCount; i++)
-		{
-		//start GetPhoneId
-		GetPhoneIdAct->GetPhoneId(ExpectedPhoneIdPckg, expStat);
-		CActiveScheduler::Start();
-		
-		//have to perform the etst oursleves as cannot use test execute macros in threads!!	
-		aTestData->iTestSuccess = ETrue;
-		if(GetPhoneIdAct->iStatus != KErrNone)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(GetPhoneIdAct->iPhoneId.iManufacturer != ExpectedPhoneId.iManufacturer)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(GetPhoneIdAct->iPhoneId.iModel != ExpectedPhoneId.iModel)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(GetPhoneIdAct->iPhoneId.iSerialNumber != ExpectedPhoneId.iSerialNumber)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(aTestData->iTestSuccess == EFalse)
-			{
-			break;	//test failed.
-			}
-		}
-	
-	CleanupStack::PopAndDestroy(GetPhoneIdAct); //GetPhoneIdAct
-	CleanupStack::PopAndDestroy(telephony); //telephony
-	return KErrNone;
-	}
-	
-TInt CTestStress::GetSignalStrengthThreadFunctionL(TTestData* aTestData)
-/**
-Thread function which repeatedly calls GetSignalStrength()
-*/
-	{
-	//Open a new client
-	CTelephony* telephony = CTelephony::NewLC();	
-	
-	//Set expected result values
-	TRequestStatus expStat=KErrNone;
-	CTelephony::TSignalStrengthV1 ExpSignalStrength;
-	ExpSignalStrength.iBar=3;
-	ExpSignalStrength.iSignalStrength=-51;
-	CTelephony::TSignalStrengthV1Pckg expSignalStrengthPckg(ExpSignalStrength);
-	
-	CTestGetSignalStrengthAct* GetSignalStrengthAct = CTestGetSignalStrengthAct::NewLC(aTestData->iTestStep, telephony, EFalse);
-	
-	//start get signal strength
-	for(int i = 0; i < aTestData->iRepCount; i++)
-		{
-		GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat);	
-		CActiveScheduler::Start();
-		
-		aTestData->iTestSuccess = ETrue;
-		
-		if(GetSignalStrengthAct->iStatus != KErrNone)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(GetSignalStrengthAct->iSignalStrength.iBar != ExpSignalStrength.iBar)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}		
-		if(GetSignalStrengthAct->iSignalStrength.iSignalStrength != ExpSignalStrength.iSignalStrength)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(aTestData->iTestSuccess == EFalse)
-			{
-			break;	//test failed.
-			}		
-		}
-	
-	CleanupStack::PopAndDestroy(GetSignalStrengthAct); //GetSignalStrengthAct	
-	CleanupStack::PopAndDestroy(telephony); //telephony	
-	return KErrNone;
-	}
-	
-TInt CTestStress::MakeCallHangupThreadFunctionL(TTestData* aTestData)
-/**
-Thread function which repeatedly initiates a call and hangups
-*/
-	{	
-	_LIT(KGoodNumber,"1789");
-	
-	//Open a new client
-	CTelephony* telephony = CTelephony::NewLC();	
-	
-	//Set the call parameters for call 
-	CTelephony::TCallParamsV1 callParams1;
-	callParams1.iIdRestrict = CTelephony::ESendMyId;
-	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
-	
-	TTestCallParams testCallParams1;
-	testCallParams1.iLine = CTelephony::EVoiceLine;
-	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
-	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
-	testCallParams1.iExpStat = KErrNone;
-	
-	CTelephony::TCallStatusV1 status;
-	CTelephony::TCallStatusV1Pckg statusPckg(status);
-	
-	// Create active DialNewCallAct objects
-	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(aTestData->iTestStep, telephony, EFalse);
-	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(aTestData->iTestStep, telephony, EFalse);
-	
-	for(int i = 0; i < aTestData->iRepCount; i++)
-		{
-		//dial a new call
-		testDialNewCallAct1->TestDialNewCall(testCallParams1);
-		CActiveScheduler::Start();
-		
-		aTestData->iTestSuccess = ETrue;
-		if(testDialNewCallAct1->iStatus != KErrNone)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		
-		TInt err = telephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
-		if(err != KErrNone)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(status.iStatus != CTelephony::EStatusConnected)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-			
-		//hangup the call
-		testHangupAct1->TestHangup(testCallParams1);
-		CActiveScheduler::Start();
-		
-		err = telephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
-		if(err != KErrNone)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		if(status.iStatus != CTelephony::EStatusIdle)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		
-		if(aTestData->iTestSuccess == EFalse)
-			{
-			break;	//test failed.
-			}	
-		}
-		
-	CleanupStack::PopAndDestroy(testHangupAct1);	//testHangupAct1
-	CleanupStack::PopAndDestroy(testDialNewCallAct1); //testDialNewCallAct1
-	CleanupStack::PopAndDestroy(telephony); //telephony	
-	return KErrNone;
-	}
-	
-TInt CTestStress::GetCurrentNetworkInfoThreadFunctionL(TTestData* aTestData)	
-/**
-Thread function which repeatedly calls GetCurrentNetworkInfo()
-*/
-	{
-	// Set up the expected value to be the same as that provisioned in 
-	// the SIM TSY config.txt file.
-	_LIT16(KCountrycode, "ABCD");
-	_LIT16(KNetworkid, "Network0");
-	
-	// Need to test display tag
-	_LIT16(KDisplaytag, "Vodafone");
-	_LIT16(KShortname, "Voda");
-	_LIT16(KLongname, "Vodafone_UK");
-	
-	//Open a new client
-	CTelephony* telephony = CTelephony::NewLC();	
-	
-	CTelephony::TNetworkInfoV1 ExpectedNetworkInfo;
-	ExpectedNetworkInfo.iCountryCode=KCountrycode;
-	ExpectedNetworkInfo.iNetworkId=KNetworkid;
-	ExpectedNetworkInfo.iDisplayTag=KDisplaytag;
-	ExpectedNetworkInfo.iShortName=KShortname;
-	ExpectedNetworkInfo.iLongName=KLongname;	
-	ExpectedNetworkInfo.iMode=CTelephony::ENetworkModeGsm;
-	ExpectedNetworkInfo.iStatus = CTelephony::ENetworkStatusCurrent;
-	ExpectedNetworkInfo.iBandInfo=CTelephony::EBandUnknown;
-	ExpectedNetworkInfo.iCdmaSID.SetLength(0);
-	ExpectedNetworkInfo.iAccess = CTelephony::ENetworkAccessGsm; 
-	ExpectedNetworkInfo.iAreaKnown = EFalse;
-	ExpectedNetworkInfo.iLocationAreaCode = 0;
-	ExpectedNetworkInfo.iCellId = 0;
-	
-	TRequestStatus ExpStat=KErrNone;
-
-	// Create an active object and push it onto the clean up stack
-	CTestGetCurrentNetworkInfoAct* GetCurrentNetworkInfoAct = CTestGetCurrentNetworkInfoAct::NewLC(aTestData->iTestStep, telephony, EFalse);
-	
-	for(int i = 0; i < aTestData->iRepCount; i++)
-		{
-		GetCurrentNetworkInfoAct->TestGetCurrentNetworkInfo(ExpectedNetworkInfo, ExpStat);
-		CActiveScheduler::Start();
-	
-		aTestData->iTestSuccess = ETrue;
-		if(GetCurrentNetworkInfoAct->iStatus != KErrNone)
-			{
-			aTestData->iTestSuccess = EFalse;
-			}			
-		if(GetCurrentNetworkInfoAct->iNetworkInfo.iCountryCode != ExpectedNetworkInfo.iCountryCode )
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		
-		if(GetCurrentNetworkInfoAct->iNetworkInfo.iNetworkId != ExpectedNetworkInfo.iNetworkId )
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		
-		if(GetCurrentNetworkInfoAct->iNetworkInfo.iDisplayTag != ExpectedNetworkInfo.iDisplayTag )
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		
-		if(GetCurrentNetworkInfoAct->iNetworkInfo.iShortName != ExpectedNetworkInfo.iShortName )
-			{
-			aTestData->iTestSuccess = EFalse;
-			}
-		
-		if(GetCurrentNetworkInfoAct->iNetworkInfo.iLongName!= ExpectedNetworkInfo.iLongName )
-			{
-			aTestData->iTestSuccess = EFalse;
-			}					
-
-		if(aTestData->iTestSuccess == EFalse)
-			{
-			break;	//test failed.
-			}	
-		}	
-	
-	CleanupStack::PopAndDestroy(GetCurrentNetworkInfoAct); //GetCurrentNetworkInfoAct
-	CleanupStack::PopAndDestroy(telephony); //telephony	
-	return KErrNone;
-	}
-
-
-/**
- *  Simple pre-amble that doesn't open CTelephony.
- */
-TVerdict CTestFailedOpen::doTestStepPreambleL()
-	{
-	//
-	// Just mark the heap and create an Active Scheduler...
-	//
-	__UHEAP_MARK;
-
-	iScheduler = new(ELeave) CActiveScheduler;
-	CActiveScheduler::Install(iScheduler);
-
-	return TestStepResult();
-	} // CTestFailedOpen::doTestStepPreambleL
-
-
-/**
- *  Test of opening CTelephony without a phone being available.
- */
-enum TVerdict CTestFailedOpen::doTestStepL()
-	{
-	//
-	// Set the SIMTSY config to be invalid and open CTelephony.
-	//
-	User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory,
-									  KPSSimTsyTestNumber, 999));
-	
-	TRAPD(leaveCode, iTelephony = CTelephony::NewL());
-	TEST1(leaveCode == KErrNotFound, ETrue);
-
-	delete iTelephony;
-	iTelephony = NULL;
-	
-	return TestStepResult();
-	} // CTestFailedOpen::doTestStepL
-
-
-/**
- *  Simple post-amble that deletes the Active Scheduler.
- */
-TVerdict CTestFailedOpen::doTestStepPostambleL()
-	{
-	delete iScheduler;
-
-	__UHEAP_MARKEND;
-
- 	return TestStepResult();
-	} // CTestFailedOpen::doTestStepPostambleL
+// Copyright (c) 2003-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:
+// TE_ETELISVLINEINFO.CPP
+// 
+//
+
+#include "TE_EtelIsvbase.h"
+#include "TE_EtelIsvCallFunc.h"
+#include "TE_EtelIsvStress.h"
+#include "TE_EtelIsvPhoneSettings.h"
+#include "TE_EtelIsvNetworkInfo.h"
+
+/**
+*
+@SYMTestCaseID Etel3rdParty 27.1, TestStress
+@SYMTestCaseDesc Stress Test 3rd party APIs
+@SYMFssID SGL.GT0166.054 v1.3 A2_Telephony_Functional_Specification.doc,
+* REQ 2116.4.2, 2116.4.3, 2116.4.3, 2116.4.4, 2116.4.6, 2116.3.2
+*/  
+ 
+
+CTestStress::CTestStress(TInt& aCallCount)
+/** Each test step initialises it's own name
+*/
+	: iCallCount(aCallCount)
+	{
+	// store the name of this test case
+	// this is the name that is used by the script file
+	SetTestStepName(_L("TestStress"));
+	}
+	
+	
+	
+enum TVerdict CTestStress::doTestStepL()
+	{
+/**
+This performs some simple stress testing using multiple clients.
+*/	
+	TTestData testData1;
+	TTestData testData2;
+	TBuf<100> testbuf1;
+	TBuf<100> testbuf2;	
+	
+	//
+	//Test repeated concurrent calls to GetPhoneId() and GetSignalStrength() from separate clients
+	//
+	SetTestNumber(35);	
+	
+	testData1.iTestStep = this;
+	testData1.iApiToTest = EGetPhoneIdAPI;
+	testData1.iClientId = 1;
+	testData1.iTestSuccess = EFalse;	
+	testData1.iRepCount = 4;	
+	
+	
+	testData2.iTestStep = this;
+	testData2.iApiToTest = EGetSignalStrengthAPI;
+	testData2.iClientId = 2;
+	testData2.iTestSuccess = EFalse;	
+	testData2.iRepCount = 4;
+	
+	testbuf1 = _L("Get Phone Id");
+	testbuf2 = _L("Get Signal Strength");	
+		
+	RunTestL(testData1,testData2,testbuf1, testbuf2);
+	
+	//
+	//Test repeated concurrent calls to DialNewCall() and GetPhoneId() from separate clients
+	//
+	testData1.iTestStep = this;
+	testData1.iApiToTest = EGetNetworkInfoAPI;
+	testData1.iClientId = 1;
+	testData1.iTestSuccess = EFalse;	
+	testData1.iRepCount = 4;	
+	
+	
+	testData2.iTestStep = this;
+	testData2.iApiToTest = EDialNewCallAPI;
+	testData2.iClientId = 2;
+	testData2.iTestSuccess = EFalse;	
+	testData2.iRepCount = 4;
+	
+	testbuf1 = _L("Get Network Info");
+	testbuf2 = _L("Dial New Call");	
+		
+	RunTestL(testData1,testData2,testbuf1, testbuf2);
+	
+	iMyAsyncOneShot = CMyAsyncOneShot::NewL();
+	iMyAsyncOneShot->StartOneShot();
+	CActiveScheduler::Start();
+	
+	return TestStepResult();
+	}
+	
+void CTestStress::RunTestL(TTestData& aTestData1, TTestData& aTestData2,const TDes& aTestName1,const TDes& aTestName2)
+/**
+Launch threads and wait for them to complete.  Check the success status of the result.
+*/
+	{
+	const TInt KStackSize=0x8000;
+	const TInt KHeapSize=0x8000;
+	const TInt KMaxHeapSize=0x80000;
+
+	_LIT(KClient1ThreadName,"ClientThread1");
+	_LIT(KClient2ThreadName,"ClientThread2");
+
+	RThread t1;
+	RThread t2;
+
+	TInt res1=t1.Create(KClient1ThreadName,StartThreadFunction,
+					    KStackSize,KHeapSize,KMaxHeapSize,&aTestData1);
+
+	TInt res2=t2.Create(KClient2ThreadName,StartThreadFunction,
+					    KStackSize,KHeapSize,KMaxHeapSize,&aTestData2);
+
+	TRequestStatus reqStatus1;
+	TRequestStatus reqStatus2;
+	TBool req1Complete=EFalse;
+	TBool req2Complete=EFalse;
+	
+	if (res1==KErrNone && res2==KErrNone)
+		{
+		t1.Resume();
+		t2.Resume();
+		t1.Logon(reqStatus1);
+		t2.Logon(reqStatus2);
+
+		while ( req1Complete==EFalse || req2Complete==EFalse)
+			{
+			User::WaitForAnyRequest();
+			if (reqStatus1 != KRequestPending && req1Complete==EFalse)
+				{
+				TInt res1=reqStatus1.Int();
+				TEST1(res1 == KErrNone,ETrue); 
+				TEST1(aTestData1.iTestSuccess != EFalse,ETrue); 
+				INFO_PRINTF4(_L("%S ClientId=%d TestSuccess = %d"), &aTestName1, aTestData1.iClientId,  aTestData1.iTestSuccess);
+				req1Complete=ETrue;
+				}
+			if (reqStatus2 != KRequestPending && req2Complete==EFalse)
+				{
+				TInt res2=reqStatus2.Int();
+				TEST1(res2 == KErrNone,ETrue);
+				TEST1(aTestData2.iTestSuccess != EFalse,ETrue); 
+				INFO_PRINTF4(_L("%S  ClientId=%d TestSuccess = %d"), &aTestName2, aTestData2.iClientId, aTestData2.iTestSuccess);
+				req2Complete=ETrue;
+				}
+			}
+		
+		}
+	
+	t1.Close();
+	t2.Close();
+	}
+	
+TInt CTestStress::StartThreadFunction(TAny* aThreadData)
+/**
+Thread has started. Check which API thread function is to be tested and set it going.
+*/
+	{
+	CTrapCleanup* cleanup;
+	if ((cleanup=CTrapCleanup::New())==NULL)
+		return KErrGeneral;
+		
+	CActiveScheduler* activeScheduler=new CActiveScheduler();
+	if(activeScheduler==NULL)
+		return KErrNoMemory;
+	CActiveScheduler::Install(activeScheduler);
+	
+	TTestData* testData = static_cast<TTestData*>(aThreadData);
+	
+	TInt ret = KErrNone;
+	if(testData->iApiToTest == EGetPhoneIdAPI)
+		{
+		TRAP(ret,GetPhoneIdThreadFunctionL(testData));
+		}	
+	else if(testData->iApiToTest == EGetSignalStrengthAPI)
+		{
+		TRAP(ret,GetSignalStrengthThreadFunctionL(testData));	
+		}	
+	else if(testData->iApiToTest == EDialNewCallAPI	)
+		{
+		TRAP(ret,MakeCallHangupThreadFunctionL(testData));	
+		}
+	else if(testData->iApiToTest == EGetNetworkInfoAPI	)
+		{
+		TRAP(ret,GetCurrentNetworkInfoThreadFunctionL(testData));	
+		}
+	else
+		{
+		ret = KErrNotFound;
+		}		
+		
+	delete activeScheduler;
+	delete cleanup;
+	
+	return ret;
+	}
+	
+TInt CTestStress::GetPhoneIdThreadFunctionL(TTestData* aTestData)
+/**
+Thread function which repeatedly calls GetPhoneId()
+*/
+	{	
+	//Open a new client
+	CTelephony* telephony = CTelephony::NewLC();	
+	
+	//expected data
+	_LIT16(manufacturerid, "PSION");
+	_LIT16(modelid, "666");
+	_LIT16(serialid, "1234567890");
+	CTelephony::TPhoneIdV1 ExpectedPhoneId;
+	ExpectedPhoneId.iManufacturer=manufacturerid;
+	ExpectedPhoneId.iModel=modelid;
+	ExpectedPhoneId.iSerialNumber=serialid;
+	TRequestStatus expStat=KErrNone;
+	CTelephony::TPhoneIdV1Pckg ExpectedPhoneIdPckg(ExpectedPhoneId);
+	
+	CTestGetPhoneIdAct* GetPhoneIdAct = CTestGetPhoneIdAct::NewLC(aTestData->iTestStep, telephony, EFalse);
+	
+	for(int i = 0; i < aTestData->iRepCount; i++)
+		{
+		//start GetPhoneId
+		GetPhoneIdAct->GetPhoneId(ExpectedPhoneIdPckg, expStat);
+		CActiveScheduler::Start();
+		
+		//have to perform the etst oursleves as cannot use test execute macros in threads!!	
+		aTestData->iTestSuccess = ETrue;
+		if(GetPhoneIdAct->iStatus != KErrNone)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(GetPhoneIdAct->iPhoneId.iManufacturer != ExpectedPhoneId.iManufacturer)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(GetPhoneIdAct->iPhoneId.iModel != ExpectedPhoneId.iModel)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(GetPhoneIdAct->iPhoneId.iSerialNumber != ExpectedPhoneId.iSerialNumber)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(aTestData->iTestSuccess == EFalse)
+			{
+			break;	//test failed.
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(GetPhoneIdAct); //GetPhoneIdAct
+	CleanupStack::PopAndDestroy(telephony); //telephony
+	return KErrNone;
+	}
+	
+TInt CTestStress::GetSignalStrengthThreadFunctionL(TTestData* aTestData)
+/**
+Thread function which repeatedly calls GetSignalStrength()
+*/
+	{
+	//Open a new client
+	CTelephony* telephony = CTelephony::NewLC();	
+	
+	//Set expected result values
+	TRequestStatus expStat=KErrNone;
+	CTelephony::TSignalStrengthV1 ExpSignalStrength;
+	ExpSignalStrength.iBar=3;
+	ExpSignalStrength.iSignalStrength=-51;
+	CTelephony::TSignalStrengthV1Pckg expSignalStrengthPckg(ExpSignalStrength);
+	
+	CTestGetSignalStrengthAct* GetSignalStrengthAct = CTestGetSignalStrengthAct::NewLC(aTestData->iTestStep, telephony, EFalse);
+	
+	//start get signal strength
+	for(int i = 0; i < aTestData->iRepCount; i++)
+		{
+		GetSignalStrengthAct->GetSignalStrength(expSignalStrengthPckg, expStat);	
+		CActiveScheduler::Start();
+		
+		aTestData->iTestSuccess = ETrue;
+		
+		if(GetSignalStrengthAct->iStatus != KErrNone)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(GetSignalStrengthAct->iSignalStrength.iBar != ExpSignalStrength.iBar)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}		
+		if(GetSignalStrengthAct->iSignalStrength.iSignalStrength != ExpSignalStrength.iSignalStrength)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(aTestData->iTestSuccess == EFalse)
+			{
+			break;	//test failed.
+			}		
+		}
+	
+	CleanupStack::PopAndDestroy(GetSignalStrengthAct); //GetSignalStrengthAct	
+	CleanupStack::PopAndDestroy(telephony); //telephony	
+	return KErrNone;
+	}
+	
+TInt CTestStress::MakeCallHangupThreadFunctionL(TTestData* aTestData)
+/**
+Thread function which repeatedly initiates a call and hangups
+*/
+	{	
+	_LIT(KGoodNumber,"1789");
+	
+	//Open a new client
+	CTelephony* telephony = CTelephony::NewLC();	
+	
+	//Set the call parameters for call 
+	CTelephony::TCallParamsV1 callParams1;
+	callParams1.iIdRestrict = CTelephony::ESendMyId;
+	CTelephony::TCallParamsV1Pckg callParamsPckg1(callParams1);	
+	
+	TTestCallParams testCallParams1;
+	testCallParams1.iLine = CTelephony::EVoiceLine;
+	testCallParams1.iCallParamsV1Pckg = &callParamsPckg1;
+	testCallParams1.iTelAddress.iTelNumber = KGoodNumber;
+	testCallParams1.iExpStat = KErrNone;
+	
+	CTelephony::TCallStatusV1 status;
+	CTelephony::TCallStatusV1Pckg statusPckg(status);
+	
+	// Create active DialNewCallAct objects
+	CTestDialNewCallAct* testDialNewCallAct1 = CTestDialNewCallAct::NewLC(aTestData->iTestStep, telephony, EFalse);
+	CTestHangupAct* testHangupAct1 = CTestHangupAct::NewLC(aTestData->iTestStep, telephony, EFalse);
+	
+	for(int i = 0; i < aTestData->iRepCount; i++)
+		{
+		//dial a new call
+		testDialNewCallAct1->TestDialNewCall(testCallParams1);
+		CActiveScheduler::Start();
+		
+		aTestData->iTestSuccess = ETrue;
+		if(testDialNewCallAct1->iStatus != KErrNone)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		
+		TInt err = telephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
+		if(err != KErrNone)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(status.iStatus != CTelephony::EStatusConnected)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+			
+		//hangup the call
+		testHangupAct1->TestHangup(testCallParams1);
+		CActiveScheduler::Start();
+		
+		err = telephony->GetLineStatus(testCallParams1.iLine,  statusPckg);
+		if(err != KErrNone)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		if(status.iStatus != CTelephony::EStatusIdle)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		
+		if(aTestData->iTestSuccess == EFalse)
+			{
+			break;	//test failed.
+			}	
+		}
+		
+	CleanupStack::PopAndDestroy(testHangupAct1);	//testHangupAct1
+	CleanupStack::PopAndDestroy(testDialNewCallAct1); //testDialNewCallAct1
+	CleanupStack::PopAndDestroy(telephony); //telephony	
+	return KErrNone;
+	}
+	
+TInt CTestStress::GetCurrentNetworkInfoThreadFunctionL(TTestData* aTestData)	
+/**
+Thread function which repeatedly calls GetCurrentNetworkInfo()
+*/
+	{
+	// Set up the expected value to be the same as that provisioned in 
+	// the SIM TSY config.txt file.
+	_LIT16(KCountrycode, "ABCD");
+	_LIT16(KNetworkid, "Network0");
+	
+	// Need to test display tag
+	_LIT16(KDisplaytag, "Vodafone");
+	_LIT16(KShortname, "Voda");
+	_LIT16(KLongname, "Vodafone_UK");
+	
+	//Open a new client
+	CTelephony* telephony = CTelephony::NewLC();	
+	
+	CTelephony::TNetworkInfoV1 ExpectedNetworkInfo;
+	ExpectedNetworkInfo.iCountryCode=KCountrycode;
+	ExpectedNetworkInfo.iNetworkId=KNetworkid;
+	ExpectedNetworkInfo.iDisplayTag=KDisplaytag;
+	ExpectedNetworkInfo.iShortName=KShortname;
+	ExpectedNetworkInfo.iLongName=KLongname;	
+	ExpectedNetworkInfo.iMode=CTelephony::ENetworkModeGsm;
+	ExpectedNetworkInfo.iStatus = CTelephony::ENetworkStatusCurrent;
+	ExpectedNetworkInfo.iBandInfo=CTelephony::EBandUnknown;
+	ExpectedNetworkInfo.iCdmaSID.SetLength(0);
+	ExpectedNetworkInfo.iAccess = CTelephony::ENetworkAccessGsm; 
+	ExpectedNetworkInfo.iAreaKnown = EFalse;
+	ExpectedNetworkInfo.iLocationAreaCode = 0;
+	ExpectedNetworkInfo.iCellId = 0;
+	
+	TRequestStatus ExpStat=KErrNone;
+
+	// Create an active object and push it onto the clean up stack
+	CTestGetCurrentNetworkInfoAct* GetCurrentNetworkInfoAct = CTestGetCurrentNetworkInfoAct::NewLC(aTestData->iTestStep, telephony, EFalse);
+	
+	for(int i = 0; i < aTestData->iRepCount; i++)
+		{
+		GetCurrentNetworkInfoAct->TestGetCurrentNetworkInfo(ExpectedNetworkInfo, ExpStat);
+		CActiveScheduler::Start();
+	
+		aTestData->iTestSuccess = ETrue;
+		if(GetCurrentNetworkInfoAct->iStatus != KErrNone)
+			{
+			aTestData->iTestSuccess = EFalse;
+			}			
+		if(GetCurrentNetworkInfoAct->iNetworkInfo.iCountryCode != ExpectedNetworkInfo.iCountryCode )
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		
+		if(GetCurrentNetworkInfoAct->iNetworkInfo.iNetworkId != ExpectedNetworkInfo.iNetworkId )
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		
+		if(GetCurrentNetworkInfoAct->iNetworkInfo.iDisplayTag != ExpectedNetworkInfo.iDisplayTag )
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		
+		if(GetCurrentNetworkInfoAct->iNetworkInfo.iShortName != ExpectedNetworkInfo.iShortName )
+			{
+			aTestData->iTestSuccess = EFalse;
+			}
+		
+		if(GetCurrentNetworkInfoAct->iNetworkInfo.iLongName!= ExpectedNetworkInfo.iLongName )
+			{
+			aTestData->iTestSuccess = EFalse;
+			}					
+
+		if(aTestData->iTestSuccess == EFalse)
+			{
+			break;	//test failed.
+			}	
+		}	
+	
+	CleanupStack::PopAndDestroy(GetCurrentNetworkInfoAct); //GetCurrentNetworkInfoAct
+	CleanupStack::PopAndDestroy(telephony); //telephony	
+	return KErrNone;
+	}
+
+
+/**
+ *  Simple pre-amble that doesn't open CTelephony.
+ */
+TVerdict CTestFailedOpen::doTestStepPreambleL()
+	{
+	//
+	// Just mark the heap and create an Active Scheduler...
+	//
+	__UHEAP_MARK;
+
+	iScheduler = new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(iScheduler);
+
+	return TestStepResult();
+	} // CTestFailedOpen::doTestStepPreambleL
+
+
+/**
+ *  Test of opening CTelephony without a phone being available.
+ */
+enum TVerdict CTestFailedOpen::doTestStepL()
+	{
+	//
+	// Set the SIMTSY config to be invalid and open CTelephony.
+	//
+	User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory,
+									  KPSSimTsyTestNumber, 999));
+	
+	TRAPD(leaveCode, iTelephony = CTelephony::NewL());
+	TEST1(leaveCode == KErrNotFound, ETrue);
+
+	delete iTelephony;
+	iTelephony = NULL;
+	
+	return TestStepResult();
+	} // CTestFailedOpen::doTestStepL
+
+
+/**
+ *  Simple post-amble that deletes the Active Scheduler.
+ */
+TVerdict CTestFailedOpen::doTestStepPostambleL()
+	{
+	delete iScheduler;
+
+	__UHEAP_MARKEND;
+
+ 	return TestStepResult();
+	} // CTestFailedOpen::doTestStepPostambleL