6 "github.com/vapor/consensus"
7 "github.com/vapor/mining/tensority"
8 "github.com/vapor/protocol/bc"
9 "github.com/vapor/protocol/bc/types"
10 "github.com/vapor/protocol/state"
11 "github.com/vapor/testutil"
14 func TestCheckBlockTime(t *testing.T) {
21 blockTime: 1520000001,
22 parentTime: 1520000000,
26 blockTime: 1510000000,
27 parentTime: 1520000000,
31 blockTime: 9999999999,
32 parentTime: 1520000000,
37 parent := &state.BlockNode{}
39 BlockHeader: &bc.BlockHeader{},
42 for i, c := range cases {
43 parent.Timestamp = c.parentTime
44 block.Timestamp = c.blockTime
45 if err := checkBlockTime(block, parent); rootErr(err) != c.err {
46 t.Errorf("case %d got error %s, want %s", i, err, c.err)
51 func TestCheckCoinbaseAmount(t *testing.T) {
59 types.NewTx(types.TxData{
60 Inputs: []*types.TxInput{types.NewCoinbaseInput(nil)},
61 Outputs: []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
69 types.NewTx(types.TxData{
70 Inputs: []*types.TxInput{types.NewCoinbaseInput(nil)},
71 Outputs: []*types.TxOutput{types.NewTxOutput(*consensus.BTMAssetID, 5000, nil)},
75 err: ErrWrongCoinbaseTransaction,
80 err: ErrWrongCoinbaseTransaction,
84 block := new(types.Block)
85 for i, c := range cases {
86 block.Transactions = c.txs
87 if err := checkCoinbaseAmount(types.MapBlock(block), c.amount); rootErr(err) != c.err {
88 t.Errorf("case %d got error %s, want %s", i, err, c.err)
93 func TestValidateBlockHeader(t *testing.T) {
94 // add (hash, seed) --> (tensority hash) to the tensority cache for avoid
95 // real matrix calculate cost.
96 tensority.AIHash.AddCache(&bc.Hash{V0: 0}, &bc.Hash{}, testutil.MaxHash)
97 tensority.AIHash.AddCache(&bc.Hash{V0: 1}, &bc.Hash{}, testutil.MinHash)
98 tensority.AIHash.AddCache(&bc.Hash{V0: 1}, consensus.InitialSeed, testutil.MinHash)
102 parent *state.BlockNode
106 block: &bc.Block{BlockHeader: &bc.BlockHeader{
109 parent: &state.BlockNode{
112 err: errVersionRegression,
115 block: &bc.Block{BlockHeader: &bc.BlockHeader{
118 parent: &state.BlockNode{
121 err: errMisorderedBlockHeight,
124 block: &bc.Block{BlockHeader: &bc.BlockHeader{
128 parent: &state.BlockNode{
130 Bits: 2305843009214532812,
135 block: &bc.Block{BlockHeader: &bc.BlockHeader{
137 PreviousBlockId: &bc.Hash{V0: 18},
139 parent: &state.BlockNode{
141 Hash: bc.Hash{V0: 19},
143 err: errMismatchedBlock,
148 BlockHeader: &bc.BlockHeader{
150 Timestamp: 1523352601,
151 PreviousBlockId: &bc.Hash{V0: 0},
152 Bits: 2305843009214532812,
155 parent: &state.BlockNode{
157 Timestamp: 1523352600,
158 Hash: bc.Hash{V0: 0},
159 Seed: &bc.Hash{V1: 1},
160 Bits: 2305843009214532812,
167 BlockHeader: &bc.BlockHeader{
169 Timestamp: 1523352601,
170 PreviousBlockId: &bc.Hash{V0: 0},
171 Bits: 2305843009214532812,
174 parent: &state.BlockNode{
176 Timestamp: 1523352600,
177 Hash: bc.Hash{V0: 0},
178 Seed: &bc.Hash{V1: 1},
179 Bits: 2305843009214532812,
185 for i, c := range cases {
186 if err := ValidateBlockHeader(c.block, c.parent); rootErr(err) != c.err {
187 t.Errorf("case %d got error %s, want %s", i, err, c.err)