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 }