Browse Source

host: use broadcast_address in ConnectAddress (#923)

If the rpc_address is set to 0.0.0.0 then we should use
broadcast_address if it is set.
Chris Bannister 8 years ago
parent
commit
da4a50306e
2 changed files with 35 additions and 3 deletions
  1. 4 3
      host_source.go
  2. 31 0
      host_source_test.go

+ 4 - 3
host_source.go

@@ -153,9 +153,10 @@ func (h *HostInfo) ConnectAddress() net.IP {
 		// Use 'rpc_address' if provided and it's not 0.0.0.0
 		if h.rpcAddress != nil && !h.rpcAddress.IsUnspecified() {
 			return h.rpcAddress
-		}
-		// Peer should always be set if this from 'system.peer'
-		if h.peer != nil {
+		} else if h.broadcastAddress != nil && !h.broadcastAddress.IsUnspecified() {
+			return h.broadcastAddress
+		} else if h.peer != nil {
+			// Peer should always be set if this from 'system.peer'
 			return h.peer
 		}
 	}

+ 31 - 0
host_source_test.go

@@ -104,3 +104,34 @@ func TestGetHostsWithFilter(t *testing.T) {
 		}
 	}
 }
+
+func TestHostInfo_ConnectAddress(t *testing.T) {
+	var localhost = net.IPv4(127, 0, 0, 1)
+	tests := []struct {
+		name          string
+		connectAddr   net.IP
+		rpcAddr       net.IP
+		broadcastAddr net.IP
+		peer          net.IP
+	}{
+		{name: "rpc_address", rpcAddr: localhost},
+		{name: "connect_address", connectAddr: localhost},
+		{name: "broadcast_address", broadcastAddr: localhost},
+		{name: "peer", peer: localhost},
+	}
+
+	for _, test := range tests {
+		t.Run(test.name, func(t *testing.T) {
+			host := &HostInfo{
+				connectAddress:   test.connectAddr,
+				rpcAddress:       test.rpcAddr,
+				broadcastAddress: test.broadcastAddr,
+				peer:             test.peer,
+			}
+
+			if addr := host.ConnectAddress(); !addr.Equal(localhost) {
+				t.Fatalf("expected ConnectAddress to be %s got %s", localhost, addr)
+			}
+		})
+	}
+}