diff --git a/command/command_test.go b/command/command_test.go index 126897810..4ba4b8787 100644 --- a/command/command_test.go +++ b/command/command_test.go @@ -20,6 +20,13 @@ func fatalCommand(t *testing.T, m Meta) { err.String()) } +func outputCommand(t *testing.T, m Meta) (string, string) { + ui := m.Ui.(*packer.BasicUi) + out := ui.Writer.(*bytes.Buffer) + err := ui.ErrorWriter.(*bytes.Buffer) + return out.String(), err.String() +} + func testFixture(n string) string { return filepath.Join(fixturesDir, n) } diff --git a/command/test-fixtures/validate/template.json b/command/test-fixtures/validate/template.json index 1d9e251e5..75b3f6251 100644 --- a/command/test-fixtures/validate/template.json +++ b/command/test-fixtures/validate/template.json @@ -6,5 +6,5 @@ "content":"chocolate" } ], - "min_packer_version":"0.8.0" + "min_packer_version":"101.0.0" } diff --git a/command/validate_test.go b/command/validate_test.go index 479181fdc..b15e5f155 100644 --- a/command/validate_test.go +++ b/command/validate_test.go @@ -5,28 +5,40 @@ import ( "testing" ) -func TestValidateCommand(t *testing.T) { +func TestValidateCommandOKVersion(t *testing.T) { c := &ValidateCommand{ Meta: testMetaFile(t), } - args := []string{ filepath.Join(testFixture("validate"), "template.json"), } - defer cleanup() - + // This should pass with a valid configuration version + c.CoreConfig.Version = "102.0.0" if code := c.Run(args); code != 0 { fatalCommand(t, c.Meta) } - - if !fileExists("chocolate.txt") { - t.Error("Expected to find chocolate.txt") - } - if !fileExists("vanilla.txt") { - t.Error("Expected to find vanilla.txt") - } - if fileExists("cherry.txt") { - t.Error("Expected NOT to find cherry.txt") - } +} + +func TestValidateCommandBadVersion(t *testing.T) { + c := &ValidateCommand{ + Meta: testMetaFile(t), + } + args := []string{ + filepath.Join(testFixture("validate"), "template.json"), + } + + // This should fail with an invalid configuration version + c.CoreConfig.Version = "100.0.0" + if code := c.Run(args); code != 1 { + t.Errorf("Expected exit code 1") + } + + stdout, stderr := outputCommand(t, c.Meta) + expected := `Error initializing core: This template requires Packer version 101.0.0 or higher; using 100.0.0 +` + if stderr != expected { + t.Fatalf("Expected:\n%s\nFound:\n%s\n", expected, stderr) + } + t.Log(stdout) } diff --git a/packer/core.go b/packer/core.go index f9bf87b9d..496fce6bd 100644 --- a/packer/core.go +++ b/packer/core.go @@ -246,8 +246,7 @@ func (c *Core) validate() error { if versionActual.LessThan(versionMin) { return fmt.Errorf( - "This template requires a minimum Packer version of %s,\n"+ - "but version %s is running.", + "This template requires Packer version %s or higher; using %s", versionMin, versionActual) }