diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/test/TE_EsockTestSteps/src/Connections.TestSteps.cpp --- /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 + + +#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; + } + + +