X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINetAddressing.test.cc;h=3fcb053ec9de6f3a983b76d1d0816660772c00c5;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=48398e6c84e9ba26dceac375af6166c6d78ecfd0;hpb=2c4c9deecc7491fbfc916aeb41074dcb76e8a2c2;p=senf.git diff --git a/Socket/Protocols/INet/INetAddressing.test.cc b/Socket/Protocols/INet/INetAddressing.test.cc index 48398e6..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,150 +20,162 @@ // 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_ ///////////////////////////////cc.p//////////////////////////////////////// -BOOST_AUTO_UNIT_TEST(inet4Address) +BOOST_AUTO_UNIT_TEST(inet4SocketAddress) { + using senf::INet4SocketAddress; using senf::INet4Address; - using senf::InvalidINetAddressException; + using senf::AddressSyntaxException; { - INet4Address addr; - - addr = "127.0.0.1:12345"; + INet4SocketAddress addr; + BOOST_CHECK( ! addr ); + addr = INet4SocketAddress("127.0.0.1:12345"); + BOOST_CHECK ( addr != INet4SocketAddress("127.0.0.2:12345") ); } - { - INet4Address addr1("127.0.0.1:12345"); - INet4Address addr2(std::string("127.0.0.1:12345")); - INet4Address addr3("127.0.0.1",12345); + INet4SocketAddress addr1("127.0.0.1:12345"); + INet4SocketAddress addr3(INet4Address::Loopback,12345); } - BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345"), INet4Address("127.0.0.1",12345) ); + BOOST_CHECK_EQUAL( INet4SocketAddress("127.0.0.1:12345"), + INet4SocketAddress(INet4Address::Loopback,12345) ); - BOOST_CHECK_THROW( INet4Address("127.0.0.1"), InvalidINetAddressException ); - BOOST_CHECK_THROW( INet4Address("foo@bar:12345"), InvalidINetAddressException ); - BOOST_CHECK_THROW( INet4Address("127.0.0.1:1234a"), InvalidINetAddressException ); - BOOST_CHECK_THROW( INet4Address("foo@bar",12345), InvalidINetAddressException ); + 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( INet4Address("127.0.0.1:12345").host(), "127.0.0.1" ); - BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345").port(), 12345u ); - BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345").str(), "127.0.0.1:12345" ); + 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( 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) ); + + { + std::stringstream str; + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str ("foo:bar"); + str >> addr; + BOOST_CHECK( str.fail()); + } { - INet4Address 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_EQUAL( str.str(), "127.0.0.1:12345" ); + str >> addr; + BOOST_CHECK( ! str.fail()); + BOOST_CHECK_EQUAL(addr, INet4SocketAddress("127.0.0.1:12345")); } } -BOOST_AUTO_UNIT_TEST(inet6Address) +BOOST_AUTO_UNIT_TEST(inet6SocketAddress) { using senf::INet6Address; using senf::INet6SocketAddress; - using senf::InvalidINetAddressException; - - { - INet6Address addr1 ("0102:0304:0506:0708:090A:0B0C:0D0E:0F00"); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[0], 1 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[1], 2 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[2], 3 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[3], 4 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[4], 5 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[5], 6 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[6], 7 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[7], 8 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[8], 9 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[9], 10 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[10], 11 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[11], 12 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[12], 13 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[13], 14 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[14], 15 ); - BOOST_CHECK_EQUAL( addr1.addr().s6_addr[15], 0 ); - INet6Address addr2; - BOOST_CHECK_EQUAL( addr2, "::" ); - addr2 = "::1"; - BOOST_CHECK( addr1 != addr2 ); - addr1 ="::1"; - BOOST_CHECK_EQUAL( addr1, addr2 ); - BOOST_CHECK_EQUAL( addr1.address(),"::1" ); - addr1.clear(); - addr2 = "::"; - BOOST_CHECK_EQUAL( addr1, addr2 ); - BOOST_CHECK_THROW( addr1 = "", InvalidINetAddressException ); - BOOST_CHECK_EQUAL( boost::lexical_cast(addr1), "::" ); - unsigned char data[] = { 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x21, 0 }; - INet6Address addr3 (std::make_pair(&data[0],&data[0]+sizeof(data)-1)); - BOOST_CHECK_EQUAL( addr3, "1200::21" ); - BOOST_CHECK_THROW( INet6Address(std::make_pair(&data[0],&data[0]+sizeof(data))), - InvalidINetAddressException ); - BOOST_CHECK_THROW( INet6Address(std::make_pair(&data[0],&data[0]+sizeof(data)-2)), - InvalidINetAddressException ); - } + using senf::AddressSyntaxException; { INet6SocketAddress addr; - BOOST_CHECK_EQUAL( addr.host(), "::" ); + BOOST_CHECK( ! addr ); + BOOST_CHECK_EQUAL( senf::str(addr.address()), "::" ); BOOST_CHECK_EQUAL( addr.port(), 0u ); BOOST_CHECK_EQUAL( addr.iface(), "" ); - addr = "[12::21]:12345"; - BOOST_CHECK_EQUAL( addr.host(), "12::21" ); + 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") ); + 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 ("::1", 1); - BOOST_CHECK_EQUAL( addr, "[::1]:1" ); + INet6SocketAddress addr (INet6Address::from_string("::1"), 1); + BOOST_CHECK_EQUAL( addr, INet6SocketAddress("[::1]:1") ); BOOST_CHECK_EQUAL( addr.iface(), "" ); } { - INet6SocketAddress addr ("::1", 1, "lo"); - BOOST_CHECK_EQUAL( addr, "[::1@lo]:1" ); + BOOST_CHECK_THROW( INet6SocketAddress(INet6Address::Loopback, 1, "invalid_iface"), + AddressSyntaxException ); + INet6SocketAddress addr (INet6Address::Loopback, 1, "lo"); + BOOST_CHECK_EQUAL( addr, INet6SocketAddress("[::1%lo]:1") ); BOOST_CHECK_EQUAL( addr.iface(), "lo" ); addr.iface(""); BOOST_CHECK_EQUAL( addr.iface(), "" ); addr.port(100u); BOOST_CHECK_EQUAL( addr.port(), 100u ); - addr.host("::2"); - BOOST_CHECK_EQUAL( addr.host(), "::2" ); - BOOST_CHECK_THROW( addr = "", InvalidINetAddressException ); - BOOST_CHECK_THROW( addr = "[::1]", InvalidINetAddressException ); - BOOST_CHECK_THROW( addr = "[::1]1234", InvalidINetAddressException ); - addr = "[12::21@lo]:12345"; - BOOST_CHECK_EQUAL( addr.address(), "[12::21@lo]:12345" ); - BOOST_CHECK_EQUAL( addr.host(), "12::21" ); + addr.address(INet6Address::from_string("::2")); + BOOST_CHECK_EQUAL( addr.address(), INet6Address::from_string("::2") ); + 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