func main() { port, consulURL, pathToCheckARecord := parseCommandLineFlags() proxyURL, err := url.Parse(consulURL) if err != nil { log.Fatal(err) } if pathToCheckARecord == "" { log.Fatal("--path-to-check-a-record is required") } mux := http.NewServeMux() logBuffer := bytes.NewBuffer([]byte{}) healthCheckHandler := handlers.NewHealthCheckHandler() dnsHandler := handlers.NewDNSHandler(pathToCheckARecord) proxy := httputil.NewSingleHostReverseProxy(proxyURL) director := proxy.Director proxy.Director = func(request *http.Request) { director(request) request.URL.Path = strings.TrimPrefix(request.URL.Path, "/consul") request.Host = request.URL.Host } proxy.ErrorLog = log.New(logBuffer, "", 0) mux.HandleFunc("/consul/", func(w http.ResponseWriter, req *http.Request) { bufferedRW := buffered.NewResponseWriter(w, logBuffer) proxy.ServeHTTP(bufferedRW, req) bufferedRW.Copy() }) mux.HandleFunc("/health_check", func(w http.ResponseWriter, req *http.Request) { healthCheckHandler.ServeHTTP(w, req) }) mux.HandleFunc("/dns", func(w http.ResponseWriter, req *http.Request) { dnsHandler.ServeHTTP(w, req) }) log.Fatal(http.ListenAndServe(fmt.Sprintf("0.0.0.0:%s", port), mux)) }
var err error args := []string{ "-ldflags", "-X main.Addresses=127.0.0.2,127.0.0.3,127.0.0.4 -X main.ServiceName=some-service", } pathToCheckARecord, err = gexec.Build("github.com/cloudfoundry-incubator/consul-release/src/acceptance-tests/testing/testconsumer/fakes/checkarecord", args...) Expect(err).NotTo(HaveOccurred()) }) It("returns an array of ip addresses", func() { request, err := http.NewRequest("GET", "/dns?service=some-service", nil) Expect(err).NotTo(HaveOccurred()) handler := handlers.NewDNSHandler(pathToCheckARecord) recorder := httptest.NewRecorder() handler.ServeHTTP(recorder, request) Expect(recorder.Code).To(Equal(http.StatusOK)) Expect(string(recorder.Body.Bytes())).To(Equal(`["127.0.0.2","127.0.0.3","127.0.0.4"]`)) }) }) Context("when no ip addresses are bound to the service", func() { var pathToCheckARecord string BeforeEach(func() { var err error args := []string{