mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-07 14:46:44 +00:00
Fix utxoindex deserialization (#1566)
* Fix broken deserialization in utxoindex * Add Tests for hashes serialization in utxo index
This commit is contained in:
parent
c1ef5f0c56
commit
79be1edaa5
@ -45,8 +45,7 @@ func serializeHashes(hashes []*externalapi.DomainHash) []byte {
|
|||||||
for i, hash := range hashes {
|
for i, hash := range hashes {
|
||||||
start := hashesLengthSize + externalapi.DomainHashSize*i
|
start := hashesLengthSize + externalapi.DomainHashSize*i
|
||||||
end := start + externalapi.DomainHashSize
|
end := start + externalapi.DomainHashSize
|
||||||
copy(serializedHashes[start:end],
|
copy(serializedHashes[start:end], hash.ByteSlice())
|
||||||
hash.ByteSlice())
|
|
||||||
}
|
}
|
||||||
return serializedHashes
|
return serializedHashes
|
||||||
}
|
}
|
||||||
@ -63,12 +62,11 @@ func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
hashes[i], err = externalapi.
|
hashes[i], err = externalapi.NewDomainHashFromByteSlice(serializedHashes[start:end])
|
||||||
NewDomainHashFromByteSlice(serializedHashes[start:end])
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return hashes, nil
|
||||||
}
|
}
|
||||||
|
44
domain/utxoindex/serialization_test.go
Normal file
44
domain/utxoindex/serialization_test.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user