--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_Socket/SocketTestSection16.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,189 @@
+// 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 16
+// Testing read from socket with KSockReadPeek flag set
+//
+//
+
+
+#include <e32base.h>
+
+#include "SocketTestSection16.h"
+
+
+// Test step 16.1
+const TDesC& CSocketTest16_1::GetTestName()
+ {
+ _LIT(ret,"Test16.1");
+ return ret;
+ }
+
+enum TVerdict CSocketTest16_1::InternalDoTestStepL( void )
+ {
+ Logger().WriteFormat(_L("Testing read from socket with KSockReadPeek flag set in different situations."));
+
+ RSocketServ sockServ;
+
+ RSocket sock_UdpIn;
+ RSocket sock_UdpOut;
+ TInt nRes;
+
+ _LIT8(KSendData, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); // Sample testdata to send in these tests
+
+ CleanupClosePushL(sockServ);
+ CleanupClosePushL(sock_UdpIn);
+ CleanupClosePushL(sock_UdpOut);
+
+ Logger().WriteFormat(_L("connecting to the socket server..."));
+ nRes = sockServ.Connect();
+ TESTL(nRes == KErrNone);
+
+ //-- open UDP datagram sockets
+ Logger().WriteFormat(_L("opening sockets..."));
+ TESTL(sock_UdpIn.Open (sockServ, KAfInet, KSockDatagram, KProtocolInetUdp) == KErrNone);
+ TESTL(sock_UdpOut.Open(sockServ, KAfInet, KSockDatagram, KProtocolInetUdp) == KErrNone);
+
+ TRequestStatus rqStat_in, rqStat_out;
+
+ //-- local host address, port #7 - the data will be sent via this address
+ TInetAddr inetAddrTo(7);
+ TInetAddr inetAddrFrom;
+
+ TBuf8<100> tempBuf, tempBuf1;
+
+ const TInt KIPHeaderSize = 20; //-- IP header size
+ const TInt KUdpHeaderSize= 8; //-- UDP header size
+
+
+ inetAddrTo.Input(_L("127.0.0.2"));
+ sock_UdpIn.Bind(inetAddrTo); //-- bind socket to address
+
+
+ //###################################################################################################
+ //--- Test normal situation with peeking data from the UDP socket, when the data arrived before peeking
+ //###################################################################################################
+
+
+ //--- 1. send the data to the udp socket
+ sock_UdpOut.SendTo(KSendData, inetAddrTo, 0, rqStat_out);
+ User::WaitForRequest(rqStat_out);
+ Logger().WriteFormat(_L("UDP sent %d bytes of data, error code:%d\n"), KSendData().Size(), rqStat_out.Int());
+ TESTL(rqStat_out.Int() == KErrNone);
+
+
+ //--- 2. Peek data from UDP socket and check the size (taking into account the KIpHeaderIncluded flag)
+ sock_UdpIn.RecvFrom(tempBuf, inetAddrFrom, KIpHeaderIncluded|KSockReadPeek, rqStat_in);
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP peeked %d bytes of data, error code:%d\n"), tempBuf.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+ TESTL(tempBuf.Size() == KIPHeaderSize + KUdpHeaderSize + KSendData().Size());
+
+ //--- 3. Peek data from UDP socket and check the size (taking into account the KIpHeaderIncluded flag)
+ sock_UdpIn.RecvFrom(tempBuf1, inetAddrFrom, KIpHeaderIncluded|KSockReadPeek, rqStat_in);
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP peeked %d bytes of data, error code:%d\n"), tempBuf1.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+ TESTL(tempBuf1.Size() == KIPHeaderSize + KUdpHeaderSize + KSendData().Size());
+
+ //-- check, the data shall be the same
+ TESTL( tempBuf.CompareF(tempBuf1) ==0);
+
+ //--- 4. read data from socket and check the size
+
+ sock_UdpIn.RecvFrom(tempBuf, inetAddrFrom, 0, rqStat_in);
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP read real %d bytes data from the socket, error code:%d\n"), tempBuf.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+ TESTL(tempBuf.Size() == KSendData().Size());
+
+ //###################################################################################################
+ //--- Test the situation with peeking data from the UDP socket, when the data arrived after read request.
+ //###################################################################################################
+
+
+ //--- 1. Issue a read request from the socket with KSockReadPeek flag set
+ Logger().WriteFormat(_L("Issuing reading request with KSockReadPeek flag set"));
+ sock_UdpIn.RecvFrom(tempBuf, inetAddrFrom, KIpHeaderIncluded|KSockReadPeek, rqStat_in);
+
+ //--- 2. send data
+ sock_UdpOut.SendTo(KSendData, inetAddrTo, 0, rqStat_out);
+ User::WaitForRequest(rqStat_out);
+ Logger().WriteFormat(_L("UDP sent %d bytes of data, error code:%d\n"), KSendData().Size(), rqStat_out.Int());
+ TESTL(rqStat_out.Int() == KErrNone);
+
+
+ //--- 3. Wait for peeking data to complete, check the result
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP peeked %d bytes of data, error code:%d\n"), tempBuf.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+ TESTL(tempBuf.Size() == KIPHeaderSize + KUdpHeaderSize + KSendData().Size());
+
+
+ sock_UdpIn.RecvFrom(tempBuf1, inetAddrFrom, KIpHeaderIncluded|KSockReadPeek, rqStat_in);
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP peeked %d bytes of data, error code:%d\n"), tempBuf1.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+ TESTL(tempBuf1.Size() == KIPHeaderSize + KUdpHeaderSize + KSendData().Size());
+
+ //-- check, the data shall be the same
+ TESTL( tempBuf.CompareF(tempBuf1) ==0);
+
+ //--- 4. read data from socket and check the size
+
+ sock_UdpIn.RecvFrom(tempBuf, inetAddrFrom, 0, rqStat_in);
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP read real %d bytes data from the socket, error code:%d\n"), tempBuf.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+ TESTL(tempBuf.Size() == KSendData().Size());
+
+
+ //###################################################################################################
+ //--- Test the situation with peeking data from the UDP socket cancellation
+ //###################################################################################################
+
+ //--- 1. Issue a read request from the socket with KSockReadPeek flag set
+ Logger().WriteFormat(_L("Issuing reading request with KSockReadPeek flag set"));
+ sock_UdpIn.RecvFrom(tempBuf, inetAddrFrom, KIpHeaderIncluded|KSockReadPeek, rqStat_in);
+
+ Logger().WriteFormat(_L("Cancel receiving"));
+ sock_UdpIn.CancelRecv();
+
+ //--- 2. send data
+ sock_UdpOut.SendTo(KSendData, inetAddrTo, 0, rqStat_out);
+ User::WaitForRequest(rqStat_out);
+ Logger().WriteFormat(_L("UDP sent %d bytes of data, error code:%d\n"), KSendData().Size(), rqStat_out.Int());
+ TESTL(rqStat_out.Int() == KErrNone);
+
+
+ //--- 3. Wait for peeking data to complete, check the result
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP peeked %d bytes of data, error code:%d\n"), tempBuf.Size(), rqStat_in.Int());
+ TESTL((rqStat_in.Int() == KErrCancel) || (rqStat_in.Int() == KErrNone));
+
+ //--- 4. Peek the data
+ sock_UdpIn.RecvFrom(tempBuf, inetAddrFrom, KIpHeaderIncluded|KSockReadPeek, rqStat_in);
+ User::WaitForRequest(rqStat_in);
+ Logger().WriteFormat(_L("UDP peeked %d bytes of data, error code:%d\n"), tempBuf1.Size(), rqStat_in.Int());
+ TESTL(rqStat_in.Int() == KErrNone);
+
+
+
+ //-- close and destroy everything
+ CleanupStack::PopAndDestroy(3); //sockServ, sock_UdpIn, sock_UdpOut
+
+ SetTestStepResult(EPass);
+ return EPass;
+ }
+
+