-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathframework_test.go
62 lines (52 loc) · 1.73 KB
/
framework_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package e2e
import (
"testing"
"time"
"github.com/0xPolygon/pbft-consensus"
"github.com/0xPolygon/pbft-consensus/e2e/helper"
"github.com/stretchr/testify/assert"
)
func TestE2E_ClusterInsertFinalProposal(t *testing.T) {
clusterConfig := &ClusterConfig{
Count: 3,
Name: "cluster",
Prefix: "N",
}
c := NewPBFTCluster(t, clusterConfig)
// valid proposal => insert it
seq1Proposal := newSealedProposal([]byte{0x1}, "N0", 1)
err := c.insertFinalProposal(seq1Proposal)
assert.Nil(t, err)
assert.Len(t, c.sealedProposals, 1)
// invalid proposal (different proposal data on sequence previously inserted) => discard it and return an error
seq1DiffProposal := newSealedProposal([]byte{0x3}, "N0", 1)
err = c.insertFinalProposal(seq1DiffProposal)
assert.NotNil(t, err)
assert.Len(t, c.sealedProposals, 1)
// same proposal data on same sequence previously entered => discard it, but don't return an error
err = c.insertFinalProposal(seq1Proposal)
assert.Nil(t, err)
assert.Len(t, c.sealedProposals, 1)
// sequence-gapped proposal => discard it and return an error
seq5Proposal := newSealedProposal([]byte{0x5}, "N1", 5)
err = c.insertFinalProposal(seq5Proposal)
assert.NotNil(t, err)
assert.Len(t, c.sealedProposals, 1)
// valid proposal => insert it
seq2Proposal := newSealedProposal([]byte{0x2}, "N1", 2)
err = c.insertFinalProposal(seq2Proposal)
assert.NoError(t, err)
assert.Len(t, c.sealedProposals, 2)
}
func newSealedProposal(proposalData []byte, proposer pbft.NodeID, number uint64) *pbft.SealedProposal {
proposal := &pbft.Proposal{
Data: proposalData,
Time: time.Now(),
}
proposal.Hash = helper.Hash(proposal.Data)
return &pbft.SealedProposal{
Proposal: proposal,
Proposer: proposer,
Number: number,
}
}