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