go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/connection/ssh/cat/cat_test.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package cat_test
     5  
     6  import (
     7  	"errors"
     8  	"io"
     9  	"os"
    10  	"path/filepath"
    11  	"testing"
    12  	"time"
    13  
    14  	"github.com/stretchr/testify/assert"
    15  	"github.com/stretchr/testify/require"
    16  	"go.mondoo.com/cnquery/llx"
    17  	"go.mondoo.com/cnquery/providers-sdk/v1/inventory"
    18  	"go.mondoo.com/cnquery/providers/os/connection/mock"
    19  	"go.mondoo.com/cnquery/providers/os/connection/shared"
    20  	"go.mondoo.com/cnquery/providers/os/connection/ssh/cat"
    21  )
    22  
    23  func TestCatFs(t *testing.T) {
    24  	filepath, _ := filepath.Abs("./testdata/cat.toml")
    25  	p, err := mock.New(filepath, nil)
    26  	require.NoError(t, err)
    27  
    28  	flags := map[string]*llx.Primitive{
    29  		"sudo": llx.BoolPrimitive(true),
    30  	}
    31  
    32  	cw := &CommandWrapper{
    33  		commandRunner: p,
    34  		sudo:          shared.ParseSudo(flags),
    35  	}
    36  
    37  	catfs := cat.New(cw)
    38  
    39  	// get file stats
    40  	fi, err := catfs.Stat("/etc/ssh/sshd_config")
    41  	require.NoError(t, err)
    42  
    43  	assert.Equal(t, int64(4317), fi.Size())
    44  	assert.Equal(t, false, fi.IsDir())
    45  	assert.Equal(t, os.FileMode(0x180), fi.Mode())
    46  	assert.Equal(t, time.Unix(1590420240, 0), fi.ModTime())
    47  
    48  	// fetch file content
    49  	f, err := catfs.Open("/etc/ssh/sshd_config")
    50  	require.NoError(t, err)
    51  	defer f.Close()
    52  
    53  	data, err := io.ReadAll(f)
    54  	require.NoError(t, err)
    55  
    56  	expected := `X11Forwarding no
    57  PermitRootLogin no
    58  PasswordAuthentication yes
    59  MaxAuthTries 4
    60  UsePAM yes
    61  `
    62  	assert.Equal(t, expected, string(data))
    63  
    64  	dir, err := catfs.Open("/etc/ssh")
    65  	require.NoError(t, err)
    66  	defer dir.Close()
    67  
    68  	stat, err := dir.Stat()
    69  	require.NoError(t, err)
    70  	assert.Equal(t, true, stat.IsDir())
    71  	files, err := dir.Readdirnames(-1)
    72  	require.NoError(t, err)
    73  	assert.Equal(t, []string{"ssh_config", "ssh_config.d", "ssh_host_ecdsa_key", "ssh_host_ecdsa_key.pub", "ssh_host_ed25519_key", "ssh_host_ed25519_key.pub", "ssh_host_rsa_key", "ssh_host_rsa_key.pub", "sshd_config", "sshd_config.rpmnew"}, files)
    74  
    75  	_, err = catfs.Open("/etc/not-there")
    76  	assert.True(t, errors.Is(err, os.ErrNotExist))
    77  }
    78  
    79  type CommandWrapper struct {
    80  	commandRunner cat.CommandRunner
    81  	sudo          *inventory.Sudo
    82  }
    83  
    84  func (cw *CommandWrapper) RunCommand(command string) (*shared.Command, error) {
    85  	cmd := shared.BuildSudoCommand(cw.sudo, command)
    86  	return cw.commandRunner.RunCommand(cmd)
    87  }