|
|
@@ -123,3 +123,42 @@ func TestHTTPRespBodyUnlimited(t *testing.T) {
|
|
|
t.Fatalf("response has wrong length %d, want %d", len(r), respLength)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// Tests that an HTTP error results in an HTTPError instance
|
|
|
+// being returned with the expected attributes.
|
|
|
+func TestHTTPErrorResponse(t *testing.T) {
|
|
|
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ http.Error(w, "error has occurred!", http.StatusTeapot)
|
|
|
+ }))
|
|
|
+ defer ts.Close()
|
|
|
+
|
|
|
+ c, err := DialHTTP(ts.URL)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ var r string
|
|
|
+ err = c.Call(&r, "test_method")
|
|
|
+ if err == nil {
|
|
|
+ t.Fatal("error was expected")
|
|
|
+ }
|
|
|
+
|
|
|
+ httpErr, ok := err.(HTTPError)
|
|
|
+ if !ok {
|
|
|
+ t.Fatalf("unexpected error type %T", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if httpErr.StatusCode != http.StatusTeapot {
|
|
|
+ t.Error("unexpected status code", httpErr.StatusCode)
|
|
|
+ }
|
|
|
+ if httpErr.Status != "418 I'm a teapot" {
|
|
|
+ t.Error("unexpected status text", httpErr.Status)
|
|
|
+ }
|
|
|
+ if body := string(httpErr.Body); body != "error has occurred!\n" {
|
|
|
+ t.Error("unexpected body", body)
|
|
|
+ }
|
|
|
+
|
|
|
+ if errMsg := httpErr.Error(); errMsg != "418 I'm a teapot: error has occurred!\n" {
|
|
|
+ t.Error("unexpected error message", errMsg)
|
|
|
+ }
|
|
|
+}
|