From 628116f4c4d493a4164ac918f8fd3fa9fa43ca8f Mon Sep 17 00:00:00 2001 From: Taliesin Sisson Date: Mon, 29 May 2017 03:12:35 +0100 Subject: [PATCH] Test settings for clone from vm and import vmxc from path --- builder/hyperv/vmcx/builder.go | 6 --- builder/hyperv/vmcx/builder_test.go | 84 +++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 6 deletions(-) diff --git a/builder/hyperv/vmcx/builder.go b/builder/hyperv/vmcx/builder.go index 3236fa945..c84e9e2a3 100644 --- a/builder/hyperv/vmcx/builder.go +++ b/builder/hyperv/vmcx/builder.go @@ -16,7 +16,6 @@ import ( "github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/template/interpolate" "github.com/mitchellh/multistep" - "path/filepath" ) const ( @@ -126,11 +125,6 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { isoWarnings, isoErrs := b.config.ISOConfig.Prepare(&b.config.ctx) warnings = append(warnings, isoWarnings...) errs = packer.MultiErrorAppend(errs, isoErrs...) - - extension := strings.ToLower(filepath.Ext(b.config.ISOConfig.ISOUrls[0])) - if extension == "vhd" || extension == "vhdx" { - b.config.ISOConfig.TargetExtension = extension - } } errs = packer.MultiErrorAppend(errs, b.config.FloppyConfig.Prepare(&b.config.ctx)...) diff --git a/builder/hyperv/vmcx/builder_test.go b/builder/hyperv/vmcx/builder_test.go index 3dd5cc4ab..43b3d339f 100644 --- a/builder/hyperv/vmcx/builder_test.go +++ b/builder/hyperv/vmcx/builder_test.go @@ -80,6 +80,90 @@ func TestBuilderPrepare_InvalidKey(t *testing.T) { } } +func TestBuilderPrepare_CloneFromExistingMachineOrImportFromExportedMachineSettingsRequired(t *testing.T) { + var b Builder + config := testConfig() + delete(config, "clone_from_vmxc_path") + + warns, err := b.Prepare(config) + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if err == nil { + t.Fatal("should have error") + } +} + +func TestBuilderPrepare_ExportedMachinePathDoesNotExist(t *testing.T) { + var b Builder + config := testConfig() + + //Create vmxc folder + td, err := ioutil.TempDir("", "packer") + if err != nil { + t.Fatalf("err: %s", err) + } + + //Delete the folder immediately + os.RemoveAll(td) + + config["clone_from_vmxc_path"] = td + + warns, err := b.Prepare(config) + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if err == nil { + t.Fatal("should have error") + } +} + +func TestBuilderPrepare_ExportedMachinePathExists(t *testing.T) { + var b Builder + config := testConfig() + + //Create vmxc folder + td, err := ioutil.TempDir("", "packer") + if err != nil { + t.Fatalf("err: %s", err) + } + + //Only delete afterwards + defer os.RemoveAll(td) + + config["clone_from_vmxc_path"] = td + + warns, err := b.Prepare(config) + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + if err != nil { + t.Fatalf("should not have error: %s", err) + } +} + +func TestBuilderPrepare_CloneFromVmSettingUsedSoNoCloneFromVmxcPathRequired(t *testing.T) { + var b Builder + config := testConfig() + delete(config, "clone_from_vmxc_path") + + config["clone_from_vm_name"] = "test_machine_name_that_does_not_exist" + + warns, err := b.Prepare(config) + if len(warns) > 0 { + t.Fatalf("bad: %#v", warns) + } + + if err == nil { + t.Fatal("should have error") + } else { + errorMessage := err.Error() + if errorMessage != "1 error(s) occurred:\n\n* Virtual machine 'test_machine_name_that_does_not_exist' to clone from does not exist." { + t.Fatalf("should not have error: %s", err) + } + } +} + func TestBuilderPrepare_ISOChecksum(t *testing.T) { var b Builder config := testConfig()