You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.5 KiB
108 lines
2.5 KiB
6 years ago
|
package node
|
||
|
|
||
|
import (
|
||
|
"github.com/ethereum/go-ethereum/common"
|
||
|
"github.com/ethereum/go-ethereum/crypto"
|
||
|
"github.com/ethereum/go-ethereum/params"
|
||
|
"github.com/harmony-one/harmony/core/state"
|
||
|
"github.com/harmony-one/harmony/core/types"
|
||
|
hdb "github.com/harmony-one/harmony/internal/db"
|
||
|
|
||
|
// "fmt"
|
||
|
"math/big"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
senderPriKey, _ = crypto.GenerateKey()
|
||
|
receiverPriKey, _ = crypto.GenerateKey()
|
||
|
receiverAddress = crypto.PubkeyToAddress(receiverPriKey.PublicKey)
|
||
|
|
||
|
amountBigInt = big.NewInt(8000000000000000000)
|
||
|
)
|
||
|
|
||
|
func TestSerializeBlockchainSyncMessage(t *testing.T) {
|
||
|
h1 := common.HexToHash("123")
|
||
|
h2 := common.HexToHash("abc")
|
||
|
|
||
|
msg := BlockchainSyncMessage{
|
||
|
BlockHeight: 2,
|
||
|
BlockHashes: []common.Hash{
|
||
|
h1,
|
||
|
h2,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
serializedByte := SerializeBlockchainSyncMessage(&msg)
|
||
|
|
||
|
dMsg, err := DeserializeBlockchainSyncMessage(serializedByte)
|
||
|
|
||
|
if err != nil || !reflect.DeepEqual(msg, *dMsg) {
|
||
|
t.Errorf("Failed to serialize/deserialize blockchain sync message\n")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestConstructTransactionListMessageAccount(t *testing.T) {
|
||
|
tx, _ := types.SignTx(types.NewTransaction(100, receiverAddress, uint32(0), amountBigInt, params.TxGas, nil, nil), types.HomesteadSigner{}, senderPriKey)
|
||
|
transactions := types.Transactions{tx}
|
||
|
buf := ConstructTransactionListMessageAccount(transactions)
|
||
|
if len(buf) == 0 {
|
||
|
t.Error("Failed to contruct transaction list message")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestConstructRequestTransactionsMessage(t *testing.T) {
|
||
|
txIDs := [][]byte{
|
||
|
[]byte{1, 2},
|
||
|
[]byte{3, 4},
|
||
|
}
|
||
|
|
||
|
buf := ConstructRequestTransactionsMessage(txIDs)
|
||
|
|
||
|
if len(buf) == 0 {
|
||
|
t.Error("Failed to contruct request transaction message")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestConstructStopMessage(t *testing.T) {
|
||
|
buf := ConstructStopMessage()
|
||
|
|
||
|
if len(buf) == 0 {
|
||
|
t.Error("Failed to contruct STOP message")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestConstructBlocksSyncMessage(t *testing.T) {
|
||
|
|
||
|
db := hdb.NewMemDatabase()
|
||
|
statedb, _ := state.New(common.Hash{}, state.NewDatabase(db))
|
||
|
|
||
|
root := statedb.IntermediateRoot(false)
|
||
|
head := &types.Header{
|
||
|
Number: new(big.Int).SetUint64(uint64(10000)),
|
||
|
Nonce: types.EncodeNonce(uint64(10000)),
|
||
|
ShardID: types.EncodeShardID(uint32(0)),
|
||
|
Time: new(big.Int).SetUint64(uint64(100000)),
|
||
|
Root: root,
|
||
|
}
|
||
|
head.GasLimit = 10000000000
|
||
|
head.Difficulty = params.GenesisDifficulty
|
||
|
|
||
|
statedb.Commit(false)
|
||
|
statedb.Database().TrieDB().Commit(root, true)
|
||
|
|
||
|
block1 := types.NewBlock(head, nil, nil)
|
||
|
|
||
|
blocks := []*types.Block{
|
||
|
block1,
|
||
|
}
|
||
|
|
||
|
buf := ConstructBlocksSyncMessage(blocks)
|
||
|
|
||
|
if len(buf) == 0 {
|
||
|
t.Error("Failed to contruct block sync message")
|
||
|
}
|
||
|
|
||
|
}
|