aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/middleware_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/admin/middleware_test.go')
-rw-r--r--internal/admin/middleware_test.go107
1 files changed, 107 insertions, 0 deletions
diff --git a/internal/admin/middleware_test.go b/internal/admin/middleware_test.go
new file mode 100644
index 0000000..a50d02d
--- /dev/null
+++ b/internal/admin/middleware_test.go
@@ -0,0 +1,107 @@
+package admin
+
+import (
+ "bytes"
+ "log"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/go-git/go-billy/v5/util"
+ "github.com/go-git/go-git/v5"
+ "github.com/go-git/go-git/v5/plumbing/object"
+ "sigs.k8s.io/yaml"
+)
+
+func junkTestHandler() http.HandlerFunc {
+ return func(rw http.ResponseWriter, req *http.Request) {
+ rw.WriteHeader(http.StatusOK)
+ _, err := rw.Write([]byte("Im a body"))
+ if err != nil {
+ log.Fatalf("couldn't write http body %s", err)
+ }
+ }
+}
+
+func TestHooks(t *testing.T) {
+ tempDir := t.TempDir()
+ tempRepoDir := filepath.Join(tempDir, "mgmt.git")
+ err := os.Mkdir(tempRepoDir, 0750)
+ if err != nil && !os.IsExist(err) {
+ log.Fatal(err)
+ }
+
+ // setup server with repo for management
+ defaultConfigBytes, err := yaml.Marshal(defaultServerConfig)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := configDefaultTestRepo(tempRepoDir, defaultConfigBytes); err != nil {
+ t.Fatal(err)
+ }
+ destModelFile, destPolicyFile, _ := tempModelPolicyConfig(t, tempDir, tempRepoDir)
+ // Load the server/config from the repo
+ adminService, err := NewService(destModelFile,
+ destPolicyFile,
+ "gitserver.yaml",
+ tempDir,
+ true)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ repo, err := git.PlainOpen(tempRepoDir)
+ if err != nil {
+ t.Fatal(err)
+ }
+ worktree, err := repo.Worktree()
+ if err != nil {
+ t.Fatal("couldn't get working tree", err)
+ }
+ fileToCommit := "gitserver.yaml"
+ newTestConfigRepo := *defaultRepo
+ newTestConfigRepo.Name = "mymiddlewaretest"
+ newServerConfig := *defaultServerConfig
+ newServerConfig.Repos = append(newServerConfig.Repos, &newTestConfigRepo)
+
+ newConfigBytes, err := yaml.Marshal(newServerConfig)
+ if err != nil {
+ t.Fatal("couldn't marshal new server config", err)
+ }
+ err = util.WriteFile(worktree.Filesystem, fileToCommit, newConfigBytes, os.FileMode(int(0644)))
+ if err != nil {
+ t.Fatal("couldn't write server config", err)
+ }
+ if _, err := worktree.Add(fileToCommit); err != nil {
+ t.Fatal("couldn't add server config to worktree", err)
+ }
+ _, err = worktree.Commit(fileToCommit,
+ &git.CommitOptions{
+ Author: &object.Signature{
+ Name: "go git server",
+ Email: "go-git-server@go-git-server",
+ },
+ },
+ )
+ if err != nil {
+ t.Fatal("couldn't commit file", err)
+ }
+ req := httptest.NewRequest(http.MethodPost, "http://localhost:3456/mgmt.git/git-receive-pack", bytes.NewBuffer([]byte("stuff")))
+ recorder := httptest.NewRecorder()
+ adminHandler := Hooks(adminService, junkTestHandler())
+ adminHandler.ServeHTTP(recorder, req)
+ result := recorder.Result()
+ defer result.Body.Close()
+ found := false
+ for _, v := range adminService.Conf.Repos {
+ if v.Name == newTestConfigRepo.Name {
+ found = true
+ }
+ }
+ if !found {
+ t.Error("didn't find expected repo in config")
+ t.Fail()
+ }
+}