diff --git a/builder/vmware/builder.go b/builder/vmware/builder.go index 49196da89..fb8933d1a 100644 --- a/builder/vmware/builder.go +++ b/builder/vmware/builder.go @@ -1,6 +1,7 @@ package vmware import ( + "fmt" "github.com/mitchellh/mapstructure" "github.com/mitchellh/multistep" "github.com/mitchellh/packer/packer" @@ -50,10 +51,11 @@ func (b *Builder) Prepare(raw interface{}) (err error) { b.config.OutputDir = "vmware" } + errors := make([]error, 0) if b.config.RawBootWait != "" { b.config.BootWait, err = time.ParseDuration(b.config.RawBootWait) if err != nil { - return + errors = append(errors, fmt.Errorf("Failed parsing boot_wait: %s", err)) } } @@ -63,12 +65,16 @@ func (b *Builder) Prepare(raw interface{}) (err error) { b.config.SSHWaitTimeout, err = time.ParseDuration(b.config.RawSSHWaitTimeout) if err != nil { - return + errors = append(errors, fmt.Errorf("Failed parsing ssh_wait_timeout: %s", err)) } b.driver, err = b.newDriver() if err != nil { - return + errors = append(errors, fmt.Errorf("Failed creating VMware driver: %s", err)) + } + + if len(errors) > 0 { + return &packer.MultiError{errors} } return nil diff --git a/builder/vmware/builder_test.go b/builder/vmware/builder_test.go new file mode 100644 index 000000000..052c15d8f --- /dev/null +++ b/builder/vmware/builder_test.go @@ -0,0 +1,83 @@ +package vmware + +import ( + "github.com/mitchellh/packer/packer" + "testing" + "time" +) + +func testConfig() map[string]interface{} { + return map[string]interface{}{ + } +} + +func TestBuilder_ImplementsBuilder(t *testing.T) { + var raw interface{} + raw = &Builder{} + if _, ok := raw.(packer.Builder); !ok { + t.Error("Builder must implement builder.") + } +} + +func TestBuilderPrepare_BootWait(t *testing.T) { + var b Builder + config := testConfig() + + // Test with a bad boot_wait + config["boot_wait"] = "this is not good" + err := b.Prepare(config) + if err == nil { + t.Fatal("should have error") + } + + // Test with a good one + config["boot_wait"] = "5s" + err = b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } +} + +func TestBuilderPrepare_Defaults(t *testing.T) { + var b Builder + config := testConfig() + err := b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } + + if b.config.DiskName != "disk" { + t.Errorf("bad disk name: %s", b.config.DiskName) + } + + if b.config.OutputDir != "vmware" { + t.Errorf("bad output dir: %s", b.config.OutputDir) + } + + if b.config.SSHWaitTimeout != (20 * time.Minute) { + t.Errorf("bad wait timeout: %s", b.config.SSHWaitTimeout) + } + + if b.config.VMName != "packer" { + t.Errorf("bad vm name: %s", b.config.VMName) + } +} + +func TestBuilderPrepare_SSHWaitTimeout(t *testing.T) { + var b Builder + config := testConfig() + + // Test with a bad value + config["ssh_wait_timeout"] = "this is not good" + err := b.Prepare(config) + if err == nil { + t.Fatal("should have error") + } + + // Test with a good one + config["ssh_wait_timeout"] = "5s" + err = b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } +}