datacommsserver/esockserver/test/TE_ESock/EsockTestSection10.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_ESock/EsockTestSection10.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,221 @@
+// Copyright (c) 2001-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 ESock Test cases from section 10
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <in_sock.h>
+
+// Test system includes
+#include "EsockTestSection10.h"
+
+
+// Test step 10.1
+const TDesC& CEsockTest10_1::GetTestName()
+	{
+	// store the name of this test case
+	_LIT(ret,"Test10.1");
+	
+	return ret;
+	}
+
+CEsockTest10_1::~CEsockTest10_1()
+	{
+	}
+
+enum TVerdict CEsockTest10_1::easyTestStepPreambleL()
+	{
+	TInt connections;
+	TRAPD(ret, connections = OpenConnectionsL(_L("Test_10.1"), iSockIndex2, iSockIndex3));
+	if (KErrNone != ret)
+		{
+		return EFail;
+		}
+	if (0 >= connections)
+		{
+		return EFail;
+		}
+
+	return EPass;
+	}
+
+enum TVerdict CEsockTest10_1::easyTestStepL()
+	{
+	TESTL(EPass == TestStepResult());
+	TPckgBuf<TUint> flags;
+	
+	// get select state of server socket
+	TRequestStatus stat;
+	flags() = KSockSelectRead | KSockSelectWrite | KSockSelectExcept;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Ioctl(KIOctlSelect, stat, &flags, KSOLSocket);
+	User::WaitForRequest(stat);
+	TESTL(stat==KErrNone);
+	TESTL(flags()==KSockSelectWrite);
+	
+	// send data from client to server (2 bytes, 1 urgent)
+	TInt ret = iEsockSuite->GetSocketHandle(iSockIndex2).SetOpt(KSoTcpNextSendUrgentData, KSolInetTcp, 1);
+	TESTEL(KErrNone == ret, ret);
+	iEsockSuite->GetSocketHandle(iSockIndex2).Write(_L8("12"), stat);
+	User::WaitForRequest(stat);
+	TESTEL(stat==KErrNone, stat.Int());
+	
+	// delay for 1 second
+	User::After(1000000);
+	
+	// get select state of the server socket
+	flags() = KSockSelectRead | KSockSelectWrite | KSockSelectExcept;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Ioctl(KIOctlSelect, stat, &flags, KSOLSocket);
+	User::WaitForRequest(stat);
+	TESTL(stat==KErrNone);
+	TESTL(flags()==(KSockSelectRead | KSockSelectWrite | KSockSelectExcept));
+	
+	// read data (server)
+	TBuf8<20> rbuf2;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Read(rbuf2, stat);
+	User::WaitForRequest(stat);
+	TESTEL(stat==KErrUrgentData, stat.Int());
+	
+	// get select state of the server socket
+	flags() = KSockSelectRead | KSockSelectWrite | KSockSelectExcept;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Ioctl(KIOctlSelect, stat, &flags, KSOLSocket);
+	User::WaitForRequest(stat);
+	TESTL(stat==KErrNone);
+	
+	TESTL(flags()==(KSockSelectWrite | KSockSelectExcept));
+	
+	// read the urgent data byte
+	TInt nRet;
+	ret = iEsockSuite->GetSocketHandle(iSockIndex3).GetOpt(KSoTcpReadUrgentData, KSolInetTcp, nRet);
+	TESTEL(KErrNone == ret, ret);
+	TESTL(nRet=='2');
+	ret = iEsockSuite->GetSocketHandle(iSockIndex3).GetOpt(KSoTcpReadUrgentData, KSolInetTcp, nRet);
+	TESTEL(KErrNotFound == ret, ret);
+	
+	// get select state of the server socket
+	flags() = KSockSelectRead | KSockSelectWrite | KSockSelectExcept;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Ioctl(KIOctlSelect, stat, &flags, KSOLSocket);
+	User::WaitForRequest(stat);
+	TESTL(stat==KErrNone);
+	TESTL(flags()==KSockSelectWrite);
+	
+	return EPass;
+	}
+
+
+// Test step 10.2
+const TDesC& CEsockTest10_2::GetTestName()
+	{
+	// store the name of this test case
+	_LIT(ret,"Test10.2");
+	
+	return ret;
+	}
+
+CEsockTest10_2::~CEsockTest10_2()
+	{
+	}
+
+enum TVerdict CEsockTest10_2::easyTestStepL()
+	{
+	
+	// Ioctl on an unconnected socket
+	
+	// open a TCP socket
+	RSocket sock;
+	CleanupClosePushL(sock);
+	TInt nRet = sock.Open(iEsockSuite->iSocketServer, KAfInet, KSockStream, KProtocolInetTcp);
+	TESTEL(KErrNone == nRet, nRet);
+	
+	// get select state of the socket
+	sock.GetOpt (KSOSelectPoll, KSOLSocket, (nRet = 0));
+	
+	// socket is blocked for writing, has no data for reading
+	// and has no exception condition
+	TESTEL(0 == nRet, nRet);
+	
+	// close the socket
+	CleanupStack::PopAndDestroy();
+	
+	return EPass;
+	}
+
+
+// Test step 10.3
+const TDesC& CEsockTest10_3::GetTestName()
+	{
+	// store the name of this test case
+	_LIT(ret,"Test10.3");
+	
+	return ret;
+	}
+
+CEsockTest10_3::~CEsockTest10_3()
+	{
+	}
+
+enum TVerdict CEsockTest10_3::easyTestStepPreambleL()
+	{
+	TInt connections;
+	TRAPD(ret, connections = OpenConnectionsL(_L("Test_10.3"), iSockIndex2, iSockIndex3));
+	if (KErrNone != ret)
+		{
+		return EFail;
+		}
+	if (0 >= connections)
+		{
+		return EFail;
+		}
+
+	return EPass;
+	}
+
+enum TVerdict CEsockTest10_3::easyTestStepL()
+	{
+	TESTL(EPass == TestStepResult());
+	
+	// cancel an Ioctl operation
+	
+	TPckgBuf<TUint> flags;
+	flags() = KSockSelectExcept;
+	
+	// get select state of the server socket
+	// do not wait for operation to complete
+	TRequestStatus stat;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Ioctl(KIOctlSelect, stat, &flags, KSOLSocket);
+	TESTEL(KRequestPending == stat.Int(), stat.Int());
+	
+	// cancel the Ioctl operation
+	iEsockSuite->GetSocketHandle(iSockIndex3).CancelIoctl();
+	
+	// wait for operation to complete
+	User::WaitForRequest(stat);
+	
+	// completion status will be KErrNone or KErrCancel
+	TESTEL(KErrCancel == stat.Int(), stat.Int());
+	
+	// get select state of the server socket
+	flags() = KSockSelectRead | KSockSelectWrite | KSockSelectExcept;
+	iEsockSuite->GetSocketHandle(iSockIndex3).Ioctl(KIOctlSelect, stat, &flags, KSOLSocket);
+	
+	User::WaitForRequest(stat);
+	TESTEL(KErrNone == stat.Int(), stat.Int());
+	
+	// socket is not blocked for writing
+	TESTL(flags()==KSockSelectWrite);
+	
+	return EPass;
+	}
+