summaryrefslogtreecommitdiff
path: root/internal/gitlabnet/git/client_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/gitlabnet/git/client_test.go')
-rw-r--r--internal/gitlabnet/git/client_test.go88
1 files changed, 88 insertions, 0 deletions
diff --git a/internal/gitlabnet/git/client_test.go b/internal/gitlabnet/git/client_test.go
new file mode 100644
index 0000000..b550e99
--- /dev/null
+++ b/internal/gitlabnet/git/client_test.go
@@ -0,0 +1,88 @@
+package git
+
+import (
+ "bytes"
+ "context"
+ "io"
+ "net/http"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "gitlab.com/gitlab-org/gitlab-shell/v14/client/testserver"
+ "gitlab.com/gitlab-org/gitlab-shell/v14/internal/config"
+)
+
+var customHeaders = map[string]string{
+ "Authorization": "Bearer: token",
+ "Header-One": "Value-Two",
+}
+
+func TestInfoRefs(t *testing.T) {
+ client := setup(t)
+
+ for _, service := range []string{
+ "git-receive-pack",
+ "git-upload-pack",
+ "git-archive-pack",
+ } {
+ response, err := client.InfoRefs(context.Background(), service)
+ require.NoError(t, err)
+
+ body, err := io.ReadAll(response.Body)
+ require.NoError(t, err)
+ defer response.Body.Close()
+
+ require.Equal(t, service, string(body))
+ }
+}
+
+func TestReceivePack(t *testing.T) {
+ client := setup(t)
+
+ content := "content"
+ response, err := client.ReceivePack(context.Background(), bytes.NewReader([]byte(content)))
+ require.NoError(t, err)
+ defer response.Body.Close()
+
+ body, err := io.ReadAll(response.Body)
+ require.NoError(t, err)
+
+ require.Equal(t, "git-receive-pack: content", string(body))
+}
+
+func setup(t *testing.T) *Client {
+ requests := []testserver.TestRequestHandler{
+ {
+ Path: "/info/refs",
+ Handler: func(w http.ResponseWriter, r *http.Request) {
+ require.Equal(t, customHeaders["Authorization"], r.Header.Get("Authorization"))
+ require.Equal(t, customHeaders["Header-One"], r.Header.Get("Header-One"))
+
+ w.Write([]byte(r.URL.Query().Get("service")))
+ },
+ },
+ {
+ Path: "/git-receive-pack",
+ Handler: func(w http.ResponseWriter, r *http.Request) {
+ require.Equal(t, customHeaders["Authorization"], r.Header.Get("Authorization"))
+ require.Equal(t, customHeaders["Header-One"], r.Header.Get("Header-One"))
+ require.Equal(t, "application/x-git-receive-pack-request", r.Header.Get("Content-Type"))
+ require.Equal(t, "application/x-git-receive-pack-result", r.Header.Get("Accept"))
+ require.Equal(t, customHeaders["Header-One"], r.Header.Get("Header-One"))
+
+ body, err := io.ReadAll(r.Body)
+ require.NoError(t, err)
+ defer r.Body.Close()
+
+ w.Write([]byte("git-receive-pack: "))
+ w.Write(body)
+ },
+ },
+ }
+
+ url := testserver.StartHttpServer(t, requests)
+ client, err := NewClient(&config.Config{GitlabUrl: url}, url, customHeaders)
+ require.NoError(t, err)
+
+ return client
+}