github.com/wrgl/wrgl@v0.14.0/pkg/local/repo_dir_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright © 2022 Wrangle Ltd 3 4 package local 5 6 import ( 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/fsnotify/fsnotify" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 confhelpers "github.com/wrgl/wrgl/pkg/conf/helpers" 15 "github.com/wrgl/wrgl/pkg/testutils" 16 ) 17 18 func TestRepoDirInit(t *testing.T) { 19 dir, err := testutils.TempDir("", "test_repo_dir") 20 require.NoError(t, err) 21 defer os.RemoveAll(dir) 22 wrglDir := filepath.Join(dir, ".wrgl") 23 rd, err := NewRepoDir(wrglDir, "") 24 require.NoError(t, err) 25 assert.Equal(t, wrglDir, rd.FullPath) 26 assert.False(t, rd.Exist()) 27 err = rd.Init() 28 require.NoError(t, err) 29 assert.True(t, rd.Exist()) 30 31 _, err = os.Stat(rd.KVPath()) 32 require.NoError(t, err) 33 kvs, err := rd.OpenObjectsStore() 34 require.NoError(t, err) 35 defer kvs.Close() 36 37 rs := rd.OpenRefStore() 38 require.NoError(t, rs.Set("heads/my-branch", []byte("abc123"))) 39 v, err := rs.Get("heads/my-branch") 40 require.NoError(t, err) 41 assert.Equal(t, []byte("abc123"), v) 42 } 43 44 func TestFindWrglDir(t *testing.T) { 45 dir, err := testutils.TempDir("", "test_find_wrgl_dir") 46 require.NoError(t, err) 47 defer os.RemoveAll(dir) 48 dir, err = filepath.EvalSymlinks(dir) 49 require.NoError(t, err) 50 home, cleanup := confhelpers.MockHomeDir(t, dir) 51 defer cleanup() 52 53 require.NoError(t, os.Chdir(dir)) 54 p, err := FindWrglDir() 55 require.NoError(t, err) 56 assert.Empty(t, p) 57 58 wrglDir := filepath.Join(dir, ".wrgl") 59 require.NoError(t, os.Mkdir(wrglDir, 0755)) 60 p, err = FindWrglDir() 61 require.NoError(t, err) 62 assert.Equal(t, wrglDir, p) 63 64 require.NoError(t, os.Mkdir(filepath.Join(dir, "abc"), 0755)) 65 require.NoError(t, os.Chdir(filepath.Join(dir, "abc"))) 66 p, err = FindWrglDir() 67 require.NoError(t, err) 68 assert.Equal(t, wrglDir, p) 69 70 require.NoError(t, os.Chdir(home)) 71 p, err = FindWrglDir() 72 require.NoError(t, err) 73 assert.Empty(t, p) 74 75 require.NoError(t, os.Mkdir(filepath.Join(home, "tmp"), 0755)) 76 require.NoError(t, os.Chdir(filepath.Join(home, "tmp"))) 77 p, err = FindWrglDir() 78 require.NoError(t, err) 79 assert.Empty(t, p) 80 81 wrglDir = filepath.Join(home, ".wrgl") 82 require.NoError(t, os.Mkdir(wrglDir, 0755)) 83 require.NoError(t, os.Chdir(home)) 84 p, err = FindWrglDir() 85 require.NoError(t, err) 86 assert.Equal(t, wrglDir, p) 87 require.NoError(t, os.Chdir(filepath.Join(home, "tmp"))) 88 p, err = FindWrglDir() 89 require.NoError(t, err) 90 assert.Equal(t, wrglDir, p) 91 } 92 93 func TestRepoDirWatcher(t *testing.T) { 94 dir, err := testutils.TempDir("", "test_repo_dir") 95 require.NoError(t, err) 96 defer os.RemoveAll(dir) 97 rd, err := NewRepoDir(dir, "") 98 require.NoError(t, err) 99 defer rd.Close() 100 101 w, err := rd.Watcher() 102 require.NoError(t, err) 103 fp := filepath.Join(dir, "abc.txt") 104 f, err := os.Create(fp) 105 require.NoError(t, err) 106 _, err = f.Write([]byte("def")) 107 require.NoError(t, err) 108 require.NoError(t, err) 109 event := <-w.Events 110 assert.Equal(t, fsnotify.Event{ 111 Name: fp, 112 Op: fsnotify.Create, 113 }, event) 114 }