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  }