aboutsummaryrefslogtreecommitdiffstats
path: root/core/test/interface.go
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2018-09-10 16:11:10 +0800
committerGitHub <noreply@github.com>2018-09-10 16:11:10 +0800
commit2439f49063d8498eadf26d4fa1220c5eac8412a8 (patch)
tree1142ad5a5e4393315f956324191ddb7e03b804c3 /core/test/interface.go
parent2b5c97e53e9734dda971456ff483bf2b34f0f021 (diff)
downloaddexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.tar
dexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.tar.gz
dexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.tar.bz2
dexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.tar.lz
dexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.tar.xz
dexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.tar.zst
dexon-consensus-2439f49063d8498eadf26d4fa1220c5eac8412a8.zip
test: add transport layer (#97)
The purpose of transport layer is to abstract the way to send messages and setup connections between peers in a p2p network. The peer discovery is simulated by a hosted server: every peer sends its address to a known server. Once collecting enough peers, respond the whole peers lists to all peers. Changes: - Add test.Trasnport interface - Add test.Transport implementation by golang channel. - Add test.transport implementation by TCP connection. - Move LatencyModel to core/test package - Add Marshaller interface
Diffstat (limited to 'core/test/interface.go')
-rw-r--r--core/test/interface.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/core/test/interface.go b/core/test/interface.go
index 0e963fd..9932262 100644
--- a/core/test/interface.go
+++ b/core/test/interface.go
@@ -46,3 +46,67 @@ type EventHandler interface {
// Handle the event belongs to this handler, and return derivated events.
Handle(*Event) []*Event
}
+
+// TransportPeerType defines the type of peer, either 'peer' or 'server'.
+type TransportPeerType string
+
+const (
+ // TransportPeerServer is the type of peer server.
+ TransportPeerServer TransportPeerType = "server"
+ // TransportPeer is the type of peer.
+ TransportPeer TransportPeerType = "peer"
+)
+
+// TransportEnvelope define the payload format of a message when transporting.
+type TransportEnvelope struct {
+ // PeerType defines the type of source peer, could be either "peer" or
+ // "server".
+ PeerType TransportPeerType
+ // From defines the validatorID of the source peer.
+ From types.ValidatorID
+ // Msg is the actual payload of this message.
+ Msg interface{}
+}
+
+// TransportServer defines the peer server in the network.
+type TransportServer interface {
+ Transport
+ // Host the server, consider it's a setup procedure. The
+ // returned channel could be used after 'WaitForPeers' returns.
+ Host() (chan *TransportEnvelope, error)
+ // WaitForPeers waits for all peers to join the network.
+ WaitForPeers(numPeers int) error
+}
+
+// TransportClient defines those peers in the network.
+type TransportClient interface {
+ Transport
+ // Report a message to the peer server.
+ Report(msg interface{}) error
+ // Join the network, should block until joined.
+ Join(serverEndpoint interface{}) (<-chan *TransportEnvelope, error)
+}
+
+// Transport defines the interface for basic transportation capabilities.
+type Transport interface {
+ // Broadcast a message to all peers in network.
+ Broadcast(msg interface{}) error
+ // Send one message to a peer.
+ Send(endpoint types.ValidatorID, msg interface{}) error
+ // Close would cleanup allocated resources.
+ Close() error
+
+ // Peers return IDs of all connected validators in p2p favor.
+ // This method should be accessed after ether 'Join' or 'WaitForPeers'
+ // returned.
+ Peers() map[types.ValidatorID]struct{}
+}
+
+// Marshaller defines an interface to convert between interface{} and []byte.
+type Marshaller interface {
+ // Unmarshal converts a []byte back to interface{} based on the type
+ // of message.
+ Unmarshal(msgType string, payload []byte) (msg interface{}, err error)
+ // Marshal converts a message to byte string
+ Marshal(msg interface{}) (msgType string, payload []byte, err error)
+}