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 }