github.com/bshelton229/agent@v3.5.4+incompatible/bootstrap/ssh_test.go (about) 1 package bootstrap 2 3 import ( 4 "path/filepath" 5 "testing" 6 "time" 7 8 "github.com/buildkite/agent/bootstrap/shell" 9 "github.com/buildkite/bintest" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func init() { 14 sshKeyscanRetryInterval = time.Millisecond 15 } 16 17 func TestFindingSSHTools(t *testing.T) { 18 t.Parallel() 19 20 sh, err := shell.New() 21 if err != nil { 22 t.Fatal(err) 23 } 24 25 sh.Logger = shell.TestingLogger{t} 26 27 _, err = findPathToSSHTools(sh) 28 if err != nil { 29 t.Fatal(err) 30 } 31 } 32 33 func TestSSHKeyscanReturnsOutput(t *testing.T) { 34 t.Parallel() 35 36 sh := newTestShell(t) 37 38 keyScan, err := bintest.NewMock("ssh-keyscan") 39 if err != nil { 40 t.Fatal(err) 41 } 42 defer keyScan.CheckAndClose(t) 43 44 sh.Env.Set("PATH", filepath.Dir(keyScan.Path)) 45 46 keyScan. 47 Expect("github.com"). 48 AndWriteToStdout("github.com ssh-rsa xxx="). 49 AndExitWith(0) 50 51 keyScanOutput, err := sshKeyScan(sh, "github.com") 52 53 assert.Equal(t, keyScanOutput, "github.com ssh-rsa xxx=") 54 assert.NoError(t, err) 55 } 56 57 func TestSSHKeyscanWithHostAndPortReturnsOutput(t *testing.T) { 58 t.Parallel() 59 60 sh := newTestShell(t) 61 62 keyScan, err := bintest.NewMock("ssh-keyscan") 63 if err != nil { 64 t.Fatal(err) 65 } 66 defer keyScan.CheckAndClose(t) 67 68 sh.Env.Set("PATH", filepath.Dir(keyScan.Path)) 69 70 keyScan. 71 Expect("-p", "123", "github.com"). 72 AndWriteToStdout("github.com ssh-rsa xxx="). 73 AndExitWith(0) 74 75 keyScanOutput, err := sshKeyScan(sh, "github.com:123") 76 77 assert.Equal(t, keyScanOutput, "github.com ssh-rsa xxx=") 78 assert.NoError(t, err) 79 } 80 81 func TestSSHKeyscanRetriesOnExit1(t *testing.T) { 82 t.Parallel() 83 84 sh := newTestShell(t) 85 86 keyScan, err := bintest.NewMock("ssh-keyscan") 87 if err != nil { 88 t.Fatal(err) 89 } 90 defer keyScan.CheckAndClose(t) 91 92 sh.Env.Set("PATH", filepath.Dir(keyScan.Path)) 93 94 keyScan. 95 Expect("github.com"). 96 AndWriteToStderr("it failed"). 97 Exactly(3). 98 AndExitWith(1) 99 100 keyScanOutput, err := sshKeyScan(sh, "github.com") 101 102 assert.Equal(t, keyScanOutput, "") 103 assert.EqualError(t, err, "`ssh-keyscan \"github.com\"` failed") 104 } 105 106 func TestSSHKeyscanRetriesOnBlankOutputAndExit0(t *testing.T) { 107 t.Parallel() 108 109 sh := newTestShell(t) 110 111 keyScan, err := bintest.NewMock("ssh-keyscan") 112 if err != nil { 113 t.Fatal(err) 114 } 115 defer keyScan.CheckAndClose(t) 116 117 sh.Env.Set("PATH", filepath.Dir(keyScan.Path)) 118 119 keyScan. 120 Expect("github.com"). 121 AndWriteToStdout(""). 122 Exactly(3). 123 AndExitWith(0) 124 125 keyScanOutput, err := sshKeyScan(sh, "github.com") 126 127 assert.Equal(t, keyScanOutput, "") 128 assert.EqualError(t, err, "`ssh-keyscan \"github.com\"` returned nothing") 129 }