Jelajahi Sumber

Basic broker connect/close test, including framework for dummy server

Evan Huus 12 tahun lalu
induk
melakukan
37f9b5578e
1 mengubah file dengan 111 tambahan dan 1 penghapusan
  1. 111 1
      protocol/broker_test.go

+ 111 - 1
protocol/broker_test.go

@@ -1,6 +1,81 @@
 package protocol
 package protocol
 
 
-import "testing"
+import (
+	"encoding/binary"
+	"io"
+	"net"
+	"strconv"
+	"testing"
+)
+
+func fakeTCPServer(t *testing.T, responses [][]byte, done chan<- bool) (int32, error) {
+	ln, err := net.Listen("tcp", "localhost:0")
+	if err != nil {
+		return 0, err
+	}
+	_, portStr, err := net.SplitHostPort(ln.Addr().String())
+	if err != nil {
+		return 0, err
+	}
+	tmp, err := strconv.ParseInt(portStr, 10, 32)
+	if err != nil {
+		return 0, err
+	}
+	port := int32(tmp)
+	go func() {
+		conn, err := ln.Accept()
+		if err != nil {
+			t.Error(err)
+			conn.Close()
+			ln.Close()
+			done<- true
+			return
+		}
+		for _, response := range responses {
+			header := make([]byte, 4)
+			_, err := io.ReadFull(conn, header)
+			if err != nil {
+				t.Error(err)
+				conn.Close()
+				ln.Close()
+				done<- true
+				return
+			}
+			body := make([]byte, binary.BigEndian.Uint32(header))
+			_, err = io.ReadFull(conn, body)
+			if err != nil {
+				t.Error(err)
+				conn.Close()
+				ln.Close()
+				done<- true
+				return
+			}
+			_, err = conn.Write(response)
+			if err != nil {
+				t.Error(err)
+				conn.Close()
+				ln.Close()
+				done<- true
+				return
+			}
+		}
+		err = conn.Close()
+		if err != nil {
+			t.Error(err)
+			ln.Close()
+			done<- true
+			return
+		}
+		err = ln.Close()
+		if err != nil {
+			t.Error(err)
+			done<- true
+			return
+		}
+		done<- true
+	}()
+	return port, nil
+}
 
 
 func TestBrokerEquals(t *testing.T) {
 func TestBrokerEquals(t *testing.T) {
 	var b1, b2 *Broker
 	var b1, b2 *Broker
@@ -42,3 +117,38 @@ func TestBrokerEquals(t *testing.T) {
 		t.Error("Similar brokers did not compare equal.")
 		t.Error("Similar brokers did not compare equal.")
 	}
 	}
 }
 }
+
+func TestBrokerID(t *testing.T) {
+
+	broker := NewBroker("abc", 123)
+
+	if broker.ID() != -1 {
+		t.Error("New broker didn't have an ID of -1.")
+	}
+
+	broker.id = 34
+	if broker.ID() != 34 {
+		t.Error("Manually setting broker ID did not take effect.")
+	}
+}
+
+func TestBrokerConnectClose(t *testing.T) {
+	done := make(chan bool)
+	port, err := fakeTCPServer(t, [][]byte{}, done)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	broker := NewBroker("localhost", port)
+	err = broker.Connect()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	err = broker.Close()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	<-done
+}