From 3d0dde03e6eae58a6c2fbc4ffacc0706cc27805a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 22 May 2013 17:02:34 -0700 Subject: [PATCH] packer: Panic on template if no builder function --- packer/template.go | 6 ++++++ packer/template_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/packer/template.go b/packer/template.go index 82ba0ca16..01ffd8eaa 100644 --- a/packer/template.go +++ b/packer/template.go @@ -156,6 +156,12 @@ func (t *Template) Build(name string, components *ComponentFinder) (b Build, err return } + // We panic if there is no builder function because this is really + // an internal bug that always needs to be fixed, not an error. + if components.Builder == nil { + panic("no builder function") + } + builder, err := components.Builder(builderConfig.builderType) if err != nil { return diff --git a/packer/template_test.go b/packer/template_test.go index 3efc86dd9..152737a65 100644 --- a/packer/template_test.go +++ b/packer/template_test.go @@ -291,6 +291,42 @@ func TestTemplate_BuildUnknownBuilder(t *testing.T) { assert.NotNil(err, "should have error") } +func TestTemplate_Build_NilBuilderFunc(t *testing.T) { + assert := asserts.NewTestingAsserts(t, true) + + data := ` + { + "name": "my-image", + "builders": [ + { + "name": "test1", + "type": "test-builder" + } + ], + + "provisioners": [ + { + "type": "test-prov" + } + ] + } + ` + + template, err := ParseTemplate([]byte(data)) + assert.Nil(err, "should not error") + + defer func() { + p := recover() + assert.NotNil(p, "should panic") + + if p != nil { + assert.Equal(p.(string), "no builder function", "right panic") + } + }() + + template.Build("test1", &ComponentFinder{}) +} + func TestTemplate_Build(t *testing.T) { assert := asserts.NewTestingAsserts(t, true)