tendermint/types/part_set_test.go

91 lines
2.2 KiB
Go
Raw Normal View History

package types
import (
2014-10-17 01:01:59 -07:00
"bytes"
"io/ioutil"
"testing"
2014-10-17 01:01:59 -07:00
2017-04-21 15:12:54 -07:00
. "github.com/tendermint/tmlibs/common"
)
const (
testPartSize = 65536 // 64KB ... 4096 // 4KB
)
func TestBasicPartSet(t *testing.T) {
2014-10-17 01:01:59 -07:00
// Construct random data of size partSize * 100
data := RandBytes(testPartSize * 100)
2014-10-17 01:01:59 -07:00
partSet := NewPartSetFromData(data, testPartSize)
2014-10-30 03:32:09 -07:00
if len(partSet.Hash()) == 0 {
t.Error("Expected to get hash")
2014-10-17 01:01:59 -07:00
}
if partSet.Total() != 100 {
t.Errorf("Expected to get 100 parts, but got %v", partSet.Total())
}
if !partSet.IsComplete() {
t.Errorf("PartSet should be complete")
}
// Test adding parts to a new partSet.
2014-10-31 18:35:38 -07:00
partSet2 := NewPartSetFromHeader(partSet.Header())
2014-10-17 01:01:59 -07:00
for i := 0; i < partSet.Total(); i++ {
2014-10-17 01:01:59 -07:00
part := partSet.GetPart(i)
//t.Logf("\n%v", part)
2016-03-20 22:24:26 -07:00
added, err := partSet2.AddPart(part, true)
2014-10-17 01:01:59 -07:00
if !added || err != nil {
t.Errorf("Failed to add part %v, error: %v", i, err)
}
}
2014-10-30 03:32:09 -07:00
if !bytes.Equal(partSet.Hash(), partSet2.Hash()) {
t.Error("Expected to get same hash")
2014-10-17 01:01:59 -07:00
}
if partSet2.Total() != 100 {
t.Errorf("Expected to get 100 parts, but got %v", partSet2.Total())
}
if !partSet2.IsComplete() {
t.Errorf("Reconstructed PartSet should be complete")
}
// Reconstruct data, assert that they are equal.
data2Reader := partSet2.GetReader()
data2, err := ioutil.ReadAll(data2Reader)
if err != nil {
t.Errorf("Error reading data2Reader: %v", err)
}
if !bytes.Equal(data, data2) {
t.Errorf("Got wrong data.")
}
}
2015-06-18 20:19:39 -07:00
func TestWrongProof(t *testing.T) {
2014-10-17 01:01:59 -07:00
// Construct random data of size partSize * 100
data := RandBytes(testPartSize * 100)
partSet := NewPartSetFromData(data, testPartSize)
2014-10-17 01:01:59 -07:00
// Test adding a part with wrong data.
2014-10-31 18:35:38 -07:00
partSet2 := NewPartSetFromHeader(partSet.Header())
2014-10-17 01:01:59 -07:00
// Test adding a part with wrong trail.
part := partSet.GetPart(0)
2015-12-10 11:09:25 -08:00
part.Proof.Aunts[0][0] += byte(0x01)
2016-03-20 22:24:26 -07:00
added, err := partSet2.AddPart(part, true)
2014-10-17 01:01:59 -07:00
if added || err == nil {
t.Errorf("Expected to fail adding a part with bad trail.")
}
// Test adding a part with wrong bytes.
part = partSet.GetPart(1)
part.Bytes[0] += byte(0x01)
2016-03-20 22:24:26 -07:00
added, err = partSet2.AddPart(part, true)
2014-10-17 01:01:59 -07:00
if added || err == nil {
t.Errorf("Expected to fail adding a part with bad bytes.")
}
}