r.Run() }) AfterEach(func() { if natsRunner != nil { natsRunner.Stop() } if router != nil { router.Stop() } }) Context("Drain", func() { It("waits until the last request completes", func() { app := test.NewTestApp([]route.Uri{"drain.vcap.me"}, config.Port, mbusClient, nil, "") blocker := make(chan bool) resultCh := make(chan bool, 2) app.AddHandler("/", func(w http.ResponseWriter, r *http.Request) { blocker <- true _, err := ioutil.ReadAll(r.Body) defer r.Body.Close() Expect(err).ToNot(HaveOccurred()) <-blocker w.WriteHeader(http.StatusNoContent) })
config = createConfig(cfgFile, statusPort, proxyPort) }) JustBeforeEach(func() { gorouterSession = startGorouterSession(cfgFile) }) It("waits for all requests to finish", func() { mbusClient, err := newMessageBus(config) Expect(err).ToNot(HaveOccurred()) requestMade := make(chan bool) requestProcessing := make(chan bool) responseRead := make(chan bool) longApp := test.NewTestApp([]route.Uri{"longapp.vcap.me"}, proxyPort, mbusClient, nil, "") longApp.AddHandler("/", func(w http.ResponseWriter, r *http.Request) { requestMade <- true <-requestProcessing _, err := ioutil.ReadAll(r.Body) defer r.Body.Close() Expect(err).ToNot(HaveOccurred()) w.WriteHeader(http.StatusOK) w.Write([]byte{'b'}) }) longApp.Listen() routesUri := fmt.Sprintf("http://%s:%s@%s:%d/routes", config.Status.User, config.Status.Pass, localIP, statusPort) Eventually(func() bool { return appRegistered(routesUri, longApp) }).Should(BeTrue())
app.Unregister() } }) Context("Run", func() { It("reports an error when run twice (address in use)", func() { errCh := router.Run() var err error Eventually(errCh).Should(Receive(&err)) Expect(err).ToNot(BeNil()) }) }) Context("Stop", func() { It("no longer proxies http", func() { app := test.NewTestApp([]route.Uri{"greet.vcap.me"}, config.Port, mbusClient, nil, "") app.AddHandler("/", func(w http.ResponseWriter, r *http.Request) { _, err := ioutil.ReadAll(r.Body) defer r.Body.Close() Expect(err).ToNot(HaveOccurred()) w.WriteHeader(http.StatusNoContent) }) app.Listen() Eventually(func() bool { return appRegistered(registry, app) }).Should(BeTrue()) req, err := http.NewRequest("GET", app.Endpoint(), nil) Expect(err).ToNot(HaveOccurred())