OSDN Git Service

fb6d0d38a63f38b1de5be4eb72a9e9e40b9648e0
[bytom/vapor.git] / protocol / bbft_test.go
1 package protocol
2
3 import (
4         "testing"
5 )
6
7 func TestNextLeaderTime(t *testing.T) {
8         cases := []struct {
9                 desc               string
10                 startTime          uint64
11                 now                uint64
12                 nodeOrder          uint64
13                 wantError          error
14                 wantNextLeaderTime uint64
15         }{
16                 {
17                         desc:               "normal case",
18                         startTime:          1557906284061,
19                         now:                1557906534061,
20                         nodeOrder:          1,
21                         wantError:          nil,
22                         wantNextLeaderTime: 1557906537561,
23                 },
24                 {
25                         desc:               "best block height equals to start block height",
26                         startTime:          1557906284061,
27                         now:                1557906284061,
28                         nodeOrder:          0,
29                         wantError:          nil,
30                         wantNextLeaderTime: 1557906284061,
31                 },
32                 {
33                         desc:               "best block height equals to start block height",
34                         startTime:          1557906284061,
35                         now:                1557906284061,
36                         nodeOrder:          1,
37                         wantError:          nil,
38                         wantNextLeaderTime: 1557906284061 + BlockNumEachNode*BlockTimeInterval,
39                 },
40                 {
41                         desc:               "the node is producting block",
42                         startTime:          1557906284061,
43                         now:                1557906284561,
44                         nodeOrder:          0,
45                         wantError:          nil,
46                         wantNextLeaderTime: 1557906315561,
47                 },
48                 {
49                         desc:               "the node is producting block",
50                         startTime:          1557906284061,
51                         now:                1557906317561,
52                         nodeOrder:          1,
53                         wantError:          nil,
54                         wantNextLeaderTime: 1557906348561,
55                 },
56                 {
57                         desc:               "first round, must exclude genesis block",
58                         startTime:          1557906284061,
59                         now:                1557906286561,
60                         nodeOrder:          3,
61                         wantError:          nil,
62                         wantNextLeaderTime: 1557906284061 + 9*BlockTimeInterval,
63                 },
64         }
65
66         for i, c := range cases {
67                 nextLeaderTimestamp, err := nextLeaderTimeHelper(c.startTime, c.now, c.nodeOrder)
68                 if err != c.wantError {
69                         t.Fatalf("case #%d (%s) want error:%v, got error:%v", i, c.desc, c.wantError, err)
70                 }
71
72                 if err != nil {
73                         continue
74                 }
75                 if nextLeaderTimestamp != c.wantNextLeaderTime {
76                         t.Errorf("case #%d (%s) want next leader time:%d, got next leader time:%d", i, c.desc, c.wantNextLeaderTime, nextLeaderTimestamp)
77                 }
78         }
79 }