go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/networkinterface/interface_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package networkinterface_test
     5  
     6  import (
     7  	"go.mondoo.com/cnquery/providers-sdk/v1/inventory"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  	"go.mondoo.com/cnquery/providers/os/connection/mock"
    13  	"go.mondoo.com/cnquery/providers/os/resources/networkinterface"
    14  )
    15  
    16  func TestWindowsRemoteInterface(t *testing.T) {
    17  	mock, err := mock.New("./testdata/windows.toml", &inventory.Asset{
    18  		Platform: &inventory.Platform{
    19  			Name: "windows",
    20  		},
    21  	})
    22  	require.NoError(t, err)
    23  
    24  	ifaces := networkinterface.New(mock)
    25  	list, err := ifaces.Interfaces()
    26  	require.NoError(t, err)
    27  	assert.Equal(t, 1, len(list))
    28  	inet := list[0]
    29  	assert.Equal(t, "Ethernet", inet.Name)
    30  	assert.Equal(t, 6, inet.Index)
    31  	assert.Equal(t, 0, inet.MTU)
    32  	assert.Equal(t, "up|broadcast|multicast", inet.Flags.String())
    33  	assert.Equal(t, "00:15:5d:f2:3b:1d", inet.HardwareAddr.String())
    34  
    35  	assert.Equal(t, 2, len(inet.Addrs))
    36  	assert.Equal(t, "fe80::ed94:1267:afb5:bb76", inet.Addrs[0].String())
    37  	assert.Equal(t, "192.168.178.112", inet.Addrs[1].String())
    38  	// the windows resource does not support multicast addresses
    39  	assert.True(t, len(inet.MulticastAddrs) == 0)
    40  
    41  	ip, err := networkinterface.HostIP(list)
    42  	require.NoError(t, err)
    43  	assert.Equal(t, "192.168.178.112", ip)
    44  }
    45  
    46  func TestMacOsRegex(t *testing.T) {
    47  	line := "lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384"
    48  
    49  	m := networkinterface.IfconfigInterfaceLine.FindStringSubmatch(line)
    50  	assert.Equal(t, "lo0", m[1])
    51  	assert.Equal(t, "UP,LOOPBACK,RUNNING,MULTICAST", m[3])
    52  	assert.Equal(t, "16384", m[4])
    53  }
    54  
    55  func TestMacOSRemoteInterface(t *testing.T) {
    56  	mock, err := mock.New("./testdata/macos.toml", &inventory.Asset{
    57  		Platform: &inventory.Platform{
    58  			Name: "macos",
    59  		},
    60  	})
    61  	require.NoError(t, err)
    62  
    63  	ifaces := networkinterface.New(mock)
    64  	list, err := ifaces.Interfaces()
    65  	require.NoError(t, err)
    66  	assert.Equal(t, 17, len(list))
    67  	inet := list[0]
    68  	assert.Equal(t, "lo0", inet.Name)
    69  	assert.Equal(t, 1, inet.Index)
    70  	assert.Equal(t, 16384, inet.MTU)
    71  	assert.Equal(t, "up|loopback|multicast", inet.Flags.String())
    72  	assert.Equal(t, "", inet.HardwareAddr.String())
    73  	assert.True(t, len(inet.Addrs) > 0)
    74  	assert.True(t, len(inet.MulticastAddrs) == 0)
    75  
    76  	inetAdapter, err := ifaces.InterfaceByName("en0")
    77  	require.NoError(t, err)
    78  	assert.Equal(t, "en0", inetAdapter.Name)
    79  	assert.Equal(t, "8c:85:90:80:1b:e9", inetAdapter.HardwareAddr.String())
    80  
    81  	ip, err := networkinterface.HostIP(list)
    82  	require.NoError(t, err)
    83  	assert.Equal(t, "192.168.178.45", ip)
    84  }
    85  
    86  func TestLinuxRemoteInterface(t *testing.T) {
    87  	mock, err := mock.New("./testdata/linux_remote.toml", &inventory.Asset{
    88  		Platform: &inventory.Platform{
    89  			Name:   "linux",
    90  			Family: []string{"linux"},
    91  		},
    92  	})
    93  	require.NoError(t, err)
    94  
    95  	ifaces := networkinterface.New(mock)
    96  	list, err := ifaces.Interfaces()
    97  	require.NoError(t, err)
    98  	assert.True(t, len(list) == 2)
    99  
   100  	inet, err := ifaces.InterfaceByName("lo")
   101  	require.NoError(t, err)
   102  	assert.Equal(t, "lo", inet.Name)
   103  	assert.Equal(t, 1, inet.Index)
   104  	assert.Equal(t, 0, inet.MTU)
   105  	assert.Equal(t, "up|loopback", inet.Flags.String())
   106  	assert.Equal(t, "", inet.HardwareAddr.String())
   107  	assert.True(t, len(inet.Addrs) == 2)
   108  	assert.True(t, len(inet.MulticastAddrs) == 0)
   109  
   110  	inet, err = ifaces.InterfaceByName("eth0")
   111  	require.NoError(t, err)
   112  	assert.Equal(t, "eth0", inet.Name)
   113  	assert.Equal(t, 2, inet.Index)
   114  	assert.Equal(t, 0, inet.MTU)
   115  	assert.Equal(t, "up|broadcast", inet.Flags.String())
   116  	assert.Equal(t, "", inet.HardwareAddr.String())
   117  	assert.True(t, len(inet.Addrs) == 2)
   118  	assert.True(t, len(inet.MulticastAddrs) == 0)
   119  
   120  	ip, err := networkinterface.HostIP(list)
   121  	require.NoError(t, err)
   122  	assert.Equal(t, "10.128.0.4", ip)
   123  }
   124  
   125  func TestLinuxRemoteInterfaceFlannel(t *testing.T) {
   126  	mock, err := mock.New("./testdata/linux_flannel.toml", &inventory.Asset{
   127  		Platform: &inventory.Platform{
   128  			Name:   "linux",
   129  			Family: []string{"linux"},
   130  		},
   131  	})
   132  	require.NoError(t, err)
   133  
   134  	ifaces := networkinterface.New(mock)
   135  	list, err := ifaces.Interfaces()
   136  	require.NoError(t, err)
   137  	assert.True(t, len(list) == 4)
   138  
   139  	ip, err := networkinterface.HostIP(list)
   140  	require.NoError(t, err)
   141  	assert.Equal(t, "192.168.101.90", ip)
   142  }