1package repository
2
3import (
4 "io/ioutil"
5 "os"
6 "path"
7 "path/filepath"
8 "testing"
9
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12)
13
14func TestNewGoGitRepo(t *testing.T) {
15 // Plain
16 plainRoot, err := ioutil.TempDir("", "")
17 require.NoError(t, err)
18 t.Cleanup(func() {
19 require.NoError(t, os.RemoveAll(plainRoot))
20 })
21
22 plainRepo, err := InitGoGitRepo(plainRoot, namespace)
23 require.NoError(t, err)
24 require.NoError(t, plainRepo.Close())
25 plainGitDir := filepath.Join(plainRoot, ".git")
26
27 // Bare
28 bareRoot, err := ioutil.TempDir("", "")
29 require.NoError(t, err)
30 t.Cleanup(func() {
31 require.NoError(t, os.RemoveAll(bareRoot))
32 })
33
34 bareRepo, err := InitBareGoGitRepo(bareRoot, namespace)
35 require.NoError(t, err)
36 require.NoError(t, bareRepo.Close())
37 bareGitDir := bareRoot
38
39 tests := []struct {
40 inPath string
41 outPath string
42 err bool
43 }{
44 // errors
45 {"/", "", true},
46 // parent dir of a repo
47 {filepath.Dir(plainRoot), "", true},
48
49 // Plain repo
50 {plainRoot, plainGitDir, false},
51 {plainGitDir, plainGitDir, false},
52 {path.Join(plainGitDir, "objects"), plainGitDir, false},
53
54 // Bare repo
55 {bareRoot, bareGitDir, false},
56 {bareGitDir, bareGitDir, false},
57 {path.Join(bareGitDir, "objects"), bareGitDir, false},
58 }
59
60 for i, tc := range tests {
61 r, err := OpenGoGitRepo(tc.inPath, namespace, nil)
62
63 if tc.err {
64 require.Error(t, err, i)
65 } else {
66 require.NoError(t, err, i)
67 assert.Equal(t, filepath.ToSlash(tc.outPath), filepath.ToSlash(r.path), i)
68 require.NoError(t, r.Close())
69 }
70 }
71}
72
73func TestGoGitRepo(t *testing.T) {
74 RepoTest(t, CreateGoGitTestRepo)
75}
76
77func TestGoGitRepo_Indexes(t *testing.T) {
78 plainRoot := t.TempDir()
79
80 repo, err := InitGoGitRepo(plainRoot, namespace)
81 require.NoError(t, err)
82 t.Cleanup(func() {
83 require.NoError(t, repo.Close())
84 })
85
86 // Can create indices
87 indexA, err := repo.GetBleveIndex("a")
88 require.NoError(t, err)
89 require.NotZero(t, indexA)
90 require.FileExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "a", "index_meta.json"))
91 require.FileExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "a", "store"))
92
93 indexB, err := repo.GetBleveIndex("b")
94 require.NoError(t, err)
95 require.NotZero(t, indexB)
96 require.DirExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "b"))
97
98 // Can get an existing index
99 indexA, err = repo.GetBleveIndex("a")
100 require.NoError(t, err)
101 require.NotZero(t, indexA)
102
103 // Can delete an index
104 err = repo.ClearBleveIndex("a")
105 require.NoError(t, err)
106 require.NoDirExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "a"))
107}