From 2e3086be5a1438557421cd70892d3e0ea1647dee Mon Sep 17 00:00:00 2001 From: Calle Pettersson Date: Wed, 13 Mar 2019 20:51:11 +0100 Subject: [PATCH] Initial tests --- builder/proxmox/config_test.go | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 builder/proxmox/config_test.go diff --git a/builder/proxmox/config_test.go b/builder/proxmox/config_test.go new file mode 100644 index 000000000..a7496dddd --- /dev/null +++ b/builder/proxmox/config_test.go @@ -0,0 +1,115 @@ +package proxmox + +import ( + "strings" + "testing" + + "github.com/hashicorp/packer/packer" + "github.com/hashicorp/packer/template" +) + +func TestRequiredParameters(t *testing.T) { + _, _, err := NewConfig(make(map[string]interface{})) + if err == nil { + t.Fatal("Expected empty configuration to fail") + } + errs, ok := err.(*packer.MultiError) + if !ok { + t.Fatal("Expected errors to be packer.MultiError") + } + + required := []string{"username", "password", "proxmox_url", "iso_file", "node", "ssh_username"} + for _, param := range required { + found := false + for _, err := range errs.Errors { + if strings.Contains(err.Error(), param) { + found = true + break + } + } + if !found { + t.Errorf("Expected error about missing parameter %q", required) + } + } +} + +func TestBasicExampleFromDocsIsValid(t *testing.T) { + const config = `{ + "builders": [ + { + "type": "proxmox", + "proxmox_url": "https://my-proxmox.my-domain:8006/api2/json", + "insecure_skip_tls_verify": true, + "username": "apiuser@pve", + "password": "supersecret", + + "node": "my-proxmox", + "network_adapters": [ + { + "bridge": "vmbr0" + } + ], + "disks": [ + { + "type": "scsi", + "size": "5G", + "storage_pool": "local-lvm", + "storage_pool_type": "lvm" + } + ], + + "iso_file": "local:iso/Fedora-Server-dvd-x86_64-29-1.2.iso", + "http_directory":"config", + "boot_wait": "10s", + "boot_command": [ + " ip=dhcp inst.cmdline inst.ks=http://{{.HTTPIP}}:{{.HTTPPort}}/ks.cfg" + ], + + "ssh_username": "root", + "ssh_timeout": "15m", + "ssh_password": "packer", + + "unmount_iso": true, + "template_name": "fedora-29", + "template_description": "Fedora 29-1.2, generated on {{ isotime \"2006-01-02T15:04:05Z\" }}" + } + ] +}` + tpl, err := template.Parse(strings.NewReader(config)) + if err != nil { + t.Fatal(err) + } + + b := &Builder{} + warn, err := b.Prepare(tpl.Builders["proxmox"].Config) + if err != nil { + t.Fatal(err, warn) + } + + // The example config does not set a number of optional fields. Validate that: + // Memory 0 is too small, using default: 512 + // Number of cores 0 is too small, using default: 1 + // Number of sockets 0 is too small, using default: 1 + // OS not set, using default 'other' + // NIC 0 model not set, using default 'e1000' + // Disk 0 cache mode not set, using default 'none' + + if b.config.Memory != 512 { + t.Errorf("Expected Memory to be 512, got %d", b.config.Memory) + } + if b.config.Cores != 1 { + t.Errorf("Expected Cores to be 1, got %d", b.config.Cores) + } + if b.config.Sockets != 1 { + t.Errorf("Expected Sockets to be 1, got %d", b.config.Sockets) + } + if b.config.OS != "other" { + t.Errorf("Expected OS to be 'other', got %s", b.config.OS) + } + if b.config.NICs[0].Model != "e1000" { + t.Errorf("Expected NIC model to be 'e1000', got %s", b.config.NICs[0].Model) + } + if b.config.Disks[0].CacheMode != "none" { + t.Errorf("Expected disk cache mode to be 'none', got %s", b.config.Disks[0].CacheMode) + } +}