kaspad/domain/utxoindex/serialization_test.go
Elichai Turkel 79be1edaa5
Fix utxoindex deserialization (#1566)
* Fix broken deserialization in utxoindex

* Add Tests for hashes serialization in utxo index
2021-03-01 19:06:19 +02:00

45 lines
1.3 KiB
Go

package utxoindex
import (
"encoding/binary"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/pkg/errors"
"io"
"math/rand"
"testing"
)
func Test_serializeHashes(t *testing.T) {
r := rand.New(rand.NewSource(0))
for length := 0; length < 32; length++ {
hashes := make([]*externalapi.DomainHash, length)
for i := range hashes {
var hashBytes [32]byte
r.Read(hashBytes[:])
hashes[i] = externalapi.NewDomainHashFromByteArray(&hashBytes)
}
result, err := deserializeHashes(serializeHashes(hashes))
if err != nil {
t.Fatalf("Failed deserializing hashes: %v", err)
}
if !externalapi.HashesEqual(hashes, result) {
t.Fatalf("Expected \n %s \n==\n %s\n", hashes, result)
}
}
}
func Test_deserializeHashesFailure(t *testing.T) {
hashes := []*externalapi.DomainHash{
externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{1}),
externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{2}),
externalapi.NewDomainHashFromByteArray(&[externalapi.DomainHashSize]byte{3}),
}
serialized := serializeHashes(hashes)
binary.LittleEndian.PutUint64(serialized[:8], uint64(len(hashes)+1))
_, err := deserializeHashes(serialized)
if !errors.Is(err, io.ErrUnexpectedEOF) {
t.Fatalf("Expected error to be EOF, instead got: %v", err)
}
}