github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/syslog/drainer_test.go (about)

     1  package syslog_test
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"strconv"
     7  
     8  	"github.com/pf-qiu/concourse/v6/atc/db"
     9  	"github.com/pf-qiu/concourse/v6/atc/db/dbfakes"
    10  	"github.com/pf-qiu/concourse/v6/atc/event"
    11  	"github.com/pf-qiu/concourse/v6/atc/syslog"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  func newFakeBuild(id int) db.Build {
    17  	fakeEventSource := new(dbfakes.FakeEventSource)
    18  
    19  	msg1 := json.RawMessage(`{"time":1533744538,"payload":"build ` + strconv.Itoa(id) + ` log"}`)
    20  
    21  	fakeEventSource.NextReturnsOnCall(0, event.Envelope{
    22  		Data:  &msg1,
    23  		Event: "log",
    24  	}, nil)
    25  
    26  	msg2 := json.RawMessage(`{"time":1533744538,"payload":"build ` + strconv.Itoa(id) + ` status"}`)
    27  
    28  	fakeEventSource.NextReturnsOnCall(1, event.Envelope{
    29  		Data:  &msg2,
    30  		Event: "status",
    31  	}, nil)
    32  
    33  	fakeEventSource.NextReturnsOnCall(2, event.Envelope{}, db.ErrEndOfBuildEventStream)
    34  
    35  	fakeEventSource.NextReturns(event.Envelope{}, db.ErrEndOfBuildEventStream)
    36  
    37  	fakeBuild := new(dbfakes.FakeBuild)
    38  	fakeBuild.EventsReturns(fakeEventSource, nil)
    39  	fakeBuild.IDReturns(id)
    40  
    41  	return fakeBuild
    42  }
    43  
    44  var _ = Describe("Drainer", func() {
    45  	var fakeBuildFactory *dbfakes.FakeBuildFactory
    46  	var server *testServer
    47  
    48  	BeforeEach(func() {
    49  		fakeBuildFactory = new(dbfakes.FakeBuildFactory)
    50  		fakeBuildFactory.GetDrainableBuildsReturns([]db.Build{newFakeBuild(123), newFakeBuild(345)}, nil)
    51  	})
    52  
    53  	AfterEach(func() {
    54  		server.Close()
    55  	})
    56  
    57  	Context("when there are builds that have not been drained", func() {
    58  		Context("when tls is not set", func() {
    59  			BeforeEach(func() {
    60  				server = newTestServer(nil)
    61  			})
    62  
    63  			It("drains all build events by tcp", func() {
    64  				testDrainer := syslog.NewDrainer("tcp", server.Addr, "test", []string{}, fakeBuildFactory)
    65  				err := testDrainer.Run(context.TODO())
    66  				Expect(err).NotTo(HaveOccurred())
    67  
    68  				got := <-server.Messages
    69  				Expect(got).To(ContainSubstring("build 123 log"))
    70  				Expect(got).To(ContainSubstring("build 345 log"))
    71  				Expect(got).NotTo(ContainSubstring("build 123 status"))
    72  				Expect(got).NotTo(ContainSubstring("build 345 status"))
    73  			}, 0.2)
    74  		})
    75  
    76  	})
    77  })