Socket: Make SocketProtocol::close() non-const (at least all other virtuals need...
[senf.git] / Socket / Protocols / INet / INetAddressing.test.cc
index 225aae9..8049dac 100644 (file)
@@ -38,10 +38,11 @@ BOOST_AUTO_UNIT_TEST(inet4SocketAddress)
 {
     using senf::INet4SocketAddress;
     using senf::INet4Address;
+    using senf::AddressSyntaxException;
 
     {
         INet4SocketAddress addr;
-        
+
         BOOST_CHECK( ! addr );
 
         addr = INet4SocketAddress("127.0.0.1:12345");
@@ -53,13 +54,13 @@ BOOST_AUTO_UNIT_TEST(inet4SocketAddress)
         INet4SocketAddress addr3(INet4Address::Loopback,12345);
     }
 
-    BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345"), 
+    BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345"),
                        INet4SocketAddress(INet4Address::Loopback,12345) );
 
-    BOOST_CHECK_THROW( INet4SocketAddress("127.0.0.1"), INet4SocketAddress::SyntaxException );
-    BOOST_CHECK_THROW( INet4SocketAddress("foo:bar"), INet4SocketAddress::SyntaxException );
-    BOOST_CHECK_THROW( INet4SocketAddress(":12345"), INet4SocketAddress::SyntaxException );
-    BOOST_CHECK_THROW( INet4SocketAddress("127.0.0.1:1234a"), INet4SocketAddress::SyntaxException );
+    BOOST_CHECK_THROW( INet4SocketAddress("127.0.0.1"), AddressSyntaxException );
+    BOOST_CHECK_THROW( INet4SocketAddress("foo:bar"), AddressSyntaxException );
+    BOOST_CHECK_THROW( INet4SocketAddress(":12345"), AddressSyntaxException );
+    BOOST_CHECK_THROW( INet4SocketAddress("127.0.0.1:1234a"), AddressSyntaxException );
 
     BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345").address(), INet4Address::Loopback );
     BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345").port(), 12345u );
@@ -73,9 +74,17 @@ BOOST_AUTO_UNIT_TEST(inet4SocketAddress)
         BOOST_CHECK_EQUAL( reinterpret_cast< ::sockaddr_in * >(addr.sockaddr_p())->sin_addr.s_addr,
                            htonl(INADDR_LOOPBACK) );
 
-        std::stringstream s;
-        s << addr;
-        BOOST_CHECK_EQUAL( s.str(), "127.0.0.1:12345" );
+        BOOST_CHECK_EQUAL( addr, INet4SocketAddress(addr) );
+
+        std::stringstream str;
+        str >> addr;
+        BOOST_CHECK( str.fail());
+        str.clear();
+        str << addr;
+        BOOST_CHECK_EQUAL( str.str(), "127.0.0.1:12345" );
+        str >> addr;
+        BOOST_CHECK( ! str.fail());
+        BOOST_CHECK_EQUAL(addr, INet4SocketAddress("127.0.0.1:12345"));
     }
 }
 
