X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=proposal%2Fproposal_test.go;h=e211b1437d01a01f3fa93e2ad60ee7ba56c91f24;hb=1ccb4267d3a1017fd29f41e6dba81890759a9253;hp=d8f7abf4f02d12c14c2fc99bb983f5eca667674f;hpb=eec8f562a3dbf016e7d280c1deb532c214eb6e33;p=bytom%2Fvapor.git diff --git a/proposal/proposal_test.go b/proposal/proposal_test.go index d8f7abf4..e211b143 100644 --- a/proposal/proposal_test.go +++ b/proposal/proposal_test.go @@ -1,13 +1,12 @@ package proposal import ( - "encoding/hex" "testing" "github.com/vapor/consensus" + "github.com/vapor/protocol/bc" "github.com/vapor/protocol/bc/types" "github.com/vapor/protocol/state" - "github.com/vapor/protocol/vm/vmutil" "github.com/vapor/testutil" ) @@ -21,10 +20,9 @@ func TestCalCoinbaseTxReward(t *testing.T) { reductionInterval := uint64(840000) cases := []struct { - desc string - block *types.Block - consensusResult *state.ConsensusResult - wantReward state.CoinbaseReward + desc string + block *types.Block + wantReward state.CoinbaseReward }{ { desc: "the block height is reductionInterval - 1", @@ -32,10 +30,14 @@ func TestCalCoinbaseTxReward(t *testing.T) { BlockHeader: types.BlockHeader{ Height: reductionInterval - 1, }, - Transactions: []*types.Tx{nil}, - }, - consensusResult: &state.ConsensusResult{ - CoinbaseReward: map[string]uint64{}, + Transactions: []*types.Tx{ + &types.Tx{ + TxData: types.TxData{ + Inputs: []*types.TxInput{types.NewCoinbaseInput([]byte{0x01})}, + Outputs: []*types.TxOutput{types.NewIntraChainOutput(bc.AssetID{}, 0, []byte{0x51})}, + }, + }, + }, }, wantReward: state.CoinbaseReward{ Amount: 24, @@ -48,10 +50,14 @@ func TestCalCoinbaseTxReward(t *testing.T) { BlockHeader: types.BlockHeader{ Height: reductionInterval, }, - Transactions: []*types.Tx{nil}, - }, - consensusResult: &state.ConsensusResult{ - CoinbaseReward: map[string]uint64{}, + Transactions: []*types.Tx{ + &types.Tx{ + TxData: types.TxData{ + Inputs: []*types.TxInput{types.NewCoinbaseInput([]byte{0x01})}, + Outputs: []*types.TxOutput{types.NewIntraChainOutput(bc.AssetID{}, 0, []byte{0x51})}, + }, + }, + }, }, wantReward: state.CoinbaseReward{ Amount: 24, @@ -64,10 +70,14 @@ func TestCalCoinbaseTxReward(t *testing.T) { BlockHeader: types.BlockHeader{ Height: reductionInterval + 1, }, - Transactions: []*types.Tx{nil}, - }, - consensusResult: &state.ConsensusResult{ - CoinbaseReward: map[string]uint64{}, + Transactions: []*types.Tx{ + &types.Tx{ + TxData: types.TxData{ + Inputs: []*types.TxInput{types.NewCoinbaseInput([]byte{0x01})}, + Outputs: []*types.TxOutput{types.NewIntraChainOutput(bc.AssetID{}, 0, []byte{0x51})}, + }, + }, + }, }, wantReward: state.CoinbaseReward{ Amount: 12, @@ -80,10 +90,14 @@ func TestCalCoinbaseTxReward(t *testing.T) { BlockHeader: types.BlockHeader{ Height: reductionInterval * 2, }, - Transactions: []*types.Tx{nil}, - }, - consensusResult: &state.ConsensusResult{ - CoinbaseReward: map[string]uint64{}, + Transactions: []*types.Tx{ + &types.Tx{ + TxData: types.TxData{ + Inputs: []*types.TxInput{types.NewCoinbaseInput([]byte{0x01})}, + Outputs: []*types.TxOutput{types.NewIntraChainOutput(bc.AssetID{}, 0, []byte{0x51})}, + }, + }, + }, }, wantReward: state.CoinbaseReward{ Amount: 12, @@ -96,10 +110,14 @@ func TestCalCoinbaseTxReward(t *testing.T) { BlockHeader: types.BlockHeader{ Height: 2*reductionInterval + 1, }, - Transactions: []*types.Tx{nil}, - }, - consensusResult: &state.ConsensusResult{ - CoinbaseReward: map[string]uint64{}, + Transactions: []*types.Tx{ + &types.Tx{ + TxData: types.TxData{ + Inputs: []*types.TxInput{types.NewCoinbaseInput([]byte{0x01})}, + Outputs: []*types.TxOutput{types.NewIntraChainOutput(bc.AssetID{}, 0, []byte{0x51})}, + }, + }, + }, }, wantReward: state.CoinbaseReward{ Amount: 6, @@ -108,25 +126,14 @@ func TestCalCoinbaseTxReward(t *testing.T) { }, } - var err error for i, c := range cases { - c.block.Transactions[0], err = createCoinbaseTx(nil, c.block.Height) + gotReward, err := state.CalCoinbaseReward(c.block) if err != nil { t.Fatal(err) } - if err := c.consensusResult.AttachCoinbaseReward(c.block); err != nil { - t.Fatal(err) - } - - defaultProgram, _ := vmutil.DefaultCoinbaseProgram() - gotReward := state.CoinbaseReward{ - Amount: c.consensusResult.CoinbaseReward[hex.EncodeToString(defaultProgram)], - ControlProgram: defaultProgram, - } - - if !testutil.DeepEqual(gotReward, c.wantReward) { - t.Fatalf("test case %d: %s, the coinbase reward got: %v, want: %v", i, c.desc, gotReward, c.wantReward) + if !testutil.DeepEqual(*gotReward, c.wantReward) { + t.Fatalf("test case %d: %s, the coinbase reward got: %v, want: %v", i, c.desc, *gotReward, c.wantReward) } } } @@ -140,10 +147,11 @@ func TestCountCoinbaseTxRewards(t *testing.T) { } cases := []struct { - desc string - block *types.Block - consensusResult *state.ConsensusResult - wantRewards []state.CoinbaseReward + desc string + block *types.Block + consensusResult *state.ConsensusResult + wantRewards []state.CoinbaseReward + wantConsensusResult *state.ConsensusResult }{ { desc: "the block height is RoundVoteBlockNums - 1", @@ -159,6 +167,11 @@ func TestCountCoinbaseTxRewards(t *testing.T) { }, }, wantRewards: []state.CoinbaseReward{}, + wantConsensusResult: &state.ConsensusResult{ + CoinbaseReward: map[string]uint64{ + "51": 34, + }, + }, }, { desc: "the block height is RoundVoteBlockNums", @@ -174,14 +187,11 @@ func TestCountCoinbaseTxRewards(t *testing.T) { "52": 20, }, }, - wantRewards: []state.CoinbaseReward{ - state.CoinbaseReward{ - Amount: 34, - ControlProgram: []byte{0x51}, - }, - state.CoinbaseReward{ - Amount: 20, - ControlProgram: []byte{0x52}, + wantRewards: []state.CoinbaseReward{}, + wantConsensusResult: &state.ConsensusResult{ + CoinbaseReward: map[string]uint64{ + "51": 34, + "52": 20, }, }, }, @@ -198,7 +208,17 @@ func TestCountCoinbaseTxRewards(t *testing.T) { "51": 10, }, }, - wantRewards: []state.CoinbaseReward{}, + wantRewards: []state.CoinbaseReward{ + state.CoinbaseReward{ + Amount: 10, + ControlProgram: []byte{0x51}, + }, + }, + wantConsensusResult: &state.ConsensusResult{ + CoinbaseReward: map[string]uint64{ + "51": 24, + }, + }, }, { desc: "the block height is RoundVoteBlockNums * 2", @@ -210,28 +230,13 @@ func TestCountCoinbaseTxRewards(t *testing.T) { }, consensusResult: &state.ConsensusResult{ CoinbaseReward: map[string]uint64{ - "50": 20, "51": 10, - "52": 20, - "53": 30, }, }, - wantRewards: []state.CoinbaseReward{ - state.CoinbaseReward{ - Amount: 34, - ControlProgram: []byte{0x51}, - }, - state.CoinbaseReward{ - Amount: 30, - ControlProgram: []byte{0x53}, - }, - state.CoinbaseReward{ - Amount: 20, - ControlProgram: []byte{0x52}, - }, - state.CoinbaseReward{ - Amount: 20, - ControlProgram: []byte{0x50}, + wantRewards: []state.CoinbaseReward{}, + wantConsensusResult: &state.ConsensusResult{ + CoinbaseReward: map[string]uint64{ + "51": 34, }, }, }, @@ -244,29 +249,51 @@ func TestCountCoinbaseTxRewards(t *testing.T) { Transactions: []*types.Tx{nil}, }, consensusResult: &state.ConsensusResult{ - CoinbaseReward: map[string]uint64{}, + CoinbaseReward: map[string]uint64{ + "51": 10, + "52": 20, + }, + }, + wantRewards: []state.CoinbaseReward{ + state.CoinbaseReward{ + Amount: 20, + ControlProgram: []byte{0x52}, + }, + state.CoinbaseReward{ + Amount: 10, + ControlProgram: []byte{0x51}, + }, + }, + wantConsensusResult: &state.ConsensusResult{ + CoinbaseReward: map[string]uint64{ + "51": 24, + }, }, - wantRewards: []state.CoinbaseReward{}, }, } - var err error for i, c := range cases { - c.block.Transactions[0], err = createCoinbaseTx(nil, c.block.Height) + rewards, err := c.consensusResult.GetCoinbaseRewards(c.block.Height - 1) if err != nil { t.Fatal(err) } - if err := c.consensusResult.AttachCoinbaseReward(c.block); err != nil { - t.Fatal(err) + if !testutil.DeepEqual(rewards, c.wantRewards) { + t.Fatalf("test case %d: %s, the coinbase reward got: %v, want: %v", i, c.desc, rewards, c.wantRewards) } - rewards, err := c.consensusResult.GetCoinbaseRewards(c.block.Height) + // create coinbase transaction + c.block.Transactions[0], err = createCoinbaseTx(nil, c.block.Height, rewards) if err != nil { t.Fatal(err) } - if !testutil.DeepEqual(rewards, c.wantRewards) { - t.Fatalf("test case %d: %s, the coinbase reward got: %v, want: %v", i, c.desc, rewards, c.wantRewards) + + if err := c.consensusResult.AttachCoinbaseReward(c.block); err != nil { + t.Fatal(err) + } + + if !testutil.DeepEqual(c.consensusResult, c.wantConsensusResult) { + t.Fatalf("test case %d: %s, the consensusResult got: %v, want: %v", i, c.desc, c.consensusResult, c.wantConsensusResult) } } }