2019-01-24 20:15:10 +00:00
|
|
|
// Copyright (C) 2019 Storj Labs, Inc.
|
2018-12-12 19:14:51 +00:00
|
|
|
// See LICENSE for copying information.
|
|
|
|
|
|
|
|
package psserver
|
|
|
|
|
|
|
|
import (
|
2019-02-23 10:46:07 +00:00
|
|
|
"crypto/sha256"
|
2018-12-12 19:14:51 +00:00
|
|
|
"io"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2019-01-22 15:48:23 +00:00
|
|
|
|
2018-12-12 19:14:51 +00:00
|
|
|
"storj.io/storj/pkg/utils"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestRead(t *testing.T) {
|
|
|
|
for _, tt := range []struct {
|
|
|
|
name string
|
|
|
|
file []byte
|
|
|
|
outputBufLen int
|
|
|
|
bwLeft int64
|
|
|
|
spaceLeft int64
|
|
|
|
n int
|
|
|
|
eofErr bool
|
|
|
|
bwErr bool
|
|
|
|
spaceErr bool
|
|
|
|
}{
|
|
|
|
{"Test EOF error: ", []byte("abcdefghijklmnopqrstuvwxyz"), 30, 40, 40, 26, true, false, false},
|
|
|
|
{"Test exceeds bandwidth error: ", []byte("abcdefghijklmnopqrstuvwxyz"), 26, 5, 40, 10, false, true, false},
|
|
|
|
{"Test exceeds space error 1: ", []byte("abcdefghijklmnopqrstuvwxyz"), 26, 40, 5, 10, false, false, true},
|
|
|
|
{"Test exceeds space error 2: ", []byte("abcdefghijklmnopqrstuvwxyz"), 26, 40, 0, 0, false, false, true},
|
|
|
|
{"Test no error: ", []byte("abcdefghijklmnopqrstuvwxyz"), 20, 40, 40, 20, false, false, false},
|
|
|
|
} {
|
2019-02-23 10:46:07 +00:00
|
|
|
sum := sha256.Sum256(tt.file[:tt.n])
|
|
|
|
expectedHash := sum[:]
|
|
|
|
|
2018-12-12 19:14:51 +00:00
|
|
|
remaining := tt.file
|
|
|
|
readerSrc := utils.NewReaderSource(func() ([]byte, error) {
|
|
|
|
if len(remaining) == 0 {
|
|
|
|
return nil, io.EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
// send in 10 byte chunks
|
|
|
|
if len(remaining) <= 10 {
|
|
|
|
ret := remaining
|
|
|
|
remaining = []byte{}
|
|
|
|
return ret, io.EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
ret := remaining[:10]
|
|
|
|
remaining = remaining[10:]
|
|
|
|
|
|
|
|
return ret, nil
|
|
|
|
})
|
|
|
|
sr := &StreamReader{
|
|
|
|
src: readerSrc,
|
|
|
|
bandwidthRemaining: tt.bwLeft,
|
|
|
|
spaceRemaining: tt.spaceLeft,
|
2019-02-23 10:46:07 +00:00
|
|
|
hash: sha256.New(),
|
2018-12-12 19:14:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
outputBuf := make([]byte, tt.outputBufLen)
|
|
|
|
n, err := io.ReadFull(sr, outputBuf)
|
|
|
|
|
|
|
|
if tt.eofErr {
|
|
|
|
assert.Error(t, err)
|
|
|
|
assert.True(t, err == io.ErrUnexpectedEOF)
|
2019-02-23 10:46:07 +00:00
|
|
|
assert.Equal(t, expectedHash, sr.hash.Sum(nil))
|
2018-12-12 19:14:51 +00:00
|
|
|
} else if tt.bwErr {
|
|
|
|
assert.Error(t, err)
|
|
|
|
assert.True(t, StreamWriterError.Has(err))
|
|
|
|
assert.Contains(t, err.Error(), "out of bandwidth")
|
|
|
|
} else if tt.spaceErr {
|
|
|
|
assert.Error(t, err)
|
|
|
|
assert.True(t, StreamWriterError.Has(err))
|
|
|
|
assert.Contains(t, err.Error(), "out of space")
|
|
|
|
} else {
|
|
|
|
assert.NoError(t, err)
|
2019-02-23 10:46:07 +00:00
|
|
|
assert.Equal(t, expectedHash, sr.hash.Sum(nil))
|
2018-12-12 19:14:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
assert.Equal(t, n, tt.n)
|
|
|
|
}
|
|
|
|
}
|