simple-socket library 1.1.5
|
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 );