Add tests for new Tx type.
This commit adds both positive and negative tests for the new Tx type to bring its coverage to 100%. This is part of the ongoing transaction hash optimization effort noted in conformal/btcd#25.
This commit is contained in:
parent
e402c62673
commit
29f1bf4ae1
2 changed files with 107 additions and 5 deletions
|
@ -1,19 +1,25 @@
|
|||
|
||||
github.com/conformal/btcutil/base58.go Base58Decode 100.00% (20/20)
|
||||
github.com/conformal/btcutil/base58.go Base58Encode 100.00% (15/15)
|
||||
github.com/conformal/btcutil/addrconvs.go EncodeAddress 100.00% (14/14)
|
||||
github.com/conformal/btcutil/addrconvs.go DecodeAddress 100.00% (14/14)
|
||||
github.com/conformal/btcutil/addrconvs.go EncodeAddress 100.00% (14/14)
|
||||
github.com/conformal/btcutil/block.go Block.TxSha 100.00% (11/11)
|
||||
github.com/conformal/btcutil/block.go Block.TxShas 100.00% (10/10)
|
||||
github.com/conformal/btcutil/tx.go NewTxFromBytes 100.00% (7/7)
|
||||
github.com/conformal/btcutil/block.go NewBlockFromBytes 100.00% (7/7)
|
||||
github.com/conformal/btcutil/block.go Block.Sha 100.00% (5/5)
|
||||
github.com/conformal/btcutil/block.go Block.Height 100.00% (1/1)
|
||||
github.com/conformal/btcutil/tx.go Tx.Sha 100.00% (5/5)
|
||||
github.com/conformal/btcutil/block.go OutOfRangeError.Error 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go Block.SetHeight 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go NewBlock 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go Block.Height 100.00% (1/1)
|
||||
github.com/conformal/btcutil/tx.go Tx.MsgTx 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go NewBlockFromBlockAndBytes 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go OutOfRangeError.Error 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go Block.MsgBlock 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go Block.Bytes 88.89% (8/9)
|
||||
github.com/conformal/btcutil/tx.go Tx.SetIndex 100.00% (1/1)
|
||||
github.com/conformal/btcutil/tx.go NewTx 100.00% (1/1)
|
||||
github.com/conformal/btcutil/tx.go Tx.Index 100.00% (1/1)
|
||||
github.com/conformal/btcutil/block.go Block.TxLoc 88.89% (8/9)
|
||||
github.com/conformal/btcutil ------------------------- 98.33% (118/120)
|
||||
github.com/conformal/btcutil/block.go Block.Bytes 88.89% (8/9)
|
||||
github.com/conformal/btcutil ------------------------- 98.53% (134/136)
|
||||
|
||||
|
|
96
tx_test.go
Normal file
96
tx_test.go
Normal file
|
@ -0,0 +1,96 @@
|
|||
// Copyright (c) 2013 Conformal Systems LLC.
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package btcutil_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/conformal/btcutil"
|
||||
"github.com/conformal/btcwire"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"io"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestTx tests the API for Tx.
|
||||
func TestTx(t *testing.T) {
|
||||
testTx := Block100000.Transactions[0]
|
||||
tx := btcutil.NewTx(testTx)
|
||||
|
||||
// Ensure we get the same data back out.
|
||||
if msgTx := tx.MsgTx(); !reflect.DeepEqual(msgTx, testTx) {
|
||||
t.Errorf("MsgTx: mismatched MsgTx - got %v, want %v",
|
||||
spew.Sdump(msgTx), spew.Sdump(testTx))
|
||||
}
|
||||
|
||||
// Ensure transaction index set and get work properly.
|
||||
wantIndex := 0
|
||||
tx.SetIndex(0)
|
||||
if gotIndex := tx.Index(); gotIndex != wantIndex {
|
||||
t.Errorf("Index: mismatched index - got %v, want %v",
|
||||
gotIndex, wantIndex)
|
||||
}
|
||||
|
||||
// Hash for block 100,000 transaction 0.
|
||||
wantShaStr := "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87"
|
||||
wantSha, err := btcwire.NewShaHashFromStr(wantShaStr)
|
||||
if err != nil {
|
||||
t.Errorf("NewShaHashFromStr: %v", err)
|
||||
}
|
||||
|
||||
// Request the sha multiple times to test generation and caching.
|
||||
for i := 0; i < 2; i++ {
|
||||
sha := tx.Sha()
|
||||
if !sha.IsEqual(wantSha) {
|
||||
t.Errorf("Sha #%d mismatched sha - got %v, want %v", i,
|
||||
sha, wantSha)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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 := btcutil.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 = btcutil.NewTxFromBytes(shortBytes)
|
||||
if err != io.EOF {
|
||||
t.Errorf("NewTxFromBytes: did not get expected error - "+
|
||||
"got %v, want %v", err, io.EOF)
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue