parent
4eb71e4eeb
commit
f26d62984c
@ -0,0 +1,111 @@ |
||||
package consensus |
||||
|
||||
import ( |
||||
"github.com/golang/mock/gomock" |
||||
"github.com/harmony-one/harmony/crypto" |
||||
"github.com/harmony-one/harmony/internal/utils" |
||||
mock_host "github.com/harmony-one/harmony/p2p/host/mock" |
||||
"github.com/stretchr/testify/assert" |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/harmony-one/harmony/p2p/p2pimpl" |
||||
|
||||
consensus_proto "github.com/harmony-one/harmony/api/consensus" |
||||
"github.com/harmony-one/harmony/p2p" |
||||
) |
||||
|
||||
func TestProcessMessageLeaderCommit(test *testing.T) { |
||||
ctrl := gomock.NewController(test) |
||||
defer ctrl.Finish() |
||||
|
||||
leader := p2p.Peer{IP: "1", Port: "2"} |
||||
_, leader.PubKey = utils.GenKey(leader.IP, leader.Port) |
||||
|
||||
validator1 := p2p.Peer{IP: "3", Port: "4", ValidatorID: 1} |
||||
_, validator1.PubKey = utils.GenKey(validator1.IP, validator1.Port) |
||||
validator2 := p2p.Peer{IP: "5", Port: "6", ValidatorID: 2} |
||||
_, validator2.PubKey = utils.GenKey(validator2.IP, validator2.Port) |
||||
validator3 := p2p.Peer{IP: "7", Port: "8", ValidatorID: 3} |
||||
_, validator3.PubKey = utils.GenKey(validator3.IP, validator3.Port) |
||||
|
||||
m := mock_host.NewMockHost(ctrl) |
||||
// Asserts that the first and only call to Bar() is passed 99.
|
||||
// Anything else will fail.
|
||||
m.EXPECT().GetSelfPeer().Return(leader) |
||||
m.EXPECT().SendMessage(gomock.Any(), gomock.Any()).Times(3) |
||||
|
||||
consensusLeader := New(m, "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusLeader.blockHash = [32]byte{} |
||||
|
||||
consensusValidator1 := New(p2pimpl.NewHost(validator1), "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusValidator1.blockHash = [32]byte{} |
||||
_, msg := consensusValidator1.constructCommitMessage(consensus_proto.MessageType_COMMIT) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
consensusValidator2 := New(p2pimpl.NewHost(validator2), "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusValidator2.blockHash = [32]byte{} |
||||
_, msg = consensusValidator2.constructCommitMessage(consensus_proto.MessageType_COMMIT) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
consensusValidator3 := New(p2pimpl.NewHost(validator3), "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusValidator3.blockHash = [32]byte{} |
||||
_, msg = consensusValidator3.constructCommitMessage(consensus_proto.MessageType_COMMIT) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
assert.Equal(test, ChallengeDone, consensusLeader.state) |
||||
|
||||
time.Sleep(1 * time.Second) |
||||
} |
||||
|
||||
func TestProcessMessageLeaderResponse(test *testing.T) { |
||||
ctrl := gomock.NewController(test) |
||||
defer ctrl.Finish() |
||||
|
||||
leader := p2p.Peer{IP: "1", Port: "2"} |
||||
_, leader.PubKey = utils.GenKey(leader.IP, leader.Port) |
||||
|
||||
validator1 := p2p.Peer{IP: "3", Port: "4", ValidatorID: 1} |
||||
_, validator1.PubKey = utils.GenKey(validator1.IP, validator1.Port) |
||||
validator2 := p2p.Peer{IP: "5", Port: "6", ValidatorID: 2} |
||||
_, validator2.PubKey = utils.GenKey(validator2.IP, validator2.Port) |
||||
validator3 := p2p.Peer{IP: "7", Port: "8", ValidatorID: 3} |
||||
_, validator3.PubKey = utils.GenKey(validator3.IP, validator3.Port) |
||||
|
||||
m := mock_host.NewMockHost(ctrl) |
||||
// Asserts that the first and only call to Bar() is passed 99.
|
||||
// Anything else will fail.
|
||||
m.EXPECT().GetSelfPeer().Return(leader) |
||||
m.EXPECT().SendMessage(gomock.Any(), gomock.Any()).Times(6) |
||||
|
||||
consensusLeader := New(m, "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusLeader.blockHash = [32]byte{} |
||||
|
||||
consensusValidator1 := New(p2pimpl.NewHost(validator1), "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusValidator1.blockHash = [32]byte{} |
||||
_, msg := consensusValidator1.constructCommitMessage(consensus_proto.MessageType_COMMIT) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
consensusValidator2 := New(p2pimpl.NewHost(validator2), "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusValidator2.blockHash = [32]byte{} |
||||
_, msg = consensusValidator2.constructCommitMessage(consensus_proto.MessageType_COMMIT) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
consensusValidator3 := New(p2pimpl.NewHost(validator3), "0", []p2p.Peer{validator1, validator2, validator3}, leader) |
||||
consensusValidator3.blockHash = [32]byte{} |
||||
_, msg = consensusValidator3.constructCommitMessage(consensus_proto.MessageType_COMMIT) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
msg = consensusValidator1.constructResponseMessage(consensus_proto.MessageType_RESPONSE, crypto.Ed25519Curve.Scalar().One()) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
msg = consensusValidator2.constructResponseMessage(consensus_proto.MessageType_RESPONSE, crypto.Ed25519Curve.Scalar().One()) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
msg = consensusValidator3.constructResponseMessage(consensus_proto.MessageType_RESPONSE, crypto.Ed25519Curve.Scalar().One()) |
||||
consensusLeader.ProcessMessageLeader(msg[1:]) |
||||
|
||||
assert.Equal(test, CollectiveSigDone, consensusLeader.state) |
||||
|
||||
time.Sleep(1 * time.Second) |
||||
} |
@ -0,0 +1,80 @@ |
||||
// Code generated by MockGen. DO NOT EDIT.
|
||||
// Source: ./p2p/host/host.go
|
||||
|
||||
// Package mock_host is a generated GoMock package.
|
||||
package mock |
||||
|
||||
import ( |
||||
gomock "github.com/golang/mock/gomock" |
||||
p2p "github.com/harmony-one/harmony/p2p" |
||||
reflect "reflect" |
||||
) |
||||
|
||||
// MockHost is a mock of Host interface
|
||||
type MockHost struct { |
||||
ctrl *gomock.Controller |
||||
recorder *MockHostMockRecorder |
||||
} |
||||
|
||||
// MockHostMockRecorder is the mock recorder for MockHost
|
||||
type MockHostMockRecorder struct { |
||||
mock *MockHost |
||||
} |
||||
|
||||
// NewMockHost creates a new mock instance
|
||||
func NewMockHost(ctrl *gomock.Controller) *MockHost { |
||||
mock := &MockHost{ctrl: ctrl} |
||||
mock.recorder = &MockHostMockRecorder{mock} |
||||
return mock |
||||
} |
||||
|
||||
// EXPECT returns an object that allows the caller to indicate expected use
|
||||
func (m *MockHost) EXPECT() *MockHostMockRecorder { |
||||
return m.recorder |
||||
} |
||||
|
||||
// GetSelfPeer mocks base method
|
||||
func (m *MockHost) GetSelfPeer() p2p.Peer { |
||||
ret := m.ctrl.Call(m, "GetSelfPeer") |
||||
ret0, _ := ret[0].(p2p.Peer) |
||||
return ret0 |
||||
} |
||||
|
||||
// GetSelfPeer indicates an expected call of GetSelfPeer
|
||||
func (mr *MockHostMockRecorder) GetSelfPeer() *gomock.Call { |
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSelfPeer", reflect.TypeOf((*MockHost)(nil).GetSelfPeer)) |
||||
} |
||||
|
||||
// SendMessage mocks base method
|
||||
func (m *MockHost) SendMessage(arg0 p2p.Peer, arg1 []byte) error { |
||||
ret := m.ctrl.Call(m, "SendMessage", arg0, arg1) |
||||
ret0, _ := ret[0].(error) |
||||
return ret0 |
||||
} |
||||
|
||||
// SendMessage indicates an expected call of SendMessage
|
||||
func (mr *MockHostMockRecorder) SendMessage(arg0, arg1 interface{}) *gomock.Call { |
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessage", reflect.TypeOf((*MockHost)(nil).SendMessage), arg0, arg1) |
||||
} |
||||
|
||||
// BindHandlerAndServe mocks base method
|
||||
func (m *MockHost) BindHandlerAndServe(handler p2p.StreamHandler) { |
||||
m.ctrl.Call(m, "BindHandlerAndServe", handler) |
||||
} |
||||
|
||||
// BindHandlerAndServe indicates an expected call of BindHandlerAndServe
|
||||
func (mr *MockHostMockRecorder) BindHandlerAndServe(handler interface{}) *gomock.Call { |
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BindHandlerAndServe", reflect.TypeOf((*MockHost)(nil).BindHandlerAndServe), handler) |
||||
} |
||||
|
||||
// Close mocks base method
|
||||
func (m *MockHost) Close() error { |
||||
ret := m.ctrl.Call(m, "Close") |
||||
ret0, _ := ret[0].(error) |
||||
return ret0 |
||||
} |
||||
|
||||
// Close indicates an expected call of Close
|
||||
func (mr *MockHostMockRecorder) Close() *gomock.Call { |
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockHost)(nil).Close)) |
||||
} |
Loading…
Reference in new issue