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 })