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  )