BeforeEach(func() { database = &fake_db.FakeDB{} stats = &fake_statsd.FakePartialStatsdClient{} tickChan = make(chan time.Time, 1) reporter = NewMetricsReporter(database, stats, &time.Ticker{C: tickChan}) sigChan = make(chan os.Signal, 1) readyChan = make(chan struct{}, 1) resultsChan = make(chan storeadapter.WatchEvent, 1) database.WatchRouteChangesReturns(resultsChan, nil, nil) database.ReadRoutesReturns([]db.Route{ db.Route{}, db.Route{}, db.Route{}, db.Route{}, db.Route{}, }, nil) }) JustBeforeEach(func() { go reporter.Run(sigChan, readyChan) }) AfterEach(func() { sigChan <- nil }) It("emits total_subscriptions on start", func() { Eventually(stats.GaugeCallCount).Should(Equal(1))
It("returns an Unauthorized status code", func() { request = handlers.NewTestRequest("") routesHandler.List(responseRecorder, request) Expect(responseRecorder.Code).To(Equal(http.StatusUnauthorized)) }) }) Context("when the database is empty", func() { var ( routes []db.Route ) BeforeEach(func() { routes = []db.Route{} database.ReadRoutesReturns(routes, nil) }) It("returns an empty set", func() { request = handlers.NewTestRequest("") routesHandler.List(responseRecorder, request) Expect(responseRecorder.Body.String()).To(MatchJSON("[]")) }) }) Context("when the database has one route", func() { var ( routes []db.Route )
sigChan = make(chan os.Signal, 1) readyChan = make(chan struct{}, 1) resultsChan = make(chan db.Event, 1) tcpResultsChan = make(chan db.Event, 1) database.WatchRouteChangesStub = func(filter string) (<-chan db.Event, <-chan error, context.CancelFunc) { if filter == db.HTTP_ROUTE_BASE_KEY { return resultsChan, nil, nil } else { return tcpResultsChan, nil, nil } } database.ReadRoutesReturns([]models.Route{ models.Route{}, models.Route{}, models.Route{}, models.Route{}, models.Route{}, }, nil) database.ReadTcpRouteMappingsReturns([]models.TcpRouteMapping{ models.TcpRouteMapping{}, models.TcpRouteMapping{}, models.TcpRouteMapping{}, }, nil) }) JustBeforeEach(func() { go reporter.Run(sigChan, readyChan) })