github.com/rothwerx/packer@v0.9.0/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 warnings, err := b.Prepare(config) 134 if len(warnings) > 0 { 135 t.Fatalf("bad: %#v", warnings) 136 } 137 if err != nil { 138 t.Fatalf("err: %s", err) 139 } 140 141 if b.config.BundlePrefix == "" { 142 t.Fatalf("bad: %s", b.config.BundlePrefix) 143 } 144 } 145 146 func TestBuilderPrepare_InvalidKey(t *testing.T) { 147 var b Builder 148 config := testConfig() 149 150 // Add a random key 151 config["i_should_not_be_valid"] = true 152 warnings, err := b.Prepare(config) 153 if len(warnings) > 0 { 154 t.Fatalf("bad: %#v", warnings) 155 } 156 if err == nil { 157 t.Fatal("should have error") 158 } 159 } 160 161 func TestBuilderPrepare_S3Bucket(t *testing.T) { 162 b := &Builder{} 163 config := testConfig() 164 165 config["s3_bucket"] = "" 166 warnings, err := b.Prepare(config) 167 if len(warnings) > 0 { 168 t.Fatalf("bad: %#v", warnings) 169 } 170 if err == nil { 171 t.Fatal("should have error") 172 } 173 174 config["s3_bucket"] = "foo" 175 warnings, err = b.Prepare(config) 176 if len(warnings) > 0 { 177 t.Fatalf("bad: %#v", warnings) 178 } 179 if err != nil { 180 t.Errorf("err: %s", err) 181 } 182 } 183 184 func TestBuilderPrepare_X509CertPath(t *testing.T) { 185 b := &Builder{} 186 config := testConfig() 187 188 config["x509_cert_path"] = "" 189 warnings, err := b.Prepare(config) 190 if len(warnings) > 0 { 191 t.Fatalf("bad: %#v", warnings) 192 } 193 if err == nil { 194 t.Fatal("should have error") 195 } 196 197 config["x509_cert_path"] = "i/am/a/file/that/doesnt/exist" 198 warnings, err = b.Prepare(config) 199 if len(warnings) > 0 { 200 t.Fatalf("bad: %#v", warnings) 201 } 202 if err == nil { 203 t.Error("should have error") 204 } 205 206 tf, err := ioutil.TempFile("", "packer") 207 if err != nil { 208 t.Fatalf("error tempfile: %s", err) 209 } 210 defer os.Remove(tf.Name()) 211 212 config["x509_cert_path"] = tf.Name() 213 warnings, err = b.Prepare(config) 214 if len(warnings) > 0 { 215 t.Fatalf("bad: %#v", warnings) 216 } 217 if err != nil { 218 t.Fatalf("should not have error: %s", err) 219 } 220 } 221 222 func TestBuilderPrepare_X509KeyPath(t *testing.T) { 223 b := &Builder{} 224 config := testConfig() 225 226 config["x509_key_path"] = "" 227 warnings, err := b.Prepare(config) 228 if len(warnings) > 0 { 229 t.Fatalf("bad: %#v", warnings) 230 } 231 if err == nil { 232 t.Fatal("should have error") 233 } 234 235 config["x509_key_path"] = "i/am/a/file/that/doesnt/exist" 236 warnings, err = b.Prepare(config) 237 if len(warnings) > 0 { 238 t.Fatalf("bad: %#v", warnings) 239 } 240 if err == nil { 241 t.Error("should have error") 242 } 243 244 tf, err := ioutil.TempFile("", "packer") 245 if err != nil { 246 t.Fatalf("error tempfile: %s", err) 247 } 248 defer os.Remove(tf.Name()) 249 250 config["x509_key_path"] = tf.Name() 251 warnings, err = b.Prepare(config) 252 if len(warnings) > 0 { 253 t.Fatalf("bad: %#v", warnings) 254 } 255 if err != nil { 256 t.Fatalf("should not have error: %s", err) 257 } 258 } 259 260 func TestBuilderPrepare_X509UploadPath(t *testing.T) { 261 b := &Builder{} 262 config := testConfig() 263 264 config["x509_upload_path"] = "" 265 warnings, err := b.Prepare(config) 266 if len(warnings) > 0 { 267 t.Fatalf("bad: %#v", warnings) 268 } 269 if err != nil { 270 t.Fatalf("should not have error: %s", err) 271 } 272 }