datacommsserver/esockserver/test/TE_Socket/SocketTestSection14.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_Socket/SocketTestSection14.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,353 @@
+// Copyright (c) 2004-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 14
+// 
+//
+
+// EPOC includes
+#include <e32base.h>
+#include <test/es_dummy.h>
+
+// Test system includes
+#include "SocketTestSection14.h"
+
+
+// Test step 14.1
+const TDesC& CSocketTest14_1::GetTestName()
+	{
+	_LIT(ret,"Test14.1");
+	return ret;
+	}
+
+enum TVerdict CSocketTest14_1::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	
+	Logger().WriteFormat(_L("Testing erroring a listening socket"));
+	RSocketServ ss;
+	TInt ret=OptimalConnect(ss);
+	CleanupClosePushL(ss);
+    TESTL(KErrNone == ret);	
+    
+	Logger().WriteFormat(_L("Open by name"));             
+	RSocket sock, sock2;                                                    
+	ret=sock.Open(ss,_L("Dummy Protocol 3")); // dummy 3 is reconnectable                         
+	TESTL(KErrNone == ret);	
+	
+	ret=sock2.Open(ss); // null socket to accept onto                         
+	TESTL(KErrNone == ret);	
+	
+	Logger().WriteFormat(_L("Set test option"));             
+	const TInt KExpectedError = -4567; // Something random.
+	ret=sock.SetOpt(KDummyOptionSetErrorNextListen,0,KExpectedError);
+	TESTL(KErrNone == ret);	
+	
+	TSockAddr addr;
+	ret=sock.Bind(addr);
+	TESTL(KErrNone == ret);	
+	
+	Logger().WriteFormat(_L("Listen"));             
+	ret=sock.Listen(0); // No need for a que
+	TESTL(KErrNone == ret);	
+	
+	Logger().WriteFormat(_L("Accept - error"));             
+	TRequestStatus rstat;
+	sock.Accept(sock2, rstat);
+	User::WaitForRequest(rstat);
+	TESTL(rstat.Int() == KExpectedError);	
+	
+	Logger().WriteFormat(_L("Listen - reconnect"));             
+	ret=sock.Listen(1);
+	TESTL(KErrNone == ret);	
+	
+    Logger().WriteFormat(_L("Accept"));             
+	sock.Accept(sock2, rstat);
+    //emulate en connect complete event
+	ret=sock.SetOpt(KDummyOptionSetConnectComplete,0,0);
+	TESTL(KErrNone == ret);	
+	User::WaitForRequest(rstat);
+	TESTL(rstat.Int() == KErrNone);	
+	
+	CleanupStack::Pop(&ss);
+    ss.Close();
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+	
+	// Test step 14.2
+const TDesC& CSocketTest14_2::GetTestName()
+	{
+	_LIT(ret,"Test14.2");
+	return ret;
+	}
+
+enum TVerdict CSocketTest14_2::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+	
+	Logger().WriteFormat(_L("Test14.2 Error writing to socket"));
+	RSocketServ ss;
+	ret = OptimalConnect(ss);
+	TESTL(KErrNone == ret);	
+	CleanupClosePushL(ss);
+    
+	Logger().WriteFormat(_L("Openning Dummy Protocol 3"));             
+	RSocket sock;                                                  
+	ret = sock.Open(ss,_L("Dummy Protocol 3")); // dummy 3 is reconnectable
+	TESTL(KErrNone == ret);
+	
+	TSockAddr addr;
+	TRequestStatus stat;
+	sock.Connect(addr, stat);
+	User::WaitForRequest(stat);
+	TESTL(KErrNone == stat.Int());	
+	
+	const TInt KExpectedError = -4567; // Something random.
+	Logger().WriteFormat(_L("Set write error code to %d"), KExpectedError);             
+	ret=sock.SetOpt(KDummyOptionSetErrorNextWrite, 0, KExpectedError);
+	TESTL(KErrNone == ret);	
+		
+	_LIT8(KWriteData,"1234\t\n\rcwe8\'\"");
+	Logger().WriteFormat(_L("Sending Data - Should fail with %d"), KExpectedError);             
+	sock.Send(KWriteData(), 0, stat);
+	User::WaitForRequest(stat);
+	TESTL(KExpectedError == stat.Int());	
+	
+	Logger().WriteFormat(_L("Sending Data - Should Succeed"));             
+	sock.Send(KWriteData(),0,stat);
+	User::WaitForRequest(stat);
+	TESTL(KErrNone == stat.Int());	
+	
+	Logger().WriteFormat(_L("Receiving Data"));
+	TBuf8<20> buf;          
+	sock.Recv(buf, 0, stat);
+	User::WaitForRequest(stat);
+	TESTL(KErrNone == stat.Int());	
+	
+    TESTL(buf == KWriteData);	
+	
+	CleanupStack::Pop(&ss);
+    ss.Close();
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+	
+	// Test step 14.3
+const TDesC& CSocketTest14_3::GetTestName()
+	{
+	_LIT(ret,"Test14.3");
+	return ret;
+	}
+
+enum TVerdict CSocketTest14_3::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+	
+	Logger().WriteFormat(_L("Test14.3 Error shutting a socket down"));
+	RSocketServ ss;
+	ret = OptimalConnect(ss);
+	TESTL(KErrNone == ret);	
+	CleanupClosePushL(ss);
+    
+	Logger().WriteFormat(_L("Openning Dummy Protocol 3"));             
+	RSocket sock;                                                  
+	ret = sock.Open(ss,_L("Dummy Protocol 3")); // dummy 3 is reconnectable
+	TESTL(KErrNone == ret);
+	
+	TSockAddr addr;
+	TRequestStatus stat;
+	sock.Connect(addr, stat);
+	User::WaitForRequest(stat);
+	TESTL(KErrNone == stat.Int());	
+	
+	const TInt KExpectedError = -4567; // Something random.
+	Logger().WriteFormat(_L("Set write error code to %d"), KExpectedError);             
+	ret=sock.SetOpt(KDummyOptionSetErrorNextShutdown, 0, KExpectedError);
+	TESTL(KErrNone == ret);	
+	
+	Logger().WriteFormat(_L("Shutting the socket down"));             
+	sock.Shutdown(RSocket::EImmediate,stat);
+	User::WaitForRequest(stat);
+	TESTL(KExpectedError == stat.Int());	
+	
+	CleanupStack::Pop(&ss);
+    ss.Close();
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+	
+		// Test step 14.4
+const TDesC& CSocketTest14_4::GetTestName()
+	{
+	_LIT(ret,"Test14.4");
+	return ret;
+	}
+
+enum TVerdict CSocketTest14_4::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+	
+	Logger().WriteFormat(_L("Test14.4 Error connecting to socket down"));
+	RSocketServ ss;
+	ret = OptimalConnect(ss);
+	TESTL(KErrNone == ret);	
+	CleanupClosePushL(ss);
+    
+	Logger().WriteFormat(_L("Openning Dummy Protocol 3"));             
+	RSocket sock;                                                  
+	ret = sock.Open(ss,_L("Dummy Protocol 3")); // dummy 3 is reconnectable
+	TESTL(KErrNone == ret);
+	
+	const TInt KExpectedError = -4567; // Something random.
+	Logger().WriteFormat(_L("Set connect error code to %d"), KExpectedError);             
+	ret=sock.SetOpt(KDummyOptionSetErrorNextConnect, 0, KExpectedError);
+	TESTL(KErrNone == ret);
+	
+	TSockAddr addr;
+	TRequestStatus stat;
+	sock.Connect(addr, stat);
+	User::WaitForRequest(stat);
+	TESTL(KExpectedError == stat.Int());
+	
+	Logger().WriteFormat(_L("Set write error code to %d"), KExpectedError);             
+	ret=sock.SetOpt(KDummyOptionSetErrorNextConnect, 0, KExpectedError);
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Performing Connect"));
+	sock.Connect(addr, stat);
+	User::WaitForRequest(stat);
+	TESTL(KExpectedError == stat.Int());	
+	
+	Logger().WriteFormat(_L("Setting blocked connect"));             
+	ret=sock.SetOpt(KDummyOptionSetBlockConnect, 0, TRUE);
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Set connect error code to %d"), KExpectedError);             
+	ret=sock.SetOpt(KDummyOptionSetErrorNextConnect, 0, KExpectedError);
+	TESTL(KErrNone == ret);	
+	
+	Logger().WriteFormat(_L("Performing Connect"));
+	sock.Connect(addr, stat);
+	User::WaitForRequest(stat);
+	TESTL(KExpectedError == stat.Int());		
+	
+	Logger().WriteFormat(_L("Setting blocked connect"));             
+	ret=sock.SetOpt(KDummyOptionSetBlockConnect, 0, TRUE);
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Performing Connect"));
+	sock.Connect(addr, stat);
+	
+	Logger().WriteFormat(_L("Set connect error code to %d"), KExpectedError);             
+	ret=sock.SetOpt(KDummyOptionSetErrorNextConnect, 0, KExpectedError);
+	TESTL(KErrNone == ret);	
+	
+	Logger().WriteFormat(_L("Setting blocked connect off"));             
+	ret=sock.SetOpt(KDummyOptionSetBlockConnect, 0, FALSE);
+	TESTL(KErrNone == ret);
+		
+	User::WaitForRequest(stat);
+	TESTL(KExpectedError == stat.Int());	
+	
+	
+	CleanupStack::Pop(&ss);
+    ss.Close();
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+	
+		// Test step 14.5
+const TDesC& CSocketTest14_5::GetTestName()
+	{
+	_LIT(ret,"Test14.5");
+	return ret;
+	}
+
+enum TVerdict CSocketTest14_5::InternalDoTestStepL( void )
+	{
+	TVerdict verdict = EPass;
+	TInt ret;
+	
+	Logger().WriteFormat(_L("Test14.5 Two accepts accepting on the same null socket"));
+	RSocketServ ss;
+	ret = OptimalConnect(ss);
+	TESTL(KErrNone == ret);	
+	CleanupClosePushL(ss);
+    
+	Logger().WriteFormat(_L("Openning Dummy Protocol 2"));             
+	RSocket sock;                                                  
+	ret = sock.Open(ss,_L("Dummy Protocol 2")); 
+	TESTL(KErrNone == ret);
+	
+	TSockAddr addr;
+	TRequestStatus stat;
+	
+	Logger().WriteFormat(_L("Binding sock1"));             
+	ret = sock.Bind(addr); 
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Listening on sock1"));             
+	ret = sock.Listen(5); 
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Openning Dummy Protocol 3"));             
+	RSocket sock2;                                                  
+	ret = sock2.Open(ss,_L("Dummy Protocol 3")); 
+	TESTL(KErrNone == ret);
+	
+	TSockAddr addr2;
+		
+	Logger().WriteFormat(_L("Binding sock2"));             
+	ret = sock2.Bind(addr); 
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Listening on sock2"));             
+	ret = sock2.Listen(5); 
+	TESTL(KErrNone == ret);
+	
+	Logger().WriteFormat(_L("Null socket"));             
+	RSocket nullsock;                                                  
+	ret = nullsock.Open(ss); 
+	TESTL(KErrNone == ret);
+	
+	TRequestStatus stat2;
+	
+	Logger().WriteFormat(_L("Accepting on sock1"));             
+	sock.Accept(nullsock,stat); 
+	
+	Logger().WriteFormat(_L("Accepting on sock2"));             
+	sock2.Accept(nullsock,stat2); 
+	
+	// Wait to be paniced
+	User::After( 5000000 );
+	
+	//Should have panicked by now so lets just fail the test.
+	verdict = EFail;
+	CleanupStack::Pop(&ss);
+    ss.Close();
+	
+	SetTestStepResult(verdict);
+	return verdict;
+	}
+
+
+
+