logWriter *bytes.Buffer ) BeforeEach(func() { var err error request, err = http.NewRequest("GET", "/some/path", nil) if err != nil { panic(err) } logWriter = &bytes.Buffer{} logger = lager.NewLogger("my-app") logger.RegisterSink(lager.NewWriterSink(logWriter, lager.DEBUG)) writer = httptest.NewRecorder() ware = middleware.NewRequestLogging(logger) context = stack.NewContext() }) It("logs the request", func() { result := ware.ServeHTTP(writer, request, context) Expect(result).To(BeTrue()) var line logLine err := json.Unmarshal(logWriter.Bytes(), &line) Expect(err).NotTo(HaveOccurred()) Expect(line.Source).To(Equal("my-app")) Expect(line.Message).To(Equal("my-app.request.incoming")) Expect(line.LogLevel).To(Equal(int(lager.DEBUG))) Expect(line.Data).To(HaveKeyWithValue("vcap_request_id", "UNKNOWN")) Expect(line.Data).To(HaveKeyWithValue("method", "GET"))
"github.com/ryanmoran/stack" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Routes", func() { var ( logging middleware.RequestLogging dbAllocator middleware.DatabaseAllocator auth middleware.Authenticator muxer web.Muxer ) BeforeEach(func() { logging = middleware.NewRequestLogging(lager.NewLogger("log-prefix")) auth = middleware.NewAuthenticator("some-public-key", "notifications.write") dbAllocator = middleware.NewDatabaseAllocator(&sql.DB{}, false) muxer = web.NewMuxer() campaigntypes.Routes{ RequestLogging: logging, Authenticator: auth, DatabaseAllocator: dbAllocator, CampaignTypesCollection: collections.CampaignTypesCollection{}, }.Register(muxer) }) It("routes POST /senders/{sender_id}/campaign_types", func() { request, err := http.NewRequest("POST", "/senders/some-sender-id/campaign_types", nil) Expect(err).NotTo(HaveOccurred())
func NewRouter(mx muxer, config Config) http.Handler { requestCounter := middleware.NewRequestCounter(mx.GetRouter(), metrics.DefaultLogger) logging := middleware.NewRequestLogging(config.Logger) notificationsWriteAuthenticator := middleware.NewAuthenticator(config.UAAPublicKey, "notifications.write") databaseAllocator := middleware.NewDatabaseAllocator(config.SQLDB, config.DBLoggingEnabled) warrantConfig := warrant.Config{ Host: config.UAAHost, SkipVerifySSL: config.SkipVerifySSL, } warrantUsersService := warrant.NewUsersService(warrantConfig) warrantClientsService := warrant.NewClientsService(warrantConfig) rainmakerConfig := rainmaker.Config{ Host: config.CCHost, SkipVerifySSL: config.SkipVerifySSL, } rainmakerSpacesService := rainmaker.NewSpacesService(rainmakerConfig) rainmakerOrganizationsService := rainmaker.NewOrganizationsService(rainmakerConfig) userFinder := uaa.NewUserFinder(config.UAAClientID, config.UAAClientSecret, warrantUsersService, warrantClientsService) spaceFinder := cf.NewSpaceFinder(config.UAAClientID, config.UAAClientSecret, warrantClientsService, rainmakerSpacesService) orgFinder := cf.NewOrgFinder(config.UAAClientID, config.UAAClientSecret, warrantClientsService, rainmakerOrganizationsService) campaignEnqueuer := queue.NewCampaignEnqueuer(config.Queue) sendersRepository := models.NewSendersRepository(uuid.NewV4) campaignTypesRepository := models.NewCampaignTypesRepository(uuid.NewV4) templatesRepository := models.NewTemplatesRepository(uuid.NewV4) campaignsRepository := models.NewCampaignsRepository(uuid.NewV4) messagesRepository := models.NewMessagesRepository(util.NewClock()) sendersCollection := collections.NewSendersCollection(sendersRepository, campaignTypesRepository) templatesCollection := collections.NewTemplatesCollection(templatesRepository) campaignTypesCollection := collections.NewCampaignTypesCollection(campaignTypesRepository, sendersRepository, templatesRepository) campaignsCollection := collections.NewCampaignsCollection(campaignEnqueuer, campaignsRepository, campaignTypesRepository, templatesRepository, sendersRepository, userFinder, spaceFinder, orgFinder) campaignStatusesCollection := collections.NewCampaignStatusesCollection(campaignsRepository, messagesRepository) info.Routes{ RequestCounter: requestCounter, RequestLogging: logging, }.Register(mx) senders.Routes{ RequestLogging: logging, Authenticator: notificationsWriteAuthenticator, DatabaseAllocator: databaseAllocator, SendersCollection: sendersCollection, }.Register(mx) campaigntypes.Routes{ RequestLogging: logging, Authenticator: notificationsWriteAuthenticator, DatabaseAllocator: databaseAllocator, CampaignTypesCollection: campaignTypesCollection, }.Register(mx) templates.Routes{ RequestLogging: logging, Authenticator: notificationsWriteAuthenticator, DatabaseAllocator: databaseAllocator, TemplatesCollection: templatesCollection, }.Register(mx) campaigns.Routes{ Clock: util.NewClock(), RequestLogging: logging, Authenticator: notificationsWriteAuthenticator, DatabaseAllocator: databaseAllocator, CampaignsCollection: campaignsCollection, CampaignStatusesCollection: campaignStatusesCollection, }.Register(mx) return mx }