github.com/sneal/packer@v0.5.2/builder/amazon/instance/builder_test.go (about) 1 package instance 2 3 import ( 4 "github.com/mitchellh/packer/packer" 5 "io/ioutil" 6 "os" 7 "testing" 8 ) 9 10 func testConfig() map[string]interface{} { 11 tf, err := ioutil.TempFile("", "packer") 12 if err != nil { 13 panic(err) 14 } 15 16 return map[string]interface{}{ 17 "account_id": "foo", 18 "ami_name": "foo", 19 "instance_type": "m1.small", 20 "region": "us-east-1", 21 "s3_bucket": "foo", 22 "source_ami": "foo", 23 "ssh_username": "bob", 24 "x509_cert_path": tf.Name(), 25 "x509_key_path": tf.Name(), 26 "x509_upload_path": "/foo", 27 } 28 } 29 30 func TestBuilder_ImplementsBuilder(t *testing.T) { 31 var raw interface{} 32 raw = &Builder{} 33 if _, ok := raw.(packer.Builder); !ok { 34 t.Fatalf("Builder should be a builder") 35 } 36 } 37 38 func TestBuilderPrepare_AccountId(t *testing.T) { 39 b := &Builder{} 40 config := testConfig() 41 42 config["account_id"] = "" 43 warnings, err := b.Prepare(config) 44 if len(warnings) > 0 { 45 t.Fatalf("bad: %#v", warnings) 46 } 47 if err == nil { 48 t.Fatal("should have error") 49 } 50 51 config["account_id"] = "foo" 52 warnings, err = b.Prepare(config) 53 if len(warnings) > 0 { 54 t.Fatalf("bad: %#v", warnings) 55 } 56 if err != nil { 57 t.Errorf("err: %s", err) 58 } 59 60 config["account_id"] = "0123-0456-7890" 61 warnings, err = b.Prepare(config) 62 if len(warnings) > 0 { 63 t.Fatalf("bad: %#v", warnings) 64 } 65 if err != nil { 66 t.Fatalf("err: %s", err) 67 } 68 69 if b.config.AccountId != "012304567890" { 70 t.Errorf("should strip hyphens: %s", b.config.AccountId) 71 } 72 } 73 74 func TestBuilderPrepare_AMIName(t *testing.T) { 75 var b Builder 76 config := testConfig() 77 78 // Test good 79 config["ami_name"] = "foo" 80 warnings, err := b.Prepare(config) 81 if len(warnings) > 0 { 82 t.Fatalf("bad: %#v", warnings) 83 } 84 if err != nil { 85 t.Fatalf("should not have error: %s", err) 86 } 87 88 // Test bad 89 config["ami_name"] = "foo {{" 90 b = Builder{} 91 warnings, err = b.Prepare(config) 92 if len(warnings) > 0 { 93 t.Fatalf("bad: %#v", warnings) 94 } 95 if err == nil { 96 t.Fatal("should have error") 97 } 98 99 // Test bad 100 delete(config, "ami_name") 101 b = Builder{} 102 warnings, err = b.Prepare(config) 103 if len(warnings) > 0 { 104 t.Fatalf("bad: %#v", warnings) 105 } 106 if err == nil { 107 t.Fatal("should have error") 108 } 109 } 110 111 func TestBuilderPrepare_BundleDestination(t *testing.T) { 112 b := &Builder{} 113 config := testConfig() 114 115 config["bundle_destination"] = "" 116 warnings, err := b.Prepare(config) 117 if len(warnings) > 0 { 118 t.Fatalf("bad: %#v", warnings) 119 } 120 if err != nil { 121 t.Fatalf("err: %s", err) 122 } 123 124 if b.config.BundleDestination != "/tmp" { 125 t.Fatalf("bad: %s", b.config.BundleDestination) 126 } 127 } 128 129 func TestBuilderPrepare_BundlePrefix(t *testing.T) { 130 b := &Builder{} 131 config := testConfig() 132 133 config["bundle_prefix"] = "" 134 warnings, err := b.Prepare(config) 135 if len(warnings) > 0 { 136 t.Fatalf("bad: %#v", warnings) 137 } 138 if err != nil { 139 t.Fatalf("err: %s", err) 140 } 141 142 if b.config.BundlePrefix == "" { 143 t.Fatalf("bad: %s", b.config.BundlePrefix) 144 } 145 } 146 147 func TestBuilderPrepare_InvalidKey(t *testing.T) { 148 var b Builder 149 config := testConfig() 150 151 // Add a random key 152 config["i_should_not_be_valid"] = true 153 warnings, err := b.Prepare(config) 154 if len(warnings) > 0 { 155 t.Fatalf("bad: %#v", warnings) 156 } 157 if err == nil { 158 t.Fatal("should have error") 159 } 160 } 161 162 func TestBuilderPrepare_S3Bucket(t *testing.T) { 163 b := &Builder{} 164 config := testConfig() 165 166 config["s3_bucket"] = "" 167 warnings, err := b.Prepare(config) 168 if len(warnings) > 0 { 169 t.Fatalf("bad: %#v", warnings) 170 } 171 if err == nil { 172 t.Fatal("should have error") 173 } 174 175 config["s3_bucket"] = "foo" 176 warnings, err = b.Prepare(config) 177 if len(warnings) > 0 { 178 t.Fatalf("bad: %#v", warnings) 179 } 180 if err != nil { 181 t.Errorf("err: %s", err) 182 } 183 } 184 185 func TestBuilderPrepare_X509CertPath(t *testing.T) { 186 b := &Builder{} 187 config := testConfig() 188 189 config["x509_cert_path"] = "" 190 warnings, err := b.Prepare(config) 191 if len(warnings) > 0 { 192 t.Fatalf("bad: %#v", warnings) 193 } 194 if err == nil { 195 t.Fatal("should have error") 196 } 197 198 config["x509_cert_path"] = "i/am/a/file/that/doesnt/exist" 199 warnings, err = b.Prepare(config) 200 if len(warnings) > 0 { 201 t.Fatalf("bad: %#v", warnings) 202 } 203 if err == nil { 204 t.Error("should have error") 205 } 206 207 tf, err := ioutil.TempFile("", "packer") 208 if err != nil { 209 t.Fatalf("error tempfile: %s", err) 210 } 211 defer os.Remove(tf.Name()) 212 213 config["x509_cert_path"] = tf.Name() 214 warnings, err = b.Prepare(config) 215 if len(warnings) > 0 { 216 t.Fatalf("bad: %#v", warnings) 217 } 218 if err != nil { 219 t.Fatalf("should not have error: %s", err) 220 } 221 } 222 223 func TestBuilderPrepare_X509KeyPath(t *testing.T) { 224 b := &Builder{} 225 config := testConfig() 226 227 config["x509_key_path"] = "" 228 warnings, err := b.Prepare(config) 229 if len(warnings) > 0 { 230 t.Fatalf("bad: %#v", warnings) 231 } 232 if err == nil { 233 t.Fatal("should have error") 234 } 235 236 config["x509_key_path"] = "i/am/a/file/that/doesnt/exist" 237 warnings, err = b.Prepare(config) 238 if len(warnings) > 0 { 239 t.Fatalf("bad: %#v", warnings) 240 } 241 if err == nil { 242 t.Error("should have error") 243 } 244 245 tf, err := ioutil.TempFile("", "packer") 246 if err != nil { 247 t.Fatalf("error tempfile: %s", err) 248 } 249 defer os.Remove(tf.Name()) 250 251 config["x509_key_path"] = tf.Name() 252 warnings, err = b.Prepare(config) 253 if len(warnings) > 0 { 254 t.Fatalf("bad: %#v", warnings) 255 } 256 if err != nil { 257 t.Fatalf("should not have error: %s", err) 258 } 259 } 260 261 func TestBuilderPrepare_X509UploadPath(t *testing.T) { 262 b := &Builder{} 263 config := testConfig() 264 265 config["x509_upload_path"] = "" 266 warnings, err := b.Prepare(config) 267 if len(warnings) > 0 { 268 t.Fatalf("bad: %#v", warnings) 269 } 270 if err != nil { 271 t.Fatalf("should not have error: %s", err) 272 } 273 }