package blocks
|
|
|
|
import (
|
|
"bytes"
|
|
. "github.com/tendermint/tendermint/binary"
|
|
. "github.com/tendermint/tendermint/common"
|
|
"testing"
|
|
)
|
|
|
|
func randSig() Signature {
|
|
return Signature{RandUInt64Exp(), RandBytes(32)}
|
|
}
|
|
|
|
func randBaseTx() BaseTx {
|
|
return BaseTx{0, randSig()}
|
|
}
|
|
|
|
func TestBlock(t *testing.T) {
|
|
|
|
// Account Txs
|
|
|
|
sendTx := &SendTx{
|
|
BaseTx: randBaseTx(),
|
|
Fee: RandUInt64Exp(),
|
|
To: RandUInt64Exp(),
|
|
Amount: RandUInt64Exp(),
|
|
}
|
|
|
|
nameTx := &NameTx{
|
|
BaseTx: randBaseTx(),
|
|
Fee: RandUInt64Exp(),
|
|
Name: string(RandBytes(12)),
|
|
PubKey: RandBytes(32),
|
|
}
|
|
|
|
// Validation Txs
|
|
|
|
bondTx := &BondTx{
|
|
BaseTx: randBaseTx(),
|
|
Fee: RandUInt64Exp(),
|
|
UnbondTo: RandUInt64Exp(),
|
|
Amount: RandUInt64Exp(),
|
|
}
|
|
|
|
unbondTx := &UnbondTx{
|
|
BaseTx: randBaseTx(),
|
|
Fee: RandUInt64Exp(),
|
|
Amount: RandUInt64Exp(),
|
|
}
|
|
|
|
timeoutTx := &TimeoutTx{
|
|
AccountId: RandUInt64Exp(),
|
|
Penalty: RandUInt64Exp(),
|
|
}
|
|
|
|
dupeoutTx := &DupeoutTx{
|
|
VoteA: Vote{
|
|
Height: RandUInt32Exp(),
|
|
Round: RandUInt16Exp(),
|
|
Type: VoteTypeBare,
|
|
BlockHash: RandBytes(32),
|
|
Signature: randSig(),
|
|
},
|
|
VoteB: Vote{
|
|
Height: RandUInt32Exp(),
|
|
Round: RandUInt16Exp(),
|
|
Type: VoteTypeBare,
|
|
BlockHash: RandBytes(32),
|
|
Signature: randSig(),
|
|
},
|
|
}
|
|
|
|
// Block
|
|
|
|
block := &Block{
|
|
Header: Header{
|
|
Network: "Tendermint",
|
|
Height: RandUInt32Exp(),
|
|
Fees: RandUInt64Exp(),
|
|
Time: RandTime(),
|
|
LastBlockHash: RandBytes(32),
|
|
ValidationStateHash: RandBytes(32),
|
|
AccountStateHash: RandBytes(32),
|
|
},
|
|
Validation: Validation{
|
|
Signatures: []Signature{randSig(), randSig()},
|
|
},
|
|
Data: Data{
|
|
Txs: []Tx{sendTx, nameTx, bondTx, unbondTx, timeoutTx, dupeoutTx},
|
|
},
|
|
}
|
|
|
|
// Write the block, read it in again, write it again.
|
|
// Then, compare.
|
|
// TODO We should compute the hash instead, so Block -> Bytes -> Block and compare hashes.
|
|
|
|
blockBytes := BinaryBytes(block)
|
|
var n int64
|
|
var err error
|
|
block2 := ReadBlock(bytes.NewReader(blockBytes), &n, &err)
|
|
if err != nil {
|
|
t.Errorf("Reading block failed: %v", err)
|
|
}
|
|
|
|
blockBytes2 := BinaryBytes(block2)
|
|
|
|
if !bytes.Equal(blockBytes, blockBytes2) {
|
|
t.Fatal("Write->Read of block failed.")
|
|
}
|
|
}
|