X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINet6Address.test.cc;h=f56ce6ed598bdd3b7a7dfd5b645e24f81b4c7a87;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=f51c6c42546fc10f4a80f140a5e1d2ab7c2a7220;hpb=5017bedd35267106cefeea87664778917026afdd;p=senf.git diff --git a/Socket/Protocols/INet/INet6Address.test.cc b/Socket/Protocols/INet/INet6Address.test.cc index f51c6c4..f56ce6e 100644 --- a/Socket/Protocols/INet/INet6Address.test.cc +++ b/Socket/Protocols/INet/INet6Address.test.cc @@ -1,6 +1,8 @@ -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// $Id$ +// +// Copyright (C) 2007 +// 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 @@ -19,16 +21,16 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief INet6Address.test unit tests */ + \brief INet6Address unit tests */ //#include "INet6Address.test.hh" //#include "INet6Address.test.ih" // Custom includes -#include #include "INet6Address.hh" +#include "../../../Utils/String.hh" -#include +#include "../../../Utils/auto_unit_test.hh" #include #define prefix_ @@ -38,6 +40,8 @@ BOOST_AUTO_UNIT_TEST(inet6Address) { using senf::INet6Address; using senf::INet4Address; + using senf::AddressSyntaxException; + using senf::UnknownHostnameException; { INet6Address addr1 (INet6Address::from_string("0102:0304:0506:0708:090A:0B0C:0D0E:0F00")); @@ -59,7 +63,7 @@ BOOST_AUTO_UNIT_TEST(inet6Address) BOOST_CHECK_EQUAL( addr1[15], 0 ); BOOST_CHECK( INet6Address::from_string("www.6bone.net") != INet6Address::None ); INet6Address addr2; - BOOST_CHECK_EQUAL( boost::lexical_cast(addr2), "::" ); + BOOST_CHECK_EQUAL( senf::str(addr2), "::" ); addr2 = INet6Address::from_string("::1"); BOOST_CHECK( addr1 != addr2 ); addr1 =INet6Address::from_string("::1"); @@ -67,13 +71,17 @@ BOOST_AUTO_UNIT_TEST(inet6Address) addr1 = INet6Address::None; addr2 = INet6Address::from_string("::"); BOOST_CHECK_EQUAL( addr1, addr2 ); - BOOST_CHECK_THROW( INet6Address::from_string(""), INet6Address::SyntaxException ); - BOOST_CHECK_EQUAL( boost::lexical_cast(addr1), "::" ); + BOOST_CHECK_THROW( INet6Address::from_string(""), AddressSyntaxException ); + BOOST_CHECK_EQUAL( senf::str(addr1), "::" ); unsigned char data[] = { 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x21, 0 }; INet6Address addr3 (INet6Address::from_data(data)); BOOST_CHECK_EQUAL( addr3, INet6Address::from_string("1200::21") ); BOOST_CHECK_EQUAL( INet6Address::from_inet4address(INet4Address(0x01020304)), INet6Address::from_string("::ffff:1.2.3.4") ); + + BOOST_CHECK_THROW( INet6Address::from_string("1.2.3.4"), UnknownHostnameException ); + BOOST_CHECK_EQUAL( INet6Address::from_string("1.2.3.4", INet6Address::ResolveINet4), + INet6Address::from_string("::ffff:1.2.3.4") ); } { @@ -110,11 +118,11 @@ BOOST_AUTO_UNIT_TEST(inet6Address) BOOST_CHECK_EQUAL( INet6Address(0xff0f).scope(), INet6Address::ReservedScope ); BOOST_CHECK_EQUAL( INet6Address(0u,0u,0u,0u,0u,0xFFFF,0x0102u,0x0304).inet4address(), INet4Address(0x01020304) ); - BOOST_CHECK( INet6Address(0u,0u,0u,0u,0u,0u,0x0102u,0x0304).ipv4Compatible() ); - BOOST_CHECK( INet6Address(0u,0u,0u,0u,0u,0xFFFF,0x0102,0x0304).ipv4Mapped() ); - BOOST_CHECK( ! addr.ipv4Compatible() ); - BOOST_CHECK( ! addr.ipv4Mapped() ); - + BOOST_CHECK( INet6Address(0u,0u,0u,0u,0u,0u,0x0102u,0x0304).inet4Compatible() ); + BOOST_CHECK( INet6Address(0u,0u,0u,0u,0u,0xFFFF,0x0102,0x0304).inet4Mapped() ); + BOOST_CHECK( ! addr.inet4Compatible() ); + BOOST_CHECK( ! addr.inet4Mapped() ); + BOOST_CHECK( INet6Address::AllNodes.globalMulticastAddr() ); BOOST_CHECK( ! INet6Address::AllNodes.prefixMulticastAddr() ); BOOST_CHECK( ! INet6Address::AllNodes.embeddedRpAddr() ); @@ -124,6 +132,28 @@ BOOST_AUTO_UNIT_TEST(inet6Address) } { + std::stringstream str; + INet6Address addr; + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str ("invalid.host.fhg.de"); + INet6Address addr; + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str; + INet6Address addr (INet6Address::from_string("2001:dead:beef::1002:3004")); + str << addr; + BOOST_CHECK_EQUAL( str.str(), "2001:dead:beef::1002:3004"); + str >> addr; + BOOST_CHECK( ! str.fail()); + BOOST_CHECK_EQUAL(addr, INet6Address::from_string("2001:dead:beef::1002:3004")); + } + + { INet6Address addr; addr.network(0x2000010203040506ull); BOOST_CHECK_EQUAL( addr, INet6Address(0x2000u,0x0102u,0x0304u,0x0506u) ); @@ -132,10 +162,42 @@ BOOST_AUTO_UNIT_TEST(inet6Address) } } +BOOST_AUTO_UNIT_TEST(inet6Network) +{ + using senf::INet6Address; + using senf::INet6Network; + using senf::AddressSyntaxException; + + INet6Network net (INet6Address(0xFF14u,0x1234u),32u); + BOOST_CHECK_EQUAL( senf::str(net.address()), "ff14:1234::"); + BOOST_CHECK_EQUAL( net.prefix_len(), 32u ); + BOOST_CHECK( net ); + BOOST_CHECK( ! INet6Network() ); + + INet6Network net2 ("2001:db8:1234::/44"); + BOOST_CHECK_EQUAL( net2.address(), INet6Address::from_string("2001:db8:1230::") ); + BOOST_CHECK_EQUAL( net2.prefix_len(), 44u ); + + BOOST_CHECK( net != net2 ); + BOOST_CHECK( net.match(INet6Address::from_string("ff14:1234::1")) ); + BOOST_CHECK( ! net2.match(INet6Address::from_string("ff13:1234::1")) ); + BOOST_CHECK( ! net.match(net2) ); + BOOST_CHECK( net2.match(INet6Network("2001:db8:1234::/48")) ); + BOOST_CHECK( ! net2.match(INet6Network("2001:db8:1234::/32")) ); + + BOOST_CHECK_EQUAL( senf::str(net2), "2001:db8:1230::/44" ); + + BOOST_CHECK_EQUAL( net2.host(0x1234u), INet6Address::from_string("2001:db8:1230::1234") ); + BOOST_CHECK_EQUAL( senf::str(net2.subnet(2u,48u)), "2001:db8:1232::/48" ); + + BOOST_CHECK_THROW( INet6Network(""), AddressSyntaxException ); + BOOST_CHECK_THROW( INet6Network("2001:db8:1234::/beef"), AddressSyntaxException ); +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ // fill-column: 100