code.vegaprotocol.io/vega@v0.79.0/paths/file_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 paths_test 17 18 import ( 19 path2 "path" 20 "testing" 21 22 vgtest "code.vegaprotocol.io/vega/libs/test" 23 "code.vegaprotocol.io/vega/paths" 24 25 "github.com/stretchr/testify/assert" 26 "github.com/stretchr/testify/require" 27 ) 28 29 func TestFileHelpers(t *testing.T) { 30 t.Run("Writing structured file succeeds", testWritingStructuredFileSucceeds) 31 t.Run("Rewriting structured file succeeds", testRewritingStructuredFileSucceeds) 32 t.Run("Reading structured file succeeds", testReadingStructuredFileSucceeds) 33 t.Run("Reading non-existing structured file fails", testReadingNonExistingStructuredFileFails) 34 t.Run("Writing encrypted file succeeds", testWritingEncryptedFileSucceeds) 35 t.Run("Rewriting encrypted file succeeds", testRewritingEncryptedFileSucceeds) 36 t.Run("Reading encrypted file succeeds", testReadingEncryptedFileSucceeds) 37 t.Run("Reading non-existing encrypted file fails", testReadingNonExistingEncryptedFileFails) 38 t.Run("Reading encrypted file with wrong passphrase fails", testReadingEncryptedFileWithWrongPassphraseFails) 39 } 40 41 func testWritingStructuredFileSucceeds(t *testing.T) { 42 path := path2.Join(t.TempDir(), "file.txt") 43 data := &DummyData{ 44 Name: "Jane", 45 Age: 40, 46 } 47 48 err := paths.WriteStructuredFile(path, data) 49 require.NoError(t, err) 50 vgtest.AssertFileAccess(t, path) 51 52 readData := &DummyData{} 53 err = paths.ReadStructuredFile(path, readData) 54 require.NoError(t, err) 55 assert.Equal(t, data, readData) 56 } 57 58 func testRewritingStructuredFileSucceeds(t *testing.T) { 59 path := path2.Join(t.TempDir(), "file.txt") 60 data := &DummyData{ 61 Name: "Jane", 62 Age: 40, 63 } 64 65 err := paths.WriteStructuredFile(path, data) 66 require.NoError(t, err) 67 vgtest.AssertFileAccess(t, path) 68 69 readData := &DummyData{} 70 err = paths.ReadStructuredFile(path, readData) 71 require.NoError(t, err) 72 assert.Equal(t, data, readData) 73 74 newData := &DummyData{ 75 Name: "John", 76 Age: 30, 77 } 78 79 err = paths.WriteStructuredFile(path, newData) 80 require.NoError(t, err) 81 vgtest.AssertFileAccess(t, path) 82 83 readNewData := &DummyData{} 84 err = paths.ReadStructuredFile(path, readNewData) 85 require.NoError(t, err) 86 assert.Equal(t, newData, readNewData) 87 } 88 89 func testReadingStructuredFileSucceeds(t *testing.T) { 90 path := path2.Join(t.TempDir(), "file.txt") 91 data := &DummyData{ 92 Name: "Jane", 93 Age: 40, 94 } 95 96 err := paths.WriteStructuredFile(path, data) 97 require.NoError(t, err) 98 vgtest.AssertFileAccess(t, path) 99 100 readData := &DummyData{} 101 err = paths.ReadStructuredFile(path, readData) 102 require.NoError(t, err) 103 assert.Equal(t, data, readData) 104 } 105 106 func testReadingNonExistingStructuredFileFails(t *testing.T) { 107 path := path2.Join(t.TempDir(), "file.txt") 108 109 readData := &DummyData{} 110 err := paths.ReadStructuredFile(path, readData) 111 require.Error(t, err) 112 assert.Empty(t, readData) 113 } 114 115 func testWritingEncryptedFileSucceeds(t *testing.T) { 116 path := path2.Join(t.TempDir(), "file.txt") 117 passphrase := "pa$$w0rd" 118 data := &DummyData{ 119 Name: "Jane", 120 Age: 40, 121 } 122 123 err := paths.WriteEncryptedFile(path, passphrase, data) 124 require.NoError(t, err) 125 vgtest.AssertFileAccess(t, path) 126 127 readData := &DummyData{} 128 err = paths.ReadEncryptedFile(path, passphrase, readData) 129 require.NoError(t, err) 130 assert.Equal(t, data, readData) 131 } 132 133 func testRewritingEncryptedFileSucceeds(t *testing.T) { 134 path := path2.Join(t.TempDir(), "file.txt") 135 passphrase := "pa$$w0rd" 136 data := &DummyData{ 137 Name: "Jane", 138 Age: 40, 139 } 140 141 err := paths.WriteEncryptedFile(path, passphrase, data) 142 require.NoError(t, err) 143 vgtest.AssertFileAccess(t, path) 144 145 readData := &DummyData{} 146 err = paths.ReadEncryptedFile(path, passphrase, readData) 147 require.NoError(t, err) 148 assert.Equal(t, data, readData) 149 150 newData := &DummyData{ 151 Name: "John", 152 Age: 30, 153 } 154 155 err = paths.WriteEncryptedFile(path, passphrase, newData) 156 require.NoError(t, err) 157 vgtest.AssertFileAccess(t, path) 158 159 readNewData := &DummyData{} 160 err = paths.ReadEncryptedFile(path, passphrase, readNewData) 161 require.NoError(t, err) 162 assert.Equal(t, newData, readNewData) 163 } 164 165 func testReadingEncryptedFileSucceeds(t *testing.T) { 166 path := path2.Join(t.TempDir(), "file.txt") 167 passphrase := "pa$$w0rd" 168 data := &DummyData{ 169 Name: "Jane", 170 Age: 40, 171 } 172 173 err := paths.WriteEncryptedFile(path, passphrase, data) 174 require.NoError(t, err) 175 vgtest.AssertFileAccess(t, path) 176 177 readData := &DummyData{} 178 err = paths.ReadEncryptedFile(path, passphrase, readData) 179 require.NoError(t, err) 180 assert.Equal(t, data, readData) 181 } 182 183 func testReadingNonExistingEncryptedFileFails(t *testing.T) { 184 path := t.TempDir() 185 passphrase := "pa$$w0rd" 186 187 readData := &DummyData{} 188 err := paths.ReadEncryptedFile(path, passphrase, readData) 189 require.Error(t, err) 190 assert.Empty(t, readData) 191 } 192 193 func testReadingEncryptedFileWithWrongPassphraseFails(t *testing.T) { 194 path := path2.Join(t.TempDir(), "file.txt") 195 passphrase := "pa$$w0rd" 196 wrongPassphrase := "HaXx0r" 197 data := &DummyData{ 198 Name: "Jane", 199 Age: 40, 200 } 201 202 err := paths.WriteEncryptedFile(path, passphrase, data) 203 require.NoError(t, err) 204 vgtest.AssertFileAccess(t, path) 205 206 readData := &DummyData{} 207 err = paths.ReadEncryptedFile(path, wrongPassphrase, readData) 208 require.Error(t, err) 209 assert.Empty(t, readData) 210 } 211 212 type DummyData struct { 213 Name string 214 Age uint8 215 }