Commit c2b3fa73 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

builder/virtualbox/ovf: validate source_path

parent 89ab009c
...@@ -2,6 +2,8 @@ package ovf ...@@ -2,6 +2,8 @@ package ovf
import ( import (
"fmt" "fmt"
"os"
vboxcommon "github.com/mitchellh/packer/builder/virtualbox/common" vboxcommon "github.com/mitchellh/packer/builder/virtualbox/common"
"github.com/mitchellh/packer/common" "github.com/mitchellh/packer/common"
"github.com/mitchellh/packer/packer" "github.com/mitchellh/packer/packer"
...@@ -54,6 +56,7 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { ...@@ -54,6 +56,7 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) {
errs = packer.MultiErrorAppend(errs, c.VBoxVersionConfig.Prepare(c.tpl)...) errs = packer.MultiErrorAppend(errs, c.VBoxVersionConfig.Prepare(c.tpl)...)
templates := map[string]*string{ templates := map[string]*string{
"source_path": &c.SourcePath,
"vm_name": &c.VMName, "vm_name": &c.VMName,
} }
...@@ -66,6 +69,15 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) { ...@@ -66,6 +69,15 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) {
} }
} }
if c.SourcePath == "" {
errs = packer.MultiErrorAppend(errs, fmt.Errorf("source_path is required"))
} else {
if _, err := os.Stat(c.SourcePath); err != nil {
errs = packer.MultiErrorAppend(errs,
fmt.Errorf("source_path is invalid: %s", err))
}
}
// Warnings // Warnings
var warnings []string var warnings []string
if c.ShutdownCommand == "" { if c.ShutdownCommand == "" {
......
...@@ -2,8 +2,60 @@ package ovf ...@@ -2,8 +2,60 @@ package ovf
import ( import (
"testing" "testing"
"io/ioutil"
"os"
) )
func testConfig(t *testing.T) map[string]interface{} { func testConfig(t *testing.T) map[string]interface{} {
return map[string]interface{}{} return map[string]interface{}{
"ssh_username": "foo",
"shutdown_command": "foo",
}
} }
func testConfigErr(t *testing.T, warns []string, err error) {
if len(warns) > 0 {
t.Fatalf("bad: %#v", warns)
}
if err == nil {
t.Fatal("should error")
}
}
func testConfigOk(t *testing.T, warns []string, err error) {
if len(warns) > 0 {
t.Fatalf("bad: %#v", warns)
}
if err != nil {
t.Fatalf("bad: %s", err)
}
}
func TestNewConfig_sourcePath(t *testing.T) {
// Bad
c := testConfig(t)
delete(c, "source_path")
_, warns, errs := NewConfig(c)
testConfigErr(t, warns, errs)
// Bad
c = testConfig(t)
c["source_path"] = "/i/dont/exist"
_, warns, errs = NewConfig(c)
testConfigErr(t, warns, errs)
// Good
tf, err := ioutil.TempFile("", "packer")
if err != nil {
t.Fatalf("err: %s", err)
}
tf.Close()
defer os.Remove(tf.Name())
c = testConfig(t)
c["source_path"] = tf.Name()
_, warns, errs = NewConfig(c)
testConfigOk(t, warns, errs)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment