Skip to content

Commit

Permalink
Add test for git push
Browse files Browse the repository at this point in the history
  • Loading branch information
thomiceli committed May 14, 2024
1 parent d4abd5d commit fa58acc
Showing 1 changed file with 82 additions and 193 deletions.
275 changes: 82 additions & 193 deletions internal/web/test/auth_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package test

import (
"fmt"
"github.com/stretchr/testify/require"
"github.com/thomiceli/opengist/internal/config"
"github.com/thomiceli/opengist/internal/db"
Expand Down Expand Up @@ -214,220 +215,108 @@ func TestGitClonePull(t *testing.T) {
err = s.request("POST", "/", gist3, 302)
require.NoError(t, err)

// clone public gist
// : means no credentials
err = clientGitClone(":", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone(":", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone(":", "kaguya", "kaguya-priv-gist")
require.Error(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.Error(t, err)

// clone public gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-priv-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone public gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)
gitOperations := func(credentials, owner, url, filename string, expectErrorClone, expectErrorCheck, expectErrorPush bool) {
fmt.Println("Testing", credentials, url, expectErrorClone, expectErrorCheck, expectErrorPush)
err := clientGitClone(credentials, owner, url)
if expectErrorClone {
require.Error(t, err)
} else {
require.NoError(t, err)
}
err = clientCheckRepo(url, filename)
if expectErrorCheck {
require.Error(t, err)
} else {
require.NoError(t, err)
}
err = clientGitPush(url)
if expectErrorPush {
require.Error(t, err)
} else {
require.NoError(t, err)
}
}

// clone private gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-priv-gist")
require.Error(t, err)
tests := []struct {
credentials string
user string
url string
expectErrorClone bool
expectErrorCheck bool
expectErrorPush bool
}{
{":", "kaguya", "kaguya-pub-gist", false, false, true},
{":", "kaguya", "kaguya-unl-gist", false, false, true},
{":", "kaguya", "kaguya-priv-gist", true, true, true},
{"kaguya:kaguya", "kaguya", "kaguya-pub-gist", false, false, false},
{"kaguya:kaguya", "kaguya", "kaguya-unl-gist", false, false, false},
{"kaguya:kaguya", "kaguya", "kaguya-priv-gist", false, false, false},
{"fujiwara:fujiwara", "kaguya", "kaguya-pub-gist", false, false, true},
{"fujiwara:fujiwara", "kaguya", "kaguya-unl-gist", false, false, true},
{"fujiwara:fujiwara", "kaguya", "kaguya-priv-gist", true, true, true},
}

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.Error(t, err)
for _, test := range tests {
gitOperations(test.credentials, test.user, test.url, "kaguya-file.txt", test.expectErrorClone, test.expectErrorCheck, test.expectErrorPush)
}

login(t, s, admin)
err = s.request("PUT", "/admin-panel/set-config", settingSet{"require-login", "1"}, 200)
require.NoError(t, err)

// clone public gist
// : means no credentials
err = clientGitClone(":", "kaguya", "kaguya-pub-gist")
require.Error(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.Error(t, err)

// clone unlisted gist
err = clientGitClone(":", "kaguya", "kaguya-unl-gist")
require.Error(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.Error(t, err)

// clone private gist
err = clientGitClone(":", "kaguya", "kaguya-priv-gist")
require.Error(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.Error(t, err)

// clone public gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-priv-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone public gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-priv-gist")
require.Error(t, err)
testsRequireLogin := []struct {
credentials string
user string
url string
expectErrorClone bool
expectErrorCheck bool
expectErrorPush bool
}{
{":", "kaguya", "kaguya-pub-gist", true, true, true},
{":", "kaguya", "kaguya-unl-gist", true, true, true},
{":", "kaguya", "kaguya-priv-gist", true, true, true},
{"kaguya:kaguya", "kaguya", "kaguya-pub-gist", false, false, false},
{"kaguya:kaguya", "kaguya", "kaguya-unl-gist", false, false, false},
{"kaguya:kaguya", "kaguya", "kaguya-priv-gist", false, false, false},
{"fujiwara:fujiwara", "kaguya", "kaguya-pub-gist", false, false, true},
{"fujiwara:fujiwara", "kaguya", "kaguya-unl-gist", false, false, true},
{"fujiwara:fujiwara", "kaguya", "kaguya-priv-gist", true, true, true},
}

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.Error(t, err)
for _, test := range testsRequireLogin {
gitOperations(test.credentials, test.user, test.url, "kaguya-file.txt", test.expectErrorClone, test.expectErrorCheck, test.expectErrorPush)
}

login(t, s, admin)
err = s.request("PUT", "/admin-panel/set-config", settingSet{"allow-gists-without-login", "1"}, 200)
require.NoError(t, err)

// clone public gist
// : means no credentials
err = clientGitClone(":", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone(":", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone(":", "kaguya", "kaguya-priv-gist")
require.Error(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.Error(t, err)

// clone public gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone("kaguya:kaguya", "kaguya", "kaguya-priv-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone public gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-pub-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-pub-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone unlisted gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-unl-gist")
require.NoError(t, err)

err = clientCheckRepo("kaguya-unl-gist", "kaguya-file.txt")
require.NoError(t, err)

// clone private gist
err = clientGitClone("fujiwara:fujiwara", "kaguya", "kaguya-priv-gist")
require.Error(t, err)

err = clientCheckRepo("kaguya-priv-gist", "kaguya-file.txt")
require.Error(t, err)
for _, test := range tests {
gitOperations(test.credentials, test.user, test.url, "kaguya-file.txt", test.expectErrorClone, test.expectErrorCheck, test.expectErrorPush)
}
}

func clientGitClone(creds string, user string, url string) error {
cmd := exec.Command("git", "clone", "http://"+creds+"@localhost:6157/"+user+"/"+url, path.Join(config.GetHomeDir(), "tmp", url))
err := cmd.Run()

return err
return exec.Command("git", "clone", "http://"+creds+"@localhost:6157/"+user+"/"+url, path.Join(config.GetHomeDir(), "tmp", url)).Run()
}

func clientCheckRepo(url string, file string) error {
_, err := os.ReadFile(path.Join(config.GetHomeDir(), "tmp", url, file))
func clientGitPush(url string) error {
f, err := os.Create(path.Join(config.GetHomeDir(), "tmp", url, "newfile.txt"))
if err != nil {
return err
}
defer f.Close()

_ = exec.Command("git", "-C", path.Join(config.GetHomeDir(), "tmp", url), "add", "newfile.txt").Run()
_ = exec.Command("git", "-C", path.Join(config.GetHomeDir(), "tmp", url), "commit", "-m", "new file").Run()
err = exec.Command("git", "-C", path.Join(config.GetHomeDir(), "tmp", url), "push", "origin", "master").Run()

_ = os.RemoveAll(path.Join(config.GetHomeDir(), "tmp", url))
return nil

return err
}

func clientCheckRepo(url string, file string) error {
_, err := os.ReadFile(path.Join(config.GetHomeDir(), "tmp", url, file))
return err
}

0 comments on commit fa58acc

Please sign in to comment.