89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
|
package commp
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"crypto/rand"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"io/ioutil"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
"github.com/filecoin-project/go-padreader"
|
||
|
"github.com/filecoin-project/go-state-types/abi"
|
||
|
|
||
|
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
|
||
|
"github.com/filecoin-project/lotus/extern/sector-storage/zerocomm"
|
||
|
)
|
||
|
|
||
|
func TestWriterZero(t *testing.T) {
|
||
|
for i, s := range []struct {
|
||
|
writes []int
|
||
|
expect abi.PaddedPieceSize
|
||
|
}{
|
||
|
{writes: []int{200}, expect: 256},
|
||
|
{writes: []int{200, 200}, expect: 512},
|
||
|
|
||
|
{writes: []int{int(CommPBuf)}, expect: commPBufPad},
|
||
|
{writes: []int{int(CommPBuf) * 2}, expect: 2 * commPBufPad},
|
||
|
{writes: []int{int(CommPBuf), int(CommPBuf), int(CommPBuf)}, expect: 4 * commPBufPad},
|
||
|
{writes: []int{int(CommPBuf), int(CommPBuf), int(CommPBuf), int(CommPBuf), int(CommPBuf), int(CommPBuf), int(CommPBuf), int(CommPBuf), int(CommPBuf)}, expect: 16 * commPBufPad},
|
||
|
|
||
|
{writes: []int{200, int(CommPBuf)}, expect: 2 * commPBufPad},
|
||
|
} {
|
||
|
s := s
|
||
|
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
||
|
w := &Writer{}
|
||
|
var rawSum int64
|
||
|
for _, write := range s.writes {
|
||
|
rawSum += int64(write)
|
||
|
_, err := w.Write(make([]byte, write))
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
p, err := w.Sum()
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, rawSum, p.PayloadSize)
|
||
|
require.Equal(t, s.expect, p.PieceSize)
|
||
|
require.Equal(t, zerocomm.ZeroPieceCommitment(s.expect.Unpadded()).String(), p.PieceCID.String())
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestWriterData(t *testing.T) {
|
||
|
dataLen := float64(CommPBuf) * 6.78
|
||
|
data, _ := ioutil.ReadAll(io.LimitReader(rand.Reader, int64(dataLen)))
|
||
|
|
||
|
pr, sz := padreader.New(bytes.NewReader(data), uint64(dataLen))
|
||
|
exp, err := ffiwrapper.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg32GiBV1, pr, sz)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
w := &Writer{}
|
||
|
_, err = io.Copy(w, bytes.NewReader(data))
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
res, err := w.Sum()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
require.Equal(t, exp.String(), res.PieceCID.String())
|
||
|
}
|
||
|
|
||
|
func BenchmarkWriterZero(b *testing.B) {
|
||
|
buf := make([]byte, int(CommPBuf)*b.N)
|
||
|
b.SetBytes(int64(CommPBuf))
|
||
|
b.ResetTimer()
|
||
|
|
||
|
w := &Writer{}
|
||
|
|
||
|
_, err := w.Write(buf)
|
||
|
require.NoError(b, err)
|
||
|
o, err := w.Sum()
|
||
|
|
||
|
b.StopTimer()
|
||
|
|
||
|
require.NoError(b, err)
|
||
|
require.Equal(b, zerocomm.ZeroPieceCommitment(o.PieceSize.Unpadded()).String(), o.PieceCID.String())
|
||
|
require.Equal(b, int64(CommPBuf)*int64(b.N), o.PayloadSize)
|
||
|
}
|