Commit cac82c0d authored by Petar Radovic's avatar Petar Radovic

make handshake tests more correct

parent ce32d390
...@@ -9,19 +9,20 @@ import ( ...@@ -9,19 +9,20 @@ import (
) )
type StreamMock struct { type StreamMock struct {
Buffer bytes.Buffer ReadBuffer *bytes.Buffer
WriteBuffer *bytes.Buffer
} }
func (s *StreamMock) Read(p []byte) (n int, err error) { func (s *StreamMock) Read(p []byte) (n int, err error) {
return s.Buffer.Read(p) return s.ReadBuffer.Read(p)
} }
func (s *StreamMock) Write(p []byte) (n int, err error) { func (s *StreamMock) Write(p []byte) (n int, err error) {
return s.Buffer.Write(p) return s.WriteBuffer.Write(p)
} }
func (s *StreamMock) Close() error { func (s *StreamMock) Close() error {
panic("stream.Close() should not be called") return nil
} }
func TestHandshake(t *testing.T) { func TestHandshake(t *testing.T) {
...@@ -34,44 +35,85 @@ func TestHandshake(t *testing.T) { ...@@ -34,44 +35,85 @@ func TestHandshake(t *testing.T) {
handshakeService := New(info.Address, info.NetworkID, logger) handshakeService := New(info.Address, info.NetworkID, logger)
t.Run("OK", func(t *testing.T) { t.Run("OK", func(t *testing.T) {
stream := &StreamMock{} expectedInfo := Info{
res, err := handshakeService.Handshake(stream) Address: "node2",
NetworkID: 1,
Light: false,
}
var buffer1 bytes.Buffer
var buffer2 bytes.Buffer
stream1 := &StreamMock{ReadBuffer: &buffer1, WriteBuffer: &buffer2}
stream2 := &StreamMock{ReadBuffer: &buffer2, WriteBuffer: &buffer1}
w, _ := protobuf.NewWriterAndReader(stream2)
if err := w.WriteMsg(&ShakeHand{
Address: expectedInfo.Address,
NetworkID: expectedInfo.NetworkID,
Light: expectedInfo.Light,
}); err != nil {
t.Fatal(err)
}
res, err := handshakeService.Handshake(stream1)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
if *res != info { if *res != expectedInfo {
t.Fatalf("got %+v, expected %+v", res, info) t.Fatalf("got %+v, expected %+v", res, info)
} }
}) })
} }
func TestHandle(t *testing.T) { func TestHandle(t *testing.T) {
nodeInfo := Info{
Address: "node1",
NetworkID: 0,
Light: false,
}
logger := logging.New(ioutil.Discard) logger := logging.New(ioutil.Discard)
handshakeService := New("node1", 0, logger) handshakeService := New(nodeInfo.Address, nodeInfo.NetworkID, logger)
t.Run("OK", func(t *testing.T) { t.Run("OK", func(t *testing.T) {
stream := &StreamMock{} node2Info := Info{
w, _ := protobuf.NewWriterAndReader(stream)
info := Info{
Address: "node2", Address: "node2",
NetworkID: 1, NetworkID: 1,
Light: false, Light: false,
} }
_ = w.WriteMsg(&ShakeHand{ var buffer1 bytes.Buffer
Address: info.Address, var buffer2 bytes.Buffer
NetworkID: info.NetworkID, stream1 := &StreamMock{ReadBuffer: &buffer1, WriteBuffer: &buffer2}
Light: info.Light, stream2 := &StreamMock{ReadBuffer: &buffer2, WriteBuffer: &buffer1}
})
w, _ := protobuf.NewWriterAndReader(stream2)
if err := w.WriteMsg(&ShakeHand{
Address: node2Info.Address,
NetworkID: node2Info.NetworkID,
Light: node2Info.Light,
}); err != nil {
t.Fatal(err)
}
res, err := handshakeService.Handshake(stream) res, err := handshakeService.Handle(stream1)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
if *res != info { if *res != node2Info {
t.Fatalf("got %+v, expected %+v", res, info) t.Fatalf("got %+v, expected %+v", res, node2Info)
}
_, r := protobuf.NewWriterAndReader(stream2)
var got ShakeHand
if err := r.ReadMsg(&got); err != nil {
t.Fatal(err)
}
if nodeInfo != Info(got) {
t.Fatalf("got %+v, expected %+v", got, node2Info)
} }
}) })
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment