diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/test/TE_Socket/SocketTestSection18.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/test/TE_Socket/SocketTestSection18.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,217 @@ +// 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: +// SocketTestSection14.cpp +// This contains ESock Test cases from section 14 +// +// + +// EPOC includes +#include +#include + +// Test system includes +#include "SocketTestSection18.h" + + +// Test step 18.1 +const TDesC& CSocketTest18_1::GetTestName() + { + _LIT(ret,"Test18.1"); + return ret; + } + +enum TVerdict CSocketTest18_1::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Testing cancellation of Accept")); + 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 2")); + TESTL(KErrNone == ret); + + ret=sock2.Open(ss); // null socket to accept onto + TESTL(KErrNone == ret); + + TSockAddr addr; + ret=sock.Bind(addr); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Listen")); + ret=sock.Listen(5); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Accepting")); + TRequestStatus rstat; + sock.Accept(sock2, rstat); + TESTL(rstat.Int() == KRequestPending); + + Logger().WriteFormat(_L("Cancelling Accept")); + sock.CancelAccept(); + User::WaitForRequest(rstat); + TESTL(rstat == KErrCancel); + + Logger().WriteFormat(_L("Attempting to complete the accept")); + //emulate en connect complete event + ret=sock.SetOpt(KDummyOptionSetConnectComplete,0,0); + User::After(100000); //Just a wait to allow something to possibly go wrong + TESTL(rstat.Int() == KErrCancel); + + CleanupStack::Pop(&ss); + ss.Close(); + + SetTestStepResult(verdict); + return verdict; + } + +// Test step 18.2 +const TDesC& CSocketTest18_2::GetTestName() + { + _LIT(ret,"Test18.2"); + return ret; + } + +enum TVerdict CSocketTest18_2::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Testing cancellation of Connect")); + RSocketServ ss; + TInt ret=OptimalConnect(ss); + CleanupClosePushL(ss); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Open by name")); + RSocket sock; + ret=sock.Open(ss,_L("Dummy Protocol 2")); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Setiing option to block connect")); + ret = sock.SetOpt(KDummyOptionSetBlockConnect,25,TRUE); + TESTL(KErrNone == ret); + + TSockAddr addr; + TRequestStatus stat1; + Logger().WriteFormat(_L("Performing Connect")); + sock.Connect(addr,stat1); + User::After(100000); + TESTL(stat1 == KRequestPending); + + Logger().WriteFormat(_L("Setiing option to unblock complete connect")); + ret = sock.SetOpt(KDummyOptionSetBlockConnect,25,FALSE); + TESTL(KErrNone == ret); + User::WaitForRequest(stat1); + TESTL(stat1 == KErrNone); + + Logger().WriteFormat(_L("Closing Socket")); + sock.Close(); + + Logger().WriteFormat(_L("Open by name")); + ret=sock.Open(ss,_L("Dummy Protocol 2")); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Setiing option to block connect")); + ret = sock.SetOpt(KDummyOptionSetBlockConnect,25,TRUE); + TESTL(KErrNone == ret); + + TRequestStatus stat; + Logger().WriteFormat(_L("Performing Connect")); + sock.Connect(addr,stat); + User::After(100000); + TESTL(stat == KRequestPending); + + Logger().WriteFormat(_L("Cancelling Connect")); + sock.CancelConnect(); + User::WaitForRequest(stat); + TESTL(stat.Int() == KErrCancel); + + Logger().WriteFormat(_L("Setiing option to unblock complete connect")); + ret = sock.SetOpt(KDummyOptionSetBlockConnect,25,FALSE); + TESTL(KErrNone == ret); + User::After(100000); + TESTL(stat == KErrCancel); + + CleanupStack::Pop(&ss); + ss.Close(); + + SetTestStepResult(verdict); + return verdict; + } + + // Test step 18.3 +const TDesC& CSocketTest18_3::GetTestName() + { + _LIT(ret,"Test18.3"); + return ret; + } + +enum TVerdict CSocketTest18_3::InternalDoTestStepL( void ) + { + TVerdict verdict = EPass; + + Logger().WriteFormat(_L("Testing cancellation of Ioctl")); + RSocketServ ss; + TInt ret=OptimalConnect(ss); + CleanupClosePushL(ss); + TESTL(KErrNone == ret); + + Logger().WriteFormat(_L("Open by name")); + RSocket sock; + ret=sock.Open(ss,_L("Dummy Protocol 2")); + TESTL(KErrNone == ret); + + TRequestStatus stat; + Logger().WriteFormat(_L("Sending Ioclt that does not complete")); + sock.Ioctl(KDummyIocltNonCompleting,stat); + TESTL(KErrNone == ret); + User::After(100000); + TESTL(stat == KRequestPending); + + Logger().WriteFormat(_L("Setiing option to complete Ioclt")); + ret = sock.SetOpt(KDummyOptionSetIocltComplete,25,0); + TESTL(KErrNone == ret); + User::WaitForRequest(stat); + TESTL(stat == KErrNone); + + Logger().WriteFormat(_L("Sending Ioclt that does not complete")); + sock.Ioctl(KDummyIocltNonCompleting,stat); + TESTL(KErrNone == ret); + User::After(100000); + TESTL(stat == KRequestPending); + + Logger().WriteFormat(_L("Cancelling Ioclt")); + sock.CancelIoctl(); + User::WaitForRequest(stat); + TESTL(stat.Int() == KErrCancel); + + Logger().WriteFormat(_L("Setiing option to complete Ioclt")); + ret = sock.SetOpt(KDummyOptionSetIocltComplete,25,0); + TESTL(KErrNone == ret); + User::After(100000); + TESTL(stat == KErrCancel); + + CleanupStack::Pop(&ss); + ss.Close(); + + SetTestStepResult(verdict); + return verdict; + } + + +