BeforeEach(func() { logger = lagertest.NewTestLogger("test-session") logger.RegisterSink(lager.NewWriterSink(GinkgoWriter, lager.DEBUG)) loggableHandlerFunc = func(logger lager.Logger, w http.ResponseWriter, r *http.Request) { logger = logger.Session("logger-group") logger.Info("written-in-loggable-handler") } }) It("creates \"request\" session and passes it to LoggableHandlerFunc", func() { handler := middleware.LogWrap(logger, nil, loggableHandlerFunc) req, err := http.NewRequest("GET", "http://example.com", nil) Expect(err).NotTo(HaveOccurred()) handler.ServeHTTP(nil, req) Expect(logger.Buffer()).To(gbytes.Say("test-session.request.serving")) Expect(logger.Buffer()).To(gbytes.Say("\"session\":\"1\"")) Expect(logger.Buffer()).To(gbytes.Say("test-session.request.logger-group.written-in-loggable-handler")) Expect(logger.Buffer()).To(gbytes.Say("\"session\":\"1.1\"")) Expect(logger.Buffer()).To(gbytes.Say("test-session.request.done")) Expect(logger.Buffer()).To(gbytes.Say("\"session\":\"1\"")) }) Context("with access loggger", func() { var accessLogger *lagertest.TestLogger BeforeEach(func() { accessLogger = lagertest.NewTestLogger("test-access-session") accessLogger.RegisterSink(lager.NewWriterSink(GinkgoWriter, lager.DEBUG)) })
It("passes the url when creating a rep client", func() { Expect(fakeRepClientFactory.CreateClientCallCount()).To(Equal(2)) repAddr, repURL := fakeRepClientFactory.CreateClientArgsForCall(0) Expect(repAddr).To(Equal(cellPresence.RepAddress)) Expect(repURL).To(Equal(cellPresence.RepUrl)) }) Context("when creating a rep client fails", func() { BeforeEach(func() { err := errors.New("BOOM!!!") fakeRepClientFactory.CreateClientReturns(nil, err) }) It("should log the error", func() { Expect(logger.Buffer()).To(gbytes.Say("BOOM!!!")) }) It("should not return an error", func() { Expect(err).NotTo(HaveOccurred()) }) }) }) }) Context("is not present", func() { BeforeEach(func() { fakeServiceClient.CellByIdReturns(nil, &models.Error{ Type: models.Error_ResourceNotFound, Message: "cell not found",
NumHosts: 1000, NumApps: 10000, MeanInstancesPerApp: 5, } }) Describe("Execute", func() { It("logs on start and stop", func() { sim.Execute(logger, req) Expect(len(logger.LogMessages())).To(BeNumerically(">=", 2)) }) It("logs the structured request and responses", func() { sim.Execute(logger, req) Expect(logger.Buffer()).To(gbytes.Say(`start.*input.*1000`)) Expect(logger.Buffer()).To(gbytes.Say(`success`)) }) It("returns the request data along with the response", func() { resp, err := sim.Execute(logger, req) Expect(err).NotTo(HaveOccurred()) Expect(resp.Request).To(Equal(req)) }) It("computes the average instances per host", func() { resp, err := sim.Execute(logger, req) Expect(err).NotTo(HaveOccurred()) Expect(resp.MeanInstancesPerHost).To(Equal(50.0)) })