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 }