datacommsserver/esockserver/test/TE_SocketServer/TE_SocketServerTestSections.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_SocketServer/TE_SocketServerTestSections.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,1162 @@
+// Copyright (c) 2006-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:
+//
+
+// EPOC includes
+#include <e32base.h>
+#include "TE_SocketServerTestSections.h"
+#include<c32root.h>
+#include <es_panic.h>
+#include <elements/sd_std.h>
+#include <comms-infras/sockmes.h>
+
+// Test step 1
+const TDesC& CSocketServerTest1::GetTestName()
+	{
+	_LIT(cRet,"Test1");
+	return cRet;
+	}
+
+CSocketServerTest1::CSocketServerTest1()
+	{
+	}
+
+CSocketServerTest1::~CSocketServerTest1()
+	{
+	}
+
+enum TVerdict CSocketServerTest1::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+
+	Logger().WriteFormat(_L("TE_SocketServer Test1"));
+	Logger().WriteFormat(_L("Test Purpose: Attempts to connect directly to optimal SocketServer without first connecting to SocketServer"));
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting direct optimal connection to socket server - should fail and panic"));
+    RSocketServ ss1;
+	ret = IllegalOptimalConnect(ss1);
+	
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrPermissionDenied);
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+const TDesC& CSocketServerTest2::GetTestName()
+	{
+	_LIT(cRet,"Test2");
+	return cRet;
+	}
+
+// Test step 2
+CSocketServerTest2::CSocketServerTest2()
+    {
+    }
+
+CSocketServerTest2::~CSocketServerTest2()
+    {
+    }
+
+enum TVerdict CSocketServerTest2::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+	
+	Logger().WriteFormat(_L("TE_SocketServer Test2"));
+	Logger().WriteFormat(_L("Test Purpose: Request optimal SocketServer but connects directly to it twice"));
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting optimal connection to socket server"));
+    RSocketServ ss1;
+	ret = OptimalConnect(ss1);
+	Logger().WriteFormat(_L("OptimalConnect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	Logger().WriteFormat(_L("Attempting an illegal direct connection to socket server player"));
+	ret = IllegalOptimalConnect(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrPermissionDenied);
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+
+// Test step 3
+const TDesC& CSocketServerTest3::GetTestName()
+	{
+	_LIT(cRet,"Test3");
+	return cRet;
+	}
+
+CSocketServerTest3::CSocketServerTest3()
+	{
+	}
+
+CSocketServerTest3::~CSocketServerTest3()
+	{
+	}
+
+enum TVerdict CSocketServerTest3::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	
+	Logger().WriteFormat(_L("TE_SocketServer Test3"));
+	Logger().WriteFormat(_L("Test Purpose: Separate player belonging to optimal SocketServer dies"));
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting connection to socket server"));
+    RSocketServ ss1;
+	TInt ret;
+	ret = ss1.Connect();
+	CleanupClosePushL(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	RSocket sock1;
+	Logger().WriteFormat(_L("Attempting open a socket to protocol 'Dummy Protocol 1'"));
+	ret = sock1.Open(ss1,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to Panic the protocol module"));
+	ret = PanicProtocolModule(sock1);
+	Logger().WriteFormat(_L("Ioctl returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrServerTerminated || ret == KErrAbort);
+	
+	sock1.Close();
+	
+	RSocketServ ss2;
+	Logger().WriteFormat(_L("Attempting do normal socket server connection"));
+	ret = ss2.Connect();
+	CleanupClosePushL(ss2);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	RSocketServ ss3;
+	Logger().WriteFormat(_L("Attempting do normal optimal socket server connection"));
+	ret = OptimalConnect(ss3);
+	CleanupClosePushL(ss3);
+	Logger().WriteFormat(_L("Optimal Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	RSocket sock2;
+	Logger().WriteFormat(_L("Attempting to connect to 'Dummy Protocol 1'"));
+	ret = sock2.Open(ss3,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret != KErrNone);
+	
+	CleanupStack::PopAndDestroy();
+	CleanupStack::PopAndDestroy();
+	CleanupStack::PopAndDestroy();
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+// Test step 5
+const TDesC& CSocketServerTest5::GetTestName()
+	{
+	_LIT(cRet,"Test5");
+	return cRet;
+	}
+
+CSocketServerTest5::CSocketServerTest5()
+	{
+	}
+
+CSocketServerTest5::~CSocketServerTest5()
+	{
+	}
+
+enum TVerdict CSocketServerTest5::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	
+	Logger().WriteFormat(_L("TE_SocketServer Test5"));
+	Logger().WriteFormat(_L("Test Purpose: Separate player belonging to optimal SocketServer dies, without completing all messages"));
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting connection to socket server"));
+    RSocketServ ss1;
+	TInt ret;
+	ret = ss1.Connect();
+	CleanupClosePushL(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting optimal connection to socket server"));
+    RSocketServ ss2;
+	ret = OptimalConnect(ss2);
+	CleanupClosePushL(ss2);
+	Logger().WriteFormat(_L("Optimal Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	RSocket sock1;
+	Logger().WriteFormat(_L("Attempting open a socket to protocol 'Dummy Protocol 1'"));
+	ret = sock1.Open(ss1,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to Hang the protocol module"));
+	TRequestStatus stat1;
+	NonCompletingIoclt(sock1,stat1);
+	
+	RSocket sock2;
+	Logger().WriteFormat(_L("Attempting to open a socket to protocol 'Dummy Protocol 1'"));
+	ret = sock2.Open(ss2,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	RProperty deathCountProp;
+	TRequestStatus deathCountStat;
+	
+	ret = deathCountProp.Attach(KUidSystemCategory, KUidC32RootModuleDeathKey.iUid);
+	deathCountProp.Subscribe(deathCountStat);
+	
+	Logger().WriteFormat(_L("Attempting to Panic the protocol module"));
+	ret = PanicProtocolModule(sock2);
+	Logger().WriteFormat(_L("Ioctl returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrServerTerminated || ret == KErrAbort);
+	
+	Logger().WriteFormat(_L("First Ioctl returned %S"),&EpocErrorToText(ret));
+	
+	User::WaitForRequest(stat1);
+	TESTL(stat1 == KErrServerTerminated || stat1 == KErrAbort);
+	
+	RSocketServ ss3;
+	Logger().WriteFormat(_L("Attempting connection to socket server"));
+	ret = ss3.Connect();
+	CleanupClosePushL(ss3);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	
+	User::WaitForRequest(deathCountStat); //Ensure that all the cleanup has happenned	
+	
+	Logger().WriteFormat(_L("Checking for  module 'ESock_PDummy1'"));
+	CheckForModuleL(_L8("ESock_PDummy1"));
+	Logger().WriteFormat(_L("Checking for  module 'ESock_Codealer1'"));
+	CheckForModuleL(_L8("ESock_Codealer1"));
+	
+	
+	CleanupStack::PopAndDestroy(&ss3);
+	CleanupStack::PopAndDestroy(&ss2);
+	CleanupStack::PopAndDestroy(&ss1);
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+// Test step 7
+const TDesC& CSocketServerTest7::GetTestName()
+	{
+	_LIT(cRet,"Test7");
+	return cRet;
+	}
+
+CSocketServerTest7::CSocketServerTest7()
+	{
+	}
+
+CSocketServerTest7::~CSocketServerTest7()
+	{
+	}
+
+enum TVerdict CSocketServerTest7::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	
+	Logger().WriteFormat(_L("TE_SocketServer Test7"));
+	Logger().WriteFormat(_L("Test Purpose: Optimal SocketServer with separate player dies without the player having completed all messages"));
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting optimal connection to socket server"));
+    RSocketServ ss1;
+	TInt ret;
+	ret = OptimalConnect(ss1);
+	CleanupClosePushL(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attemting to open connection to 'Dummy Protocol 1'"));
+	RSocket sock1;
+	ret = sock1.Open(ss1,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attemting to panic the dealer module"));
+	ret = PanicDealer(ss1);
+	sock1.Close();
+	if (ret == KErrNotSupported)
+		{
+		Logger().WriteFormat(_L("Test Only works for debug versions of epoc"));
+		verdict = EInconclusive;
+		}
+	else
+		{
+		Logger().WriteFormat(_L("Returned %S"),&EpocErrorToText(ret));
+		TESTL(ret == KErrServerTerminated || ret == KErrAbort);
+		
+		Logger().WriteFormat(_L("Attempting connection to socket server"));
+		RSocketServ ss2;
+		ret = ss2.Connect();
+		CleanupClosePushL(ss2);
+		Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+		TESTL(ret == KErrNone);
+		
+		Logger().WriteFormat(_L("Checking for  module 'ESock_Codealer2'"));
+		CheckForModuleL(_L8("ESock_Codealer2"));
+		Logger().WriteFormat(_L("Checking for  module 'ESock_Dealer2'"));
+		CheckForModuleL(_L8("ESock_Dealer2"));
+		
+		Logger().WriteFormat(_L("Attemting to open connection to 'Dummy Protocol 1'"));
+		
+		ret = sock1.Open(ss2,_L("Dummy Protocol 1"));
+		Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+		sock1.Close();
+		TESTL(ret == KErrNone);
+		
+		ret = sock1.Open(ss2,_L("Dummy Protocol 2"));
+		Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+		sock1.Close();
+		TESTL(ret == KErrNotFound);
+		CleanupStack::PopAndDestroy(&ss2);
+		}
+	CleanupStack::PopAndDestroy(&ss1);
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+// Test step 9
+const TDesC& CSocketServerTest9::GetTestName()
+	{
+	_LIT(cRet,"Test9");
+	return cRet;
+	}
+CSocketServerTest9::CSocketServerTest9()
+	{
+	}
+
+CSocketServerTest9::~CSocketServerTest9()
+	{
+	}
+
+enum TVerdict CSocketServerTest9::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	int ret;
+	
+	Logger().WriteFormat(_L("TE_SocketServer Test9"));
+	Logger().WriteFormat(_L("Test Purpose: Optimal SocketServer with separate player dies without the player having completed all messages"));
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting to connect to socket server"));
+    RSocketServ ss1;
+	ret =ss1.Connect();
+	CleanupClosePushL(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to open 'Dummy Protocol 1'"));
+	RSocket sock1;
+    ret = sock1.Open(ss1,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting optimal connect to socket server"));
+    RSocketServ ss2;
+	ret = OptimalConnect(ss2);
+	CleanupClosePushL(ss2);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to open 'Dummy Protocol 2'"));
+	RSocket sock2;
+    ret = sock2.Open(ss2,_L("Dummy Protocol 2"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to hang protocol module 2 on socket 2"));
+	TRequestStatus stat2;
+	NonCompletingIoclt(sock2,stat2);
+	
+	RProperty deathCountProp;
+	TRequestStatus deathCountStat;
+	
+	ret = deathCountProp.Attach(KUidSystemCategory, KUidC32RootModuleDeathKey.iUid);
+
+	deathCountProp.Subscribe(deathCountStat);
+	CleanupClosePushL(deathCountProp);
+	Logger().WriteFormat(_L("Attempting to panic dealer on socket 3"));
+	ret = PanicDealer(ss2);
+	if (ret == KErrNotSupported)
+		{
+		Logger().WriteFormat(_L("Test Only works for debug versions of epoc"));
+		deathCountProp.Cancel();
+		User::WaitForRequest(deathCountStat); //Ensure that all the cleanup has happenned	
+		verdict = EInconclusive;
+		}
+	else
+		{
+		Logger().WriteFormat(_L("Ioctl returned %S on socket 3"),&EpocErrorToText(ret));
+		TESTL(ret == KErrServerTerminated || ret == KErrAbort);
+		User::WaitForRequest(deathCountStat); //Ensure that all the cleanup has happenned	
+		User::WaitForRequest(stat2);
+		ret = stat2.Int();
+		Logger().WriteFormat(_L("Ioctl returned %S on socket 2"),&EpocErrorToText(ret));
+		TESTL(ret == KErrServerTerminated || ret == KErrAbort);
+			
+		Logger().WriteFormat(_L("Checking for  module 'ESock_Codealer2' and 'ESock_Dealer2'"));
+		CheckForModuleL(_L8("ESock_Codealer2"));
+		CheckForModuleL(_L8("ESock_Dealer2"));
+			
+		Logger().WriteFormat(_L("Attempting to open 'Dummy Protocol 1' on optimal socket server"));
+		RSocket sock2_2;
+	    ret = sock2_2.Open(ss2,_L("Dummy Protocol 1"));
+		Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+		TESTL(ret != KErrNone);
+			
+		Logger().WriteFormat(_L("Attempting to open 'Dummy Protocol 1' on main socket server"));
+		RSocket sock1_2;
+	    ret = sock1_2.Open(ss1,_L("Dummy Protocol 1"));
+		Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+		TESTL(ret == KErrNone);
+		}
+		
+	CleanupStack::PopAndDestroy(&deathCountProp);
+	CleanupStack::PopAndDestroy(&ss2);
+	CleanupStack::PopAndDestroy(&ss1);
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+// Test step 16
+const TDesC& CSocketServerTest16::GetTestName()
+	{
+	_LIT(cRet,"Test16");
+	return cRet;
+	}
+CSocketServerTest16::CSocketServerTest16()
+	{
+	}
+
+CSocketServerTest16::~CSocketServerTest16()
+	{
+	}
+
+enum TVerdict CSocketServerTest16::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+	
+	Logger().WriteFormat(_L("TE_SocketServer Test16"));
+	Logger().WriteFormat(_L("Test Purpose: A large number of IOCTLs cause the separate player channel to be full as player is temporarily unresponsive"));
+	
+	Logger().WriteFormat(_L("Attempting to connect session 1"));
+    RSocketServ ss1;
+	ret = ss1.Connect();
+	CleanupClosePushL(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Making Multiple opens"));
+	RSocket sock[KLargeNumSockets];
+	OpenMultipleSocketsL(ss1,sock,sizeof(sock)/sizeof(RSocket));
+	
+	int i;
+	Logger().WriteFormat(_L("Making Slow Ioctl calls"));
+	TRequestStatus stat[KLargeNumSockets];
+	for (i = 0;i < KLargeNumSockets; i++)
+		{
+		SlowIoctlReturn(sock[i],stat[i],FALSE);
+		Logger().WriteFormat(_L("Ioclt call %d returned %S"),i,&EpocErrorToText(ret));
+		TESTL(ret == KErrNone || ret == KErrServerBusy );
+		}
+	
+	//Now close	
+	for (i = 0;i < KLargeNumSockets; i++)
+		{
+		sock[i].Close();
+		User::WaitForRequest(stat[i]);
+		ret = stat[i].Int();
+		Logger().WriteFormat(_L("Ioclt TRequestStatus %d returned %S"),i,&EpocErrorToText(ret));
+		TESTL(ret == KErrNone || ret == KErrServerBusy );
+		}
+	
+    CleanupStack::PopAndDestroy(&ss1);
+    
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+
+// Test step Test
+const TDesC& CSocketServerTest17::GetTestName()
+	{
+	_LIT(cRet,"Test17");
+	return cRet;
+	}
+CSocketServerTest17::CSocketServerTest17()
+	{
+	}
+
+CSocketServerTest17::~CSocketServerTest17()
+	{
+	}
+
+enum TVerdict CSocketServerTest17::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	int ret;
+	
+	// connect to esock
+	Logger().WriteFormat(_L("Attempting to connect to socket server"));
+    RSocketServ ss1;
+	ret =ss1.Connect();
+	CleanupClosePushL(ss1);
+	Logger().WriteFormat(_L("Connect returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to open 'Dummy Protocol 1'"));
+	RSocket sock1;
+    ret = sock1.Open(ss1,_L("Dummy Protocol 1"));
+	Logger().WriteFormat(_L("Open returned %S"),&EpocErrorToText(ret));
+	TESTL(ret == KErrNone);
+	
+	Logger().WriteFormat(_L("Attempting to hang protocol module 2 on socket 2"));
+	TRequestStatus stat1;
+	NonCompletingIoclt(sock1,stat1);
+	
+	CleanupStack::PopAndDestroy(&ss1);
+
+
+//Ensure that the Ioclt returns;	
+	RTimer timer;
+	TRequestStatus stat2;
+	timer.CreateLocal();
+	
+	timer.After(stat2,2000000);
+	
+	User::WaitForRequest(stat1,stat2);
+	
+	if (stat1.Int() == KRequestPending)
+		{
+		verdict = EFail;
+		}
+	if (stat2.Int() == KRequestPending)
+		{
+		timer.Cancel();
+		User::WaitForRequest(stat2);
+		}
+	
+	timer.Close();
+	
+	//must perform this here because otherwise we get stray events - bad
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+const TDesC& CSocketServerTest18::GetTestName()
+	{
+	_LIT(cRet,"Test18");
+	return cRet;
+	}
+CSocketServerTest18::CSocketServerTest18()
+	{
+	}
+
+CSocketServerTest18::~CSocketServerTest18()
+	{
+	}
+
+enum TVerdict CSocketServerTest18::InternalDoTestStepL( void )
+	{
+	SetTestStepResult(EFail);
+	TInt ret;
+	ret = OpenSocketProtocolStarted();
+	if( ret == KErrNone )
+		{
+		SetTestStepResult(EPass);
+		}
+	return TestStepResult();
+	};
+
+// Test step Test
+const TDesC& CSocketServerTest20::GetTestName()
+	{
+	_LIT(cRet,"Test20");
+	return cRet;
+	}
+CSocketServerTest20::CSocketServerTest20()
+	{
+	}
+
+CSocketServerTest20::~CSocketServerTest20()
+	{
+	}
+
+enum TVerdict CSocketServerTest20::InternalDoTestStepL( void )
+// Checking DbG functions. Make sure total space is greater than Free Space
+	{
+	
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	
+	TInt totalSpace = ss.__DbgMbufTotalSpace();
+	Logger().WriteFormat(_L("Socket Server __DbgMbufTotalSpace returned %S"),&EpocErrorToText(totalSpace));
+	TInt freeSpace = ss.__DbgMbufFreeSpace();
+	Logger().WriteFormat(_L("Socket Server __DbgMbufFreeSpace returned %S"),&EpocErrorToText(freeSpace));
+#ifdef _DEBUG_SOCKET_FUNCTIONS	
+	Logger().WriteFormat(_L("_DEBUG_SOCKET_FUNCTIONS has been defined"));
+	if(freeSpace <= totalSpace)
+		{
+		verdict = EPass;
+		}
+#else
+	Logger().WriteFormat(_L("_DEBUG_SOCKET_FUNCTIONS has not been defined"));
+	if(totalSpace == KErrNone && freeSpace == KErrNone)
+		{
+		verdict = EPass;
+		}	
+#endif
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+// Test step Test
+const TDesC& CSocketServerTest21::GetTestName()
+	{
+	_LIT(cRet,"Test21");
+	return cRet;
+	}
+	
+CSocketServerTest21::CSocketServerTest21()
+	{
+	}
+
+CSocketServerTest21::~CSocketServerTest21()
+	{
+	}
+
+enum TVerdict CSocketServerTest21::InternalDoTestStepL( void )
+	//Verify that dbg functions without DEBUG_SOCKET_FUNCTIONS don't cause panic
+	{
+#ifndef _DEBUG_SOCKET_FUNCTIONS
+	Logger().WriteFormat(_L("_DEBUG_SOCKET_FUNCTIONS has not been defined"));
+	Logger().WriteFormat(_L("Verifying _Dbg functions do not crash OS"));
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	// fail next mbuf allocation
+	err = ss.__DbgFailNext(1);
+	Logger().WriteFormat(_L("Socket Server __DbgFailNext returned %S"),&EpocErrorToText(err));
+	// Set a heap mark in the socket server of count 0
+	TInt err2 = ss.__DbgCheckHeap(0);
+	Logger().WriteFormat(_L("Socket Server __DbgCheckHeap returned %S"),&EpocErrorToText(err2));
+	if(err == KErrNone && err2 == KErrNone)
+		{
+		verdict = EPass;
+		}
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+#else
+	return EPass;
+#endif
+	}
+
+
+// Test step Test
+const TDesC& CSocketServerTest22::GetTestName()
+	{
+	_LIT(cRet,"Test22");
+	return cRet;
+	}
+CSocketServerTest22::CSocketServerTest22()
+	{
+	}
+
+CSocketServerTest22::~CSocketServerTest22()
+	{
+	}
+
+enum TVerdict CSocketServerTest22::InternalDoTestStepL( void )
+/* Verify that dbg functions without DEBUG_SOCKET_FUNCTIONS don't cause panic
+ */
+	{
+#ifndef _DEBUG_SOCKET_FUNCTIONS
+	Logger().WriteFormat(_L("_DEBUG_SOCKET_FUNCTIONS has not been defined"));
+	Logger().WriteFormat(_L("Verifying _Dbg functions do not crash OS"));
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	// Set a heap mark in the socket server 
+	err = ss.__DbgMarkHeap();
+	Logger().WriteFormat(_L("Socket Server __DbgMarkHeap returned %S"),&EpocErrorToText(err));
+	// End the heap mark in the socket server 
+	TInt err2 = ss.__DbgMarkEnd(0);
+	Logger().WriteFormat(_L("Socket Server __DbgMarkEnd returned %S"),&EpocErrorToText(err2));
+	if(err == KErrNone && err2 == KErrNone)
+		{
+		verdict = EPass;
+		}
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+#else
+	return EPass;
+#endif
+	}
+
+
+// Test step Test
+const TDesC& CSocketServerTest23::GetTestName()
+	{
+	_LIT(cRet,"Test23");
+	return cRet;
+	}
+CSocketServerTest23::CSocketServerTest23()
+	{
+	}
+
+CSocketServerTest23::~CSocketServerTest23()
+	{
+	}
+
+enum TVerdict CSocketServerTest23::InternalDoTestStepL( void )
+/* Simple test to verify __HeapChecking Functionality
+ */ 
+	{
+#ifndef _DEBUG_SOCKET_FUNCTIONS
+	Logger().WriteFormat(_L("_DEBUG_SOCKET_FUNCTIONS has not been defined"));
+	Logger().WriteFormat(_L("Verifying _Dbg functions do not crash OS"));
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	// Get the total space and free space in socket server, both should return KErrNone
+	err = ss.__DbgMbufTotalSpace();
+	Logger().WriteFormat(_L("Socket Server __DbgMbufTotalSpace returned %S"),&EpocErrorToText(err));
+	TInt err2 = ss.__DbgMbufFreeSpace();
+	Logger().WriteFormat(_L("Socket Server __DbgMbufTotalSpace returned %S"),&EpocErrorToText(err2));
+	if(err == KErrNone && err2 == KErrNone)
+		{
+		verdict = EPass;
+		}
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+#else
+	return EPass;
+#endif	
+	}
+
+
+// Test step Test
+const TDesC& CSocketServerTest24::GetTestName()
+	{
+	_LIT(cRet,"Test24");
+	return cRet;
+	}
+CSocketServerTest24::CSocketServerTest24()
+	{
+	}
+
+CSocketServerTest24::~CSocketServerTest24()
+	{
+	}
+
+enum TVerdict CSocketServerTest24::InternalDoTestStepL( void )
+ // Verify that dbg functions without DEBUG_SOCKET_FUNCTIONS don't cause panic
+ 
+	{
+#ifndef _DEBUG_SOCKET_FUNCTIONS
+	Logger().WriteFormat(_L("_DEBUG_SOCKET_FUNCTIONS has not been defined"));
+	Logger().WriteFormat(_L("Verifying _Dbg functions do not crash OS"));
+	// Arbitarty pool limit
+	const TInt KPoolLimit = 10;
+	// const number 0
+	const TInt KZero = 0;
+	// next MBuf to fail 
+	const TInt KFailNextOne = 1;
+	TVerdict verdict = EPass;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	err = ss.__DbgSetMbufPoolLimit(KPoolLimit);
+	Logger().WriteFormat(_L("Socket Server __DbgSetMbufPoolLimit returned %S"),&EpocErrorToText(err));
+	// Fail next MBuf
+	TInt err2 = ss.__DbgFailNextMbuf(KFailNextOne);
+	Logger().WriteFormat(_L("Socket Server __DbgFailNextMbuf returned %S"),&EpocErrorToText(err2));
+	if(err == KErrNone && err2 == KErrNone)
+		{
+		verdict = EPass;
+		}
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+#else
+	return EPass;
+#endif	
+	}
+
+
+// Test step Test
+const TDesC& CSocketServerTest25::GetTestName()
+	{
+	_LIT(cRet,"Test25");
+	return cRet;
+	}
+CSocketServerTest25::CSocketServerTest25()
+	{
+	}
+
+CSocketServerTest25::~CSocketServerTest25()
+	{
+	}
+
+enum TVerdict CSocketServerTest25::InternalDoTestStepL( void )
+/* Simple test to verify __HeapChecking Functionality
+ */
+	{
+#ifdef _DEBUG_SOCKET_FUNCTIONS	
+	// arbitary pool limit
+	const TInt KPoolLimit = 10;
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	err = ss.__DbgSetMbufPoolLimit(KPoolLimit);
+	Logger().WriteFormat(_L("Socket Server __DbgSetMbufPoolLimit returned %S"),&EpocErrorToText(err));
+	if(err == KErrNone)
+		{
+		verdict = EPass;
+		}
+	SetTestStepResult(verdict);
+	ss.Close();
+	return verdict;
+#else
+	return EPass;
+#endif
+	}
+
+
+// Test step Test
+const TDesC& CSocketServerTest26::GetTestName()
+	{
+	_LIT(cRet,"Test26");
+	return cRet;
+	}
+	
+CSocketServerTest26::CSocketServerTest26()
+	{
+	}
+
+CSocketServerTest26::~CSocketServerTest26()
+	{
+	}
+
+enum TVerdict CSocketServerTest26::InternalDoTestStepL( void )
+/* Simple test to verify __DbgCheckMbuf
+ */
+	{
+	// arbitarty pool limit
+	const TInt KPoolLimit = 10;
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+#ifdef _DEBUG_SOCKET_FUNCTIONS
+	RSocket sock;
+	TInt ret = sock.Open(ss, _L("Dummy Protocol 3"));
+	Logger().WriteFormat(_L("Socket Open returned %S"),&EpocErrorToText(err));
+	if(ret != KErrNone )
+		{
+		return EFail;
+		}
+	// Set the Mbuf pool limit to 0
+	err = ss.__DbgCheckMbuf(KPoolLimit);
+	Logger().WriteFormat(_L("__DbgCheckMbuf returned %S"),&EpocErrorToText(err));
+	if(err == KErrNone)
+		{
+		verdict = EPass;
+		}
+	sock.Close();
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+#else
+	verdict = ss.__DbgCheckMbuf(KPoolLimit) == KErrNone ? EPass : EFail;
+	SetTestStepResult(verdict);
+	ss.Close();
+	return verdict;
+#endif
+	}
+
+
+
+// Test step Test
+const TDesC& CSocketServerTest27::GetTestName()
+	{
+	_LIT(cRet,"Test27");
+	return cRet;
+	}
+CSocketServerTest27::CSocketServerTest27()
+	{
+	}
+
+CSocketServerTest27::~CSocketServerTest27()
+	{
+	}
+
+enum TVerdict CSocketServerTest27::InternalDoTestStepL( void )
+/* Simple test to verify __DbgFailNextMbuf
+ */
+	{
+	// The next number of MBufs to fail
+	const TInt KMbufFailures = 1;
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	CleanupClosePushL(ss);
+#ifdef _DEBUG_SOCKET_FUNCTIONS	
+	// Open UDP socket
+	RSocket socket;
+	TInt ret = socket.Open(ss,KAfInet,KSockDatagram,KProtocolInetUdp);
+	Logger().WriteFormat(_L("Socket open returned %S"),&EpocErrorToText(ret));
+	if (ret != KErrNone)
+		{
+		return EFail;
+		}
+	CleanupClosePushL(socket);
+	TInetAddr local;
+	// arbitary port numbers
+	const TUint KLocalPort = 3442;
+	const TUint KDestPort = KLocalPort;
+	
+	// loop back addresses used for UDP send
+	_LIT(KLoopbackAddr, "127.0.0.1");
+	_LIT(KLocalAddr, "0.0.0.0");
+	local.SetPort(KLocalPort);
+	local.Input(KLocalAddr);
+	socket.Bind(local);
+    
+    TInetAddr dstAddr;
+    dstAddr.SetPort(KDestPort);
+    dstAddr.Input(KLoopbackAddr);
+    
+    // connect socket to loopback addr
+    TRequestStatus connectStatus;		
+	socket.Connect(dstAddr, connectStatus);
+	User::WaitForRequest(connectStatus);
+	Logger().WriteFormat(_L("Socket connect returned %d"),connectStatus.Int());
+	if(connectStatus.Int() != KErrNone)
+		{
+		return EFail;
+		}
+		
+	// send some socket data
+	_LIT8(data, "some arbitary send data");
+	err = ss.__DbgFailNextMbuf(KMbufFailures);
+	Logger().WriteFormat(_L("Socket Server __DbgFailNextMbuf returned %S"),&EpocErrorToText(err));
+	if(err == KErrNone)
+		{
+		return EFail;
+		}
+	
+	// wait for send to return, make sure __DbgFailNextMbuf did not effect outcome
+	TRequestStatus sendStatus;
+	socket.Send(data, 0, sendStatus);
+	User::WaitForRequest(sendStatus);
+	Logger().WriteFormat(_L("Socket send returned %S"),&EpocErrorToText(sendStatus.Int()));
+	if(sendStatus == KErrNone)
+		{
+		verdict = EPass;
+		}
+	
+	CleanupStack::PopAndDestroy(&socket);
+	CleanupStack::PopAndDestroy(&ss);
+	SetTestStepResult(verdict);
+	return verdict;		
+#else
+	verdict =  ss.__DbgFailNextMbuf(KMbufFailures) == KErrNone ? EPass : EFail;
+	CleanupStack::PopAndDestroy(&ss);
+	return verdict;
+#endif
+	}
+
+// Test step Test
+const TDesC& CSocketServerTest28::GetTestName()
+	{
+	_LIT(cRet,"Test28");
+	return cRet;
+	}
+CSocketServerTest28::CSocketServerTest28()
+	{
+	}
+
+CSocketServerTest28::~CSocketServerTest28()
+	{
+	}
+
+enum TVerdict CSocketServerTest28::InternalDoTestStepL( void )
+/* Simple test to check InstallExtension API
+ */
+	{
+	Logger().WriteFormat(_L("Attempting to install an ESOCK extension that Doesn't exist"));
+	TVerdict verdict = EFail;
+	TInt err;
+	RSocketServ ss;
+	err = ss.Connect();
+	Logger().WriteFormat(_L("Socket Server Connect returned %S"),&EpocErrorToText(err));
+	if (err != KErrNone)
+		{
+		return EFail;
+		}
+	
+	// bad extension args to pass to SS
+	_LIT(KBadExtensionName, "bad extension");
+	_LIT(KBadArguments, "bad Arguments");
+	TPtrC badPtr(KBadArguments);
+	err = ss.InstallExtension(KBadExtensionName, badPtr);
+	// Install Extension is an unsupported API
+	if(err == KErrNotSupported)
+		{
+		verdict = EPass;
+		}
+	ss.Close();
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+// Test step 29
+const TDesC& CSocketServerTest29::GetTestName()
+    {
+    _LIT(cRet,"Test29");
+    return cRet;
+    }
+
+class RSocketServerAttacker : public RSessionBase
+/**
+* General session class used to connect to socket server by name and send
+* malicious message to it.
+*/
+    {
+public:
+    TInt Connect()
+        {
+        return CreateSession(_L("!SocketServer"),TVersion(0,0,0));
+        }
+ 
+    void TryToGetPaniced()
+        {
+        _LIT8(KDefaultText, "Default");
+ 
+        TIpcArgs args;
+        args.Set(0,0); // Set invalid NULL descriptor pointer
+        args.Set(1,&KDefaultText);
+        args.Set(2,&KDefaultText);
+        args.Set(3,&KDefaultText);
+        SendReceive(ESSNumProtocols, args);
+        }
+    };
+
+TInt CSocketServerTest29::PanicTestThread(TAny*)
+    {
+    RSocketServerAttacker t;
+    TInt r = t.Connect();
+    if (r == KErrNone)
+        t.TryToGetPaniced();
+    return r;
+    }
+
+enum TVerdict CSocketServerTest29::InternalDoTestStepL( void )
+    {
+    Logger().Write(_L("Socket Server Test 29"));
+
+    TVerdict verdict = EFail;
+
+    RThread t;
+    t.Create(_L("Socket server attacker"),PanicTestThread,KDefaultStackSize,0x1000,0x1000,NULL);
+    TRequestStatus s;
+    t.Logon(s);
+    TBool justInTime = User::JustInTime();
+    User::SetJustInTime(EFalse);
+    t.Resume();
+    User::WaitForRequest(s);
+
+    Logger().WriteFormat(_L("Exit type of thread PanicTestThread is %d"), t.ExitType());
+    Logger().WriteFormat(t.ExitCategory());
+    Logger().WriteFormat(_L("Exit catagory of thread PanicTestThread is %d"), t.ExitReason());
+
+    if (t.ExitType() == EExitPanic &&
+        t.ExitCategory() == _L("Worker client") &&
+        t.ExitReason() == Den::ECommonBadDescriptorWrite)
+        verdict = EPass;
+
+    t.Close();
+    User::SetJustInTime(justInTime);
+
+    SetTestStepResult(verdict);
+    return verdict;
+    }
+