mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* [NOD-848] Optimize allocations when serializing UTXO diffs * [NOD-848] Use same UTXO serialization everywhere, and use compression as well * [NOD-848] Fix usage of wrong buffer * [NOD-848] Fix tests * [NOD-848] Fix wire tests * [NOD-848] Fix tests * [NOD-848] Remove VLQ * [NOD-848] Fix comments * [NOD-848] Add varint for big endian encoding * [NOD-848] In TestVarIntWire, assume the expected decoded value is the same as the serialization input * [NOD-848] Serialize outpoint index with big endian varint * [NOD-848] Remove p2pk from compression support * [NOD-848] Fix comments * [NOD-848] Remove p2pk from decompression support * [NOD-848] Make entry compression optional * [NOD-848] Fix tests * [NOD-848] Fix comments and var names * [NOD-848] Remove UTXO compression * [NOD-848] Fix tests * [NOD-848] Remove big endian varint * [NOD-848] Fix comments * [NOD-848] Rename ReadVarIntLittleEndian->ReadVarInt and fix WriteVarInt comment * [NOD-848] Add outpointIndexByteOrder variable * [NOD-848] Remove redundant comment * [NOD-848] Fix outpointMaxSerializeSize to the correct value * [NOD-848] Move subBuffer to utils
116 lines
3.2 KiB
Go
116 lines
3.2 KiB
Go
// Copyright (c) 2013-2016 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package util_test
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/pkg/errors"
|
|
"io"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
|
"github.com/kaspanet/kaspad/util"
|
|
"github.com/kaspanet/kaspad/util/daghash"
|
|
)
|
|
|
|
// TestTx tests the API for Tx.
|
|
func TestTx(t *testing.T) {
|
|
firstTestTx := Block100000.Transactions[0]
|
|
firstTx := util.NewTx(firstTestTx)
|
|
secondTestTx := Block100000.Transactions[1]
|
|
secondTx := util.NewTx(secondTestTx)
|
|
|
|
// Ensure we get the same data back out.
|
|
if msgTx := firstTx.MsgTx(); !reflect.DeepEqual(msgTx, firstTestTx) {
|
|
t.Errorf("MsgTx: mismatched MsgTx - got %v, want %v",
|
|
spew.Sdump(msgTx), spew.Sdump(firstTestTx))
|
|
}
|
|
|
|
// Ensure transaction index set and get work properly.
|
|
wantIndex := 0
|
|
firstTx.SetIndex(0)
|
|
if gotIndex := firstTx.Index(); gotIndex != wantIndex {
|
|
t.Errorf("Index: mismatched index - got %v, want %v",
|
|
gotIndex, wantIndex)
|
|
}
|
|
|
|
// Hash for block 100,000 transaction 0.
|
|
wantHashStr := "9bdfb2c83f82ab919e2e87cba505392bdfd9fa987864cbf59879c7dedf6da2cf"
|
|
wantHash, err := daghash.NewHashFromStr(wantHashStr)
|
|
if err != nil {
|
|
t.Errorf("NewHashFromStr: %v", err)
|
|
}
|
|
|
|
// Request the hash multiple times to test generation and caching.
|
|
for i := 0; i < 2; i++ {
|
|
hash := firstTx.Hash()
|
|
if !hash.IsEqual(wantHash) {
|
|
t.Errorf("Hash #%d mismatched hash - got %v, want %v", i,
|
|
hash, wantHash)
|
|
}
|
|
}
|
|
|
|
// ID for block 100,000 transaction 1.
|
|
wantIDStr := "011f7009d8e5a99c4cf2f7216a3eb6044a7017a98732a8fb6390fbbb668e84d8"
|
|
wantID, err := daghash.NewTxIDFromStr(wantIDStr)
|
|
if err != nil {
|
|
t.Errorf("NewTxIDFromStr: %s", err)
|
|
}
|
|
// Request the ID multiple times to test generation and caching.
|
|
for i := 0; i < 2; i++ {
|
|
id := secondTx.ID()
|
|
if !id.IsEqual(wantID) {
|
|
t.Errorf("Hash #%d mismatched hash - got %v, want %v", i,
|
|
id, wantID)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestNewTxFromBytes tests creation of a Tx from serialized bytes.
|
|
func TestNewTxFromBytes(t *testing.T) {
|
|
// Serialize the test transaction.
|
|
testTx := Block100000.Transactions[0]
|
|
var testTxBuf bytes.Buffer
|
|
err := testTx.Serialize(&testTxBuf)
|
|
if err != nil {
|
|
t.Errorf("Serialize: %v", err)
|
|
}
|
|
testTxBytes := testTxBuf.Bytes()
|
|
|
|
// Create a new transaction from the serialized bytes.
|
|
tx, err := util.NewTxFromBytes(testTxBytes)
|
|
if err != nil {
|
|
t.Errorf("NewTxFromBytes: %v", err)
|
|
return
|
|
}
|
|
|
|
// Ensure the generated MsgTx is correct.
|
|
if msgTx := tx.MsgTx(); !reflect.DeepEqual(msgTx, testTx) {
|
|
t.Errorf("MsgTx: mismatched MsgTx - got %v, want %v",
|
|
spew.Sdump(msgTx), spew.Sdump(testTx))
|
|
}
|
|
}
|
|
|
|
// TestTxErrors tests the error paths for the Tx API.
|
|
func TestTxErrors(t *testing.T) {
|
|
// Serialize the test transaction.
|
|
testTx := Block100000.Transactions[0]
|
|
var testTxBuf bytes.Buffer
|
|
err := testTx.Serialize(&testTxBuf)
|
|
if err != nil {
|
|
t.Errorf("Serialize: %v", err)
|
|
}
|
|
testTxBytes := testTxBuf.Bytes()
|
|
|
|
// Truncate the transaction byte buffer to force errors.
|
|
shortBytes := testTxBytes[:4]
|
|
_, err = util.NewTxFromBytes(shortBytes)
|
|
if !errors.Is(err, io.EOF) {
|
|
t.Errorf("NewTxFromBytes: did not get expected error - "+
|
|
"got %v, want %v", err, io.EOF)
|
|
}
|
|
}
|