github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/cmd/logging_runner_test.go (about)

     1  package cmd_test
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  
     7  	"code.cloudfoundry.org/lager/lagertest"
     8  	. "github.com/pf-qiu/concourse/v6/cmd"
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  	"github.com/tedsuo/ifrit"
    12  	ifritFakes "github.com/tedsuo/ifrit/fake_runner"
    13  )
    14  
    15  var _ = Describe("LoggingRunner", func() {
    16  
    17  	var (
    18  		runner                  ifrit.Runner
    19  		fakeRunner              *ifritFakes.FakeRunner
    20  		logger                  *lagertest.TestLogger
    21  		fakeRunnerBlocker       chan interface{}
    22  		fakeRunnerRunStubReturn error
    23  		runnerError             chan error
    24  		signals                 <-chan os.Signal
    25  		ready                   chan<- struct{}
    26  	)
    27  
    28  	BeforeEach(func() {
    29  		runnerError = make(chan error, 1)
    30  
    31  		fakeRunnerBlocker = make(chan interface{})
    32  		signals = make(chan os.Signal)
    33  		ready = make(chan struct{})
    34  
    35  		fakeRunner = new(ifritFakes.FakeRunner)
    36  		fakeRunner.RunStub = func(signals <-chan os.Signal, ready chan<- struct{}) error {
    37  			<-fakeRunnerBlocker
    38  			return fakeRunnerRunStubReturn
    39  		}
    40  		logger = lagertest.NewTestLogger("foo")
    41  		runner = NewLoggingRunner(logger, fakeRunner)
    42  
    43  		fakeRunnerRunStubReturn = errors.New("some-error")
    44  		close(fakeRunnerBlocker)
    45  	})
    46  
    47  	JustBeforeEach(func() {
    48  		go func() {
    49  			runnerError <- runner.Run(signals, ready)
    50  		}()
    51  	})
    52  
    53  	Describe("#Run", func() {
    54  		It("logs the member name", func() {
    55  			<-runnerError
    56  			Expect(logger.LogMessages()).To(ContainElement("foo.logging-runner-exited"))
    57  		})
    58  
    59  		It("returns the child's return value", func() {
    60  			err := <-runnerError
    61  			Expect(err).To(Equal(fakeRunnerRunStubReturn))
    62  		})
    63  
    64  		It("invokes the child's Run with signals and ready", func() {
    65  			<-runnerError
    66  			Expect(fakeRunner.RunCallCount()).To(Equal(1))
    67  			sig, read := fakeRunner.RunArgsForCall(0)
    68  
    69  			Expect(sig).To(Equal(signals))
    70  			Expect(read).To(Equal(ready))
    71  		})
    72  	})
    73  })