simple-socket library 1.1.5

UDPSocket_TEST.cpp

Go to the documentation of this file.
00001 #include <cppunit/extensions/HelperMacros.h>
00002 #include <UDPSocket.h>
00003 
00004 #include <cstring>
00005 
00006 static const char send_msg[] = "The quick brown fox jumps over the lazy dog";
00007 static char recv_msg[sizeof(send_msg)];
00008 static const int len = sizeof(send_msg);
00009 
00010 class UDPSocket_TEST : public CppUnit::TestFixture
00011 {
00012     CPPUNIT_TEST_SUITE( UDPSocket_TEST );
00013     CPPUNIT_TEST( testPeerStatus );
00014     CPPUNIT_TEST( testMulticast );
00015     CPPUNIT_TEST( testSendTo );
00016     CPPUNIT_TEST_SUITE_END();
00017 
00018 private:
00019     NET::UDPSocket* send_socket;
00020     NET::UDPSocket* recv_socket;
00021 
00022 public:
00023     void setUp()
00024     {
00025         send_socket = new NET::UDPSocket();
00026         recv_socket = new NET::UDPSocket();
00027     }
00028 
00029     void tearDown()
00030     {
00031         delete send_socket;
00032         delete recv_socket;
00033     }
00034 
00035     void testPeerStatus()
00036     {
00037         send_socket->connect( "127.0.0.1", 65001);
00038         CPPUNIT_ASSERT( !send_socket->peerDisconnected() );
00039         send_socket->send( "", 1); // ok, no icmp received yet
00040         send_socket->send( "", 1); // icmp received, send fails
00041         CPPUNIT_ASSERT( send_socket->peerDisconnected() );
00042     }
00043 
00044     void testMulticast()
00045     {
00046         int ret;
00047         send_socket->setMulticastTTL(0);
00048         send_socket->connect( "224.40.0.1", 47777);
00049         recv_socket->bind(47777);
00050         recv_socket->joinGroup("224.40.0.1");
00051 
00052         ret = send_socket->send( send_msg, len);
00053         CPPUNIT_ASSERT_EQUAL( len, ret );
00054         ret = recv_socket->receive( recv_msg, len);
00055         CPPUNIT_ASSERT_EQUAL( len, ret );
00056         CPPUNIT_ASSERT( std::memcmp( send_msg, recv_msg, len) == 0 );
00057 
00058         recv_socket->leaveGroup("224.40.0.1");
00059         ret = send_socket->send( send_msg, len);
00060         CPPUNIT_ASSERT_EQUAL( len, ret );
00061 
00062         ret = recv_socket->timedReceive( recv_msg, len, 1);
00063         CPPUNIT_ASSERT_EQUAL( 0, ret );
00064     }
00065 
00066     void testSendTo()
00067     {
00068         int ret;
00069         std::string source;
00070         unsigned short port = 0;
00071         send_socket->bind(47776);
00072         recv_socket->bind(47777);
00073         send_socket->sendTo( send_msg, len, "127.0.0.1", 47777);
00074 
00075         ret = recv_socket->receiveFrom( recv_msg, len, source, port);
00076         CPPUNIT_ASSERT_EQUAL( len, ret );
00077         CPPUNIT_ASSERT_EQUAL( (unsigned short)47776, port );
00078         CPPUNIT_ASSERT_EQUAL( std::string("127.0.0.1"), source );
00079 
00080         ret = recv_socket->timedReceiveFrom( recv_msg, len, source, port, 10);
00081         CPPUNIT_ASSERT_EQUAL( 0, ret );
00082         CPPUNIT_ASSERT_EQUAL( (unsigned short)47776, port );
00083         CPPUNIT_ASSERT_EQUAL( std::string("127.0.0.1"), source );
00084         CPPUNIT_ASSERT( std::memcmp( send_msg, recv_msg, len) == 0 );
00085     }
00086 };
00087 
00088 CPPUNIT_TEST_SUITE_REGISTRATION( UDPSocket_TEST );