@@ -83,32 +92,48 @@ BOOST_AUTO_UNIT_TEST(inet6SocketAddress)
 {
     using senf::INet6Address;
     using senf::INet6SocketAddress;
+    using senf::AddressSyntaxException;
 
     {
         INet6SocketAddress addr;
+        BOOST_CHECK( ! addr );
         BOOST_CHECK_EQUAL( boost::lexical_cast<std::string>(addr.address()), "::" );
         BOOST_CHECK_EQUAL( addr.port(), 0u );
         BOOST_CHECK_EQUAL( addr.iface(), "" );
-        addr = senf::INet6SocketAddress("[12::21]:12345");
+        addr = INet6SocketAddress("[12::21]:12345");
+        BOOST_CHECK( addr == INet6SocketAddress("[12::21]:12345") );
+        BOOST_CHECK_EQUAL( addr, INet6SocketAddress(addr) );
+        BOOST_CHECK( addr != INet6SocketAddress("[12::21%lo]:12345") );
+        BOOST_CHECK( addr );
         BOOST_CHECK_EQUAL( addr.address(), INet6Address::from_string("12::21") );
         BOOST_CHECK_EQUAL( addr.port(), 12345u );
         BOOST_CHECK_EQUAL( addr.iface(), "" );
         BOOST_CHECK_EQUAL( addr, INet6SocketAddress("[12::21]:12345") );
-        BOOST_CHECK_NO_THROW( INet6SocketAddress("www.6bone.net:80") );
-        addr = senf::INet6SocketAddress("1.2.3.4:12345", INet6Address::ResolveINet4);
+        SENF_CHECK_NO_THROW( INet6SocketAddress("www.6bone.net:80") );
+        addr = INet6SocketAddress("1.2.3.4:12345", INet6Address::ResolveINet4);
         BOOST_CHECK_EQUAL( addr.address(), INet6Address::from_string("::ffff:1.2.3.4") );
         BOOST_CHECK_EQUAL( addr.port(), 12345u );
+
+        std::stringstream str;
+        str >> addr;
+        BOOST_CHECK( str.fail());
+        str.clear();
+        str << addr;
+        BOOST_CHECK_EQUAL( str.str(), "[::ffff:1.2.3.4]:12345");
+        str >> addr;
+        BOOST_CHECK( ! str.fail());
+        BOOST_CHECK_EQUAL(addr, INet6SocketAddress("[::ffff:1.2.3.4]:12345"));
     }
 
     {
         INet6SocketAddress addr (INet6Address::from_string("::1"), 1);
-        BOOST_CHECK_EQUAL( addr,senf::INet6SocketAddress("[::1]:1") );
+        BOOST_CHECK_EQUAL( addr, INet6SocketAddress("[::1]:1") );
         BOOST_CHECK_EQUAL( addr.iface(), "" );
     }
 
     {
         INet6SocketAddress addr (INet6Address::Loopback, 1, "lo");
-        BOOST_CHECK_EQUAL( addr, senf::INet6SocketAddress("[::1%lo]:1") );
+        BOOST_CHECK_EQUAL( addr, INet6SocketAddress("[::1%lo]:1") );
         BOOST_CHECK_EQUAL( addr.iface(), "lo" );
         addr.iface("");
         BOOST_CHECK_EQUAL( addr.iface(), "" );
@@ -116,12 +141,10 @@ BOOST_AUTO_UNIT_TEST(inet6SocketAddress)
         BOOST_CHECK_EQUAL( addr.port(), 100u );
         addr.address(INet6Address::from_string("::2"));
         BOOST_CHECK_EQUAL( addr.address(), INet6Address::from_string("::2") );
-        BOOST_CHECK_THROW( senf::INet6SocketAddress(""), INet6SocketAddress::SyntaxException );
-        BOOST_CHECK_THROW( senf::INet6SocketAddress("[::1]"), 
-                           INet6SocketAddress::SyntaxException );
-        BOOST_CHECK_THROW( senf::INet6SocketAddress("[::1]1234"), 
-                           INet6SocketAddress::SyntaxException );
-        addr = senf::INet6SocketAddress("[12::21%lo]:12345");
+        BOOST_CHECK_THROW( INet6SocketAddress(""), AddressSyntaxException );
+        BOOST_CHECK_THROW( INet6SocketAddress("[::1]"), AddressSyntaxException );
+        BOOST_CHECK_THROW( INet6SocketAddress("[::1]1234"), AddressSyntaxException );
+        addr = INet6SocketAddress("[12::21%lo]:12345");
         BOOST_CHECK_EQUAL( boost::lexical_cast<std::string>(addr), "[12::21%lo]:12345" );
         BOOST_CHECK_EQUAL( addr.address(), INet6Address::from_string("12::21") );
         BOOST_CHECK_EQUAL( addr.port(), 12345u );
@@ -133,7 +156,7 @@ BOOST_AUTO_UNIT_TEST(inet6SocketAddress)
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100