packer-cn/packer/hook_test.go

70 lines
1.4 KiB
Go

package packer
import (
"context"
"testing"
)
func TestDispatchHook_Implements(t *testing.T) {
var _ Hook = new(DispatchHook)
}
func TestDispatchHook_Run_NoHooks(t *testing.T) {
// Just make sure nothing blows up
dh := &DispatchHook{}
dh.Run(context.Background(), "foo", nil, nil, nil)
}
func TestDispatchHook_Run(t *testing.T) {
hook := &MockHook{}
mapping := make(map[string][]Hook)
mapping["foo"] = []Hook{hook}
dh := &DispatchHook{Mapping: mapping}
dh.Run(context.Background(), "foo", nil, nil, 42)
if !hook.RunCalled {
t.Fatal("should be called")
}
if hook.RunName != "foo" {
t.Fatalf("bad: %s", hook.RunName)
}
if hook.RunData != 42 {
t.Fatalf("bad: %#v", hook.RunData)
}
}
// A helper Hook implementation for testing cancels.
// Run will wait indetinitelly until ctx is cancelled.
type CancelHook struct {
cancel func()
}
func (h *CancelHook) Run(ctx context.Context, _ string, _ Ui, _ Communicator, _ interface{}) error {
h.cancel()
<-ctx.Done()
return ctx.Err()
}
func TestDispatchHook_cancel(t *testing.T) {
cancelHook := new(CancelHook)
dh := &DispatchHook{
Mapping: map[string][]Hook{
"foo": {cancelHook},
},
}
ctx, cancel := context.WithCancel(context.Background())
cancelHook.cancel = cancel
errchan := make(chan error)
go func() {
errchan <- dh.Run(ctx, "foo", nil, nil, 42)
}()
if err := <-errchan; err == nil {
t.Fatal("hook should've errored")
}
}