github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/fileutil/writer_reader_test.go (about)

     1  package fileutil
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestWriterThenReader(t *testing.T) {
     8  	writer, err := NewFileWriterThenReader("testing-*.tmp")
     9  	if err != nil {
    10  		t.Fatalf("opening fileWriterThenReader: %s", err)
    11  	}
    12  
    13  	text := []byte("the quick brown fox jumps over the lazy dog. ")
    14  
    15  	const count = 100000
    16  	for i := 0; i < count; i++ {
    17  		l, err := writer.Write(text)
    18  		if err != nil {
    19  			t.Fatalf("writing block %d: %s", i, err)
    20  		}
    21  		if l != len(text) {
    22  			t.Fatalf("writing block %d: passed %d but wrote %d", i, len(text), l)
    23  		}
    24  	}
    25  
    26  	// Re-read data
    27  	reader, length, err := writer.StartReading()
    28  	if err != nil {
    29  		t.Fatalf("start reading fileWriterThenReader: %s", err)
    30  	}
    31  	t.Log("total length", length, "reader", reader)
    32  	for i := 0; i < count; i++ {
    33  		p := make([]byte, len(text))
    34  		l, err := reader.Read(p)
    35  		if err != nil {
    36  			t.Fatalf("failed to read item %d: %s", i, err)
    37  		}
    38  		if l != len(text) {
    39  			t.Fatalf("writing block %d: passed %d but wrote %d", i, len(text), l)
    40  		}
    41  	}
    42  
    43  	// Re-read data again
    44  	err = reader.Rewind()
    45  	if err != nil {
    46  		t.Fatalf("rewind fileWriterThenReader: %s", err)
    47  	}
    48  	for i := 0; i < count; i++ {
    49  		p := make([]byte, len(text))
    50  		l, err := reader.Read(p)
    51  		if err != nil {
    52  			t.Fatalf("failed to read item %d: %s", i, err)
    53  		}
    54  		if l != len(text) {
    55  			t.Fatalf("writing block %d: passed %d but wrote %d", i, len(text), l)
    56  		}
    57  	}
    58  }