From: Vadim Zeitlin Date: Sun, 12 Oct 2008 20:45:29 +0000 (+0000) Subject: add simple (and disabled by default) wxSocket client test X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/62fb86a515ce9391140f4dcaa19c4e752c2cb373?ds=inline 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 --- diff --git a/tests/Makefile.in b/tests/Makefile.in index 3ee3a3939c..b4e9d9bf02 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -72,6 +72,7 @@ TEST_OBJECTS = \ test_mbconvtest.o \ test_misctests.o \ test_ipc.o \ + test_socket.o \ test_regextest.o \ test_wxregextest.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) $(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) $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/regex/regextest.cpp diff --git a/tests/makefile.bcc b/tests/makefile.bcc index 59b63dfb2c..0db0977053 100644 --- a/tests/makefile.bcc +++ b/tests/makefile.bcc @@ -59,6 +59,7 @@ TEST_OBJECTS = \ $(OBJS)\test_mbconvtest.obj \ $(OBJS)\test_misctests.obj \ $(OBJS)\test_ipc.obj \ + $(OBJS)\test_socket.obj \ $(OBJS)\test_regextest.obj \ $(OBJS)\test_wxregextest.obj \ $(OBJS)\test_scopeguardtest.obj \ @@ -435,6 +436,9 @@ $(OBJS)\test_misctests.obj: .\misc\misctests.cpp $(OBJS)\test_ipc.obj: .\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 $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\regex\regextest.cpp diff --git a/tests/makefile.gcc b/tests/makefile.gcc index 134779dab0..bbcdd1c5a4 100644 --- a/tests/makefile.gcc +++ b/tests/makefile.gcc @@ -51,6 +51,7 @@ TEST_OBJECTS = \ $(OBJS)\test_mbconvtest.o \ $(OBJS)\test_misctests.o \ $(OBJS)\test_ipc.o \ + $(OBJS)\test_socket.o \ $(OBJS)\test_regextest.o \ $(OBJS)\test_wxregextest.o \ $(OBJS)\test_scopeguardtest.o \ @@ -413,6 +414,9 @@ $(OBJS)\test_misctests.o: ./misc/misctests.cpp $(OBJS)\test_ipc.o: ./net/ipc.cpp $(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 $(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $< diff --git a/tests/makefile.vc b/tests/makefile.vc index 5cc6f07461..dad6c2ee40 100644 --- a/tests/makefile.vc +++ b/tests/makefile.vc @@ -52,6 +52,7 @@ TEST_OBJECTS = \ $(OBJS)\test_mbconvtest.obj \ $(OBJS)\test_misctests.obj \ $(OBJS)\test_ipc.obj \ + $(OBJS)\test_socket.obj \ $(OBJS)\test_regextest.obj \ $(OBJS)\test_wxregextest.obj \ $(OBJS)\test_scopeguardtest.obj \ @@ -520,6 +521,9 @@ $(OBJS)\test_misctests.obj: .\misc\misctests.cpp $(OBJS)\test_ipc.obj: .\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 $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\regex\regextest.cpp diff --git a/tests/makefile.wat b/tests/makefile.wat index 950b2e96e5..258fbc8e61 100644 --- a/tests/makefile.wat +++ b/tests/makefile.wat @@ -264,6 +264,7 @@ TEST_OBJECTS = & $(OBJS)\test_mbconvtest.obj & $(OBJS)\test_misctests.obj & $(OBJS)\test_ipc.obj & + $(OBJS)\test_socket.obj & $(OBJS)\test_regextest.obj & $(OBJS)\test_wxregextest.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 $(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 $(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $< diff --git a/tests/net/socket.cpp b/tests/net/socket.cpp new file mode 100644 index 0000000000..9145c276be --- /dev/null +++ b/tests/net/socket.cpp @@ -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 + +typedef std::auto_ptr wxSockAddressPtr; +typedef std::auto_ptr 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 diff --git a/tests/test.bkl b/tests/test.bkl index f6d3ec51ae..8eea85127a 100644 --- a/tests/test.bkl +++ b/tests/test.bkl @@ -50,6 +50,7 @@ mbconv/mbconvtest.cpp misc/misctests.cpp net/ipc.cpp + net/socket.cpp regex/regextest.cpp regex/wxregextest.cpp scopeguard/scopeguardtest.cpp diff --git a/tests/test_test.dsp b/tests/test_test.dsp index def8ffb07f..be63a023b1 100644 --- a/tests/test_test.dsp +++ b/tests/test_test.dsp @@ -377,6 +377,10 @@ SOURCE=.\scopeguard\scopeguardtest.cpp # End Source File # Begin Source File +SOURCE=.\net\socket.cpp +# End Source File +# Begin Source File + SOURCE=.\streams\socketstream.cpp # End Source File # Begin Source File diff --git a/tests/test_vc7_test.vcproj b/tests/test_vc7_test.vcproj index 2e85983f67..136604537a 100644 --- a/tests/test_vc7_test.vcproj +++ b/tests/test_vc7_test.vcproj @@ -702,6 +702,9 @@ + + diff --git a/tests/test_vc8_test.vcproj b/tests/test_vc8_test.vcproj index 2e19550509..23676eefab 100644 --- a/tests/test_vc8_test.vcproj +++ b/tests/test_vc8_test.vcproj @@ -1015,6 +1015,10 @@ RelativePath=".\scopeguard\scopeguardtest.cpp" > + + diff --git a/tests/test_vc9_test.vcproj b/tests/test_vc9_test.vcproj index 2ff9434f35..df77ba6638 100644 --- a/tests/test_vc9_test.vcproj +++ b/tests/test_vc9_test.vcproj @@ -987,6 +987,10 @@ RelativePath=".\scopeguard\scopeguardtest.cpp" > + +