github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/orderer/common/filerepo/filerepo_test.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package filerepo_test
     8  
     9  import (
    10  	"io/ioutil"
    11  	"os"
    12  	"path/filepath"
    13  	"testing"
    14  
    15  	"github.com/hechain20/hechain/orderer/common/filerepo"
    16  	"github.com/stretchr/testify/require"
    17  )
    18  
    19  func TestNewFileRepo(t *testing.T) {
    20  	// Write a temporary file
    21  	tempFilePath := filepath.Join("testdata", "join", "mychannel.join~")
    22  	tempFile, err := os.Create(tempFilePath)
    23  	require.NoError(t, err)
    24  	defer func() {
    25  		tempFile.Close()
    26  		os.Remove(tempFilePath)
    27  	}()
    28  
    29  	// Check tempfile exists prior to creating a new file repo
    30  	_, err = os.Stat(tempFilePath)
    31  	require.NoError(t, err)
    32  
    33  	_, err = filerepo.New("testdata", "join")
    34  	require.NoError(t, err)
    35  
    36  	// Check tempfile was cleared out upon creating a new file repo
    37  	require.NoFileExists(t, tempFilePath)
    38  }
    39  
    40  func TestNewFileRepoFailure(t *testing.T) {
    41  	tests := []struct {
    42  		testName    string
    43  		fileSuffix  string
    44  		expectedErr string
    45  	}{
    46  		{
    47  			testName:    "invalid fileSuffix",
    48  			fileSuffix:  "join/block",
    49  			expectedErr: "fileSuffix [join/block] illegal, cannot contain os path separator",
    50  		},
    51  		{
    52  			testName:    "empty fileSuffix",
    53  			fileSuffix:  "",
    54  			expectedErr: "fileSuffix illegal, cannot be empty",
    55  		},
    56  	}
    57  
    58  	for _, tt := range tests {
    59  		t.Run(tt.testName, func(t *testing.T) {
    60  			_, err := filerepo.New("testdata", tt.fileSuffix)
    61  			require.EqualError(t, err, tt.expectedErr)
    62  		})
    63  	}
    64  }
    65  
    66  func TestFileRepo_Save(t *testing.T) {
    67  	tests := []struct {
    68  		testName string
    69  		content  []byte
    70  	}{
    71  		{
    72  			testName: "Non-empty bytes",
    73  			content:  []byte("block-bytes"),
    74  		},
    75  		{
    76  			testName: "Empty bytes",
    77  			content:  []byte{},
    78  		},
    79  		{
    80  			testName: "Nil bytes",
    81  			content:  nil,
    82  		},
    83  	}
    84  
    85  	for _, tt := range tests {
    86  		t.Run(tt.testName, func(t *testing.T) {
    87  			r, err := filerepo.New("testdata", "join")
    88  			require.NoError(t, err)
    89  
    90  			filePath := filepath.Join("testdata", "join", "newchannel.join")
    91  
    92  			err = r.Save("newchannel", tt.content)
    93  			defer os.Remove(filePath)
    94  			require.NoError(t, err)
    95  
    96  			// Check file bytes
    97  			bytes, err := ioutil.ReadFile(filePath)
    98  			require.NoError(t, err)
    99  			if tt.content != nil {
   100  				require.Equal(t, tt.content, bytes)
   101  			} else {
   102  				require.Equal(t, []byte{}, bytes)
   103  			}
   104  
   105  			// Check tempfile doesn't exist
   106  			require.NoFileExists(t, filePath+"~")
   107  		})
   108  	}
   109  }
   110  
   111  func TestFileRepo_SaveFailure(t *testing.T) {
   112  	r, err := filerepo.New("testdata", "join")
   113  	require.NoError(t, err)
   114  
   115  	err = r.Save("mychannel", []byte{})
   116  	require.EqualError(t, err, os.ErrExist.Error())
   117  }
   118  
   119  func TestFileRepo_Remove(t *testing.T) {
   120  	// Write a temporary file
   121  	tempFilePath := filepath.Join("testdata", "join", "channel2.join")
   122  	tempFile, err := os.Create(tempFilePath)
   123  	require.NoError(t, err)
   124  	defer func() {
   125  		tempFile.Close()
   126  		os.Remove(tempFilePath)
   127  	}()
   128  
   129  	r, err := filerepo.New("testdata", "join")
   130  	require.NoError(t, err)
   131  
   132  	err = r.Remove("channel2")
   133  	require.NoError(t, err)
   134  
   135  	require.NoFileExists(t, tempFilePath)
   136  }
   137  
   138  func TestFileRepo_Read(t *testing.T) {
   139  	t.Run("Successful read, non-empty bytes", func(t *testing.T) {
   140  		r, err := filerepo.New("testdata", "join")
   141  		require.NoError(t, err)
   142  
   143  		bytes, err := r.Read("mychannel")
   144  		require.NoError(t, err)
   145  		require.Equal(t, "dummy-data", string(bytes))
   146  	})
   147  
   148  	t.Run("Successful read, empty bytes", func(t *testing.T) {
   149  		r, err := filerepo.New("testdata", "remove")
   150  		require.NoError(t, err)
   151  
   152  		bytes, err := r.Read("mychannel")
   153  		require.NoError(t, err)
   154  		require.Equal(t, []byte{}, bytes)
   155  	})
   156  
   157  	t.Run("Failed read, invalid file", func(t *testing.T) {
   158  		r, err := filerepo.New("testdata", "join")
   159  		require.NoError(t, err)
   160  
   161  		_, err = r.Read("invalidfile")
   162  		require.EqualError(t, err, "open testdata/join/invalidfile.join: no such file or directory")
   163  	})
   164  }
   165  
   166  func TestFileRepo_List(t *testing.T) {
   167  	r, err := filerepo.New("testdata", "join")
   168  	require.NoError(t, err)
   169  
   170  	files, err := r.List()
   171  	require.NoError(t, err)
   172  	require.Equal(t, []string{"mychannel.join"}, files)
   173  }
   174  
   175  func TestFileRepo_FileToBaseName(t *testing.T) {
   176  	r, err := filerepo.New("testdata", "join")
   177  	require.NoError(t, err)
   178  
   179  	filePath := filepath.Join("testdata", "join", "mychannel.join")
   180  	channelName := r.FileToBaseName(filePath)
   181  	require.Equal(t, "mychannel", channelName)
   182  }