}) It("returns an error on a bogus response body", func() { testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Expect(r.URL.Path).To(Equal("/cloud_configs")) w.WriteHeader(http.StatusTeapot) w.Write([]byte("More info")) })) client := bosh.NewClient(bosh.Config{ URL: testServer.URL, }) bosh.SetBodyReader(func(io.Reader) ([]byte, error) { return nil, errors.New("a bad read happened") }) err := client.UpdateCloudConfig([]byte("")) Expect(err).To(MatchError("a bad read happened")) }) It("errors on an unexpected status code with body", func() { testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Expect(r.URL.Path).To(Equal("/cloud_configs")) w.WriteHeader(http.StatusTeapot) w.Write([]byte("More info")) })) client := bosh.NewClient(bosh.Config{
URL: server.URL, Username: "******", Password: "******", }) err := client.SetVMResurrection("", "", 0, true) Expect(err).To(MatchError("unexpected response 418 I'm a teapot: something bad happened")) }) It("returns an error when the body fails to read", func() { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusTeapot) w.Write([]byte("")) })) client := bosh.NewClient(bosh.Config{ URL: server.URL, Username: "******", Password: "******", }) bosh.SetBodyReader(func(io.Reader) ([]byte, error) { return nil, errors.New("failed to read") }) err := client.SetVMResurrection("", "", 0, true) Expect(err).To(MatchError("failed to read")) }) }) })