123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package exec
- import (
- "github.com/docker/swarmkit/api"
- "golang.org/x/net/context"
- "runtime"
- "strings"
- )
- // StubController implements the Controller interface,
- // but allows you to specify behaviors for each of its methods.
- type StubController struct {
- Controller
- UpdateFn func(ctx context.Context, t *api.Task) error
- PrepareFn func(ctx context.Context) error
- StartFn func(ctx context.Context) error
- WaitFn func(ctx context.Context) error
- ShutdownFn func(ctx context.Context) error
- TerminateFn func(ctx context.Context) error
- RemoveFn func(ctx context.Context) error
- CloseFn func() error
- calls map[string]int
- cstatus *api.ContainerStatus
- }
- // NewStubController returns an initialized StubController
- func NewStubController() *StubController {
- return &StubController{
- calls: make(map[string]int),
- }
- }
- // If function A calls updateCountsForSelf,
- // The callCount[A] value will be incremented
- func (sc *StubController) called() {
- pc, _, _, ok := runtime.Caller(1)
- if !ok {
- panic("Failed to find caller of function")
- }
- // longName looks like 'github.com/docker/swarmkit/agent/exec.(*StubController).Prepare:1'
- longName := runtime.FuncForPC(pc).Name()
- parts := strings.Split(longName, ".")
- tail := strings.Split(parts[len(parts)-1], ":")
- sc.calls[tail[0]]++
- }
- // Update is part of the Controller interface
- func (sc *StubController) Update(ctx context.Context, t *api.Task) error {
- sc.called()
- return sc.UpdateFn(ctx, t)
- }
- // Prepare is part of the Controller interface
- func (sc *StubController) Prepare(ctx context.Context) error { sc.called(); return sc.PrepareFn(ctx) }
- // Start is part of the Controller interface
- func (sc *StubController) Start(ctx context.Context) error { sc.called(); return sc.StartFn(ctx) }
- // Wait is part of the Controller interface
- func (sc *StubController) Wait(ctx context.Context) error { sc.called(); return sc.WaitFn(ctx) }
- // Shutdown is part of the Controller interface
- func (sc *StubController) Shutdown(ctx context.Context) error { sc.called(); return sc.ShutdownFn(ctx) }
- // Terminate is part of the Controller interface
- func (sc *StubController) Terminate(ctx context.Context) error {
- sc.called()
- return sc.TerminateFn(ctx)
- }
- // Remove is part of the Controller interface
- func (sc *StubController) Remove(ctx context.Context) error { sc.called(); return sc.RemoveFn(ctx) }
- // Close is part of the Controller interface
- func (sc *StubController) Close() error { sc.called(); return sc.CloseFn() }
|