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 }