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  }