X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINet4Address.test.cc;h=3c75262084350eab7155d2fd746ecef40ebd9a58;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=e4d92de18098e622cb453de9b87ed54a84d38d74;hpb=9c67039f2a8d9c445ce21912ed814743f61b104c;p=senf.git diff --git a/Socket/Protocols/INet/INet4Address.test.cc b/Socket/Protocols/INet/INet4Address.test.cc index e4d92de..3c75262 100644 --- a/Socket/Protocols/INet/INet4Address.test.cc +++ b/Socket/Protocols/INet/INet4Address.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,7 +21,7 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief INet4Address.test unit tests */ + \brief INet4Address unit tests */ //#include "INet4Address.test.hh" //#include "INet4Address.test.ih" @@ -28,8 +30,9 @@ #include #include #include "INet4Address.hh" +#include "../../../Utils/String.hh" -#include +#include "../../../Utils/auto_unit_test.hh" #include #define prefix_ @@ -37,37 +40,89 @@ BOOST_AUTO_UNIT_TEST(inet4Address) { - senf::INet4Address addr (senf::INet4Address::from_string("127.0.0.1")); - BOOST_CHECK_EQUAL( addr, senf::INet4Address::Loopback ); + using senf::INet4Address; + using senf::AddressSyntaxException; + using senf::UnknownHostnameException; + + INet4Address addr (INet4Address::from_string("127.0.0.1")); + BOOST_CHECK_EQUAL( addr, INet4Address::Loopback ); + BOOST_CHECK( addr != INet4Address::Broadcast ); - addr = senf::INet4Address::from_string("localhost"); - BOOST_CHECK_EQUAL( addr, senf::INet4Address::Loopback ); + addr = INet4Address::from_string("localhost"); + BOOST_CHECK_EQUAL( addr, INet4Address::Loopback ); BOOST_CHECK( addr.loopback() ); char data[] = { 128, 129, 130, 131 }; - addr = senf::INet4Address::from_data(data); - BOOST_CHECK_EQUAL( addr, senf::INet4Address::from_string("128.129.130.131") ); - BOOST_CHECK_EQUAL( addr.raw(), htonl(0x80818283u) ); + addr = INet4Address::from_data(data); + BOOST_CHECK_EQUAL( addr, INet4Address::from_string("128.129.130.131") ); + BOOST_CHECK_EQUAL( addr.inaddr(), htonl(0x80818283u) ); + BOOST_CHECK_EQUAL( addr.address(), 0x80818283u ); BOOST_CHECK( ! addr.loopback() ); BOOST_CHECK( ! addr.local() ); - BOOST_CHECK( senf::INet4Address::from_string("192.168.1.2").local() ); + BOOST_CHECK( INet4Address::from_string("192.168.1.2").local() ); BOOST_CHECK( ! addr.multicast() ); - BOOST_CHECK( senf::INet4Address::from_string("224.1.2.3").multicast() ); + BOOST_CHECK( INet4Address::from_string("224.1.2.3").multicast() ); BOOST_CHECK( ! addr.broadcast() ); - BOOST_CHECK( senf::INet4Address::from_string("255.255.255.255").broadcast() ); + BOOST_CHECK( INet4Address::from_string("255.255.255.255").broadcast() ); BOOST_CHECK( addr ); - BOOST_CHECK( ! senf::INet4Address() ); + BOOST_CHECK( ! INet4Address() ); + BOOST_CHECK_THROW( INet4Address::from_string(""), AddressSyntaxException ); + BOOST_CHECK( INet4Address::from_string("www.6bone.net") != INet4Address::None ); + BOOST_CHECK_THROW( INet4Address::from_string("invalid.host.fhg.de"), UnknownHostnameException); - std::stringstream str; - str << addr; - BOOST_CHECK_EQUAL( str.str(), "128.129.130.131" ); + { + std::stringstream str; + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str ("invalid.host.fhg.de"); + str >> addr; + BOOST_CHECK( str.fail()); + } + { + std::stringstream str; + str << addr; + BOOST_CHECK_EQUAL( str.str(), "128.129.130.131" ); + str >> addr; + BOOST_CHECK( ! str.fail()); + BOOST_CHECK_EQUAL(addr, INet4Address::from_string("128.129.130.131") ); + } +} + +BOOST_AUTO_UNIT_TEST(inet4Network) +{ + senf::INet4Network net (senf::INet4Address::Loopback,8); + BOOST_CHECK_EQUAL( net.address().address(), 0x7F000000u ); + BOOST_CHECK_EQUAL( net.prefix_len(), 8u ); + BOOST_CHECK( net ); + BOOST_CHECK( ! senf::INet4Network() ); + + senf::INet4Network net2 ("192.0.111.222/16"); + BOOST_CHECK_EQUAL( net2.address(), senf::INet4Address::from_string("192.0.0.0") ); + BOOST_CHECK_EQUAL( net2.prefix_len(), 16u ); + + BOOST_CHECK( net != net2 ); + BOOST_CHECK( net.match(senf::INet4Address::from_string("127.0.0.1")) ); + BOOST_CHECK( ! net2.match(senf::INet4Address::from_string("127.0.0.1")) ); + BOOST_CHECK( ! net.match(net2) ); + BOOST_CHECK( net2.match(senf::INet4Network("192.0.111.0/24")) ); + BOOST_CHECK( ! net2.match(senf::INet4Network("192.0.0.0/15")) ); + + BOOST_CHECK_EQUAL( senf::str(net2), "192.0.0.0/16" ); + + BOOST_CHECK_EQUAL( net2.host(-1), senf::INet4Address::from_string("192.0.255.255") ); + BOOST_CHECK_EQUAL( senf::str(net2.subnet(2u,24u)), "192.0.2.0/24" ); + + BOOST_CHECK_THROW( senf::INet4Network(""), senf::AddressSyntaxException ); + BOOST_CHECK_THROW( senf::INet4Network("192.0.2.0/24/beef"), senf::AddressSyntaxException ); } ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ // fill-column: 100