}) Describe("SetOnConnectCallback", func() { BeforeEach(func() { testServer = httptest.NewServer(handlers.NewWebsocketHandler(messagesToSend, 100*time.Millisecond)) endpoint = "ws://" + testServer.Listener.Addr().String() close(messagesToSend) }) It("sets a callback and calls it when connecting", func() { called := false cb := func() { called = true } connection = consumer.New(endpoint, tlsSettings, nil) connection.SetOnConnectCallback(cb) connection.Tail(appGuid, authToken) Eventually(func() bool { return called }).Should(BeTrue()) }) Context("when the connection fails", func() { It("does not call the callback", func() { endpoint = "!!!bad-endpoint" called := false cb := func() { called = true } connection = consumer.New(endpoint, tlsSettings, nil) connection.SetOnConnectCallback(cb) connection.Tail(appGuid, authToken)
testProxyServer.Close() } if testServer != nil { testServer.Close() } }) Describe("Tail", func() { AfterEach(func() { close(messagesToSend) }) perform := func() { connection = consumer.New(endpoint, tlsSettings, consumerProxyFunc) incomingChan, err = connection.Tail(appGuid, authToken) } It("connects using valid URL to running consumerProxyFunc server", func() { messagesToSend <- marshalMessage(createMessage("hello", 0)) perform() message := <-incomingChan Expect(message.Message).To(Equal([]byte("hello"))) }) It("connects using valid URL to a stopped consumerProxyFunc server", func() { testProxyServer.Close() perform()
Expect(err).NotTo(HaveOccurred()) }) AfterEach(func() { connection.Close() }) It("should return data for recent", func() { messages, err := connection.Recent(appGuid, authToken) Expect(err).NotTo(HaveOccurred()) Expect(messages).To(ContainElement(ContainSubstring("Tick"))) }) It("should return data for tail", func(done Done) { messagesChan, err := connection.Tail(appGuid, authToken) Expect(err).NotTo(HaveOccurred()) for m := range messagesChan { if strings.Contains(string(m.GetMessage()), "Tick") { break } } close(done) }, 2) }) type Config struct { AccessToken string
}) }) Context("with legacy endpoints", func() { var legacyConsumer loggregator_consumer.LoggregatorConsumer JustBeforeEach(func() { tcURL := fmt.Sprintf("ws://%s:%d", localIPAddress, TRAFFIC_CONTROLLER_LEGACY_PORT) legacyConsumer = loggregator_consumer.New(tcURL, &tls.Config{}, nil) }) AfterEach(func() { legacyConsumer.Close() }) It("logs tail access", func() { legacyConsumer.Tail(APP_ID, AUTH_TOKEN) expected := fmt.Sprintf("CEF:0|cloud_foundry|loggregator_trafficcontroller|1.0|GET /tail/?app=%s|GET /tail/?app=%[1]s|0|", APP_ID) Eventually(testContents).Should(ContainSubstring(expected)) }) It("logs recent access", func() { legacyConsumer.Recent(APP_ID, AUTH_TOKEN) expected := fmt.Sprintf("CEF:0|cloud_foundry|loggregator_trafficcontroller|1.0|GET /recent?app=%s|GET /recent?app=%[1]s|0|", APP_ID) Eventually(testContents).Should(ContainSubstring(expected)) }) }) })