storj.io/uplink@v1.13.0/private/storage/streams/segmentupload/encode_test.go (about)

     1  // Copyright (C) 2023 Storj Labs, Inc.
     2  // See LICENSE for copying information.
     3  
     4  package segmentupload
     5  
     6  import (
     7  	"bytes"
     8  	"io"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"storj.io/infectious"
    14  )
    15  
    16  func TestEncodedReader(t *testing.T) {
    17  	rs := mustNewRedundancyStrategy()
    18  
    19  	t.Run("produces valid pieces", func(t *testing.T) {
    20  		expected := bytes.Repeat([]byte{1}, rs.StripeSize())
    21  
    22  		pieces := make([]infectious.Share, 0, rs.TotalCount())
    23  		for i := 0; i < rs.TotalCount(); i++ {
    24  			r := NewEncodedReader(bytes.NewReader(expected), rs, i)
    25  			piece, err := io.ReadAll(r)
    26  			require.NoError(t, err)
    27  			pieces = append(pieces, infectious.Share{
    28  				Number: i,
    29  				Data:   piece,
    30  			})
    31  		}
    32  
    33  		actual, err := rs.Decode(nil, pieces)
    34  		require.NoError(t, err)
    35  
    36  		require.Equal(t, expected, actual)
    37  	})
    38  
    39  	t.Run("data not padded correctly", func(t *testing.T) {
    40  		shortData := bytes.Repeat([]byte{1}, rs.StripeSize()-1)
    41  		r := NewEncodedReader(bytes.NewReader(shortData), rs, 0)
    42  		_, err := io.ReadAll(r)
    43  		require.EqualError(t, err, "unexpected EOF")
    44  		// reading again should produce the same error
    45  		_, err = io.ReadAll(r)
    46  		require.EqualError(t, err, "unexpected EOF")
    47  	})
    48  
    49  	t.Run("negative piece number", func(t *testing.T) {
    50  		data := bytes.Repeat([]byte{1}, rs.StripeSize())
    51  		r := NewEncodedReader(bytes.NewReader(data), rs, -1)
    52  		_, err := io.ReadAll(r)
    53  		require.EqualError(t, err, "num must be non-negative")
    54  		// reading again should produce the same error
    55  		_, err = io.ReadAll(r)
    56  		require.EqualError(t, err, "num must be non-negative")
    57  	})
    58  
    59  	t.Run("out of range piece number", func(t *testing.T) {
    60  		data := bytes.Repeat([]byte{1}, rs.StripeSize())
    61  		r := NewEncodedReader(bytes.NewReader(data), rs, rs.TotalCount())
    62  		_, err := io.ReadAll(r)
    63  		require.EqualError(t, err, "num must be less than 4")
    64  		// reading again should produce the same error
    65  		_, err = io.ReadAll(r)
    66  		require.EqualError(t, err, "num must be less than 4")
    67  	})
    68  }