The shutdown_timeout config parameter was being ignored (for both the user setting and the "5m" default) on the virtualbox-ovf builder. As a result, packer complained of timeouts on graceful shutdowns, and the build process would error out. This fixes that along with some newly created tests.
86 lines
1.6 KiB
Go
86 lines
1.6 KiB
Go
package ovf
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func testConfig(t *testing.T) map[string]interface{} {
|
|
return map[string]interface{}{
|
|
"ssh_username": "foo",
|
|
"shutdown_command": "foo",
|
|
}
|
|
}
|
|
|
|
func getTempFile(t *testing.T) *os.File {
|
|
tf, err := ioutil.TempFile("", "packer")
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
tf.Close()
|
|
|
|
// don't forget to cleanup the file downstream:
|
|
// defer os.Remove(tf.Name())
|
|
|
|
return tf
|
|
}
|
|
|
|
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 := getTempFile(t)
|
|
defer os.Remove(tf.Name())
|
|
|
|
c = testConfig(t)
|
|
c["source_path"] = tf.Name()
|
|
_, warns, errs = NewConfig(c)
|
|
testConfigOk(t, warns, errs)
|
|
}
|
|
|
|
func TestNewConfig_shutdown_timeout(t *testing.T) {
|
|
c := testConfig(t)
|
|
tf := getTempFile(t)
|
|
defer os.Remove(tf.Name())
|
|
|
|
// Expect this to fail
|
|
c["source_path"] = tf.Name()
|
|
c["shutdown_timeout"] = "NaN"
|
|
_, warns, errs := NewConfig(c)
|
|
testConfigErr(t, warns, errs)
|
|
|
|
// Passes when given a valid time duration
|
|
c["shutdown_timeout"] = "10s"
|
|
_, warns, errs = NewConfig(c)
|
|
testConfigOk(t, warns, errs)
|
|
}
|