--- /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;
+ }
+