packer/rpc: returning errors from builds works properly
This commit is contained in:
parent
db8aeaba40
commit
d2023c69be
|
@ -57,12 +57,12 @@ func (b *build) Run(ui packer.Ui, cache packer.Cache) (packer.Artifact, error) {
|
||||||
|
|
||||||
var reply string
|
var reply string
|
||||||
if err := b.client.Call("Build.Run", args, &reply); err != nil {
|
if err := b.client.Call("Build.Run", args, &reply); err != nil {
|
||||||
panic(err)
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := rpc.Dial("tcp", reply)
|
client, err := rpc.Dial("tcp", reply)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return Artifact(client), nil
|
return Artifact(client), nil
|
||||||
|
@ -97,7 +97,7 @@ func (b *BuildServer) Run(args *BuildRunArgs, reply *string) error {
|
||||||
|
|
||||||
artifact, err := b.build.Run(&Ui{client}, Cache(client))
|
artifact, err := b.build.Run(&Ui{client}, Cache(client))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return NewBasicError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrap the artifact
|
// Wrap the artifact
|
||||||
|
|
|
@ -2,6 +2,7 @@ package rpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"cgl.tideland.biz/asserts"
|
"cgl.tideland.biz/asserts"
|
||||||
|
"errors"
|
||||||
"github.com/mitchellh/packer/packer"
|
"github.com/mitchellh/packer/packer"
|
||||||
"net/rpc"
|
"net/rpc"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -17,6 +18,8 @@ type testBuild struct {
|
||||||
runCache packer.Cache
|
runCache packer.Cache
|
||||||
runUi packer.Ui
|
runUi packer.Ui
|
||||||
cancelCalled bool
|
cancelCalled bool
|
||||||
|
|
||||||
|
errRunResult bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *testBuild) Name() string {
|
func (b *testBuild) Name() string {
|
||||||
|
@ -34,7 +37,12 @@ func (b *testBuild) Run(ui packer.Ui, cache packer.Cache) (packer.Artifact, erro
|
||||||
b.runCalled = true
|
b.runCalled = true
|
||||||
b.runCache = cache
|
b.runCache = cache
|
||||||
b.runUi = ui
|
b.runUi = ui
|
||||||
return testBuildArtifact, nil
|
|
||||||
|
if b.errRunResult {
|
||||||
|
return nil, errors.New("foo")
|
||||||
|
} else {
|
||||||
|
return testBuildArtifact, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *testBuild) Cancel() {
|
func (b *testBuild) Cancel() {
|
||||||
|
@ -69,8 +77,9 @@ func TestBuildRPC(t *testing.T) {
|
||||||
// Test Run
|
// Test Run
|
||||||
cache := new(testCache)
|
cache := new(testCache)
|
||||||
ui = new(testUi)
|
ui = new(testUi)
|
||||||
bClient.Run(ui, cache)
|
_, err = bClient.Run(ui, cache)
|
||||||
assert.True(b.runCalled, "run should be called")
|
assert.True(b.runCalled, "run should be called")
|
||||||
|
assert.Nil(err, "should not error")
|
||||||
|
|
||||||
// Test the UI given to run, which should be fully functional
|
// Test the UI given to run, which should be fully functional
|
||||||
if b.runCalled {
|
if b.runCalled {
|
||||||
|
@ -82,6 +91,11 @@ func TestBuildRPC(t *testing.T) {
|
||||||
assert.Equal(ui.sayMessage, "format", "message should be correct")
|
assert.Equal(ui.sayMessage, "format", "message should be correct")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test run with an error
|
||||||
|
b.errRunResult = true
|
||||||
|
_, err = bClient.Run(ui, cache)
|
||||||
|
assert.NotNil(err, "should not nil")
|
||||||
|
|
||||||
// Test Cancel
|
// Test Cancel
|
||||||
bClient.Cancel()
|
bClient.Cancel()
|
||||||
assert.True(b.cancelCalled, "cancel should be called")
|
assert.True(b.cancelCalled, "cancel should be called")
|
||||||
|
|
Loading…
Reference in New Issue