code.vegaprotocol.io/vega@v0.79.0/libs/fs/fs_test.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package fs_test
    17  
    18  import (
    19  	path2 "path"
    20  	"testing"
    21  
    22  	vgfs "code.vegaprotocol.io/vega/libs/fs"
    23  	vgrand "code.vegaprotocol.io/vega/libs/rand"
    24  	vgtest "code.vegaprotocol.io/vega/libs/test"
    25  
    26  	"github.com/stretchr/testify/assert"
    27  	"github.com/stretchr/testify/require"
    28  )
    29  
    30  func TestFileSystemHelpers(t *testing.T) {
    31  	t.Run("Ensuring presence of non-existing directories succeeds", testEnsuringPresenceOfNonExistingDirectoriesSucceeds)
    32  	t.Run("Ensuring presence of existing directories succeeds", testEnsuringPresenceOfExistingDirectoriesSucceeds)
    33  	t.Run("Verify path existence of non-existing one fails", testVerifyingPathExistenceOfNonExistingOneFails)
    34  	t.Run("Verify path existence of existing one succeeds", testVerifyingPathExistenceOfExistingOneSucceeds)
    35  	t.Run("Verify file existence of non-existing one fails", testVerifyingFileExistenceOfNonExistingOneFails)
    36  	t.Run("Verify file existence of existing one succeeds", testVerifyingFileExistenceOfExistingOneSucceeds)
    37  	t.Run("Verify file existence on a directory fails", testVerifyingExistenceOnDirectoryFails)
    38  	t.Run("Writing file succeeds", testWritingFileSucceeds)
    39  	t.Run("Rewriting file succeeds", testRewritingFileSucceeds)
    40  	t.Run("Reading existing file succeeds", testReadingExistingFileSucceeds)
    41  	t.Run("Reading non-existing file fails", testReadingNonExistingFileFails)
    42  }
    43  
    44  func testEnsuringPresenceOfNonExistingDirectoriesSucceeds(t *testing.T) {
    45  	path := t.TempDir()
    46  	err := vgfs.EnsureDir(path)
    47  	require.NoError(t, err)
    48  	vgtest.AssertDirAccess(t, path)
    49  }
    50  
    51  func testEnsuringPresenceOfExistingDirectoriesSucceeds(t *testing.T) {
    52  	path := t.TempDir()
    53  
    54  	err := vgfs.EnsureDir(path)
    55  	require.NoError(t, err)
    56  	vgtest.AssertDirAccess(t, path)
    57  
    58  	err = vgfs.EnsureDir(path)
    59  	require.NoError(t, err)
    60  	vgtest.AssertDirAccess(t, path)
    61  }
    62  
    63  func testVerifyingPathExistenceOfNonExistingOneFails(t *testing.T) {
    64  	exists, err := vgfs.PathExists("/" + vgrand.RandomStr(10))
    65  	require.NoError(t, err)
    66  	assert.False(t, exists)
    67  }
    68  
    69  func testVerifyingPathExistenceOfExistingOneSucceeds(t *testing.T) {
    70  	path := t.TempDir()
    71  
    72  	err := vgfs.EnsureDir(path)
    73  	require.NoError(t, err)
    74  	vgtest.AssertDirAccess(t, path)
    75  
    76  	exists, err := vgfs.PathExists(path)
    77  	require.NoError(t, err)
    78  	assert.True(t, exists)
    79  }
    80  
    81  func testVerifyingFileExistenceOfNonExistingOneFails(t *testing.T) {
    82  	exists, err := vgfs.FileExists("/" + vgrand.RandomStr(10))
    83  	require.NoError(t, err)
    84  	assert.False(t, exists)
    85  }
    86  
    87  func testVerifyingFileExistenceOfExistingOneSucceeds(t *testing.T) {
    88  	path := path2.Join(t.TempDir(), "file.txt")
    89  
    90  	err := vgfs.WriteFile(path, []byte("Hello, World!"))
    91  	require.NoError(t, err)
    92  	vgtest.AssertFileAccess(t, path)
    93  
    94  	exists, err := vgfs.FileExists(path)
    95  	require.NoError(t, err)
    96  	assert.True(t, exists)
    97  }
    98  
    99  func testVerifyingExistenceOnDirectoryFails(t *testing.T) {
   100  	path := t.TempDir()
   101  
   102  	err := vgfs.EnsureDir(path)
   103  	require.NoError(t, err)
   104  	vgtest.AssertDirAccess(t, path)
   105  
   106  	exists, err := vgfs.FileExists(path)
   107  	require.Error(t, err)
   108  	assert.False(t, exists)
   109  }
   110  
   111  func testWritingFileSucceeds(t *testing.T) {
   112  	path := path2.Join(t.TempDir(), "file.txt")
   113  	data := []byte("Hello, World!")
   114  
   115  	err := vgfs.WriteFile(path, data)
   116  	require.NoError(t, err)
   117  	vgtest.AssertFileAccess(t, path)
   118  
   119  	readData, err := vgfs.ReadFile(path)
   120  	require.NoError(t, err)
   121  	assert.Equal(t, data, readData)
   122  }
   123  
   124  func testRewritingFileSucceeds(t *testing.T) {
   125  	path := path2.Join(t.TempDir(), "file.txt")
   126  	data := []byte("Hello, World!")
   127  
   128  	err := vgfs.WriteFile(path, data)
   129  	require.NoError(t, err)
   130  	vgtest.AssertFileAccess(t, path)
   131  
   132  	readData, err := vgfs.ReadFile(path)
   133  	require.NoError(t, err)
   134  	assert.Equal(t, data, readData)
   135  
   136  	frenchData := []byte("Bonjour, le Monde!")
   137  
   138  	err = vgfs.WriteFile(path, frenchData)
   139  	require.NoError(t, err)
   140  	vgtest.AssertFileAccess(t, path)
   141  
   142  	readFrenchData, err := vgfs.ReadFile(path)
   143  	require.NoError(t, err)
   144  	assert.Equal(t, frenchData, readFrenchData)
   145  }
   146  
   147  func testReadingExistingFileSucceeds(t *testing.T) {
   148  	path := path2.Join(t.TempDir(), "file.txt")
   149  	data := []byte("Hello, World!")
   150  
   151  	err := vgfs.WriteFile(path, data)
   152  	require.NoError(t, err)
   153  	vgtest.AssertFileAccess(t, path)
   154  
   155  	readData, err := vgfs.ReadFile(path)
   156  	require.NoError(t, err)
   157  	assert.Equal(t, data, readData)
   158  }
   159  
   160  func testReadingNonExistingFileFails(t *testing.T) {
   161  	path := t.TempDir()
   162  
   163  	readData, err := vgfs.ReadFile(path)
   164  	require.Error(t, err)
   165  	assert.Empty(t, readData)
   166  }