diff options
author | John Cai <jcai@gitlab.com> | 2020-05-04 10:59:49 -0700 |
---|---|---|
committer | John Cai <jcai@gitlab.com> | 2020-05-04 14:19:47 -0700 |
commit | 91f45342c4ff29a24c61812d539ac745dbb1570a (patch) | |
tree | aec9280d8c4e1c0d02515f1ca9d46a65182cfb14 /client/httpclient_test.go | |
parent | f62a4b2fb89754372a346f24659212eb8da13601 (diff) | |
download | gitlab-shell-jc-refactor-gitlabnet-client.tar.gz |
Move gitlabnet client to client packagejc-refactor-gitlabnet-client
Diffstat (limited to 'client/httpclient_test.go')
-rw-r--r-- | client/httpclient_test.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/client/httpclient_test.go b/client/httpclient_test.go new file mode 100644 index 0000000..1f0a4ed --- /dev/null +++ b/client/httpclient_test.go @@ -0,0 +1,105 @@ +package client + +import ( + "encoding/base64" + "fmt" + "io/ioutil" + "net/http" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitlab-shell/client/testserver" +) + +func TestReadTimeout(t *testing.T) { + expectedSeconds := uint64(300) + + client := NewHTTPClient("http://localhost:3000", "", "", false, expectedSeconds) + + require.NotNil(t, client) + assert.Equal(t, time.Duration(expectedSeconds)*time.Second, client.Client.Timeout) +} + +const ( + username = "basic_auth_user" + password = "basic_auth_password" +) + +func TestBasicAuthSettings(t *testing.T) { + requests := []testserver.TestRequestHandler{ + { + Path: "/api/v4/internal/get_endpoint", + Handler: func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodGet, r.Method) + + fmt.Fprint(w, r.Header.Get("Authorization")) + }, + }, + { + Path: "/api/v4/internal/post_endpoint", + Handler: func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodPost, r.Method) + + fmt.Fprint(w, r.Header.Get("Authorization")) + }, + }, + } + + client, cleanup := setup(t, username, password, requests) + defer cleanup() + + response, err := client.Get("/get_endpoint") + require.NoError(t, err) + testBasicAuthHeaders(t, response) + + response, err = client.Post("/post_endpoint", nil) + require.NoError(t, err) + testBasicAuthHeaders(t, response) +} + +func testBasicAuthHeaders(t *testing.T, response *http.Response) { + defer response.Body.Close() + + require.NotNil(t, response) + responseBody, err := ioutil.ReadAll(response.Body) + assert.NoError(t, err) + + headerParts := strings.Split(string(responseBody), " ") + assert.Equal(t, "Basic", headerParts[0]) + + credentials, err := base64.StdEncoding.DecodeString(headerParts[1]) + require.NoError(t, err) + + assert.Equal(t, username+":"+password, string(credentials)) +} + +func TestEmptyBasicAuthSettings(t *testing.T) { + requests := []testserver.TestRequestHandler{ + { + Path: "/api/v4/internal/empty_basic_auth", + Handler: func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "", r.Header.Get("Authorization")) + }, + }, + } + + client, cleanup := setup(t, "", "", requests) + defer cleanup() + + _, err := client.Get("/empty_basic_auth") + require.NoError(t, err) +} + +func setup(t *testing.T, username, password string, requests []testserver.TestRequestHandler) (*GitlabNetClient, func()) { + url, cleanup := testserver.StartHttpServer(t, requests) + + httpClient := NewHTTPClient(url, "", "", false, 1) + + client, err := NewGitlabNetClient(username, password, "", httpClient) + require.NoError(t, err) + + return client, cleanup +} |