packer-cn/packer/build_test.go

97 lines
2.2 KiB
Go
Raw Normal View History

2013-04-20 21:55:02 -04:00
package packer
import (
"cgl.tideland.biz/asserts"
"testing"
)
type TestBuilder struct {
prepareCalled bool
prepareConfig interface{}
2013-05-10 20:01:24 -04:00
runCalled bool
runHook Hook
2013-05-10 20:01:24 -04:00
runUi Ui
2013-04-20 21:55:02 -04:00
}
func (tb *TestBuilder) Prepare(config interface{}) error {
2013-04-20 21:55:02 -04:00
tb.prepareCalled = true
tb.prepareConfig = config
return nil
2013-04-20 21:55:02 -04:00
}
2013-05-22 01:10:21 -04:00
func (tb *TestBuilder) Run(ui Ui, h Hook) Artifact {
2013-04-20 21:55:02 -04:00
tb.runCalled = true
tb.runHook = h
2013-04-20 21:55:02 -04:00
tb.runUi = ui
2013-05-22 01:10:21 -04:00
return nil
2013-04-20 21:55:02 -04:00
}
2013-05-03 23:45:38 -04:00
func testBuild() Build {
return &coreBuild{
name: "test",
builder: &TestBuilder{},
builderConfig: 42,
provisioners: []coreBuildProvisioner{
coreBuildProvisioner{&TestProvisioner{}, 42},
},
2013-04-20 21:55:02 -04:00
}
}
2013-04-21 15:36:55 -04:00
func testBuilder() *TestBuilder {
return &TestBuilder{}
}
2013-05-09 14:32:03 -04:00
func TestBuild_Name(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
build := testBuild()
assert.Equal(build.Name(), "test", "should have a name")
}
2013-04-20 21:55:02 -04:00
func TestBuild_Prepare(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
build := testBuild()
2013-05-03 23:45:38 -04:00
builder := build.(*coreBuild).builder.(*TestBuilder)
2013-04-20 21:55:02 -04:00
2013-05-22 19:20:40 -04:00
build.Prepare(nil)
2013-04-20 21:55:02 -04:00
assert.True(builder.prepareCalled, "prepare should be called")
assert.Equal(builder.prepareConfig, 42, "prepare config should be 42")
}
func TestBuild_Run(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
ui := testUi()
build := testBuild()
2013-05-22 19:20:40 -04:00
build.Prepare(ui)
2013-04-20 21:55:02 -04:00
build.Run(ui)
coreB := build.(*coreBuild)
2013-04-20 21:55:02 -04:00
// Verify builder was prepared
builder := coreB.builder.(*TestBuilder)
2013-04-20 21:55:02 -04:00
assert.True(builder.runCalled, "run should be called")
assert.Equal(builder.runUi, ui, "run should be called with ui")
// Verify provisioners were prepared
coreProv := coreB.provisioners[0]
prov := coreProv.provisioner.(*TestProvisioner)
assert.True(prov.prepCalled, "prepare should be called")
assert.Equal(prov.prepConfig, 42, "prepare should be called with proper config")
assert.Equal(prov.prepUi, ui, "prepare should be called with proper ui")
2013-04-20 21:55:02 -04:00
}
2013-04-20 22:03:53 -04:00
func TestBuild_RunBeforePrepare(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
defer func() {
p := recover()
assert.NotNil(p, "should panic")
assert.Equal(p.(string), "Prepare must be called first", "right panic")
}()
testBuild().Run(testUi())
}