github.com/gophercloud/gophercloud@v1.11.0/testing/errors_test.go (about) 1 package testing 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/gophercloud/gophercloud" 8 th "github.com/gophercloud/gophercloud/testhelper" 9 ) 10 11 func returnsUnexpectedResp(code int) gophercloud.ErrUnexpectedResponseCode { 12 return gophercloud.ErrUnexpectedResponseCode{ 13 URL: "http://example.com", 14 Method: "GET", 15 Expected: []int{200}, 16 Actual: code, 17 Body: []byte("the response body"), 18 ResponseHeader: nil, 19 } 20 } 21 22 func TestGetResponseCode404(t *testing.T) { 23 var err404 error = gophercloud.ErrDefault404{ErrUnexpectedResponseCode: returnsUnexpectedResp(404)} 24 25 err, ok := err404.(gophercloud.StatusCodeError) 26 th.AssertEquals(t, true, ok) 27 th.AssertEquals(t, err.GetStatusCode(), 404) 28 29 t.Run("wraps ErrUnexpectedResponseCode", func(t *testing.T) { 30 var unexpectedResponseCode gophercloud.ErrUnexpectedResponseCode 31 if errors.As(err, &unexpectedResponseCode) { 32 if want, have := "the response body", string(unexpectedResponseCode.Body); want != have { 33 t.Errorf("expected the wrapped error to contain the response body, found %q", have) 34 } 35 } else { 36 t.Errorf("err.Unwrap() didn't return ErrUnexpectedResponseCode") 37 } 38 }) 39 } 40 41 func TestGetResponseCode502(t *testing.T) { 42 var err502 error = gophercloud.ErrDefault502{ErrUnexpectedResponseCode: returnsUnexpectedResp(502)} 43 44 err, ok := err502.(gophercloud.StatusCodeError) 45 th.AssertEquals(t, true, ok) 46 th.AssertEquals(t, err.GetStatusCode(), 502) 47 48 t.Run("wraps ErrUnexpectedResponseCode", func(t *testing.T) { 49 var unexpectedResponseCode gophercloud.ErrUnexpectedResponseCode 50 if errors.As(err, &unexpectedResponseCode) { 51 if want, have := "the response body", string(unexpectedResponseCode.Body); want != have { 52 t.Errorf("expected the wrapped error to contain the response body, found %q", have) 53 } 54 } else { 55 t.Errorf("err.Unwrap() didn't return ErrUnexpectedResponseCode") 56 } 57 }) 58 } 59 60 func TestGetResponseCode504(t *testing.T) { 61 var err504 error = gophercloud.ErrDefault504{ErrUnexpectedResponseCode: returnsUnexpectedResp(504)} 62 63 err, ok := err504.(gophercloud.StatusCodeError) 64 th.AssertEquals(t, true, ok) 65 th.AssertEquals(t, err.GetStatusCode(), 504) 66 67 t.Run("wraps ErrUnexpectedResponseCode", func(t *testing.T) { 68 var unexpectedResponseCode gophercloud.ErrUnexpectedResponseCode 69 if errors.As(err, &unexpectedResponseCode) { 70 if want, have := "the response body", string(unexpectedResponseCode.Body); want != have { 71 t.Errorf("expected the wrapped error to contain the response body, found %q", have) 72 } 73 } else { 74 t.Errorf("err.Unwrap() didn't return ErrUnexpectedResponseCode") 75 } 76 }) 77 } 78 79 // Compile-time check that all response-code errors implement `Unwrap()` 80 type unwrapper interface { 81 Unwrap() error 82 } 83 84 var ( 85 _ unwrapper = gophercloud.ErrDefault401{} 86 _ unwrapper = gophercloud.ErrDefault403{} 87 _ unwrapper = gophercloud.ErrDefault404{} 88 _ unwrapper = gophercloud.ErrDefault405{} 89 _ unwrapper = gophercloud.ErrDefault408{} 90 _ unwrapper = gophercloud.ErrDefault409{} 91 _ unwrapper = gophercloud.ErrDefault429{} 92 _ unwrapper = gophercloud.ErrDefault500{} 93 _ unwrapper = gophercloud.ErrDefault502{} 94 _ unwrapper = gophercloud.ErrDefault503{} 95 _ unwrapper = gophercloud.ErrDefault504{} 96 )