Line data Source code
1 : // Copyright (c) 2011-2023 Made to Order Software Corp. All Rights Reserved 2 : // 3 : // https://snapwebsites.org/project/libaddr 4 : // contact@m2osw.com 5 : // 6 : // Permission is hereby granted, free of charge, to any 7 : // person obtaining a copy of this software and 8 : // associated documentation files (the "Software"), to 9 : // deal in the Software without restriction, including 10 : // without limitation the rights to use, copy, modify, 11 : // merge, publish, distribute, sublicense, and/or sell 12 : // copies of the Software, and to permit persons to whom 13 : // the Software is furnished to do so, subject to the 14 : // following conditions: 15 : // 16 : // The above copyright notice and this permission notice 17 : // shall be included in all copies or substantial 18 : // portions of the Software. 19 : // 20 : // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 21 : // ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 22 : // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 23 : // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 24 : // EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 25 : // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 : // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 27 : // ARISING FROM, OUT OF OR IN CONNECTION WITH THE 28 : // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 : // SOFTWARE. 30 : 31 : 32 : /** \file 33 : * \brief Verify the interfaces function. 34 : * 35 : * This file implements a test that verifies the function that 36 : * reads the list of IP addresses as defined in your local 37 : * interfaces. 38 : */ 39 : 40 : // addr 41 : // 42 : #include <libaddr/iface.h> 43 : 44 : 45 : // self 46 : // 47 : #include "catch_main.h" 48 : 49 : 50 : // C 51 : // 52 : #include <net/if.h> 53 : 54 : 55 : // last include 56 : // 57 : #include <snapdev/poison.h> 58 : 59 : 60 : 61 1 : CATCH_TEST_CASE( "ipv4::interfaces", "[ipv4]" ) 62 : { 63 1 : CATCH_GIVEN("iface::get_local_addresses()") 64 : { 65 1 : addr::iface::pointer_vector_t list(addr::iface::get_local_addresses()); 66 : 67 1 : CATCH_START_SECTION("verify list") 68 : { 69 1 : CATCH_REQUIRE_FALSE(list->empty()); // at least "lo" 70 : 71 : // add stuff like verify there is an "lo" entry? 72 15 : for(auto i : *list) 73 : { 74 14 : CATCH_REQUIRE_FALSE(i->get_name().empty()); 75 14 : CATCH_REQUIRE(i->get_flags() != 0); 76 : 77 14 : switch(i->get_address().get_network_type()) 78 : { 79 14 : case addr::network_type_t::NETWORK_TYPE_PRIVATE: 80 : case addr::network_type_t::NETWORK_TYPE_PUBLIC: 81 : case addr::network_type_t::NETWORK_TYPE_LOOPBACK: 82 : case addr::network_type_t::NETWORK_TYPE_LINK_LOCAL: 83 14 : break; 84 : 85 0 : default: 86 : //std::cerr << "unexpected interface type " << static_cast<int>(i->get_address().get_network_type()) << "\n"; 87 0 : CATCH_REQUIRE(i->get_address().get_network_type() == addr::network_type_t::NETWORK_TYPE_PUBLIC); 88 0 : break; 89 : 90 : } 91 : 92 14 : CATCH_REQUIRE(i->has_broadcast_address() == ((i->get_flags() & IFF_BROADCAST) != 0)); 93 14 : CATCH_REQUIRE(i->has_destination_address() == ((i->get_flags() & IFF_POINTOPOINT) != 0)); 94 : 95 14 : addr::addr const & b(i->get_broadcast_address()); 96 14 : if(!i->has_broadcast_address()) 97 : { 98 2 : CATCH_REQUIRE(b.is_default()); 99 : } 100 : 101 14 : addr::addr const & d(i->get_destination_address()); 102 14 : if(!i->has_destination_address()) 103 : { 104 14 : CATCH_REQUIRE(d.is_default()); 105 : } 106 14 : } 107 : } 108 1 : CATCH_END_SECTION() 109 2 : } 110 1 : } 111 : 112 : 113 : // vim: ts=4 sw=4 et