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