package serf import ( "bytes" "net" "reflect" "testing" "github.com/hashicorp/go-msgpack/codec" ) func TestQueryFlags(t *testing.T) { if queryFlagAck != 1 { t.Fatalf("Bad: %v", queryFlagAck) } if queryFlagNoBroadcast != 2 { t.Fatalf("Bad: %v", queryFlagNoBroadcast) } } func TestEncodeMessage(t *testing.T) { in := &messageLeave{Node: "foo"} raw, err := encodeMessage(messageLeaveType, in) if err != nil { t.Fatalf("err: %v", err) } if raw[0] != byte(messageLeaveType) { t.Fatal("should have type header") } var out messageLeave if err := decodeMessage(raw[1:], &out); err != nil { t.Fatalf("err: %v", err) } if !reflect.DeepEqual(in, &out) { t.Fatalf("mis-match") } } func TestEncodeRelayMessage(t *testing.T) { in := &messageLeave{Node: "foo"} addr := net.UDPAddr{IP: net.IP{127, 0, 0, 1}, Port: 1234} raw, err := encodeRelayMessage(messageLeaveType, addr, "test", in) if err != nil { t.Fatalf("err: %v", err) } if raw[0] != byte(messageRelayType) { t.Fatal("should have type header") } var header relayHeader var handle codec.MsgpackHandle reader := bytes.NewReader(raw[1:]) decoder := codec.NewDecoder(reader, &handle) if err := decoder.Decode(&header); err != nil { t.Fatal(err) } if !reflect.DeepEqual(header.DestAddr, addr) { t.Fatalf("bad: %v, %v", header.DestAddr, addr) } messageType, err := reader.ReadByte() if err != nil { t.Fatal(err) } if messageType != byte(messageLeaveType) { t.Fatalf("bad: %v, %v", messageType, byte(messageLeaveType)) } var message messageLeave if err := decoder.Decode(&message); err != nil { t.Fatalf("err: %v", err) } if !reflect.DeepEqual(in, &message) { t.Fatalf("mis-match") } } func TestEncodeFilter(t *testing.T) { nodes := []string{"foo", "bar"} raw, err := encodeFilter(filterNodeType, nodes) if err != nil { t.Fatalf("err: %v", err) } if raw[0] != byte(filterNodeType) { t.Fatal("should have type header") } var out []string if err := decodeMessage(raw[1:], &out); err != nil { t.Fatalf("err: %v", err) } if !reflect.DeepEqual(nodes, out) { t.Fatalf("mis-match") } }