diff options
author | Mikhail Mazurskiy <mmazurskiy@gitlab.com> | 2021-09-09 21:05:25 +1000 |
---|---|---|
committer | Mikhail Mazurskiy <mmazurskiy@gitlab.com> | 2021-09-09 21:05:25 +1000 |
commit | 44737afce375d68a3c122991f6d94e3a84233dbb (patch) | |
tree | 7d5b299ce6bcddcb0bdf33fa24a1c42c5e65e882 /client/client_test.go | |
parent | 5edb579c23a06a2795c199478c88782b25f34d0d (diff) | |
download | gitlab-shell-ash2k/use-moved-gitlab-client.tar.gz |
Use moved GitLab client from Gitalyash2k/use-moved-gitlab-client
See https://gitlab.com/gitlab-org/gitaly/-/merge_requests/3850
Diffstat (limited to 'client/client_test.go')
-rw-r--r-- | client/client_test.go | 238 |
1 files changed, 0 insertions, 238 deletions
diff --git a/client/client_test.go b/client/client_test.go deleted file mode 100644 index 48681f7..0000000 --- a/client/client_test.go +++ /dev/null @@ -1,238 +0,0 @@ -package client - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "net/http" - "path" - "strings" - "testing" - - "github.com/stretchr/testify/require" - - "gitlab.com/gitlab-org/gitlab-shell/client/testserver" - "gitlab.com/gitlab-org/gitlab-shell/internal/testhelper" -) - -func TestClients(t *testing.T) { - testhelper.PrepareTestRootDir(t) - - testCases := []struct { - desc string - relativeURLRoot string - caFile string - server func(*testing.T, []testserver.TestRequestHandler) string - }{ - { - desc: "Socket client", - server: testserver.StartSocketHttpServer, - }, - { - desc: "Socket client with a relative URL at /", - relativeURLRoot: "/", - server: testserver.StartSocketHttpServer, - }, - { - desc: "Socket client with relative URL at /gitlab", - relativeURLRoot: "/gitlab", - server: testserver.StartSocketHttpServer, - }, - { - desc: "Http client", - server: testserver.StartHttpServer, - }, - { - desc: "Https client", - caFile: path.Join(testhelper.TestRoot, "certs/valid/server.crt"), - server: func(t *testing.T, handlers []testserver.TestRequestHandler) string { - return testserver.StartHttpsServer(t, handlers, "") - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.desc, func(t *testing.T) { - url := tc.server(t, buildRequests(t, tc.relativeURLRoot)) - - secret := "sssh, it's a secret" - - httpClient, err := NewHTTPClientWithOpts(url, tc.relativeURLRoot, tc.caFile, "", false, 1, nil) - require.NoError(t, err) - - client, err := NewGitlabNetClient("", "", secret, httpClient) - require.NoError(t, err) - - testBrokenRequest(t, client) - testSuccessfulGet(t, client) - testSuccessfulPost(t, client) - testMissing(t, client) - testErrorMessage(t, client) - testAuthenticationHeader(t, client) - }) - } -} - -func testSuccessfulGet(t *testing.T, client *GitlabNetClient) { - t.Run("Successful get", func(t *testing.T) { - response, err := client.Get(context.Background(), "/hello") - require.NoError(t, err) - require.NotNil(t, response) - - defer response.Body.Close() - - responseBody, err := io.ReadAll(response.Body) - require.NoError(t, err) - require.Equal(t, string(responseBody), "Hello") - }) -} - -func testSuccessfulPost(t *testing.T, client *GitlabNetClient) { - t.Run("Successful Post", func(t *testing.T) { - data := map[string]string{"key": "value"} - - response, err := client.Post(context.Background(), "/post_endpoint", data) - require.NoError(t, err) - require.NotNil(t, response) - - defer response.Body.Close() - - responseBody, err := io.ReadAll(response.Body) - require.NoError(t, err) - require.Equal(t, "Echo: {\"key\":\"value\"}", string(responseBody)) - }) -} - -func testMissing(t *testing.T, client *GitlabNetClient) { - t.Run("Missing error for GET", func(t *testing.T) { - response, err := client.Get(context.Background(), "/missing") - require.EqualError(t, err, "Internal API error (404)") - require.Nil(t, response) - }) - - t.Run("Missing error for POST", func(t *testing.T) { - response, err := client.Post(context.Background(), "/missing", map[string]string{}) - require.EqualError(t, err, "Internal API error (404)") - require.Nil(t, response) - }) -} - -func testErrorMessage(t *testing.T, client *GitlabNetClient) { - t.Run("Error with message for GET", func(t *testing.T) { - response, err := client.Get(context.Background(), "/error") - require.EqualError(t, err, "Don't do that") - require.Nil(t, response) - }) - - t.Run("Error with message for POST", func(t *testing.T) { - response, err := client.Post(context.Background(), "/error", map[string]string{}) - require.EqualError(t, err, "Don't do that") - require.Nil(t, response) - }) -} - -func testBrokenRequest(t *testing.T, client *GitlabNetClient) { - t.Run("Broken request for GET", func(t *testing.T) { - response, err := client.Get(context.Background(), "/broken") - require.EqualError(t, err, "Internal API unreachable") - require.Nil(t, response) - }) - - t.Run("Broken request for POST", func(t *testing.T) { - response, err := client.Post(context.Background(), "/broken", map[string]string{}) - require.EqualError(t, err, "Internal API unreachable") - require.Nil(t, response) - }) -} - -func testAuthenticationHeader(t *testing.T, client *GitlabNetClient) { - t.Run("Authentication headers for GET", func(t *testing.T) { - response, err := client.Get(context.Background(), "/auth") - require.NoError(t, err) - require.NotNil(t, response) - - defer response.Body.Close() - - responseBody, err := io.ReadAll(response.Body) - require.NoError(t, err) - - header, err := base64.StdEncoding.DecodeString(string(responseBody)) - require.NoError(t, err) - require.Equal(t, "sssh, it's a secret", string(header)) - }) - - t.Run("Authentication headers for POST", func(t *testing.T) { - response, err := client.Post(context.Background(), "/auth", map[string]string{}) - require.NoError(t, err) - require.NotNil(t, response) - - defer response.Body.Close() - - responseBody, err := io.ReadAll(response.Body) - require.NoError(t, err) - - header, err := base64.StdEncoding.DecodeString(string(responseBody)) - require.NoError(t, err) - require.Equal(t, "sssh, it's a secret", string(header)) - }) -} - -func buildRequests(t *testing.T, relativeURLRoot string) []testserver.TestRequestHandler { - requests := []testserver.TestRequestHandler{ - { - Path: "/api/v4/internal/hello", - Handler: func(w http.ResponseWriter, r *http.Request) { - require.Equal(t, http.MethodGet, r.Method) - - fmt.Fprint(w, "Hello") - }, - }, - { - Path: "/api/v4/internal/post_endpoint", - Handler: func(w http.ResponseWriter, r *http.Request) { - require.Equal(t, http.MethodPost, r.Method) - - b, err := io.ReadAll(r.Body) - defer r.Body.Close() - - require.NoError(t, err) - - fmt.Fprint(w, "Echo: "+string(b)) - }, - }, - { - Path: "/api/v4/internal/auth", - Handler: func(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, r.Header.Get(secretHeaderName)) - }, - }, - { - Path: "/api/v4/internal/error", - Handler: func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusBadRequest) - body := map[string]string{ - "message": "Don't do that", - } - json.NewEncoder(w).Encode(body) - }, - }, - { - Path: "/api/v4/internal/broken", - Handler: func(w http.ResponseWriter, r *http.Request) { - panic("Broken") - }, - }, - } - - relativeURLRoot = strings.Trim(relativeURLRoot, "/") - if relativeURLRoot != "" { - for i, r := range requests { - requests[i].Path = fmt.Sprintf("/%s%s", relativeURLRoot, r.Path) - } - } - - return requests -} |