go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/port_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package resources 5 6 import ( 7 "bufio" 8 "os" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestParseLinuxProcNetIPv4(t *testing.T) { 16 fi, err := os.Open("./ports/testdata/tcp4.txt") 17 require.NoError(t, err) 18 defer fi.Close() 19 20 scanner := bufio.NewScanner(fi) 21 scanner.Scan() 22 line := scanner.Text() 23 port, err := parseProcNetLine(line) 24 require.NoError(t, err) 25 require.Nil(t, port) 26 27 scanner.Scan() 28 line = scanner.Text() 29 port, err = parseProcNetLine(line) 30 require.NoError(t, err) 31 require.NotNil(t, port) 32 33 assert.Equal(t, int64(53), (*port).Port) 34 assert.Equal(t, "127.0.0.53", port.Address) 35 assert.Equal(t, int64(0), port.RemotePort) 36 assert.Equal(t, "0.0.0.0", port.RemoteAddress) 37 38 scanner.Scan() 39 scanner.Scan() 40 line = scanner.Text() 41 port, err = parseProcNetLine(line) 42 require.NoError(t, err) 43 require.NotNil(t, port) 44 45 assert.Equal(t, int64(37200), (*port).Port) 46 assert.Equal(t, "10.0.2.15", port.Address) 47 assert.Equal(t, int64(80), port.RemotePort) 48 assert.Equal(t, "185.125.190.36", port.RemoteAddress) 49 } 50 51 func TestParseLinuxProcNetIPv6(t *testing.T) { 52 fi, err := os.Open("./ports/testdata/tcp6.txt") 53 require.NoError(t, err) 54 defer fi.Close() 55 56 scanner := bufio.NewScanner(fi) 57 scanner.Scan() 58 line := scanner.Text() 59 port, err := parseProcNetLine(line) 60 require.NoError(t, err) 61 require.Nil(t, port) 62 63 scanner.Scan() 64 line = scanner.Text() 65 port, err = parseProcNetLine(line) 66 require.NoError(t, err) 67 require.NotNil(t, port) 68 69 assert.Equal(t, int64(22), (*port).Port) 70 assert.Equal(t, "[::]", port.Address) 71 assert.Equal(t, int64(0), port.RemotePort) 72 assert.Equal(t, "[::]", port.RemoteAddress) 73 74 // third line tests little-to-big endian 75 // reading the hex ipv6 address 00000000000000000000000001000000 76 // to be [::1] 77 scanner.Scan() 78 line = scanner.Text() 79 port, err = parseProcNetLine(line) 80 require.NoError(t, err) 81 require.NotNil(t, port) 82 83 assert.Equal(t, int64(631), (*port).Port) 84 assert.Equal(t, "[::1]", port.Address) 85 assert.Equal(t, int64(0), port.RemotePort) 86 assert.Equal(t, "[::]", port.RemoteAddress) 87 } 88 89 func TestParseLinuxFind(t *testing.T) { 90 fi, err := os.Open("./ports/testdata/find_nginx_container.txt") 91 require.NoError(t, err) 92 defer fi.Close() 93 94 scanner := bufio.NewScanner(fi) 95 scanner.Scan() 96 line := scanner.Text() 97 pid, inode, err := parseLinuxFindLine(line) 98 require.NoError(t, err) 99 require.Equal(t, int64(0), pid) 100 require.Equal(t, int64(0), inode) 101 102 scanner.Scan() 103 line = scanner.Text() 104 pid, inode, err = parseLinuxFindLine(line) 105 require.NoError(t, err) 106 require.Equal(t, int64(0), pid) 107 require.Equal(t, int64(0), inode) 108 109 scanner.Scan() 110 line = scanner.Text() 111 pid, inode, err = parseLinuxFindLine(line) 112 require.NoError(t, err) 113 require.Equal(t, int64(1), pid) 114 require.Equal(t, int64(41866685), inode) 115 116 scanner.Scan() 117 line = scanner.Text() 118 pid, inode, err = parseLinuxFindLine(line) 119 require.NoError(t, err) 120 require.Equal(t, int64(0), pid) 121 require.Equal(t, int64(0), inode) 122 123 scanner.Scan() 124 line = scanner.Text() 125 pid, inode, err = parseLinuxFindLine(line) 126 require.NoError(t, err) 127 require.Equal(t, int64(0), pid) 128 require.Equal(t, int64(0), inode) 129 }