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, CleanupTestRepos)
75}
76
77func TestGoGitRepo_Indexes(t *testing.T) {
78 plainRoot, err := ioutil.TempDir("", "")
79 require.NoError(t, err)
80 t.Cleanup(func() {
81 require.NoError(t, os.RemoveAll(plainRoot))
82 })
83
84 repo, err := InitGoGitRepo(plainRoot, namespace)
85 require.NoError(t, err)
86 t.Cleanup(func() {
87 require.NoError(t, repo.Close())
88 })
89
90 // Can create indices
91 indexA, err := repo.GetBleveIndex("a")
92 require.NoError(t, err)
93 require.NotZero(t, indexA)
94 require.FileExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "a", "index_meta.json"))
95 require.FileExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "a", "store"))
96
97 indexB, err := repo.GetBleveIndex("b")
98 require.NoError(t, err)
99 require.NotZero(t, indexB)
100 require.DirExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "b"))
101
102 // Can get an existing index
103 indexA, err = repo.GetBleveIndex("a")
104 require.NoError(t, err)
105 require.NotZero(t, indexA)
106
107 // Can delete an index
108 err = repo.ClearBleveIndex("a")
109 require.NoError(t, err)
110 require.NoDirExists(t, filepath.Join(plainRoot, ".git", namespace, "indexes", "a"))
111}