github.phpd.cn/hashicorp/packer@v1.3.2/builder/vmware/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.Comm.SSHPort != 22 { 27 t.Errorf("bad ssh port: %d", c.Comm.SSHPort) 28 } 29 } 30 31 func TestSSHConfigPrepare_SSHPrivateKey(t *testing.T) { 32 var c *SSHConfig 33 var errs []error 34 35 c = testSSHConfig() 36 c.Comm.SSHPrivateKeyFile = "" 37 errs = c.Prepare(testConfigTemplate(t)) 38 if len(errs) > 0 { 39 t.Fatalf("should not have error: %#v", errs) 40 } 41 42 c = testSSHConfig() 43 c.Comm.SSHPrivateKeyFile = "/i/dont/exist" 44 errs = c.Prepare(testConfigTemplate(t)) 45 if len(errs) == 0 { 46 t.Fatal("should have error") 47 } 48 49 // Test bad contents 50 tf, err := ioutil.TempFile("", "packer") 51 if err != nil { 52 t.Fatalf("err: %s", err) 53 } 54 defer os.Remove(tf.Name()) 55 defer tf.Close() 56 57 if _, err := tf.Write([]byte("HELLO!")); err != nil { 58 t.Fatalf("err: %s", err) 59 } 60 61 c = testSSHConfig() 62 c.Comm.SSHPrivateKeyFile = tf.Name() 63 errs = c.Prepare(testConfigTemplate(t)) 64 if len(errs) == 0 { 65 t.Fatal("should have error") 66 } 67 68 // Test good contents 69 tf.Seek(0, 0) 70 tf.Truncate(0) 71 tf.Write([]byte(testPem)) 72 c = testSSHConfig() 73 c.Comm.SSHPrivateKeyFile = tf.Name() 74 errs = c.Prepare(testConfigTemplate(t)) 75 if len(errs) > 0 { 76 t.Fatalf("should not have error: %#v", errs) 77 } 78 } 79 80 const testPem = ` 81 -----BEGIN RSA PRIVATE KEY----- 82 MIIEpQIBAAKCAQEAxd4iamvrwRJvtNDGQSIbNvvIQN8imXTRWlRY62EvKov60vqu 83 hh+rDzFYAIIzlmrJopvOe0clqmi3mIP9dtkjPFrYflq52a2CF5q+BdwsJXuRHbJW 84 LmStZUwW1khSz93DhvhmK50nIaczW63u4EO/jJb3xj+wxR1Nkk9bxi3DDsYFt8SN 85 AzYx9kjlEYQ/+sI4/ATfmdV9h78SVotjScupd9KFzzi76gWq9gwyCBLRynTUWlyD 86 2UOfJRkOvhN6/jKzvYfVVwjPSfA9IMuooHdScmC4F6KBKJl/zf/zETM0XyzIDNmH 87 uOPbCiljq2WoRM+rY6ET84EO0kVXbfx8uxUsqQIDAQABAoIBAQCkPj9TF0IagbM3 88 5BSs/CKbAWS4dH/D4bPlxx4IRCNirc8GUg+MRb04Xz0tLuajdQDqeWpr6iLZ0RKV 89 BvreLF+TOdV7DNQ4XE4gSdJyCtCaTHeort/aordL3l0WgfI7mVk0L/yfN1PEG4YG 90 E9q1TYcyrB3/8d5JwIkjabxERLglCcP+geOEJp+QijbvFIaZR/n2irlKW4gSy6ko 91 9B0fgUnhkHysSg49ChHQBPQ+o5BbpuLrPDFMiTPTPhdfsvGGcyCGeqfBA56oHcSF 92 K02Fg8OM+Bd1lb48LAN9nWWY4WbwV+9bkN3Ym8hO4c3a/Dxf2N7LtAQqWZzFjvM3 93 /AaDvAgBAoGBAPLD+Xn1IYQPMB2XXCXfOuJewRY7RzoVWvMffJPDfm16O7wOiW5+ 94 2FmvxUDayk4PZy6wQMzGeGKnhcMMZTyaq2g/QtGfrvy7q1Lw2fB1VFlVblvqhoJa 95 nMJojjC4zgjBkXMHsRLeTmgUKyGs+fdFbfI6uejBnnf+eMVUMIdJ+6I9AoGBANCn 96 kWO9640dttyXURxNJ3lBr2H3dJOkmD6XS+u+LWqCSKQe691Y/fZ/ZL0Oc4Mhy7I6 97 hsy3kDQ5k2V0fkaNODQIFJvUqXw2pMewUk8hHc9403f4fe9cPrL12rQ8WlQw4yoC 98 v2B61vNczCCUDtGxlAaw8jzSRaSI5s6ax3K7enbdAoGBAJB1WYDfA2CoAQO6y9Sl 99 b07A/7kQ8SN5DbPaqrDrBdJziBQxukoMJQXJeGFNUFD/DXFU5Fp2R7C86vXT7HIR 100 v6m66zH+CYzOx/YE6EsUJms6UP9VIVF0Rg/RU7teXQwM01ZV32LQ8mswhTH20o/3 101 uqMHmxUMEhZpUMhrfq0isyApAoGAe1UxGTXfj9AqkIVYylPIq2HqGww7+jFmVEj1 102 9Wi6S6Sq72ffnzzFEPkIQL/UA4TsdHMnzsYKFPSbbXLIWUeMGyVTmTDA5c0e5XIR 103 lPhMOKCAzv8w4VUzMnEkTzkFY5JqFCD/ojW57KvDdNZPVB+VEcdxyAW6aKELXMAc 104 eHLc1nkCgYEApm/motCTPN32nINZ+Vvywbv64ZD+gtpeMNP3CLrbe1X9O+H52AXa 105 1jCoOldWR8i2bs2NVPcKZgdo6fFULqE4dBX7Te/uYEIuuZhYLNzRO1IKU/YaqsXG 106 3bfQ8hKYcSnTfE0gPtLDnqCIxTocaGLSHeG3TH9fTw+dA8FvWpUztI4= 107 -----END RSA PRIVATE KEY----- 108 `