package xva import ( "testing" "github.com/hashicorp/packer-plugin-sdk/common" "github.com/hashicorp/packer-plugin-sdk/packer" ) func testConfig() map[string]interface{} { return map[string]interface{}{ "remote_host": "localhost", "remote_username": "admin", "remote_password": "admin", "vm_name": "foo", "shutdown_command": "yes", "ssh_username": "foo", "source_path": ".", common.BuildNameConfigKey: "foo", } } 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_Defaults(t *testing.T) { var b Builder config := testConfig() _, 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) } if b.config.ToolsIsoName != "" { t.Errorf("bad tools ISO name: %s", b.config.ToolsIsoName) } if b.config.VMName == "" { t.Errorf("bad vm name: %s", b.config.VMName) } if b.config.Format != "xva" { t.Errorf("bad format: %s", b.config.Format) } if b.config.KeepVM != "never" { t.Errorf("bad keep instance: %s", b.config.KeepVM) } } func TestBuilderPrepare_Format(t *testing.T) { var b Builder config := testConfig() // Bad config["format"] = "foo" _, warns, err := b.Prepare(config) if len(warns) > 0 { t.Fatalf("bad: %#v", warns) } if err == nil { t.Fatal("should have error") } // Good config["format"] = "vdi_raw" b = Builder{} _, 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_HTTPPort(t *testing.T) { var b Builder config := testConfig() // Bad config["http_port_min"] = 1000 config["http_port_max"] = 500 _, warns, err := b.Prepare(config) if len(warns) > 0 { t.Fatalf("bad: %#v", warns) } if err == nil { t.Fatal("should have error") } // Bad config["http_port_min"] = -500 b = Builder{} _, warns, err = b.Prepare(config) if len(warns) > 0 { t.Fatalf("bad: %#v", warns) } if err == nil { t.Fatal("should have error") } // Good config["http_port_min"] = 500 config["http_port_max"] = 1000 b = Builder{} _, 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_InvalidKey(t *testing.T) { var b Builder config := testConfig() // Add a random key config["i_should_not_be_valid"] = true _, warns, err := b.Prepare(config) if len(warns) > 0 { t.Fatalf("bad: %#v", warns) } if err == nil { t.Fatal("should have error") } } func TestBuilderPrepare_KeepVM(t *testing.T) { var b Builder config := testConfig() // Bad config["keep_vm"] = "foo" _, warns, err := b.Prepare(config) if len(warns) > 0 { t.Fatalf("bad: %#v", warns) } if err == nil { t.Fatal("should have error") } // Good config["keep_vm"] = "always" b = Builder{} _, 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_SourcePath(t *testing.T) { var b Builder config := testConfig() // Bad config["source_path"] = "" _, warns, err := b.Prepare(config) if len(warns) > 0 { t.Fatalf("bad: %#v", warns) } if err == nil { t.Fatal("should have error") } // Good config["source_path"] = "." b = Builder{} _, 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) } }