Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2019-12-02 14:54:40 +0300
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2019-12-02 14:54:40 +0300
commit1a648a5093175bee5907bfc5f23e466a5349d1b5 (patch)
tree7c0974a7708941197a7af98cc13d9c7afa279ae1 /internal/source/gitlab/client
parent043bf9da19d09d1983e04f747b35b46ce948a479 (diff)
Integrate gitlab client with gitlab source cache
Diffstat (limited to 'internal/source/gitlab/client')
-rw-r--r--internal/source/gitlab/client/client.go50
-rw-r--r--internal/source/gitlab/client/client_stub.go15
-rw-r--r--internal/source/gitlab/client/client_test.go22
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)