diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2019-12-02 14:54:40 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2019-12-02 14:54:40 +0300 |
commit | 1a648a5093175bee5907bfc5f23e466a5349d1b5 (patch) | |
tree | 7c0974a7708941197a7af98cc13d9c7afa279ae1 /internal/source/gitlab/client | |
parent | 043bf9da19d09d1983e04f747b35b46ce948a479 (diff) |
Integrate gitlab client with gitlab source cache
Diffstat (limited to 'internal/source/gitlab/client')
-rw-r--r-- | internal/source/gitlab/client/client.go | 50 | ||||
-rw-r--r-- | internal/source/gitlab/client/client_stub.go | 15 | ||||
-rw-r--r-- | internal/source/gitlab/client/client_test.go | 22 |
3 files changed, 50 insertions, 37 deletions
diff --git a/internal/source/gitlab/client/client.go b/internal/source/gitlab/client/client.go index 6c9327dc..382cc412 100644 --- a/internal/source/gitlab/client/client.go +++ b/internal/source/gitlab/client/client.go @@ -1,6 +1,7 @@ package client import ( + "context" "encoding/json" "errors" "net/http" @@ -56,59 +57,64 @@ func NewFromConfig(config Config) *Client { return NewClient(config.GitlabServerURL(), config.GitlabAPISecret()) } -// GetVirtualDomain returns VirtualDomain configuration for the given host. It -// returns an error if non-nil `*api.VirtualDomain` can not be retuned. -func (gc *Client) GetVirtualDomain(host string) (*api.VirtualDomain, error) { +// GetLookup returns a VirtualDomain configuration wrap into a Lookup for a +// given host +func (gc *Client) GetLookup(ctx context.Context, host string) api.Lookup { + lookup := api.Lookup{Name: host} + params := url.Values{} params.Set("host", host) - resp, err := gc.get("/api/v4/internal/pages", params) + resp, status, err := gc.get(ctx, "/api/v4/internal/pages", params) if resp != nil { defer resp.Body.Close() } else { - return nil, errors.New("empty response returned") + err = errors.New("empty response returned") } + lookup.Status = status + lookup.Error = err + if err != nil { - return nil, err + return lookup } - var domain api.VirtualDomain - err = json.NewDecoder(resp.Body).Decode(&domain) + err = json.NewDecoder(resp.Body).Decode(&lookup.Domain) if err != nil { - return nil, err + lookup.Error = err + return lookup } - return &domain, nil + return lookup } -func (gc *Client) get(path string, params url.Values) (*http.Response, error) { +func (gc *Client) get(ctx context.Context, path string, params url.Values) (*http.Response, int, error) { endpoint, err := gc.endpoint(path, params) if err != nil { - return nil, err + return nil, 0, err } - req, err := gc.request("GET", endpoint) + req, err := gc.request(ctx, "GET", endpoint) if err != nil { - return nil, err + return nil, 0, err } resp, err := gc.httpClient.Do(req) if err != nil { - return nil, err + return nil, 0, err } switch { case resp.StatusCode == http.StatusOK: - return resp, nil + return resp, resp.StatusCode, nil case resp.StatusCode == http.StatusNoContent: - return resp, errNoContent + return resp, resp.StatusCode, errNoContent case resp.StatusCode == http.StatusUnauthorized: - return resp, errUnauthorized + return resp, resp.StatusCode, errUnauthorized case resp.StatusCode == http.StatusNotFound: - return resp, errNotFound + return resp, resp.StatusCode, errNotFound default: - return resp, errUnknown + return resp, resp.StatusCode, errUnknown } } @@ -123,12 +129,14 @@ func (gc *Client) endpoint(path string, params url.Values) (*url.URL, error) { return endpoint, nil } -func (gc *Client) request(method string, endpoint *url.URL) (*http.Request, error) { +func (gc *Client) request(ctx context.Context, method string, endpoint *url.URL) (*http.Request, error) { req, err := http.NewRequest("GET", endpoint.String(), nil) if err != nil { return nil, err } + req = req.WithContext(ctx) + token, err := gc.token() if err != nil { return nil, err diff --git a/internal/source/gitlab/client/client_stub.go b/internal/source/gitlab/client/client_stub.go index 6dc0af85..801039f1 100644 --- a/internal/source/gitlab/client/client_stub.go +++ b/internal/source/gitlab/client/client_stub.go @@ -1,6 +1,7 @@ package client import ( + "context" "encoding/json" "os" @@ -12,16 +13,18 @@ type StubClient struct { File string } -// GetVirtualDomain reads a test fixture and unmarshalls it -func (c StubClient) GetVirtualDomain(host string) (*api.VirtualDomain, error) { +// GetLookup reads a test fixture and unmarshalls it +func (c StubClient) GetLookup(ctx context.Context, host string) api.Lookup { + lookup := api.Lookup{Name: host, Status: 200} + f, err := os.Open(c.File) defer f.Close() if err != nil { - return nil, err + lookup.Error = err + return lookup } - var domain api.VirtualDomain - err = json.NewDecoder(f).Decode(&domain) + lookup.Error = json.NewDecoder(f).Decode(&lookup.Domain) - return &domain, err + return lookup } diff --git a/internal/source/gitlab/client/client_test.go b/internal/source/gitlab/client/client_test.go index d689b687..f91f241a 100644 --- a/internal/source/gitlab/client/client_test.go +++ b/internal/source/gitlab/client/client_test.go @@ -1,22 +1,24 @@ package client import ( + "context" "encoding/base64" "fmt" "net/http" "net/http/httptest" "testing" + jwt "github.com/dgrijalva/jwt-go" "github.com/stretchr/testify/require" - jwt "github.com/dgrijalva/jwt-go" + "gitlab.com/gitlab-org/gitlab-pages/internal/source/gitlab/api" ) var ( encodedSecret = "e41rcFh7XBA7sNABWVCe2AZvxMsy6QDtJ8S9Ql1UiN8=" // 32 bytes, base64 encoded ) -func TestGetVirtualDomainForErrorResponses(t *testing.T) { +func TestGetLookupForErrorResponses(t *testing.T) { tests := map[int]string{ http.StatusNoContent: "No Content", http.StatusUnauthorized: "Unauthorized", @@ -37,10 +39,10 @@ func TestGetVirtualDomainForErrorResponses(t *testing.T) { client := NewClient(server.URL, secretKey()) - actual, err := client.GetVirtualDomain("group.gitlab.io") + lookup := client.GetLookup(context.Background(), "group.gitlab.io") - require.EqualError(t, err, expectedError) - require.Nil(t, actual) + require.EqualError(t, lookup.Error, expectedError) + require.Equal(t, lookup.Domain, api.VirtualDomain{}) }) } } @@ -80,13 +82,13 @@ func TestGetVirtualDomainAuthenticatedRequest(t *testing.T) { client := NewClient(server.URL, secretKey()) - actual, err := client.GetVirtualDomain("group.gitlab.io") - require.NoError(t, err) + lookup := client.GetLookup(context.Background(), "group.gitlab.io") + require.NoError(t, lookup.Error) - require.Equal(t, "foo", actual.Certificate) - require.Equal(t, "bar", actual.Key) + require.Equal(t, "foo", lookup.Domain.Certificate) + require.Equal(t, "bar", lookup.Domain.Key) - lookupPath := actual.LookupPaths[0] + lookupPath := lookup.Domain.LookupPaths[0] require.Equal(t, 123, lookupPath.ProjectID) require.Equal(t, false, lookupPath.AccessControl) require.Equal(t, true, lookupPath.HTTPSOnly) |