github.com/cobalt77/jfrog-client-go@v0.14.5/utils/io/multifilereader_test.go (about) 1 package io 2 3 import ( 4 "io" 5 "os" 6 "reflect" 7 "testing" 8 9 "github.com/cobalt77/jfrog-client-go/utils/io/fileutils" 10 ) 11 12 func TestNewMultiFileReaderAt(t *testing.T) { 13 tests := []struct { 14 name string 15 filesContent [][]byte 16 offset int64 17 expected []byte 18 }{ 19 {name: "simple1", filesContent: [][]byte{{1, 2, 3}}, offset: 0, expected: []byte{1, 2}}, 20 {name: "simple2", filesContent: [][]byte{{1, 2, 3}}, offset: 4, expected: []byte{}}, 21 {name: "simple3", filesContent: [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, offset: 4, expected: []byte{5, 6, 7, 8}}, 22 {name: "front", filesContent: [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, offset: 0, expected: []byte{1, 2, 3, 4}}, 23 {name: "all", filesContent: [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, offset: 0, expected: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}}, 24 {name: "back1", filesContent: [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, offset: 8, expected: []byte{9}}, 25 {name: "back2", filesContent: [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, offset: 9, expected: []byte{}}, 26 {name: "back3", filesContent: [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, offset: 8, expected: []byte{9, 0, 0}}, 27 } 28 for _, test := range tests { 29 t.Run(test.name, func(t *testing.T) { 30 files := []string{} 31 // Create file with content 32 for _, v := range test.filesContent { 33 f, err := fileutils.CreateTempFile() 34 if err != nil { 35 t.Error(err) 36 } 37 _, err = f.Write(v) 38 if err != nil { 39 t.Error(err) 40 } 41 files = append(files, f.Name()) 42 f.Close() 43 defer os.Remove(f.Name()) 44 } 45 46 // Create multiFileReaderAt 47 multiReader, err := NewMultiFileReaderAt(files) 48 if err != nil { 49 t.Error(err) 50 } 51 52 buf := make([]byte, len(test.expected)) 53 n, err := multiReader.ReadAt(buf, test.offset) 54 55 // Validate results 56 if err != nil && err != io.EOF { 57 t.Error(err) 58 } 59 if n != len(test.expected) && err != io.EOF { 60 t.Error("Expected n:", len(test.expected), "got:", n) 61 } 62 if !reflect.DeepEqual(test.expected, buf) { 63 t.Error("Expected:", test.expected, "got:", buf) 64 } 65 }) 66 } 67 }