Merge branch 'master' of github.com:simple-rules/harmony-benchmark

pull/69/head
Rongjian Lan 6 years ago
commit 028512ad81
  1. 7
      node/node.go
  2. 4
      node/node_handler.go
  3. 20
      p2p/helper.go
  4. 53
      p2p/helper_test.go
  5. 2
      proto/node/node.go

@ -1,10 +1,11 @@
package node package node
import ( import (
"github.com/simple-rules/harmony-benchmark/crypto/pki"
"net" "net"
"sync" "sync"
"github.com/simple-rules/harmony-benchmark/crypto/pki"
"github.com/simple-rules/harmony-benchmark/blockchain" "github.com/simple-rules/harmony-benchmark/blockchain"
"github.com/simple-rules/harmony-benchmark/client" "github.com/simple-rules/harmony-benchmark/client"
"github.com/simple-rules/harmony-benchmark/consensus" "github.com/simple-rules/harmony-benchmark/consensus"
@ -67,11 +68,11 @@ func (node *Node) StartServer(port string) {
func (node *Node) listenOnPort(port string) { func (node *Node) listenOnPort(port string) {
listen, err := net.Listen("tcp4", ":"+port) listen, err := net.Listen("tcp4", ":"+port)
defer func() { defer func(listen net.Listener) {
if listen != nil { if listen != nil {
listen.Close() listen.Close()
} }
}() }(listen)
if err != nil { if err != nil {
node.log.Error("Socket listen port failed", "port", port, "err", err) node.log.Error("Socket listen port failed", "port", port, "err", err)
return return

@ -3,7 +3,6 @@ package node
import ( import (
"bytes" "bytes"
"encoding/gob" "encoding/gob"
"log"
"net" "net"
"os" "os"
"strconv" "strconv"
@ -82,6 +81,8 @@ func (node *Node) NodeHandler(conn net.Conn) {
node.Client.UpdateBlocks(*blocks) node.Client.UpdateBlocks(*blocks)
} }
} }
case proto_node.BLOCKCHAIN_SYNC:
node.transactionMessageHandler(msgPayload)
case proto_node.CLIENT: case proto_node.CLIENT:
clientMsgType := proto_node.ClientMessageType(msgPayload[0]) clientMsgType := proto_node.ClientMessageType(msgPayload[0])
switch clientMsgType { switch clientMsgType {
@ -155,7 +156,6 @@ func (node *Node) NodeHandler(conn net.Conn) {
func (node *Node) transactionMessageHandler(msgPayload []byte) { func (node *Node) transactionMessageHandler(msgPayload []byte) {
txMessageType := proto_node.TransactionMessageType(msgPayload[0]) txMessageType := proto_node.TransactionMessageType(msgPayload[0])
log.Println(txMessageType)
switch txMessageType { switch txMessageType {
case proto_node.SEND: case proto_node.SEND:
txDecoder := gob.NewDecoder(bytes.NewReader(msgPayload[1:])) // skip the SEND messge type txDecoder := gob.NewDecoder(bytes.NewReader(msgPayload[1:])) // skip the SEND messge type

@ -94,3 +94,23 @@ ILOOP:
} }
return contentBuf.Bytes(), nil return contentBuf.Bytes(), nil
} }
func CreateMessage(msgType byte, data []byte) []byte {
buffer := bytes.NewBuffer([]byte{})
buffer.WriteByte(msgType)
fourBytes := make([]byte, 4)
binary.BigEndian.PutUint32(fourBytes, uint32(len(data)))
buffer.Write(fourBytes)
buffer.Write(data)
return buffer.Bytes()
}
func SendMessageContent(conn net.Conn, data []byte) {
msgToSend := CreateMessage(byte(1), data)
w := bufio.NewWriter(conn)
w.Write(msgToSend)
w.Flush()
}

@ -0,0 +1,53 @@
package p2p
import (
"bufio"
"net"
"testing"
)
func setUpTestServer(times int, t *testing.T, conCreated chan bool) {
t.Parallel()
ln, _ := net.Listen("tcp", ":8081")
conCreated <- true
conn, _ := ln.Accept()
defer conn.Close()
var (
w = bufio.NewWriter(conn)
)
for times > 0 {
times--
data, err := ReadMessageContent(conn)
if err != nil {
t.Fatalf("error when ReadMessageContent %v", err)
}
data = CreateMessage(byte(1), data)
w.Write(data)
w.Flush()
}
}
func TestNewNewNode(t *testing.T) {
times := 100
conCreated := make(chan bool)
go setUpTestServer(times, t, conCreated)
<-conCreated
conn, _ := net.Dial("tcp", "127.0.0.1:8081")
for times > 0 {
times--
myMsg := "minhdoan"
SendMessageContent(conn, []byte(myMsg))
data, err := ReadMessageContent(conn)
if err != nil {
t.Error("got an error when trying to receive an expected message from server.")
}
if string(data) != myMsg {
t.Error("did not receive expected message")
}
}
conn.Close()
}

@ -3,6 +3,7 @@ package node
import ( import (
"bytes" "bytes"
"encoding/gob" "encoding/gob"
"github.com/simple-rules/harmony-benchmark/blockchain" "github.com/simple-rules/harmony-benchmark/blockchain"
"github.com/simple-rules/harmony-benchmark/p2p" "github.com/simple-rules/harmony-benchmark/p2p"
"github.com/simple-rules/harmony-benchmark/proto" "github.com/simple-rules/harmony-benchmark/proto"
@ -16,6 +17,7 @@ const (
BLOCK BLOCK
CLIENT CLIENT
CONTROL CONTROL
BLOCKCHAIN_SYNC
// TODO: add more types // TODO: add more types
) )

Loading…
Cancel
Save