diff --git a/packer/rpc/hook.go b/packer/rpc/hook.go index ea8fb6eef..687d991a7 100644 --- a/packer/rpc/hook.go +++ b/packer/rpc/hook.go @@ -2,6 +2,7 @@ package rpc import ( "github.com/mitchellh/packer/packer" + "log" "net/rpc" ) @@ -38,7 +39,10 @@ func (h *hook) Run(name string, ui packer.Ui, comm packer.Communicator, data int } func (h *hook) Cancel() { - // TODO(mitchellh): implement + err := h.client.Call("Hook.Cancel", new(interface{}), new(interface{})) + if err != nil { + log.Printf("Hook.Cancel error: %s", err) + } } func (h *HookServer) Run(args *HookRunArgs, reply *interface{}) error { @@ -54,3 +58,8 @@ func (h *HookServer) Run(args *HookRunArgs, reply *interface{}) error { *reply = nil return nil } + +func (h *HookServer) Cancel(args *interface{}, reply *interface{}) error { + h.hook.Cancel() + return nil +} diff --git a/packer/rpc/hook_test.go b/packer/rpc/hook_test.go index ea780a74e..9dc53aeac 100644 --- a/packer/rpc/hook_test.go +++ b/packer/rpc/hook_test.go @@ -28,6 +28,10 @@ func TestHookRPC(t *testing.T) { ui := &testUi{} hClient.Run("foo", ui, nil, 42) assert.True(h.RunCalled, "run should be called") + + // Test Cancel + hClient.Cancel() + assert.True(h.CancelCalled, "cancel should be called") } func TestHook_Implements(t *testing.T) {