datacommsserver/esockserver/test/TS_MultiHoming/TS_RConnectionStart.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TS_MultiHoming/TS_RConnectionStart.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,200 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This contains TS_MultiHoming RConnection Start primitive.
+// RConnection starts opens and starts a connection, and 
+// stores this connection in C
+// 
+//
+
+/**
+ @file
+*/
+
+
+#include "TS_RConnectionStart.h"
+#include <nifman.h>
+/* 
+ * Test 1.1
+ * Open a default / named connection
+ */
+CTS_RConnectionStart::CTS_RConnectionStart()
+	{
+	iTestStepName = KRConnectionStart;
+	}
+
+CTS_RConnectionStart::~CTS_RConnectionStart()
+	{	
+	}
+
+enum TVerdict CTS_RConnectionStart::doTestStepPreambleL(void)
+/**
+ * Implements OOM testing in each test
+ */
+	{
+	if (!(GetBoolFromConfig(KConnectionInfo,KOomTest,iIsOOMTest)))
+		iIsOOMTest=EFalse;
+	return EPass;
+	}
+
+
+enum TVerdict CTS_RConnectionStart::doTestStepL(void)
+/**
+ * Creates and starts one or more Explicit Connection(s)
+ * and appends it/them to the array of
+ * connections in the MultiHoming Suite 
+ * @return The test step outcome.
+ * 
+ */
+	{
+	TPtrC connPtr(KNameDefault);
+	TInt err = KErrNone;
+	TInt numOfConns = 0;
+	TBool expectSuccess = ETrue;
+
+	err = GetIntFromConfig(KConnectionInfo, KNumOfConns, numOfConns);
+	
+	
+	if (err != 1)		// We have no config available, so end test
+		{	
+			return EFail;
+		}
+	
+	
+	// Get Config Values
+	
+	TBuf<10> keyName;
+
+	// Create Connection object(s)
+	for (TInt i=0; i < numOfConns; i++)	
+		{
+		TConnDetails *myConn = iOwnerSuite->GetNewTConnection();
+		keyName = KConnName;		//< Descriptor len is ok up to 99 connections...
+		
+		keyName.AppendNum(i);
+		err = GetStringFromConfig(KConnectionInfo, keyName, connPtr);
+		if(err != 1)
+			{
+			LogExtra((TText8*)__FILE__, __LINE__, ESevrErr, KEConfigFile);	// We must have the naming section, for >1 connection 
+			return EFail;
+		}
+
+		myConn->iName.Copy(connPtr.Ptr(),connPtr.Length());
+
+		err = GetConnectionType(myConn, myConn->iName);
+		if(err != 0)
+			{
+			LogExtra((TText8*)__FILE__, __LINE__, ESevrErr, KEConfigFile);	// We must have the naming section, for >1 connection 
+			return EFail;
+			}
+		
+
+		if(myConn->iConnectionType != TConnDetails::implicitConn)
+			{
+			err = myConn->iSocketServ.Connect();
+			TESTE(err==KErrNone,err);	
+		
+			err = myConn->iConnection.Open(myConn->iSocketServ, KAfInet);
+			TESTE(err==KErrNone,err);	
+			}
+		
+		// Find out if we're to use the notification API
+		// Ignore errors - dont care if this is missing
+		// No check necessary, as will stay false if fails.
+		err = SetConnPrefs(myConn->iConnPrefs, connPtr);
+
+		expectSuccess = -1;
+		if(err != 0)
+			{
+				TPtrC errorText = EpocErrorToText(err);
+				LogExtra((TText8*)__FILE__, __LINE__, ESevrInfo, KELogger, &errorText);	
+				return EFail;
+			}
+
+		GetBoolFromConfig(connPtr, KExpectSuccess, expectSuccess);
+
+		
+		if(myConn->iConnectionType == TConnDetails::explicitConn)
+			{
+				err = myConn->iConnection.Start(myConn->iConnPrefs);
+			}
+		else if(myConn->iConnectionType == TConnDetails::defaultConn)
+			{
+				err = myConn->iConnection.Start();
+			}
+		else
+			{
+			TUint protocol = KProtocolInetUdp;
+	
+			err = myConn->iSocketServ.Connect();
+			TESTE(err==KErrNone,err);	
+
+			// Get the protocol field and open the socke
+			err = myConn->iSocket.Open(myConn->iSocketServ, KAfInet, KSockDatagram, protocol);
+			// Bind the socket, as if this is a server to open the connection
+			TInetAddr localAddr;
+			localAddr.SetAddress(KInetAddrAny);
+			localAddr.SetPort(6666 + i);            // source port = 666 + conn num
+
+			myConn->iSocket.SetOpt(KSoReuseAddr, KSolInetIp, 1);
+
+			err = myConn->iSocket.Bind(localAddr);
+
+			TInetAddr destAddr;
+           
+			destAddr.SetAddress(INET_ADDR(192, 168, 1, 255));
+			destAddr.SetPort(500);            // destination port....
+
+			TRequestStatus status;
+
+			TBuf8<32> buffer;
+
+			// build some data to send on the socket
+			buffer.SetMax();
+			buffer.FillZ();
+			myConn->iSocket.SendTo(buffer, destAddr, 0, status);
+			User::WaitForRequest(status);
+			err = status.Int();
+			}
+
+		TESTE(err == KErrNone &&  expectSuccess
+			  || err == KErrNone && !expectSuccess, err);
+			
+				
+		if (err==KErrNone)	// If we got this far without errors, we have an open connection
+			{
+			// Insert into array
+			if(myConn->iConnectionType != TConnDetails::implicitConn)
+				{
+//				myConn->iConnection.SetOpt(KCOLProvider, KConnDisableTimers, ETrue);
+				}
+			else
+				{
+				myConn->iSocket.SetOpt(KCOLProvider, KConnDisableTimers, ETrue);
+				}
+			LogExtra((TText8*)__FILE__, __LINE__, ESevrInfo, KConnXInsert, &(myConn->iName));
+			}
+		else
+			{
+			
+			TPtrC errorText = EpocErrorToText(err);
+			LogExtra((TText8*)__FILE__, __LINE__, ESevrInfo, KConnXFail, &(myConn->iName), &errorText); 
+			myConn->iName.Zero();
+			//	CLog::EpocErrorToText(err));
+			}
+
+		}		// for (<numOfConns>)
+	return iTestStepResult;
+	}
+
+