1 package autorest
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import (
18 "net/http"
19 "testing"
20
21 "github.com/Azure/go-autorest/autorest/mocks"
22 )
23
24 func TestResponseHasStatusCode(t *testing.T) {
25 codes := []int{http.StatusOK, http.StatusAccepted}
26 resp := &http.Response{StatusCode: http.StatusAccepted}
27 if !ResponseHasStatusCode(resp, codes...) {
28 t.Fatalf("autorest: ResponseHasStatusCode failed to find %v in %v", resp.StatusCode, codes)
29 }
30 }
31
32 func TestResponseHasStatusCodeNotPresent(t *testing.T) {
33 codes := []int{http.StatusOK, http.StatusAccepted}
34 resp := &http.Response{StatusCode: http.StatusInternalServerError}
35 if ResponseHasStatusCode(resp, codes...) {
36 t.Fatalf("autorest: ResponseHasStatusCode unexpectedly found %v in %v", resp.StatusCode, codes)
37 }
38 }
39
40 func TestNewPollingRequestDoesNotReturnARequestWhenLocationHeaderIsMissing(t *testing.T) {
41 resp := mocks.NewResponseWithStatus("500 InternalServerError", http.StatusInternalServerError)
42
43 req, _ := NewPollingRequest(resp, nil)
44 if req != nil {
45 t.Fatal("autorest: NewPollingRequest returned an http.Request when the Location header was missing")
46 }
47 }
48
49 func TestNewPollingRequestReturnsAnErrorWhenPrepareFails(t *testing.T) {
50 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
51 mocks.SetAcceptedHeaders(resp)
52 resp.Header.Set(http.CanonicalHeaderKey(HeaderLocation), mocks.TestBadURL)
53
54 _, err := NewPollingRequest(resp, nil)
55 if err == nil {
56 t.Fatal("autorest: NewPollingRequest failed to return an error when Prepare fails")
57 }
58 }
59
60 func TestNewPollingRequestDoesNotReturnARequestWhenPrepareFails(t *testing.T) {
61 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
62 mocks.SetAcceptedHeaders(resp)
63 resp.Header.Set(http.CanonicalHeaderKey(HeaderLocation), mocks.TestBadURL)
64
65 req, _ := NewPollingRequest(resp, nil)
66 if req != nil {
67 t.Fatal("autorest: NewPollingRequest returned an http.Request when Prepare failed")
68 }
69 }
70
71 func TestNewPollingRequestReturnsAGetRequest(t *testing.T) {
72 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
73 mocks.SetAcceptedHeaders(resp)
74
75 req, _ := NewPollingRequest(resp, nil)
76 if req.Method != "GET" {
77 t.Fatalf("autorest: NewPollingRequest did not create an HTTP GET request -- actual method %v", req.Method)
78 }
79 }
80
81 func TestNewPollingRequestProvidesTheURL(t *testing.T) {
82 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
83 mocks.SetAcceptedHeaders(resp)
84
85 req, _ := NewPollingRequest(resp, nil)
86 if req.URL.String() != mocks.TestURL {
87 t.Fatalf("autorest: NewPollingRequest did not create an HTTP with the expected URL -- received %v, expected %v", req.URL, mocks.TestURL)
88 }
89 }
90
91 func TestGetLocation(t *testing.T) {
92 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
93 mocks.SetAcceptedHeaders(resp)
94
95 l := GetLocation(resp)
96 if len(l) == 0 {
97 t.Fatalf("autorest: GetLocation failed to return Location header -- expected %v, received %v", mocks.TestURL, l)
98 }
99 }
100
101 func TestGetLocationReturnsEmptyStringForMissingLocation(t *testing.T) {
102 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
103
104 l := GetLocation(resp)
105 if len(l) != 0 {
106 t.Fatalf("autorest: GetLocation return a value without a Location header -- received %v", l)
107 }
108 }
109
110 func TestGetRetryAfter(t *testing.T) {
111 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
112 mocks.SetAcceptedHeaders(resp)
113
114 d := GetRetryAfter(resp, DefaultPollingDelay)
115 if d != mocks.TestDelay {
116 t.Fatalf("autorest: GetRetryAfter failed to returned the expected delay -- expected %v, received %v", mocks.TestDelay, d)
117 }
118 }
119
120 func TestGetRetryAfterReturnsDefaultDelayIfRetryHeaderIsMissing(t *testing.T) {
121 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
122
123 d := GetRetryAfter(resp, DefaultPollingDelay)
124 if d != DefaultPollingDelay {
125 t.Fatalf("autorest: GetRetryAfter failed to returned the default delay for a missing Retry-After header -- expected %v, received %v",
126 DefaultPollingDelay, d)
127 }
128 }
129
130 func TestGetRetryAfterReturnsDefaultDelayIfRetryHeaderIsMalformed(t *testing.T) {
131 resp := mocks.NewResponseWithStatus("202 Accepted", http.StatusAccepted)
132 mocks.SetAcceptedHeaders(resp)
133 resp.Header.Set(http.CanonicalHeaderKey(HeaderRetryAfter), "a very bad non-integer value")
134
135 d := GetRetryAfter(resp, DefaultPollingDelay)
136 if d != DefaultPollingDelay {
137 t.Fatalf("autorest: GetRetryAfter failed to returned the default delay for a malformed Retry-After header -- expected %v, received %v",
138 DefaultPollingDelay, d)
139 }
140 }
141
View as plain text