X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINetAddressing.test.cc;h=3fcb053ec9de6f3a983b76d1d0816660772c00c5;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=ee68de8f140a9cf18c687378111dc82daad1950d;hpb=2452ac2af5863afb6cfb74e6d2c6e35fc75d1f9a;p=senf.git diff --git a/Socket/Protocols/INet/INetAddressing.test.cc b/Socket/Protocols/INet/INetAddressing.test.cc index ee68de8..3fcb053 100644 --- a/Socket/Protocols/INet/INetAddressing.test.cc +++ b/Socket/Protocols/INet/INetAddressing.test.cc @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2006 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Stefan Bund // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -20,15 +20,17 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Unit tests +/** \file + \brief INetAddressing unit tests */ //#include "INetAddressing.test.hh" //#include "INetAddressing.test.ih" // Custom includes #include "INetAddressing.hh" +#include "../../../Utils/String.hh" -#include +#include "../../../Utils/auto_unit_test.hh" #include #define prefix_ @@ -38,43 +40,57 @@ 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"); - BOOST_CHECK ( addr != INet4SocketAddress() ); + BOOST_CHECK ( addr != INet4SocketAddress("127.0.0.2:12345") ); } - { INet4SocketAddress addr1("127.0.0.1:12345"); 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:12345"), INet4Address::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(12345).port(), 12345u ); + BOOST_CHECK_EQUAL( INet4SocketAddress(12345).address(), INet4Address::None ); BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345").address(), INet4Address::Loopback ); BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345").port(), 12345u ); - BOOST_CHECK_EQUAL( boost::lexical_cast(INet4SocketAddress("127.0.0.1:12345")), - "127.0.0.1:12345" ); + BOOST_CHECK_EQUAL( senf::str(INet4SocketAddress("127.0.0.1:12345")), "127.0.0.1:12345" ); + + INet4SocketAddress addr("127.0.0.1:12345"); + BOOST_CHECK_EQUAL( reinterpret_cast< ::sockaddr_in * >(addr.sockaddr_p())->sin_port, + htons(12345) ); + BOOST_CHECK_EQUAL( reinterpret_cast< ::sockaddr_in * >(addr.sockaddr_p())->sin_addr.s_addr, + htonl(INADDR_LOOPBACK) ); + BOOST_CHECK_EQUAL( addr, INet4SocketAddress(addr) ); { - INet4SocketAddress addr("127.0.0.1:12345"); - BOOST_CHECK_EQUAL( reinterpret_cast< ::sockaddr_in * >(addr.sockaddr_p())->sin_port, - htons(12345) ); - 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" ); + std::stringstream str; + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str ("foo:bar"); + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str; + 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")); } } @@ -82,32 +98,59 @@ BOOST_AUTO_UNIT_TEST(inet6SocketAddress) { using senf::INet6Address; using senf::INet6SocketAddress; + using senf::AddressSyntaxException; { INet6SocketAddress addr; - BOOST_CHECK_EQUAL( boost::lexical_cast(addr.address()), "::" ); + BOOST_CHECK( ! addr ); + BOOST_CHECK_EQUAL( senf::str(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()); + } + { + std::stringstream str ("[::1]"); + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str; + 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(), "" ); } { + BOOST_CHECK_THROW( INet6SocketAddress(INet6Address::Loopback, 1, "invalid_iface"), + AddressSyntaxException ); 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(), "" ); @@ -115,24 +158,24 @@ 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_EQUAL( boost::lexical_cast(addr), "[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( senf::str(addr), "[12::21%lo]:12345" ); BOOST_CHECK_EQUAL( addr.address(), INet6Address::from_string("12::21") ); BOOST_CHECK_EQUAL( addr.port(), 12345u ); BOOST_CHECK_EQUAL( addr.iface(), "lo" ); - BOOST_CHECK_EQUAL( boost::lexical_cast(addr), "[12::21%lo]:12345" ); + BOOST_CHECK_EQUAL( senf::str(addr), "[12::21%lo]:12345" ); + BOOST_CHECK_EQUAL( INet6SocketAddress(12345).port(), 12345 ); + BOOST_CHECK_EQUAL( INet6SocketAddress(12345).address(), INet6Address::None ); } } ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ // fill-column: 100