aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/service_test.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2023-04-02 08:52:52 -0700
committerMax Resnick <max@ofmax.li>2023-05-26 09:47:59 -0700
commit480ce38f8c01de00adf6de651b8c2c57cd2148be (patch)
tree85bd66986cb3f0ad501549e46e649073775e8077 /internal/admin/service_test.go
parent9e04be2ca3d8980ebc8ec791d005ba77382fb1fa (diff)
downloadgo-git-server-480ce38f8c01de00adf6de651b8c2c57cd2148be.tar.gz
Adds a lot of tests adds middleware hook
Diffstat (limited to '')
-rw-r--r--internal/admin/service_test.go132
1 files changed, 132 insertions, 0 deletions
diff --git a/internal/admin/service_test.go b/internal/admin/service_test.go
new file mode 100644
index 0000000..fdd3aa6
--- /dev/null
+++ b/internal/admin/service_test.go
@@ -0,0 +1,132 @@
+package admin
+
+import (
+ "io"
+ "log"
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+)
+
+var (
+ updatedServerConfig []byte = []byte(`
+---
+name: "go-git-server"
+version: "v1alpha1"
+basepath: ./repos
+repos:
+ - name: mgmt
+ permissions:
+ - role: admin
+ mode: 1
+ - name: testmerepo
+ git_web_config:
+ owner: grumps
+ description: >-
+ A wrapper to git http-backend providing authentcation and authorization
+ inspired by gitolite.
+ permissions:
+ - role: maintainers
+ mode: 1
+ - name: thisismynewrepo
+ git_web_config:
+ owner: grumps
+ description: >-
+ A wrapper to git http-backend providing authentcation and authorization
+ inspired by gitolite.
+ permissions:
+ - role: maintainers
+ mode: 1
+`)
+)
+
+func copyFile(t *testing.T, srcFilePath, destPath string) {
+
+ srcFile, err := os.Open(srcFilePath)
+ if err != nil {
+ t.Fatalf("Error opening base config %s", err)
+ }
+ defer srcFile.Close()
+
+ // dest
+ destFile, err := os.OpenFile(destPath, os.O_RDWR|os.O_CREATE, 0755)
+ if err != nil {
+ t.Fatalf("failed to open destination in git repo %s", err)
+ }
+ defer destFile.Close()
+
+ // copy
+ if _, err := io.Copy(destFile, srcFile); err != nil {
+ t.Fatalf("Error copying file %s", err)
+ }
+}
+
+func TestInitServer(t *testing.T) {
+ tempDir := t.TempDir()
+ tempRepoDir := t.TempDir()
+
+ // auth model
+ destModelFile := filepath.Join(tempDir, "auth_model.ini")
+ srcModelFile := "../../auth_model.ini"
+ copyFile(t, srcModelFile, destModelFile)
+ // end auth model
+
+ // policy
+ destPolicyFile := filepath.Join(tempDir, "testpolicy.csv")
+ srcPolicyFile := "../../testpolicy.csv"
+ copyFile(t, srcPolicyFile, destPolicyFile)
+ // end policy
+
+ // config
+ destConfigFile := filepath.Join(tempRepoDir, "gitserver.yaml")
+ srcConfigFile := "../../gitserver.yaml"
+ copyFile(t, srcConfigFile, destConfigFile)
+ // end config
+
+ t.Run("test reload config success", func(t *testing.T) {
+ svc := NewService(destModelFile,
+ destPolicyFile,
+ "gitserver.yaml",
+ tempRepoDir,
+ false)
+ err := os.WriteFile(destConfigFile, updatedServerConfig, 0755)
+ if err != nil {
+ t.Fatal(err)
+ }
+ // stuff
+ svc.Reload()
+ // check policy file to make sure it was saved
+ data, err := os.ReadFile(destPolicyFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !strings.Contains(string(data), "thisismynewrepo") {
+ t.Fatal("expected to find test new repo but didn't")
+ }
+
+ })
+ t.Run("test reload config err", func(t *testing.T) {
+ svc := NewService(destModelFile,
+ destPolicyFile,
+ "gitserver.yaml",
+ tempRepoDir,
+ false)
+ notAGoodConfig := []byte("this is not valid yaml")
+ err := os.WriteFile(destConfigFile, notAGoodConfig, 0755)
+ if err != nil {
+ t.Fatal(err)
+ }
+ // stuff
+ svc.Reload()
+ // check policy file to make sure it wasn't saved
+ data, err := os.ReadFile(destPolicyFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if !strings.Contains(string(data), "mgmt") {
+ log.Fatal("expected to mgmt repo but didn't in policy")
+ }
+
+ })
+}