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  }