diff options
| author | Max Resnick <max@ofmax.li> | 2023-04-02 08:52:52 -0700 |
|---|---|---|
| committer | Max Resnick <max@ofmax.li> | 2023-05-26 09:47:59 -0700 |
| commit | 480ce38f8c01de00adf6de651b8c2c57cd2148be (patch) | |
| tree | 85bd66986cb3f0ad501549e46e649073775e8077 /internal/admin/service_test.go | |
| parent | 9e04be2ca3d8980ebc8ec791d005ba77382fb1fa (diff) | |
| download | go-git-server-480ce38f8c01de00adf6de651b8c2c57cd2148be.tar.gz | |
Adds a lot of tests adds middleware hook
Diffstat (limited to '')
| -rw-r--r-- | internal/admin/service_test.go | 132 |
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") + } + + }) +} |