datacommsserver/esockserver/test/TE_Socket/SocketTestSection16.cpp
changeset 0 dfb7c4ff071f
--- /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;
+	}
+
+