github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/internal/fileutil/fileutil_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package fileutil 8 9 import ( 10 "io/ioutil" 11 "os" 12 "path/filepath" 13 "testing" 14 15 "github.com/osdi23p228/fabric/common/ledger/util" 16 "github.com/pkg/errors" 17 18 "github.com/stretchr/testify/require" 19 ) 20 21 func TestSyncDir(t *testing.T) { 22 t.Run("green-path", func(t *testing.T) { 23 testPath := testPath(t) 24 defer os.RemoveAll(testPath) 25 26 require.NoError(t, syncDir(testPath)) 27 require.NoError(t, syncDir(filepath.Dir(testPath))) 28 }) 29 30 t.Run("non-existent-dir", func(t *testing.T) { 31 require.EqualError(t, syncDir("non-existent-dir"), "error while opening dir:non-existent-dir: open non-existent-dir: no such file or directory") 32 }) 33 } 34 35 func TestRemoveContents(t *testing.T) { 36 t.Run("non-empty-dir", func(t *testing.T) { 37 testPath := testPath(t) 38 defer os.RemoveAll(testPath) 39 40 // create files and a non-empty subdir under testPath to test RemoveContents 41 require.NoError(t, createAndSyncFile(filepath.Join(testPath, "file1"), []byte("test-removecontents"), 0644)) 42 require.NoError(t, createAndSyncFile(filepath.Join(testPath, "file2"), []byte("test-removecontents"), 0644)) 43 require.NoError(t, os.MkdirAll(filepath.Join(testPath, "non-empty-dir", "some-random-dir"), 0755)) 44 require.NoError(t, ioutil.WriteFile(filepath.Join(testPath, "non-empty-dir", "some-random-file"), []byte("test-subdir-removecontents"), 0644)) 45 46 require.NoError(t, RemoveContents(testPath)) 47 empty, err := util.DirEmpty(testPath) 48 require.NoError(t, err) 49 require.True(t, empty) 50 }) 51 52 t.Run("empty-dir", func(t *testing.T) { 53 testPath := testPath(t) 54 defer os.RemoveAll(testPath) 55 56 require.NoError(t, RemoveContents(testPath)) 57 empty, err := util.DirEmpty(testPath) 58 require.NoError(t, err) 59 require.True(t, empty) 60 }) 61 62 t.Run("non-existent-dir", func(t *testing.T) { 63 testPath := testPath(t) 64 defer os.RemoveAll(testPath) 65 require.NoError(t, RemoveContents(filepath.Join(testPath, "non-existent-dir"))) 66 }) 67 } 68 69 func testPath(t *testing.T) string { 70 path, err := ioutil.TempDir("", "fileutiltest-") 71 require.NoError(t, err) 72 return path 73 } 74 75 // CreateAndSyncFile creates a file, writes the content and syncs the file 76 func createAndSyncFile(filePath string, content []byte, perm os.FileMode) error { 77 file, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_EXCL, perm) 78 if err != nil { 79 return errors.Wrapf(err, "error while creating file:%s", filePath) 80 } 81 _, err = file.Write(content) 82 if err != nil { 83 file.Close() 84 return errors.Wrapf(err, "error while writing to file:%s", filePath) 85 } 86 if err = file.Sync(); err != nil { 87 file.Close() 88 return errors.Wrapf(err, "error while synching the file:%s", filePath) 89 } 90 if err := file.Close(); err != nil { 91 return errors.Wrapf(err, "error while closing the file:%s", filePath) 92 } 93 return nil 94 }