func/pkg/mock/runner.go

38 lines
865 B
Go

package mock
import (
"context"
"sync"
"time"
fn "knative.dev/func/pkg/functions"
)
// Runner runs a function in a separate process, canceling it on context.Cancel.
// Immediately returned is the port of the running function.
type Runner struct {
RunInvoked bool
RootRequested string
RunFn func(context.Context, fn.Function, time.Duration) (*fn.Job, error)
sync.Mutex
}
func NewRunner() *Runner {
return &Runner{
RunFn: func(ctx context.Context, f fn.Function, t time.Duration) (*fn.Job, error) {
errs := make(chan error, 1)
stop := func() error { return nil }
return fn.NewJob(f, "127.0.0.1", "8080", errs, stop, false)
},
}
}
func (r *Runner) Run(ctx context.Context, f fn.Function, t time.Duration) (*fn.Job, error) {
r.Lock()
defer r.Unlock()
r.RunInvoked = true
r.RootRequested = f.Root
return r.RunFn(ctx, f, t)
}