1package fake_runner
2
3import (
4	"os"
5
6	. "github.com/onsi/ginkgo"
7	. "github.com/onsi/gomega"
8)
9
10type TestRunner struct {
11	*FakeRunner
12	exitChan chan error
13}
14
15func NewTestRunner() *TestRunner {
16	exitChan := make(chan error)
17	runner := &FakeRunner{
18		RunStub: func(signals <-chan os.Signal, ready chan<- struct{}) error {
19			return <-exitChan
20		},
21	}
22
23	return &TestRunner{runner, exitChan}
24}
25
26func (r *TestRunner) WaitForCall() <-chan os.Signal {
27	Eventually(r.RunCallCount).Should(Equal(1))
28	signal, _ := r.RunArgsForCall(0)
29	return signal
30}
31
32func (r *TestRunner) TriggerReady() {
33	Eventually(r.RunCallCount).Should(Equal(1))
34	_, ready := r.RunArgsForCall(0)
35	close(ready)
36}
37
38func (r *TestRunner) TriggerExit(err error) {
39	defer GinkgoRecover()
40
41	r.exitChan <- err
42}
43
44func (r *TestRunner) EnsureExit() {
45	select {
46	case r.exitChan <- nil:
47	default:
48
49	}
50}
51