diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/test/TE_ESock/EsockTestSection10.cpp --- /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 +#include + +// 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 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 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; + } +