parent
2ef8e00026
commit
31e4e43d41
@ -0,0 +1,67 @@ |
||||
package bcconn |
||||
|
||||
import ( |
||||
"bytes" |
||||
"encoding/gob" |
||||
|
||||
"github.com/harmony-one/harmony/log" |
||||
"github.com/harmony-one/harmony/p2p" |
||||
) |
||||
|
||||
type NodeInfo struct { //TODO: to be merged with Leo's key.
|
||||
Self p2p.Peer |
||||
PubK []byte |
||||
} |
||||
type ResponseRandomNumber struct { |
||||
NumberOfShards int |
||||
NumberOfNodesAdded int |
||||
Leaders []*NodeInfo |
||||
} |
||||
|
||||
//SerializeNodeInfo
|
||||
func SerializeNodeInfo(nodeinfo *NodeInfo) []byte { |
||||
var result bytes.Buffer |
||||
encoder := gob.NewEncoder(&result) |
||||
err := encoder.Encode(nodeinfo) |
||||
if err != nil { |
||||
log.Error("Could not serialize node info", err) |
||||
} |
||||
return result.Bytes() |
||||
} |
||||
|
||||
// DeserializeNodeInfo deserializes the node
|
||||
func DeserializeNodeInfo(d []byte) *NodeInfo { |
||||
var wn NodeInfo |
||||
r := bytes.NewBuffer(d) |
||||
decoder := gob.NewDecoder(r) |
||||
err := decoder.Decode(&wn) |
||||
if err != nil { |
||||
log.Error("Could not de-serialize node info", err) |
||||
} |
||||
return &wn |
||||
} |
||||
|
||||
//SerializeRandomInfo
|
||||
func SerializeRandomInfo(response ResponseRandomNumber) []byte { |
||||
//Needs to escape the serialization of unexported fields
|
||||
var result bytes.Buffer |
||||
encoder := gob.NewEncoder(&result) |
||||
err := encoder.Encode(response) |
||||
if err != nil { |
||||
log.Crit("Could not serialize randomn number information", "error", err) |
||||
} |
||||
|
||||
return result.Bytes() |
||||
} |
||||
|
||||
// DeserializeRandomInfo deserializes the node
|
||||
func DeserializeRandomInfo(d []byte) ResponseRandomNumber { |
||||
var wn ResponseRandomNumber |
||||
r := bytes.NewBuffer(d) |
||||
decoder := gob.NewDecoder(r) |
||||
err := decoder.Decode(&wn) |
||||
if err != nil { |
||||
log.Crit("Could not de-serialize random number information") |
||||
} |
||||
return wn |
||||
} |
@ -0,0 +1,66 @@ |
||||
package bcconn |
||||
|
||||
import ( |
||||
"fmt" |
||||
"reflect" |
||||
"testing" |
||||
|
||||
"github.com/harmony-one/harmony/p2p" |
||||
"github.com/harmony-one/harmony/utils" |
||||
) |
||||
|
||||
func TestSerializeDeserializeNodeInfo(t *testing.T) { |
||||
var ip, port string |
||||
ip = "127.0.0.1" |
||||
port = "8080" |
||||
self := p2p.Peer{IP: ip, Port: port} |
||||
_, pk := utils.GenKey(ip, port) |
||||
pkb, err := pk.MarshalBinary() |
||||
if err != nil { |
||||
fmt.Println("problem marshalling binary from public key") |
||||
} |
||||
nodeInfo := &NodeInfo{Self: self, PubK: pkb} |
||||
serializedNI := SerializeNodeInfo(nodeInfo) |
||||
deserializedNI := DeserializeNodeInfo(serializedNI) |
||||
if !reflect.DeepEqual(nodeInfo, deserializedNI) { |
||||
t.Fatalf("serialized and deserializing nodeinfo does not lead to origina nodeinfo") |
||||
} |
||||
|
||||
} |
||||
|
||||
func TestSerializeDeserializeRandomInfo(t *testing.T) { |
||||
var ip, port string |
||||
|
||||
ip = "127.0.0.1" |
||||
port = "8080" |
||||
self := p2p.Peer{IP: ip, Port: port} |
||||
_, pk := utils.GenKey(ip, port) |
||||
pkb, err := pk.MarshalBinary() |
||||
if err != nil { |
||||
fmt.Println("problem marshalling binary from public key") |
||||
} |
||||
nodeInfo1 := &NodeInfo{Self: self, PubK: pkb} |
||||
|
||||
ip = "127.0.0.1" |
||||
port = "9080" |
||||
self2 := p2p.Peer{IP: ip, Port: port} |
||||
_, pk2 := utils.GenKey(ip, port) |
||||
pkb2, err := pk2.MarshalBinary() |
||||
if err != nil { |
||||
fmt.Println("problem marshalling binary from public key") |
||||
} |
||||
nodeInfo2 := &NodeInfo{Self: self2, PubK: pkb2} |
||||
|
||||
leaders := make([]*NodeInfo, 2) |
||||
leaders[0] = nodeInfo1 |
||||
leaders[1] = nodeInfo2 |
||||
|
||||
rrn := ResponseRandomNumber{NumberOfShards: 5, NumberOfNodesAdded: 10, Leaders: leaders} |
||||
serializedrrn := SerializeRandomInfo(rrn) |
||||
deserializedrrn := DeserializeRandomInfo(serializedrrn) |
||||
fmt.Println(rrn) |
||||
fmt.Println(deserializedrrn) |
||||
if !reflect.DeepEqual(rrn, deserializedrrn) { |
||||
t.Fatalf("serializin g and deserializing random response does not lead to original randominfo") |
||||
} |
||||
} |
@ -0,0 +1,16 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"flag" |
||||
|
||||
"github.com/harmony-one/harmony/beaconchain" |
||||
) |
||||
|
||||
func main() { |
||||
numShards := flag.Int("numShards", 1, "number of shards of identity chain") |
||||
ip := flag.String("ip", "127.0.0.1", "ip on which beaconchain listens") |
||||
port := flag.String("port", "8081", "port on which beaconchain listens") |
||||
flag.Parse() |
||||
bc := beaconchain.New(*numShards, *ip, *port) |
||||
bc.StartServer() |
||||
} |
Loading…
Reference in new issue