github.phpd.cn/hashicorp/packer@v1.3.2/builder/virtualbox/common/ssh_config_test.go (about) 1 package common 2 3 import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 8 "github.com/hashicorp/packer/helper/communicator" 9 ) 10 11 func testSSHConfig() *SSHConfig { 12 return &SSHConfig{ 13 Comm: communicator.Config{ 14 SSHUsername: "foo", 15 }, 16 } 17 } 18 19 func TestSSHConfigPrepare(t *testing.T) { 20 c := testSSHConfig() 21 errs := c.Prepare(testConfigTemplate(t)) 22 if len(errs) > 0 { 23 t.Fatalf("err: %#v", errs) 24 } 25 26 if c.SSHHostPortMin != 2222 { 27 t.Errorf("bad min ssh host port: %d", c.SSHHostPortMin) 28 } 29 30 if c.SSHHostPortMax != 4444 { 31 t.Errorf("bad max ssh host port: %d", c.SSHHostPortMax) 32 } 33 34 if c.Comm.SSHPort != 22 { 35 t.Errorf("bad ssh port: %d", c.Comm.SSHPort) 36 } 37 } 38 39 func TestSSHConfigPrepare_SSHHostPort(t *testing.T) { 40 var c *SSHConfig 41 var errs []error 42 43 // Bad 44 c = testSSHConfig() 45 c.SSHHostPortMin = 1000 46 c.SSHHostPortMax = 500 47 errs = c.Prepare(testConfigTemplate(t)) 48 if len(errs) == 0 { 49 t.Fatalf("bad: %#v", errs) 50 } 51 52 // Good 53 c = testSSHConfig() 54 c.SSHHostPortMin = 50 55 c.SSHHostPortMax = 500 56 errs = c.Prepare(testConfigTemplate(t)) 57 if len(errs) > 0 { 58 t.Fatalf("should not have error: %s", errs) 59 } 60 } 61 62 func TestSSHConfigPrepare_SSHPrivateKey(t *testing.T) { 63 var c *SSHConfig 64 var errs []error 65 66 c = testSSHConfig() 67 c.Comm.SSHPrivateKeyFile = "" 68 errs = c.Prepare(testConfigTemplate(t)) 69 if len(errs) > 0 { 70 t.Fatalf("should not have error: %#v", errs) 71 } 72 73 c = testSSHConfig() 74 c.Comm.SSHPrivateKeyFile = "/i/dont/exist" 75 errs = c.Prepare(testConfigTemplate(t)) 76 if len(errs) == 0 { 77 t.Fatal("should have error") 78 } 79 80 // Test bad contents 81 tf, err := ioutil.TempFile("", "packer") 82 if err != nil { 83 t.Fatalf("err: %s", err) 84 } 85 defer os.Remove(tf.Name()) 86 defer tf.Close() 87 88 if _, err := tf.Write([]byte("HELLO!")); err != nil { 89 t.Fatalf("err: %s", err) 90 } 91 92 c = testSSHConfig() 93 c.Comm.SSHPrivateKeyFile = tf.Name() 94 errs = c.Prepare(testConfigTemplate(t)) 95 if len(errs) == 0 { 96 t.Fatal("should have error") 97 } 98 99 // Test good contents 100 tf.Seek(0, 0) 101 tf.Truncate(0) 102 tf.Write([]byte(testPem)) 103 c = testSSHConfig() 104 c.Comm.SSHPrivateKeyFile = tf.Name() 105 errs = c.Prepare(testConfigTemplate(t)) 106 if len(errs) > 0 { 107 t.Fatalf("should not have error: %#v", errs) 108 } 109 } 110 111 const testPem = ` 112 -----BEGIN RSA PRIVATE KEY----- 113 MIIEpQIBAAKCAQEAxd4iamvrwRJvtNDGQSIbNvvIQN8imXTRWlRY62EvKov60vqu 114 hh+rDzFYAIIzlmrJopvOe0clqmi3mIP9dtkjPFrYflq52a2CF5q+BdwsJXuRHbJW 115 LmStZUwW1khSz93DhvhmK50nIaczW63u4EO/jJb3xj+wxR1Nkk9bxi3DDsYFt8SN 116 AzYx9kjlEYQ/+sI4/ATfmdV9h78SVotjScupd9KFzzi76gWq9gwyCBLRynTUWlyD 117 2UOfJRkOvhN6/jKzvYfVVwjPSfA9IMuooHdScmC4F6KBKJl/zf/zETM0XyzIDNmH 118 uOPbCiljq2WoRM+rY6ET84EO0kVXbfx8uxUsqQIDAQABAoIBAQCkPj9TF0IagbM3 119 5BSs/CKbAWS4dH/D4bPlxx4IRCNirc8GUg+MRb04Xz0tLuajdQDqeWpr6iLZ0RKV 120 BvreLF+TOdV7DNQ4XE4gSdJyCtCaTHeort/aordL3l0WgfI7mVk0L/yfN1PEG4YG 121 E9q1TYcyrB3/8d5JwIkjabxERLglCcP+geOEJp+QijbvFIaZR/n2irlKW4gSy6ko 122 9B0fgUnhkHysSg49ChHQBPQ+o5BbpuLrPDFMiTPTPhdfsvGGcyCGeqfBA56oHcSF 123 K02Fg8OM+Bd1lb48LAN9nWWY4WbwV+9bkN3Ym8hO4c3a/Dxf2N7LtAQqWZzFjvM3 124 /AaDvAgBAoGBAPLD+Xn1IYQPMB2XXCXfOuJewRY7RzoVWvMffJPDfm16O7wOiW5+ 125 2FmvxUDayk4PZy6wQMzGeGKnhcMMZTyaq2g/QtGfrvy7q1Lw2fB1VFlVblvqhoJa 126 nMJojjC4zgjBkXMHsRLeTmgUKyGs+fdFbfI6uejBnnf+eMVUMIdJ+6I9AoGBANCn 127 kWO9640dttyXURxNJ3lBr2H3dJOkmD6XS+u+LWqCSKQe691Y/fZ/ZL0Oc4Mhy7I6 128 hsy3kDQ5k2V0fkaNODQIFJvUqXw2pMewUk8hHc9403f4fe9cPrL12rQ8WlQw4yoC 129 v2B61vNczCCUDtGxlAaw8jzSRaSI5s6ax3K7enbdAoGBAJB1WYDfA2CoAQO6y9Sl 130 b07A/7kQ8SN5DbPaqrDrBdJziBQxukoMJQXJeGFNUFD/DXFU5Fp2R7C86vXT7HIR 131 v6m66zH+CYzOx/YE6EsUJms6UP9VIVF0Rg/RU7teXQwM01ZV32LQ8mswhTH20o/3 132 uqMHmxUMEhZpUMhrfq0isyApAoGAe1UxGTXfj9AqkIVYylPIq2HqGww7+jFmVEj1 133 9Wi6S6Sq72ffnzzFEPkIQL/UA4TsdHMnzsYKFPSbbXLIWUeMGyVTmTDA5c0e5XIR 134 lPhMOKCAzv8w4VUzMnEkTzkFY5JqFCD/ojW57KvDdNZPVB+VEcdxyAW6aKELXMAc 135 eHLc1nkCgYEApm/motCTPN32nINZ+Vvywbv64ZD+gtpeMNP3CLrbe1X9O+H52AXa 136 1jCoOldWR8i2bs2NVPcKZgdo6fFULqE4dBX7Te/uYEIuuZhYLNzRO1IKU/YaqsXG 137 3bfQ8hKYcSnTfE0gPtLDnqCIxTocaGLSHeG3TH9fTw+dA8FvWpUztI4= 138 -----END RSA PRIVATE KEY----- 139 `