add simple (and disabled by default) wxSocket client test

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56252 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-10-12 20:45:29 +00:00
parent 5acb9127c5
commit 62fb86a515
11 changed files with 214 additions and 0 deletions

View File

@@ -72,6 +72,7 @@ TEST_OBJECTS = \
test_mbconvtest.o \ test_mbconvtest.o \
test_misctests.o \ test_misctests.o \
test_ipc.o \ test_ipc.o \
test_socket.o \
test_regextest.o \ test_regextest.o \
test_wxregextest.o \ test_wxregextest.o \
test_scopeguardtest.o \ test_scopeguardtest.o \
@@ -398,6 +399,9 @@ test_misctests.o: $(srcdir)/misc/misctests.cpp $(TEST_ODEP)
test_ipc.o: $(srcdir)/net/ipc.cpp $(TEST_ODEP) test_ipc.o: $(srcdir)/net/ipc.cpp $(TEST_ODEP)
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/net/ipc.cpp $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/net/ipc.cpp
test_socket.o: $(srcdir)/net/socket.cpp $(TEST_ODEP)
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/net/socket.cpp
test_regextest.o: $(srcdir)/regex/regextest.cpp $(TEST_ODEP) test_regextest.o: $(srcdir)/regex/regextest.cpp $(TEST_ODEP)
$(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/regex/regextest.cpp $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/regex/regextest.cpp

View File

@@ -59,6 +59,7 @@ TEST_OBJECTS = \
$(OBJS)\test_mbconvtest.obj \ $(OBJS)\test_mbconvtest.obj \
$(OBJS)\test_misctests.obj \ $(OBJS)\test_misctests.obj \
$(OBJS)\test_ipc.obj \ $(OBJS)\test_ipc.obj \
$(OBJS)\test_socket.obj \
$(OBJS)\test_regextest.obj \ $(OBJS)\test_regextest.obj \
$(OBJS)\test_wxregextest.obj \ $(OBJS)\test_wxregextest.obj \
$(OBJS)\test_scopeguardtest.obj \ $(OBJS)\test_scopeguardtest.obj \
@@ -435,6 +436,9 @@ $(OBJS)\test_misctests.obj: .\misc\misctests.cpp
$(OBJS)\test_ipc.obj: .\net\ipc.cpp $(OBJS)\test_ipc.obj: .\net\ipc.cpp
$(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\net\ipc.cpp $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\net\ipc.cpp
$(OBJS)\test_socket.obj: .\net\socket.cpp
$(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\net\socket.cpp
$(OBJS)\test_regextest.obj: .\regex\regextest.cpp $(OBJS)\test_regextest.obj: .\regex\regextest.cpp
$(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\regex\regextest.cpp $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\regex\regextest.cpp

View File

@@ -51,6 +51,7 @@ TEST_OBJECTS = \
$(OBJS)\test_mbconvtest.o \ $(OBJS)\test_mbconvtest.o \
$(OBJS)\test_misctests.o \ $(OBJS)\test_misctests.o \
$(OBJS)\test_ipc.o \ $(OBJS)\test_ipc.o \
$(OBJS)\test_socket.o \
$(OBJS)\test_regextest.o \ $(OBJS)\test_regextest.o \
$(OBJS)\test_wxregextest.o \ $(OBJS)\test_wxregextest.o \
$(OBJS)\test_scopeguardtest.o \ $(OBJS)\test_scopeguardtest.o \
@@ -413,6 +414,9 @@ $(OBJS)\test_misctests.o: ./misc/misctests.cpp
$(OBJS)\test_ipc.o: ./net/ipc.cpp $(OBJS)\test_ipc.o: ./net/ipc.cpp
$(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\test_socket.o: ./net/socket.cpp
$(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\test_regextest.o: ./regex/regextest.cpp $(OBJS)\test_regextest.o: ./regex/regextest.cpp
$(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $<

View File

@@ -52,6 +52,7 @@ TEST_OBJECTS = \
$(OBJS)\test_mbconvtest.obj \ $(OBJS)\test_mbconvtest.obj \
$(OBJS)\test_misctests.obj \ $(OBJS)\test_misctests.obj \
$(OBJS)\test_ipc.obj \ $(OBJS)\test_ipc.obj \
$(OBJS)\test_socket.obj \
$(OBJS)\test_regextest.obj \ $(OBJS)\test_regextest.obj \
$(OBJS)\test_wxregextest.obj \ $(OBJS)\test_wxregextest.obj \
$(OBJS)\test_scopeguardtest.obj \ $(OBJS)\test_scopeguardtest.obj \
@@ -520,6 +521,9 @@ $(OBJS)\test_misctests.obj: .\misc\misctests.cpp
$(OBJS)\test_ipc.obj: .\net\ipc.cpp $(OBJS)\test_ipc.obj: .\net\ipc.cpp
$(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\net\ipc.cpp $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\net\ipc.cpp
$(OBJS)\test_socket.obj: .\net\socket.cpp
$(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\net\socket.cpp
$(OBJS)\test_regextest.obj: .\regex\regextest.cpp $(OBJS)\test_regextest.obj: .\regex\regextest.cpp
$(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\regex\regextest.cpp $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\regex\regextest.cpp

View File

@@ -264,6 +264,7 @@ TEST_OBJECTS = &
$(OBJS)\test_mbconvtest.obj & $(OBJS)\test_mbconvtest.obj &
$(OBJS)\test_misctests.obj & $(OBJS)\test_misctests.obj &
$(OBJS)\test_ipc.obj & $(OBJS)\test_ipc.obj &
$(OBJS)\test_socket.obj &
$(OBJS)\test_regextest.obj & $(OBJS)\test_regextest.obj &
$(OBJS)\test_wxregextest.obj & $(OBJS)\test_wxregextest.obj &
$(OBJS)\test_scopeguardtest.obj & $(OBJS)\test_scopeguardtest.obj &
@@ -466,6 +467,9 @@ $(OBJS)\test_misctests.obj : .AUTODEPEND .\misc\misctests.cpp
$(OBJS)\test_ipc.obj : .AUTODEPEND .\net\ipc.cpp $(OBJS)\test_ipc.obj : .AUTODEPEND .\net\ipc.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $< $(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $<
$(OBJS)\test_socket.obj : .AUTODEPEND .\net\socket.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $<
$(OBJS)\test_regextest.obj : .AUTODEPEND .\regex\regextest.cpp $(OBJS)\test_regextest.obj : .AUTODEPEND .\regex\regextest.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $< $(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $<

178
tests/net/socket.cpp Normal file
View File

@@ -0,0 +1,178 @@
///////////////////////////////////////////////////////////////////////////////
// Name: tests/net/socket.cpp
// Purpose: wxSocket unit tests
// Author: Vadim Zeitlin
// RCS-ID: $Id$
// Copyright: (c) 2008 Vadim Zeitlin
// Licence: wxWidgets licence
///////////////////////////////////////////////////////////////////////////////
/*
IMPORTANT NOTE: the environment variable WX_TEST_SERVER must be set to the
hostname of the server to use for the tests below, if it is not set all
tests are silently skipped (rationale: this makes it possible to run the
test in the restricted environments (e.g. sandboxes) without any network
connectivity).
*/
// For compilers that support precompilation, includes "wx/wx.h".
// and "wx/cppunit.h"
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_SOCKETS
#include "wx/socket.h"
#include <memory>
typedef std::auto_ptr<wxSockAddress> wxSockAddressPtr;
typedef std::auto_ptr<wxSocketClient> wxSocketClientPtr;
static wxString gs_serverHost(wxGetenv("WX_TEST_SERVER"));
class SocketTestCase : public CppUnit::TestCase
{
public:
SocketTestCase() { }
private:
CPPUNIT_TEST_SUITE( SocketTestCase );
CPPUNIT_TEST( BlockingConnect );
CPPUNIT_TEST( NonblockingConnect );
CPPUNIT_TEST( ReadNormal );
CPPUNIT_TEST( ReadNowait );
CPPUNIT_TEST( ReadWaitall );
CPPUNIT_TEST_SUITE_END();
// get the address to connect to, if NULL is returned it means that the
// test is disabled and shouldn't run at all
wxSockAddressPtr GetServer() const;
// get the socket to read HTTP reply from, returns NULL if the test is
// disabled
wxSocketClientPtr GetHTTPSocket(int flags = wxSOCKET_NONE) const;
void BlockingConnect();
void NonblockingConnect();
void ReadNormal();
void ReadNowait();
void ReadWaitall();
DECLARE_NO_COPY_CLASS(SocketTestCase)
};
CPPUNIT_TEST_SUITE_REGISTRATION( SocketTestCase );
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( SocketTestCase, "SocketTestCase" );
wxSockAddressPtr SocketTestCase::GetServer() const
{
wxSockAddressPtr ptr;
if ( !gs_serverHost.empty() )
{
wxIPV4address *addr = new wxIPV4address;
addr->Hostname(gs_serverHost);
addr->Service("www");
ptr.reset(addr);
}
return ptr;
}
wxSocketClientPtr SocketTestCase::GetHTTPSocket(int flags) const
{
wxSocketClientPtr ptr;
wxSockAddressPtr addr = GetServer();
if ( !addr.get() )
return ptr;
wxSocketClient *sock = new wxSocketClient(flags);
sock->SetTimeout(1);
CPPUNIT_ASSERT( sock->Connect(*addr) );
const wxString httpGetRoot =
"GET / HTTP/1.1\r\n"
"Host: " + gs_serverHost + "\r\n"
"\r\n";
sock->Write(httpGetRoot, httpGetRoot.length());
ptr.reset(sock);
return ptr;
}
void SocketTestCase::BlockingConnect()
{
wxSockAddressPtr addr = GetServer();
if ( !addr.get() )
return;
wxSocketClient sock;
CPPUNIT_ASSERT( sock.Connect(*addr) );
}
void SocketTestCase::NonblockingConnect()
{
wxSockAddressPtr addr = GetServer();
if ( !addr.get() )
return;
wxSocketClient sock;
sock.Connect(*addr, false);
sock.WaitOnConnect(10);
CPPUNIT_ASSERT( sock.IsConnected() );
}
void SocketTestCase::ReadNormal()
{
wxSocketClientPtr sock(GetHTTPSocket());
if ( !sock.get() )
return;
char bufSmall[128];
sock->Read(bufSmall, WXSIZEOF(bufSmall));
CPPUNIT_ASSERT_EQUAL( wxSOCKET_NOERROR, sock->LastError() );
CPPUNIT_ASSERT_EQUAL( WXSIZEOF(bufSmall), sock->LastCount() );
char bufBig[1024*1024];
sock->Read(bufBig, WXSIZEOF(bufBig));
CPPUNIT_ASSERT_EQUAL( wxSOCKET_NOERROR, sock->LastError() );
CPPUNIT_ASSERT( WXSIZEOF(bufBig) >= sock->LastCount() );
}
void SocketTestCase::ReadNowait()
{
wxSocketClientPtr sock(GetHTTPSocket(wxSOCKET_NOWAIT));
if ( !sock.get() )
return;
char buf[1024];
sock->Read(buf, WXSIZEOF(buf));
if ( sock->LastError() != wxSOCKET_WOULDBLOCK )
{
CPPUNIT_ASSERT_EQUAL( wxSOCKET_NOERROR, sock->LastError() );
}
}
void SocketTestCase::ReadWaitall()
{
wxSocketClientPtr sock(GetHTTPSocket(wxSOCKET_WAITALL));
if ( !sock.get() )
return;
char buf[128];
sock->Read(buf, WXSIZEOF(buf));
CPPUNIT_ASSERT_EQUAL( wxSOCKET_NOERROR, sock->LastError() );
CPPUNIT_ASSERT_EQUAL( WXSIZEOF(buf), sock->LastCount() );
}
#endif // wxUSE_SOCKETS

View File

@@ -50,6 +50,7 @@
mbconv/mbconvtest.cpp mbconv/mbconvtest.cpp
misc/misctests.cpp misc/misctests.cpp
net/ipc.cpp net/ipc.cpp
net/socket.cpp
regex/regextest.cpp regex/regextest.cpp
regex/wxregextest.cpp regex/wxregextest.cpp
scopeguard/scopeguardtest.cpp scopeguard/scopeguardtest.cpp

View File

@@ -377,6 +377,10 @@ SOURCE=.\scopeguard\scopeguardtest.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\net\socket.cpp
# End Source File
# Begin Source File
SOURCE=.\streams\socketstream.cpp SOURCE=.\streams\socketstream.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@@ -702,6 +702,9 @@
<File <File
RelativePath=".\scopeguard\scopeguardtest.cpp"> RelativePath=".\scopeguard\scopeguardtest.cpp">
</File> </File>
<File
RelativePath=".\net\socket.cpp">
</File>
<File <File
RelativePath=".\streams\socketstream.cpp"> RelativePath=".\streams\socketstream.cpp">
</File> </File>

View File

@@ -1015,6 +1015,10 @@
RelativePath=".\scopeguard\scopeguardtest.cpp" RelativePath=".\scopeguard\scopeguardtest.cpp"
> >
</File> </File>
<File
RelativePath=".\net\socket.cpp"
>
</File>
<File <File
RelativePath=".\streams\socketstream.cpp" RelativePath=".\streams\socketstream.cpp"
> >

View File

@@ -987,6 +987,10 @@
RelativePath=".\scopeguard\scopeguardtest.cpp" RelativePath=".\scopeguard\scopeguardtest.cpp"
> >
</File> </File>
<File
RelativePath=".\net\socket.cpp"
>
</File>
<File <File
RelativePath=".\streams\socketstream.cpp" RelativePath=".\streams\socketstream.cpp"
> >