LCOV - code coverage report
Current view: top level - tests - catch_interfaces.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 24 83.3 %
Date: 2022-03-01 21:05:13 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2011-2022  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             : // self
      41             : //
      42             : #include    "catch_main.h"
      43             : 
      44             : 
      45             : // addr lib
      46             : //
      47             : #include    <libaddr/iface.h>
      48             : 
      49             : 
      50             : // C lib
      51             : //
      52             : #include    <net/if.h>
      53             : 
      54             : 
      55             : // last include
      56             : //
      57             : #include    <snapdev/poison.h>
      58             : 
      59             : 
      60             : 
      61           3 : CATCH_TEST_CASE( "ipv4::interfaces", "[ipv4]" )
      62             : {
      63           2 :     CATCH_GIVEN("iface::get_local_addresses()")
      64             :     {
      65           2 :         addr::iface::vector_t list(addr::iface::get_local_addresses());
      66             : 
      67           2 :         CATCH_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          16 :             for(auto i : list)
      73             :             {
      74          15 :                 CATCH_REQUIRE_FALSE(i.get_name().empty());
      75          15 :                 CATCH_REQUIRE(i.get_flags() != 0);
      76             : 
      77          15 :                 switch(i.get_address().get_network_type())
      78             :                 {
      79          15 :                 case addr::addr::network_type_t::NETWORK_TYPE_PRIVATE:
      80             :                 case addr::addr::network_type_t::NETWORK_TYPE_PUBLIC:
      81             :                 case addr::addr::network_type_t::NETWORK_TYPE_LOOPBACK:
      82             :                 case addr::addr::network_type_t::NETWORK_TYPE_LINK_LOCAL:
      83          15 :                     break;
      84             : 
      85           0 :                 default:
      86           0 : 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::addr::network_type_t::NETWORK_TYPE_PUBLIC);
      88           0 :                     break;
      89             : 
      90             :                 }
      91             : 
      92          15 :                 CATCH_REQUIRE(i.has_broadcast_address() == ((i.get_flags() & IFF_BROADCAST) != 0));
      93          15 :                 CATCH_REQUIRE(i.has_destination_address() == ((i.get_flags() & IFF_POINTOPOINT) != 0));
      94             : 
      95          15 :                 addr::addr const & b(i.get_broadcast_address());
      96          15 :                 if(!i.has_broadcast_address())
      97             :                 {
      98           2 :                     CATCH_REQUIRE(b.is_default());
      99             :                 }
     100             : 
     101          15 :                 addr::addr const & d(i.get_destination_address());
     102          15 :                 if(!i.has_destination_address())
     103             :                 {
     104          15 :                     CATCH_REQUIRE(d.is_default());
     105             :                 }
     106             :             }
     107             :         }
     108             :     }
     109           7 : }
     110             : 
     111             : 
     112             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.13