datacommsserver/esockserver/test/TE_EsockTestSteps/src/Connections.TestSteps.cpp
changeset 0 dfb7c4ff071f
child 13 0b0e9fce0b58
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_EsockTestSteps/src/Connections.TestSteps.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,1196 @@
+// 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:
+//
+
+/**
+ @file Connections.TestSteps.cpp
+*/
+
+#include "SubConnections.TestSteps.h"
+#include "Connections.TestSteps.h"
+#include "SocketServer.TestSteps.h"
+#include "Sockets.TestSteps.h"
+#include <cdbcols.h>
+
+
+#ifdef _DEBUG
+// Panic category for "absolutely impossible!" vanilla ASSERT()-type panics from this module
+// (if it could happen through user error then you should give it an explicit, documented, category + code)
+_LIT(KSpecAssert_ESockTestCnctnsT, "ESockTestCnctnsT");
+#endif
+
+
+// Create Connection
+//------------------
+
+CCreateRConnectionStep::CCreateRConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCreateRConnectionStep);
+	}
+
+TVerdict CCreateRConnectionStep::doTestStepPreambleL()
+	{
+	SetTestStepResult(EFail);
+
+	if (iEsockTest==NULL)
+	    iEsockTest = new (ELeave) CCEsockTestBase;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TInt CCreateRConnectionStep::ConfigureFromIni()
+	{
+	iParams.Reset();
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_ConnectionName, iParams.iConnectionName) != 1)
+		|| (iParams.iConnectionName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CCreateRConnectionStep::doSingleTestStep()
+	{
+    TInt error = iEsockTest->CreateConnection(iParams.iConnectionName);
+    if (error!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Could not create connection (%S)."),&iParams.iConnectionName);
+        INFO_PRINTF2(_L("Error: %d."),error);
+		SetTestStepResult(EFail);
+        }
+	return TestStepResult();
+	}
+
+
+// Open Connection
+//----------------
+
+COpenRConnectionStep::COpenRConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KOpenRConnectionStep);
+	}
+
+TInt COpenRConnectionStep::ConfigureFromIni()
+	{
+	iParams.Reset();
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_ConnectionName, iParams.iConnectionName) != 1)
+		|| (iParams.iConnectionName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    if (GetStringFromConfig(iSection, KTe_SocketServName, iParams.iSockServName) != 1)
+        {
+        INFO_PRINTF2(_L("%S: Socket server name missing."), &iParams.iConnectionName);
+        return EFalse;
+        }
+
+    // Optional
+    // Reads the protocol family to use
+    if (GetIntFromConfig(iSection, KTe_ConnectionType, iParams.iConnectionType) != 1)
+        {
+          iParams.iConnectionType = -1;
+        }
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict COpenRConnectionStep::doSingleTestStep()
+	{
+    TInt error = iEsockTest->OpenConnection(iParams);
+    if (error!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Could not open connection (%S)."),&iParams.iConnectionName);
+        INFO_PRINTF2(_L("Error: %d."),error);
+        return EFail;
+        }
+	return EPass;
+	}
+
+
+// Start Connection
+//-----------------
+
+CStartRConnectionStep::CStartRConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KStartRConnectionStep);
+	}
+
+TInt CStartRConnectionStep::ConfigureFromIni()
+	{
+	iParams.Reset();
+	TPtrC temp;
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_ConnectionName, iParams.iConnectionName) != 1)
+		|| (iParams.iConnectionName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+	TPtrC16 bearerSet;
+	TBool bearerPresent = ((GetStringFromConfig(iSection,KTe_BearerName,bearerSet)==1)
+		&& (bearerSet.Length()>0));
+
+	TBool IAPpresent = (GetIntFromConfig(iSection,KTe_IAPIndexName,iParams.iIAP)==1);
+	TBool SNAPpresent = (GetIntFromConfig(iSection,KTe_SNAPIndexName,iParams.iSNAP)==1);
+	TBool ConnPrefPresent = (GetIntFromConfig(iSection,KTe_ConnPrefListIndexName,iParams.iSNAP)==1);
+	TBool DummyPresent = (GetIntFromConfig(iSection,KTe_DummyPrefIndexName,iParams.iDummy)==1);
+	TBool AsynchPresent = (GetStringFromConfig(iSection,KTe_AsynchIndexName,temp)==1);
+
+	iParams.iStartWithOldPreferences = IAPpresent;
+	iParams.iStartWithSnapPreferences = SNAPpresent;
+	iParams.iStartWithConPrefList = ConnPrefPresent;
+	iParams.iStartWithDummy = DummyPresent;
+	iParams.iAsynch = AsynchPresent;
+	
+	GetBoolFromConfig(iSection, KTe_AutoStartPrefName, iParams.iStartAuto);
+
+	if (iParams.iStartWithOldPreferences && iParams.iStartWithSnapPreferences)
+		{
+		INFO_PRINTF2(_L("Connection preferences for (%S) have both snap and IAP."),&iParams.iConnectionName);
+		return KErrNotFound;
+		}
+
+	//with preferences?
+	if (iParams.iStartWithOldPreferences)
+		{
+		if(!bearerPresent)
+			{
+			iParams.iBearer = KCommDbBearerUnknown;
+			}
+		else
+			{
+			if (bearerSet.Compare(KTe_CommDbBearerCSD)==0)
+				{ iParams.iBearer = KCommDbBearerCSD; }
+			else if (bearerSet.Compare(KTe_CommDbBearerWcdma)==0)
+				{ iParams.iBearer = KCommDbBearerWcdma; }
+			else if (bearerSet.Compare(KTe_CommDbBearerLAN)==0)
+				{ iParams.iBearer = KCommDbBearerLAN; }
+			else
+				{
+				INFO_PRINTF3(_L("%S: Bearer type (%S) not recognised."),&iParams.iConnectionName,&bearerSet);
+				return KErrNotFound;
+				}
+			}
+		}
+
+	// What error are we expecting?
+	if (!GetIntFromConfig(iSection, KExpectedError,iExpectedError))
+		{
+		iExpectedError = KExpectedErrorNotUsed;
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Error to be expected: %d"),iExpectedError);
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CStartRConnectionStep::doSingleTestStep()
+	{
+	// Default to failing
+	SetTestStepResult(EFail);
+
+	TInt ret = iEsockTest->StartConnection(iParams);
+
+	// Log any error found
+	if(iExpectedError == KExpectedErrorNotUsed)
+		{
+		SetTestStepError(ret);
+
+		if(ret == KErrNone)
+			{
+			SetTestStepResult(EPass);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Could not start connection (%S)."), &iParams.iConnectionName);
+			INFO_PRINTF2(_L("Error: %d"), ret);
+			}
+		}
+	else
+		{
+		// We are expecting a special kind of error
+		INFO_PRINTF3(_L("Expected error used. expected:%d, observed:%d"), iExpectedError, ret);
+		SetTestStepResult((ret == iExpectedError) ? EPass : EFail);
+		SetTestStepError((ret == iExpectedError) ? KErrNone : ret);
+		}
+
+	return TestStepResult();
+	}
+
+
+// Stop Connection
+//----------------
+
+CStopRConnectionStep::CStopRConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KStopRConnectionStep);
+	}
+
+TInt CStopRConnectionStep::ConfigureFromIni()
+	{
+	iParams.Reset();
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_ConnectionName, iParams.iConnectionName) != 1)
+		|| (iParams.iConnectionName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    TPtrC shutdownType;
+    if (GetStringFromConfig(iSection,KTe_ConnectionStopTypeName,shutdownType)!=1)
+        {
+        INFO_PRINTF2(_L("%S: Stop type missing."),&iParams.iConnectionName);
+        return KErrNotFound;
+        }
+
+    if (shutdownType.Compare(KTe_ConnStopNormal)==0)
+	    { iParams.iConnStopType = RConnection::EStopNormal; }
+    else if (shutdownType.Compare(KTe_ConnStopAuthoritative)==0)
+	    { iParams.iConnStopType = RConnection::EStopAuthoritative; }
+    else
+        {
+        INFO_PRINTF3(_L("%S: Stop type (%S) not recognised."),&iParams.iConnectionName,&shutdownType);
+        return KErrNotFound;
+        }
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CStopRConnectionStep::doSingleTestStep()
+	{
+        TInt error = iEsockTest->StopConnection(iParams);
+        if (error!=KErrNone)
+            {
+            INFO_PRINTF2(_L("Could not stop connection (%S)."),&iParams.iConnectionName);
+            INFO_PRINTF2(_L("Error: %d."),error);
+            return EFail;
+            }
+	return EPass;
+	}
+
+
+// Close Connection
+//-----------------
+
+CCloseRConnectionStep::CCloseRConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCloseRConnectionStep);
+	}
+
+TInt CCloseRConnectionStep::ConfigureFromIni()
+	{
+	if((GetStringFromConfig(iSection, KTe_ConnectionName, iParams.iConnectionName) != 1)
+		|| (iParams.iConnectionName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CCloseRConnectionStep::doSingleTestStep()
+	{
+    TInt error = iEsockTest->CloseConnection(iParams.iConnectionName);
+    if (error!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Could not close connection (%S)."),&iParams.iConnectionName);
+        INFO_PRINTF2(_L("Error: %d."),error);
+		return EFail;
+		}
+	return EPass;
+	}
+
+
+
+// Wait for Incoming Connection
+//-----------------------------
+
+CWaitForIncomingConnectionStep::CWaitForIncomingConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KWaitForIncomingConnectionStep);
+	}
+
+TInt CWaitForIncomingConnectionStep::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iParams.Reset();
+
+    //try reading the next socket's name
+    if (GetStringFromConfig(iSection,KTe_SubConnectionName,iParams.iSubConnectionName)!=1
+        || iParams.iSubConnectionName.Length()==0)
+            return KErrNotFound;
+
+    if (GetStringFromConfig(iSection,KTe_ConnectionName,iParams.iConnectionName)!=1)
+        {
+        INFO_PRINTF2(_L("%S: Connection name missing."),&iParams.iConnectionName);
+        return KErrNotFound;
+        }
+
+    //optional
+    GetStringFromConfig(iSection,KTe_ConnectionStatus,subConnStatus);
+    GetStringFromConfig(iSection,KTe_IncomingConnTimerSet,timerSet);
+
+	return KErrNone;
+    }
+
+TVerdict CWaitForIncomingConnectionStep::doSingleTestStep()
+	{
+    /*
+    These scenarios are tested here
+    1.Timer expires since there is no incoming connection.
+    2.Cancel the waitforincoming connection.
+    */
+    const int timerVal = 3000;
+    TInt error;
+    TInt errCancel;
+    TRequestStatus reqStat;
+
+    //Set the timer if subConnStatus is TimerOn
+    if (timerSet.Compare(KTe_IncomingConnTimerStatus) == 0)
+        {
+        iTimer.CreateLocal();
+        iTimer.After(reqStat,timerVal);
+	    }
+
+    TRequestStatus reqStat1;
+    TInt error1 = iEsockTest->WaitforIncomingConnection(iParams,reqStat1);
+
+    if (error1!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Error in wait for incoming connection: %d."),error1);
+        return EFail;
+        }
+	//check whether the cancel status is set or not.
+	if ((subConnStatus.Compare(KTe_ConnCancelStatus)==0) && (reqStat1 != KErrNone))
+    	{
+        errCancel = iEsockTest->CancelIncomingConnection(iParams);
+        if (errCancel != KErrNone)
+            {
+        	INFO_PRINTF2(_L("Error in cancelling the incoming connection: %d."),errCancel);
+            }
+    	}
+
+	User::WaitForRequest(reqStat,reqStat1);
+
+	error  = reqStat.Int();
+	error1 = reqStat1.Int();
+
+	//check whether the timer is expired.
+   	if ((timerSet.Compare(KTe_IncomingConnTimerStatus)==0) && (error == KErrNone))
+    	{
+    	INFO_PRINTF1(_L("Timer was called since there was no incoming connection"));
+    	iTimer.Close();
+    	return EPass;
+   		}
+   	//check whether the KErrArgument is returned since the RSubConnection is already opened.
+   	else if ((subConnStatus.Compare(KTe_ConnOpenStatus)==0) && (error1 == KErrArgument))
+    	{
+    	INFO_PRINTF1(_L("Returned KErrArgument since RsubCon was opened prior to Waitforincoming connection "));
+    	return EPass;
+   		}
+   	//check whether KErrCancel is returned for cancelling incoming connection.
+   	else if ((subConnStatus.Compare(KTe_ConnCancelStatus)==0) && (error1 == KErrCancel))
+    	{
+    	INFO_PRINTF1(_L("Successfully cancelled the incoming connection"));
+    	return EPass;
+   		}
+
+	if (error1!=KErrNone)
+		{
+		INFO_PRINTF2(_L("Error in wait for incoming connection: %d."),error1);
+    	return EFail;
+		}
+
+    return EPass;
+	}
+
+
+// Reject Incoming Connection
+//---------------------------
+
+CRejectIncomingConnectionStep::CRejectIncomingConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KRejectIncomingConnectionStep);
+	}
+
+TInt CRejectIncomingConnectionStep::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iParams.Reset();
+
+    //try reading from ini file
+    if (GetStringFromConfig(iSection, KTe_SubConnectionName, iParams.iSubConnectionName)!=1)
+        {
+        return KErrNotFound;
+        }
+
+	return KErrNone;
+    }
+
+TVerdict CRejectIncomingConnectionStep::doSingleTestStep()
+	{
+
+    TInt error = iEsockTest->RejectIncomingConnection(iParams);
+   	if (error!=KErrNone)
+	    {
+		INFO_PRINTF2(_L("Error in rejecting the  incoming connection: %d."),error);
+	    return EFail;
+		}
+	return EPass;
+	}
+
+
+// Accept Incoming Connection
+//---------------------------
+
+CAcceptIncomingConnectionStep::CAcceptIncomingConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KAcceptIncomingConnectionStep);
+	}
+
+TInt CAcceptIncomingConnectionStep::ConfigureFromIni()
+	{
+	iParams.Reset();
+
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_SubConnectionName, iParams.iSubConnectionName) != 1)
+		|| (iParams.iSubConnectionName.Length() == 0))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CAcceptIncomingConnectionStep::doSingleTestStep()
+	{
+
+    TInt error = iEsockTest->AcceptIncomingConnection(iParams);
+   	if (error!=KErrNone)
+		{
+		INFO_PRINTF2(_L("Error in accepting the  incoming connection: %d."),error);
+	    return EFail;
+		}
+	return EPass;
+	}
+
+
+// Async Incoming Connection
+//--------------------------
+
+CAsyncAcceptIncomingConnectionStep::CAsyncAcceptIncomingConnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KAsyncAcceptIncomingConnectionStep);
+	}
+
+TInt CAsyncAcceptIncomingConnectionStep::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iParams.Reset();
+
+    //try reading the next socket's name
+    if (GetStringFromConfig(iSection,KTe_SubConnectionName,iParams.iSubConnectionName)!=1
+        || iParams.iSubConnectionName.Length()==0)
+            return KErrNotFound;
+
+    if (GetStringFromConfig(iSection,KTe_ConnectionName,iParams.iConnectionName)!=1)
+        {
+        INFO_PRINTF2(_L("%S: Connection name missing."),&iParams.iConnectionName);
+        return KErrNotFound;
+        }
+
+    //optional
+    GetStringFromConfig(iSection,KTe_ConnectionStatus,subConnStatus);
+    GetStringFromConfig(iSection,KTe_IncomingConnTimerSet,timerSet);
+
+	return KErrNone;
+    }
+
+TVerdict CAsyncAcceptIncomingConnectionStep::doSingleTestStep()
+	{
+    /*
+    These scenarios are tested here
+    1.Timer expires since there is no incoming connection.
+    2.Cancel the waitforincoming connection.
+    */
+    const int timerVal = 30000;
+    TInt error;
+    TRequestStatus reqStat;
+
+    //Set the timer if subConnStatus is TimerOn
+    if (timerSet.Compare(KTe_IncomingConnTimerStatus) == 0)
+        {
+        TInt err = iTimer.CreateLocal();
+        __ASSERT_DEBUG(err == KErrNone, User::Panic(KSpecAssert_ESockTestCnctnsT, 1));
+        iTimer.After(reqStat,timerVal);
+	    }
+
+    TRequestStatus reqStat1;
+    TInt error1 = iEsockTest->AsyncAcceptIncomingConnection(iParams,reqStat1);
+
+    if (error1!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Error in wait for incoming connection: %d."),error1);
+        return EFail;
+        }
+
+	User::WaitForRequest(reqStat,reqStat1);
+
+	error  = reqStat.Int();
+	error1 = reqStat1.Int();
+
+	//check whether the timer is expired.
+   	if ((timerSet.Compare(KTe_IncomingConnTimerStatus)==0) && (error == KErrNone))
+    	{
+    	INFO_PRINTF1(_L("Timer was called since there was no incoming SubConnection"));
+    	iTimer.Close();
+    	return EPass;
+   		}
+   	//check whether the KErrArgument is returned since the RSubConnection is already opened.
+   	else if ((subConnStatus.Compare(KTe_ConnOpenStatus)==0) && (error1 == KErrArgument))
+    	{
+    	INFO_PRINTF1(_L("Returned KErrArgument since RsubCon was opened prior to Waitforincoming connection "));
+    	iTimer.Close();
+    	return EPass;
+   		}
+
+	else if (error1!=KErrNone)
+		{
+		INFO_PRINTF2(_L("Error accepting subconnection: %d."),error1);
+		iTimer.Close();
+    	return EFail;
+		}
+
+    return EPass;
+	}
+
+
+// Await connection start complete
+//---------------------
+
+CAwaitRConnectionStartComplete::CAwaitRConnectionStartComplete(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KAwaitRConnectionStartComplete);
+	}
+
+TInt CAwaitRConnectionStartComplete::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iParams.Reset();
+
+    //try reading the connection's name
+    if (!GetStringFromConfig(iSection,KTe_ConnectionName,iParams.iConnectionName)
+        || iParams.iConnectionName.Length()==0)
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    if (!GetIntFromConfig(iSection,KExpectedError,iExpectedError))
+       {
+       iExpectedError = KErrNone;
+       }
+    else
+       {
+       INFO_PRINTF2(_L("Error to be expected: %d"),iExpectedError);
+       }
+    return KErrNone;
+    }
+
+TVerdict CAwaitRConnectionStartComplete::doSingleTestStep()
+	{
+    INFO_PRINTF2(_L("Awaiting Connection (%S) to start."),&iParams.iConnectionName);
+    TInt error = iEsockTest->AwaitRequestStatus(iParams.iConnectionName); 
+	if ( error == iExpectedError)
+		{
+        INFO_PRINTF3(_L("Connection (%S) start completed as expected (%d)"),&iParams.iConnectionName, error);		
+		return EPass;
+		}
+    INFO_PRINTF4(_L("Connection (%S) start completed with (%d), which is different to expected (%d)"),&iParams.iConnectionName, error, iExpectedError);	
+	return EFail;
+    }
+
+// Attach to connection
+//---------------------
+
+CattachtorconnectionStep::CattachtorconnectionStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KattachtorconnectionStep);
+	}
+
+TInt CattachtorconnectionStep::ConfigureFromIni()
+    {
+	//clean parameters from previous runs
+	iParams.Reset();
+
+    //try reading the connection's name
+    if (!GetStringFromConfig(iSection,KTe_ConnectionName,iParams.iConnectionName)
+        || iParams.iConnectionName.Length()==0)
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate field in config file"));
+		return KErrNotFound;
+		}
+
+    // Get the attach-type
+    TPtrC attachType;
+    if (!GetStringFromConfig(iSection,KTe_ConnectionAttachTypeName,attachType))
+        {
+        INFO_PRINTF2(_L("%S: Attach type missing."),&iParams.iConnectionName);
+        return KErrNotFound;
+        }
+    else if(attachType.Compare(KTe_ConnAttachTypeNormal) == KErrNone)
+    	{
+    	iParams.iConnAttachType = RConnection::EAttachTypeNormal;
+    	}
+    else if(attachType.Compare(KTe_ConnAttachTypeMonitor) == KErrNone)
+    	{
+    	iParams.iConnAttachType = RConnection::EAttachTypeMonitor;
+    	}
+    else
+  		{
+    	INFO_PRINTF3(_L("%S: Attach Type (%S) not recognised."),&iParams.iConnectionName,&attachType);
+        return KErrNotFound;
+    	}
+
+	if((GetStringFromConfig(iSection, KTe_AttachToConnectionName, iParams.iAttachToConnectionName) != 1)
+		|| (iParams.iAttachToConnectionName.Length() == 0))
+		{
+		INFO_PRINTF2(_L("%S: Both IAP Id and NET Id are missing or zero. Attempting to attach to the first interface to be enumerated."), &iParams.iConnectionName);
+
+	    // Get IAP and NET Ids
+	    GetIntFromConfig(iSection,KTe_IAPIndexName,iParams.iIAP);
+	    GetIntFromConfig(iSection,KTe_NetworkIndexName,iParams.iNET);
+
+	    if(iParams.iIAP == 0 && iParams.iNET)
+	    	{
+	    	INFO_PRINTF2(_L("%S: Both IAP Id and NET Id are missing or zero. Attempting to attach to the first interface to be enumerated."), &iParams.iConnectionName);
+	    	}
+		}
+
+    if (!GetIntFromConfig(iSection,KExpectedError,iExpectedError))
+       {
+       	iExpectedError = KErrNone;
+       }
+    else
+       {
+       	INFO_PRINTF2(_L("Error to be expected: %d"),iExpectedError);
+       }
+    return KErrNone;
+    }
+
+TVerdict CattachtorconnectionStep::doSingleTestStep()
+	{
+	TInt error = iEsockTest->AttachToConnection(iParams);
+	if (error!=KErrNone)
+        {
+        INFO_PRINTF2(_L("Could not attach to connection (%S)."),&iParams.iConnectionName);
+        INFO_PRINTF2(_L("Error: %d."),error);
+        return EFail;
+        }
+	return EPass;
+    }
+
+
+// Enumerate connections
+//----------------------
+
+CEnumerateConnectionsStep::CEnumerateConnectionsStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KEnumerateConnectionsStep);
+	}
+
+TInt CEnumerateConnectionsStep::ConfigureFromIni()
+	{
+	// Read in appropriate fields
+	if((GetStringFromConfig(iSection, KTe_ConnectionName, iParams.iConnectionName) != 1)
+		|| (iParams.iConnectionName.Length() == 0))
+		{
+		INFO_PRINTF3(KErrString_MissingConfigFileField, &iSection, &KTe_ConnectionName);
+		return KErrNotFound;
+		}
+
+	// Get the expected connection count to validate against
+	TInt connCount;
+	if(GetIntFromConfig(iSection, KExpectedConnectionCount, connCount) != 1)
+		{
+		INFO_PRINTF3(KErrString_MissingConfigFileField, &iSection, &KExpectedConnectionCount);
+		return KErrNotFound;
+		}
+	else if(connCount < 0)
+		{
+		INFO_PRINTF3(KErrString_UnsignedConfigValueLessThanZero, &iSection, &KExpectedConnectionCount);
+		return KErrArgument;
+		}
+	else
+		{
+		iParams.iExpectedConnCount = connCount;
+		}
+
+    // All ok if we got this far
+    return KErrNone;
+	}
+
+TVerdict CEnumerateConnectionsStep::doSingleTestStep()
+	{
+	TUint connectionCount;
+
+	// Find the connection to apply the enumerate call to
+	RConnection* connection = iEsockTest->FindConnection(iParams.iConnectionName);
+
+	// Enumerate the current connection count
+	if(connection)
+		{
+		// Fetch the connection count
+		TInt err = connection->EnumerateConnections(connectionCount);
+
+		if (err != KErrNone)
+			{
+			INFO_PRINTF2(_L("Error when enumerating connections (%d)."), &err);
+			return EFail;
+			}
+
+		// Compare the connection count with that expected
+		if (connectionCount == iParams.iExpectedConnCount)
+			{
+			INFO_PRINTF3(_L("Current connection count (%d) equal to that expected (%d)."), connectionCount, iParams.iExpectedConnCount);
+			}
+		else
+			{
+			INFO_PRINTF3(_L("Current connection count (%d) not equal to expected count. (%d)"), connectionCount, iParams.iExpectedConnCount);
+			return EFail;
+			}
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Could not find connection (%S)."), &iParams.iConnectionName);
+		return EFail;
+		}
+
+	// Test passed if we got this far
+	return EPass;
+	}
+
+
+
+CCreatePublishSubscribeVar::CCreatePublishSubscribeVar(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCreatePublishSubscribeVar);
+	}
+
+
+TInt CCreatePublishSubscribeVar::ConfigureFromIni()
+	{
+	    //try reading the UID that im going to ignor name
+	if (!GetIntFromConfig(iSection,KTe_CreatePublishSubscribeVarUid,iUid))
+			{
+			INFO_PRINTF1(_L("Couldn't find appropriate UID field in config file"));
+			return KErrNotFound;
+			}
+
+	if (!GetIntFromConfig(iSection,KTe_CreatePublishSubscribeVarValue,iValue))
+			{
+			INFO_PRINTF1(_L("Couldn't find appropriate UID field in config file"));
+			return KErrNotFound;
+			}
+
+    return KErrNone;
+	}
+
+TVerdict CCreatePublishSubscribeVar::doTestStepPreambleL()
+	{
+	return EPass;
+	}
+
+TVerdict CCreatePublishSubscribeVar::doSingleTestStep()
+	{
+	RProperty property;
+	TInt result = property.Define(TUid::Uid(iUid),0,RProperty::EInt);
+	result = property.Attach(TUid::Uid(iUid), 0);
+	if(result == KErrNone)
+		{
+		result = property.Set(iValue);
+		if(result == KErrNone)
+			return EPass;
+		}
+	return EFail;
+	}
+
+//Check a publish subscribe var
+/**
+Class implementing CreateRConnectionStep
+
+@internalComponent
+*/
+CCheckPublishSubscribeVar::CCheckPublishSubscribeVar(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCheckPublishSubscribeVar);
+	}
+
+TInt CCheckPublishSubscribeVar::ConfigureFromIni()
+	{
+    //try reading the UID that im not going to use name
+	if (!GetIntFromConfig(iSection,KTe_CheckPublishSubscribeVarUid,iUid))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate UID field in config file"));
+		return KErrNotFound;
+		}
+
+	if (!GetIntFromConfig(iSection,KTe_CheckPublishSubscribeVarValue,iValue))
+		{
+		INFO_PRINTF1(_L("Couldn't find appropriate UID field in config file"));
+		return KErrNotFound;
+		}
+
+	return KErrNone;
+	}
+
+TVerdict CCheckPublishSubscribeVar::doTestStepPreambleL()
+	{
+	return EPass;
+	}
+
+TVerdict CCheckPublishSubscribeVar::doSingleTestStep()
+	{
+	RProperty property;
+	TInt result = property.Attach(TUid::Uid(iUid), 0);
+	if(result == KErrNone)
+		{
+		TInt existingValue;
+		result = property.Get(TUid::Uid(iUid), 0, existingValue);
+		if(result == KErrNone && iValue == existingValue)
+			return EPass;
+		}
+	return EFail;
+	}
+
+// Progress notifications
+//-----------------------
+
+CRegisterProgressNotificationStep::CRegisterProgressNotificationStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KRegisterProgressNotificationStep);
+	}
+
+TInt CRegisterProgressNotificationStep::ConfigureFromIni()
+	{
+	//clean parameters from previous runs
+	iParams.Reset();
+
+	//try reading the next event container's name
+	if (GetStringFromConfig(iSection,KTe_ConnEventsName,iParams.iEventName)!=1
+	    || iParams.iEventName.Length()==0)
+		return KErrNotFound;
+
+	if (GetStringFromConfig(iSection,KTe_ConnectionName,iParams.iConnectionName)!=1)
+		{
+		INFO_PRINTF2(_L("%S: Connection name missing."),&iParams.iEventName);
+		return KErrNotFound;
+		}
+
+	TPtrC eventName;
+
+	if (GetStringFromConfig(iSection,KTe_SelectedProgress,eventName)==1)
+		{
+		if (eventName.Compare(KTe_LinkLayerOpen)==0)
+			{ iParams.iEventMask = KLinkLayerOpen; }
+		else if (eventName.Compare(KTe_LinkLayerClosed)==0)
+			{ iParams.iEventMask = KLinkLayerClosed; }
+		else
+			{
+			INFO_PRINTF3(_L("%S: Event type (%S) not recognised."),&iParams.iEventName,&eventName);
+			return KErrNotFound;
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Event type missing."));
+		return KErrNotFound;
+		}
+
+	INFO_PRINTF3(_L("%S: Events to be registered: 0x%x"),&iParams.iEventName,iParams.iEventMask);
+	return KErrNone;
+
+	}
+
+TVerdict CRegisterProgressNotificationStep::doSingleTestStep()
+	{
+	TInt error = iEsockTest->RegisterForProgressNotificationEvent(iParams);
+	if (error!=KErrNone)
+		{
+		INFO_PRINTF2(_L("Could not register for rsubconnection events (%S)."),&iParams.iEventName);
+		INFO_PRINTF2(_L("Error: %d"),error);
+		return EFail;
+		}
+
+	return EPass;
+	}
+
+// Check for Progress notification
+//-------------------------------
+
+CCheckProgressNotificationStep::CCheckProgressNotificationStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCheckProgressNotificationStep);
+	}
+
+TInt CCheckProgressNotificationStep::ConfigureFromIni()
+	{
+	//clean parameters from previous runs
+	iParams.Reset();
+
+	//try reading the next event container's name
+	if (GetStringFromConfig(iSection,KTe_ConnEventsName,iParams.iEventName)!=1
+	    || iParams.iEventName.Length()==0)
+		return KErrNotFound;
+
+	TPtrC eventName;
+
+	if (GetStringFromConfig(iSection,KTe_SelectedProgress,eventName)==1)
+		{
+		if (eventName.Compare(KTe_LinkLayerOpen)==0)
+			{ iParams.iEventMask = KLinkLayerOpen; }
+		else if (eventName.Compare(KTe_LinkLayerClosed)==0)
+			{ iParams.iEventMask = KLinkLayerClosed; }
+		else
+			{
+			INFO_PRINTF3(_L("%S: Event type (%S) not recognised."),&iParams.iEventName,&eventName);
+			return KErrNotFound;
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Event type missing."));
+		return KErrNotFound;
+		}
+
+	if (!GetIntFromConfig(iSection, KExpectedError, iExpectedError))
+		{
+		iExpectedError = KExpectedErrorNotUsed;
+		}
+
+	if (iExpectedError != KExpectedErrorNotUsed)
+		{
+			INFO_PRINTF2(_L("Error to be expected: %d"),iExpectedError);
+		}
+
+	// All ok if we got this far
+	return KErrNone;
+	}
+
+
+TVerdict CCheckProgressNotificationStep::doSingleTestStep()
+	{
+	TNifProgress* event = NULL;
+	TInt err = iEsockTest->ReceiveProgressNotificationEvent(event, iParams.iEventName);
+
+	if (event == NULL || err != KErrNone)
+		{
+		INFO_PRINTF2(_L("%S: Did not receive any event!"),&iParams.iEventName);
+		INFO_PRINTF2(_L("The error code returned was %d."),err);
+		return EFail;
+		}
+
+	TInt eventId = event->iStage;
+
+	if (eventId == KLinkLayerOpen )
+		{
+		INFO_PRINTF1(_L("Received event: KLinkLayerOpen"));
+		}
+	else if (eventId == KLinkLayerClosed )
+		{
+		INFO_PRINTF1(_L("Received event: KLinkLayerClosed"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Received event: Unknown (%d)"),eventId);
+		}
+
+	if (eventId != iParams.iEventMask)
+		{
+		INFO_PRINTF2(_L("Did not receive an expected event with %S."),&iParams.iEventName);
+		return EFail;
+		}
+
+
+	if(iExpectedError != event->iError && iExpectedError < KExpectedErrorNotUsed)
+		{
+		INFO_PRINTF3(_L("Expected Error %d does not match returned Error %d"), iExpectedError, event->iError);
+		return EFail;
+		}
+
+	else if (iExpectedError != KExpectedErrorNotUsed)
+		{
+		INFO_PRINTF3(_L("Expected Error %d matched returned Error %d"), iExpectedError, event->iError);
+		}
+
+	return EPass;
+	}
+
+// Check for Progress notification (negative test)
+//-------------------------------
+
+CCheckNegativeProgressNotificationStep::CCheckNegativeProgressNotificationStep(CCEsockTestBase*& aEsockTest)
+:   CTe_EsockStepBase(aEsockTest)
+	{
+	SetTestStepName(KCheckNegativeProgressNotificationStep);
+	}
+
+TInt CCheckNegativeProgressNotificationStep::ConfigureFromIni()
+	{
+	//clean parameters from previous runs
+	iParams.Reset();
+
+	//try reading the next event container's name
+	if (GetStringFromConfig(iSection,KTe_ConnEventsName,iParams.iEventName)!=1
+	    || iParams.iEventName.Length()==0)
+		return KErrNotFound;
+
+	TPtrC eventName;
+
+	if (GetStringFromConfig(iSection,KTe_SelectedProgress,eventName)==1)
+		{
+		if (eventName.Compare(KTe_LinkLayerOpen)==0)
+			{ iParams.iEventMask = KLinkLayerOpen; }
+		else if (eventName.Compare(KTe_LinkLayerClosed)==0)
+			{ iParams.iEventMask = KLinkLayerClosed; }
+		else
+			{
+			INFO_PRINTF3(_L("%S: Event type (%S) not recognised."),&iParams.iEventName,&eventName);
+			return KErrNotFound;
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Event type missing."));
+		return KErrNotFound;
+		}
+
+	if (!GetIntFromConfig(iSection, KExpectedError, iExpectedError))
+		{
+		iExpectedError = KExpectedErrorNotUsed;
+		}
+	
+    // Get any timeout value and if we have one then we are not expecting any notification
+    if(!GetIntFromConfig(iSection, KTimeoutInMilliSeconds, iParams.iTimeoutMiliSecs))
+        {
+        // Default to 5 second timeout
+        iParams.iTimeoutMiliSecs = 5000; 
+        }
+
+	if (iExpectedError != KExpectedErrorNotUsed)
+		{
+			INFO_PRINTF2(_L("Error to be expected: %d"),iExpectedError);
+		}
+
+	// All ok if we got this far
+	return KErrNone;
+	}
+
+
+TVerdict CCheckNegativeProgressNotificationStep::doSingleTestStep()
+	{
+	TNifProgress* event = NULL;
+	TInt err = iEsockTest->ReceiveProgressNotificationEvent(event, iParams.iEventName, iParams.iTimeoutMiliSecs);
+
+	if (event == NULL || err == KErrNone)
+		{
+		INFO_PRINTF2(_L("%S: Did not receive any event."),&iParams.iEventName);
+		
+		return EPass;
+		}
+		else if (event == NULL || err != KErrNone)
+		{
+		INFO_PRINTF2(_L("%S: Did not receive any event but error condiction detected !"),&iParams.iEventName);
+		INFO_PRINTF2(_L("The error code returned was %d."),err);
+		return EFail;
+		}
+
+
+	TInt eventId = event->iStage;
+
+	if (eventId == KLinkLayerOpen )
+		{
+		INFO_PRINTF1(_L("Received event: KLinkLayerOpen"));
+		}
+	else if (eventId == KLinkLayerClosed )
+		{
+		INFO_PRINTF1(_L("Received event: KLinkLayerClosed"));
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Received event: Unknown (%d)"),eventId);
+		}
+
+	if (eventId == iParams.iEventMask)
+		{
+		INFO_PRINTF2(_L("Received the banned  event ( %S )."),&iParams.iEventName);
+		return EFail;
+		}
+
+
+	if(iExpectedError != event->iError && iExpectedError < KExpectedErrorNotUsed)
+		{
+		INFO_PRINTF3(_L("Expected Error %d does not match returned Error %d"), iExpectedError, event->iError);
+		return EFail;
+		}
+
+	else if (iExpectedError != KExpectedErrorNotUsed)
+		{
+		INFO_PRINTF3(_L("Expected Error %d matched returned Error %d"), iExpectedError, event->iError);
+		}
+
+	return EPass;
+	}
+
+
+