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 }