Skip to content

Commit 4d1ae5d

Browse files
author
Takashi Kusumi
authored
Handle 401 Unauthorized properly (#32)
1 parent ef6b090 commit 4d1ae5d

2 files changed

Lines changed: 36 additions & 5 deletions

File tree

quobyte/rpc_client.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ func (client QuobyteClient) sendRequest(method string, request interface{}, resp
103103
if err != nil {
104104
return err
105105
}
106-
req, err := http.NewRequest("POST", client.url.String(), bytes.NewBuffer(message))
107-
if err != nil {
108-
return err
109-
}
110-
req.Header.Set("Content-Type", "application/json")
111106
// If no cookies, serialize requests such that first successful request sets the cookies
112107
for {
108+
req, err := http.NewRequest("POST", client.url.String(), bytes.NewBuffer(message))
109+
if err != nil {
110+
return err
111+
}
112+
req.Header.Set("Content-Type", "application/json")
113113
mux.Lock()
114114
hasCookies, err := client.hasCookies()
115115
if err != nil {

quobyte/rpc_client_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package quobyte
33
import (
44
"bytes"
55
"encoding/json"
6+
"net/http"
7+
"net/http/httptest"
68
"reflect"
79
"testing"
810
)
@@ -175,3 +177,32 @@ func TestDecodeErrorCode(t *testing.T) {
175177
}
176178
}
177179
}
180+
181+
func TestSendRequest(t *testing.T) {
182+
// alternately return 200 (OK) / 401 (Unauthorized)
183+
returnOK := true
184+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
185+
if returnOK {
186+
returnOK = false
187+
w.Header().Add("Set-Cookie", "session=value")
188+
w.WriteHeader(200)
189+
w.Write([]byte("{\"result\":{\"volume_uuid\":\"1234\"}}"))
190+
return
191+
}
192+
returnOK = true
193+
w.WriteHeader(401)
194+
w.Write([]byte("Unauthorized"))
195+
}))
196+
defer srv.Close()
197+
198+
client := NewQuobyteClient(srv.URL, "user", "pw")
199+
for i := 0; i < 2; i++ {
200+
resp := &CreateVolumeResponse{}
201+
if err := client.sendRequest("dummyMethod", &request{}, &resp); err != nil {
202+
t.Fatalf("Unexpected error (i=%d): %+v", i, err)
203+
}
204+
if got, want := resp.VolumeUuid, "1234"; got != want {
205+
t.Fatalf("Unexpected result (i=%d): got %s, want %s", i, got, want)
206+
}
207+
}
208+
}

0 commit comments

Comments
 (0)