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  }