mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-04 13:16:43 +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 {
|
||||
start := hashesLengthSize + externalapi.DomainHashSize*i
|
||||
end := start + externalapi.DomainHashSize
|
||||
copy(serializedHashes[start:end],
|
||||
hash.ByteSlice())
|
||||
copy(serializedHashes[start:end], hash.ByteSlice())
|
||||
}
|
||||
return serializedHashes
|
||||
}
|
||||
@ -63,12 +62,11 @@ func deserializeHashes(serializedHashes []byte) ([]*externalapi.DomainHash, erro
|
||||
}
|
||||
|
||||
var err error
|
||||
hashes[i], err = externalapi.
|
||||
NewDomainHashFromByteSlice(serializedHashes[start:end])
|
||||
hashes[i], err = externalapi.NewDomainHashFromByteSlice(serializedHashes[start:end])
|
||||
if err != nil {
|
||||
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