aboutsummaryrefslogtreecommitdiffstats
path: root/integrations/git_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'integrations/git_test.go')
-rw-r--r--integrations/git_test.go206
1 files changed, 67 insertions, 139 deletions
diff --git a/integrations/git_test.go b/integrations/git_test.go
index 96d39e0519..a372525864 100644
--- a/integrations/git_test.go
+++ b/integrations/git_test.go
@@ -5,25 +5,17 @@
package integrations
import (
- "context"
"crypto/rand"
"fmt"
"io/ioutil"
- "net"
- "net/http"
"net/url"
"os"
- "os/exec"
"path/filepath"
"testing"
"time"
"code.gitea.io/git"
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/setting"
- api "code.gitea.io/sdk/gitea"
- "github.com/Unknwon/com"
"github.com/stretchr/testify/assert"
)
@@ -32,160 +24,86 @@ const (
bigSize = 128 * 1024 * 1024 //128Mo
)
-func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL)) {
- prepareTestEnv(t)
- s := http.Server{
- Handler: mac,
- }
+func TestGit(t *testing.T) {
+ onGiteaRun(t, testGit)
+}
- u, err := url.Parse(setting.AppURL)
- assert.NoError(t, err)
- listener, err := net.Listen("tcp", u.Host)
- assert.NoError(t, err)
+func testGit(t *testing.T, u *url.URL) {
+ username := "user2"
+ baseAPITestContext := NewAPITestContext(t, username, "repo1")
- defer func() {
- ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
- s.Shutdown(ctx)
- cancel()
- }()
+ u.Path = baseAPITestContext.GitPath()
- go s.Serve(listener)
- //Started by config go ssh.Listen(setting.SSH.ListenHost, setting.SSH.ListenPort, setting.SSH.ServerCiphers, setting.SSH.ServerKeyExchanges, setting.SSH.ServerMACs)
+ t.Run("HTTP", func(t *testing.T) {
+ httpContext := baseAPITestContext
+ httpContext.Reponame = "repo-tmp-17"
- callback(t, u)
-}
+ dstPath, err := ioutil.TempDir("", httpContext.Reponame)
+ assert.NoError(t, err)
+ defer os.RemoveAll(dstPath)
+ t.Run("Standard", func(t *testing.T) {
+ ensureAnonymousClone(t, u)
-func TestGit(t *testing.T) {
- onGiteaRun(t, func(t *testing.T, u *url.URL) {
- u.Path = "user2/repo1.git"
+ t.Run("CreateRepo", doAPICreateRepository(httpContext, false))
- t.Run("HTTP", func(t *testing.T) {
- dstPath, err := ioutil.TempDir("", "repo-tmp-17")
- assert.NoError(t, err)
- defer os.RemoveAll(dstPath)
- t.Run("Standard", func(t *testing.T) {
- t.Run("CloneNoLogin", func(t *testing.T) {
- dstLocalPath, err := ioutil.TempDir("", "repo1")
- assert.NoError(t, err)
- defer os.RemoveAll(dstLocalPath)
- err = git.Clone(u.String(), dstLocalPath, git.CloneRepoOptions{})
- assert.NoError(t, err)
- assert.True(t, com.IsExist(filepath.Join(dstLocalPath, "README.md")))
- })
+ u.Path = httpContext.GitPath()
+ u.User = url.UserPassword(username, userPassword)
- t.Run("CreateRepo", func(t *testing.T) {
- session := loginUser(t, "user2")
- token := getTokenForLoggedInUser(t, session)
- req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos?token="+token, &api.CreateRepoOption{
- AutoInit: true,
- Description: "Temporary repo",
- Name: "repo-tmp-17",
- Private: false,
- Gitignores: "",
- License: "WTFPL",
- Readme: "Default",
- })
- session.MakeRequest(t, req, http.StatusCreated)
- })
+ t.Run("Clone", doGitClone(dstPath, u))
- u.Path = "user2/repo-tmp-17.git"
- u.User = url.UserPassword("user2", userPassword)
- t.Run("Clone", func(t *testing.T) {
- err = git.Clone(u.String(), dstPath, git.CloneRepoOptions{})
- assert.NoError(t, err)
- assert.True(t, com.IsExist(filepath.Join(dstPath, "README.md")))
+ t.Run("PushCommit", func(t *testing.T) {
+ t.Run("Little", func(t *testing.T) {
+ commitAndPush(t, littleSize, dstPath)
})
-
- t.Run("PushCommit", func(t *testing.T) {
- t.Run("Little", func(t *testing.T) {
- commitAndPush(t, littleSize, dstPath)
- })
- t.Run("Big", func(t *testing.T) {
- commitAndPush(t, bigSize, dstPath)
- })
+ t.Run("Big", func(t *testing.T) {
+ commitAndPush(t, bigSize, dstPath)
})
})
- t.Run("LFS", func(t *testing.T) {
- t.Run("PushCommit", func(t *testing.T) {
- //Setup git LFS
- _, err = git.NewCommand("lfs").AddArguments("install").RunInDir(dstPath)
- assert.NoError(t, err)
- _, err = git.NewCommand("lfs").AddArguments("track", "data-file-*").RunInDir(dstPath)
- assert.NoError(t, err)
- err = git.AddChanges(dstPath, false, ".gitattributes")
- assert.NoError(t, err)
-
- t.Run("Little", func(t *testing.T) {
- commitAndPush(t, littleSize, dstPath)
- })
- t.Run("Big", func(t *testing.T) {
- commitAndPush(t, bigSize, dstPath)
- })
+ })
+ t.Run("LFS", func(t *testing.T) {
+ t.Run("PushCommit", func(t *testing.T) {
+ //Setup git LFS
+ _, err = git.NewCommand("lfs").AddArguments("install").RunInDir(dstPath)
+ assert.NoError(t, err)
+ _, err = git.NewCommand("lfs").AddArguments("track", "data-file-*").RunInDir(dstPath)
+ assert.NoError(t, err)
+ err = git.AddChanges(dstPath, false, ".gitattributes")
+ assert.NoError(t, err)
+
+ t.Run("Little", func(t *testing.T) {
+ commitAndPush(t, littleSize, dstPath)
})
- t.Run("Locks", func(t *testing.T) {
- lockTest(t, u.String(), dstPath)
+ t.Run("Big", func(t *testing.T) {
+ commitAndPush(t, bigSize, dstPath)
})
})
- })
- t.Run("SSH", func(t *testing.T) {
- //Setup remote link
- u.Scheme = "ssh"
- u.User = url.User("git")
- u.Host = fmt.Sprintf("%s:%d", setting.SSH.ListenHost, setting.SSH.ListenPort)
- u.Path = "user2/repo-tmp-18.git"
-
- //Setup key
- keyFile := filepath.Join(setting.AppDataPath, "my-testing-key")
- err := exec.Command("ssh-keygen", "-f", keyFile, "-t", "rsa", "-N", "").Run()
- assert.NoError(t, err)
- defer os.RemoveAll(keyFile)
- defer os.RemoveAll(keyFile + ".pub")
-
- session := loginUser(t, "user1")
- keyOwner := models.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User)
- token := getTokenForLoggedInUser(t, session)
- urlStr := fmt.Sprintf("/api/v1/admin/users/%s/keys?token=%s", keyOwner.Name, token)
-
- dataPubKey, err := ioutil.ReadFile(keyFile + ".pub")
- assert.NoError(t, err)
- req := NewRequestWithValues(t, "POST", urlStr, map[string]string{
- "key": string(dataPubKey),
- "title": "test-key",
+ t.Run("Locks", func(t *testing.T) {
+ lockTest(t, u.String(), dstPath)
})
- session.MakeRequest(t, req, http.StatusCreated)
+ })
+ })
+ t.Run("SSH", func(t *testing.T) {
+ sshContext := baseAPITestContext
+ sshContext.Reponame = "repo-tmp-18"
+ keyname := "my-testing-key"
+ //Setup key the user ssh key
+ withKeyFile(t, keyname, func(keyFile string) {
+ t.Run("CreateUserKey", doAPICreateUserKey(sshContext, "test-key", keyFile))
- //Setup ssh wrapper
- os.Setenv("GIT_SSH_COMMAND",
- "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "+
- filepath.Join(setting.AppWorkPath, keyFile))
- os.Setenv("GIT_SSH_VARIANT", "ssh")
+ //Setup remote link
+ sshURL := createSSHUrl(sshContext.GitPath(), u)
//Setup clone folder
- dstPath, err := ioutil.TempDir("", "repo-tmp-18")
+ dstPath, err := ioutil.TempDir("", sshContext.Reponame)
assert.NoError(t, err)
defer os.RemoveAll(dstPath)
t.Run("Standard", func(t *testing.T) {
- t.Run("CreateRepo", func(t *testing.T) {
- session := loginUser(t, "user2")
- token := getTokenForLoggedInUser(t, session)
- req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos?token="+token, &api.CreateRepoOption{
- AutoInit: true,
- Description: "Temporary repo",
- Name: "repo-tmp-18",
- Private: false,
- Gitignores: "",
- License: "WTFPL",
- Readme: "Default",
- })
- session.MakeRequest(t, req, http.StatusCreated)
- })
+ t.Run("CreateRepo", doAPICreateRepository(sshContext, false))
+
//TODO get url from api
- t.Run("Clone", func(t *testing.T) {
- _, err = git.NewCommand("clone").AddArguments(u.String(), dstPath).Run()
- assert.NoError(t, err)
- assert.True(t, com.IsExist(filepath.Join(dstPath, "README.md")))
- })
+ t.Run("Clone", doGitClone(dstPath, sshURL))
+
//time.Sleep(5 * time.Minute)
t.Run("PushCommit", func(t *testing.T) {
t.Run("Little", func(t *testing.T) {
@@ -217,10 +135,20 @@ func TestGit(t *testing.T) {
lockTest(t, u.String(), dstPath)
})
})
+
})
+
})
}
+func ensureAnonymousClone(t *testing.T, u *url.URL) {
+ dstLocalPath, err := ioutil.TempDir("", "repo1")
+ assert.NoError(t, err)
+ defer os.RemoveAll(dstLocalPath)
+ t.Run("CloneAnonymous", doGitClone(dstLocalPath, u))
+
+}
+
func lockTest(t *testing.T, remote, repoPath string) {
_, err := git.NewCommand("remote").AddArguments("set-url", "origin", remote).RunInDir(repoPath) //TODO add test ssh git-lfs-creds
assert.NoError(t, err)