blob: 5b9b4cf6286aacf32459838cb938c0c1d45d570b [file] [log] [blame]
package ipc
import (
"reflect"
"strings"
"testing"
"veyron.io/veyron/veyron2/ipc/version"
"veyron.io/veyron/veyron2/naming"
"veyron.io/veyron/veyron2/vlog"
)
func TestIncompatible(t *testing.T) {
servers := []string{}
_, err := filterAndOrderServers(servers, []string{"tcp"})
if err == nil || err.Error() != "failed to find any compatible servers: " {
t.Errorf("expected a different error: %v", err)
}
for _, a := range []string{"127.0.0.1", "127.0.0.2"} {
addr := naming.FormatEndpoint("tcp", a, version.IPCVersionRange{100, 200})
name := naming.JoinAddressName(addr, "")
servers = append(servers, name)
}
_, err = filterAndOrderServers(servers, []string{"tcp"})
if err == nil || (!strings.HasPrefix(err.Error(), "failed to find any compatible servers:") && !strings.Contains(err.Error(), "No compatible IPC versions available")) {
vlog.Infof("A: %t . %t", strings.HasPrefix(err.Error(), "failed to find any compatible servers:"), !strings.Contains(err.Error(), "No compatible IPC versions available"))
t.Errorf("expected a different error to: %v", err)
}
for _, a := range []string{"127.0.0.3", "127.0.0.4"} {
name := naming.JoinAddressName(naming.FormatEndpoint("tcp", a), "")
servers = append(servers, name)
}
_, err = filterAndOrderServers(servers, []string{"foobar"})
if err == nil || !strings.HasPrefix(err.Error(), "failed to find any servers compatible with [foobar] ") {
t.Errorf("expected a different error to: %v", err)
}
}
func TestOrderingByProtocol(t *testing.T) {
servers := []string{}
for _, a := range []string{"127.0.0.3", "127.0.0.4"} {
name := naming.JoinAddressName(naming.FormatEndpoint("tcp", a), "")
servers = append(servers, name)
}
for _, a := range []string{"127.0.0.1", "127.0.0.2"} {
name := naming.JoinAddressName(naming.FormatEndpoint("tcp4", a), "")
servers = append(servers, name)
}
for _, a := range []string{"127.0.0.10", "127.0.0.11"} {
name := naming.JoinAddressName(naming.FormatEndpoint("foobar", a), "")
servers = append(servers, name)
}
got, err := filterAndOrderServers(servers, []string{"foobar", "tcp"})
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
// Just foobar and tcp
want := []string{
"/@2@foobar@127.0.0.10@00000000000000000000000000000000@@@@",
"/@2@foobar@127.0.0.11@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.3@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.4@00000000000000000000000000000000@@@@",
}
if !reflect.DeepEqual(got, want) {
t.Errorf("got: %v, want %v", got, want)
}
// Everything, since we didn't specify a protocol
got, err = filterAndOrderServers(servers, []string{})
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
// The order will be the default preferred order for protocols, the
// original ordering within each protocol, with protocols that
// are not in the default ordering list at the end.
want = []string{
"/@2@tcp4@127.0.0.1@00000000000000000000000000000000@@@@",
"/@2@tcp4@127.0.0.2@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.3@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.4@00000000000000000000000000000000@@@@",
"/@2@foobar@127.0.0.10@00000000000000000000000000000000@@@@",
"/@2@foobar@127.0.0.11@00000000000000000000000000000000@@@@",
}
if !reflect.DeepEqual(got, want) {
t.Errorf("got: %v, want %v", got, want)
}
// Ask for all protocols, with no ordering, except for locality
servers = []string{}
for _, a := range []string{"74.125.69.139", "127.0.0.3", "127.0.0.1", "192.168.1.10", "74.125.142.83"} {
name := naming.JoinAddressName(naming.FormatEndpoint("tcp", a), "")
servers = append(servers, name)
}
for _, a := range []string{"127.0.0.10", "127.0.0.11"} {
name := naming.JoinAddressName(naming.FormatEndpoint("foobar", a), "")
servers = append(servers, name)
}
// Everything, since we didn't specify a protocol
got, err = filterAndOrderServers(servers, []string{})
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
want = []string{
"/@2@tcp@127.0.0.3@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.1@00000000000000000000000000000000@@@@",
"/@2@tcp@74.125.69.139@00000000000000000000000000000000@@@@",
"/@2@tcp@192.168.1.10@00000000000000000000000000000000@@@@",
"/@2@tcp@74.125.142.83@00000000000000000000000000000000@@@@",
"/@2@foobar@127.0.0.10@00000000000000000000000000000000@@@@",
"/@2@foobar@127.0.0.11@00000000000000000000000000000000@@@@",
}
if !reflect.DeepEqual(got, want) {
t.Errorf("got: %v, want %v", got, want)
}
}
func TestOrderByNetwork(t *testing.T) {
servers := []string{}
for _, a := range []string{"74.125.69.139", "127.0.0.3", "127.0.0.1", "192.168.1.10", "74.125.142.83"} {
name := naming.JoinAddressName(naming.FormatEndpoint("tcp", a), "")
servers = append(servers, name)
}
got, err := filterAndOrderServers(servers, []string{"tcp"})
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
want := []string{
"/@2@tcp@127.0.0.3@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.1@00000000000000000000000000000000@@@@",
"/@2@tcp@74.125.69.139@00000000000000000000000000000000@@@@",
"/@2@tcp@192.168.1.10@00000000000000000000000000000000@@@@",
"/@2@tcp@74.125.142.83@00000000000000000000000000000000@@@@",
}
if !reflect.DeepEqual(got, want) {
t.Errorf("got: %v, want %v", got, want)
}
for _, a := range []string{"74.125.69.139", "127.0.0.3:123", "127.0.0.1", "192.168.1.10", "74.125.142.83"} {
name := naming.JoinAddressName(naming.FormatEndpoint("ws", a), "")
servers = append(servers, name)
}
got, err = filterAndOrderServers(servers, []string{"ws", "tcp"})
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
want = []string{
"/@2@ws@127.0.0.3:123@00000000000000000000000000000000@@@@",
"/@2@ws@127.0.0.1@00000000000000000000000000000000@@@@",
"/@2@ws@74.125.69.139@00000000000000000000000000000000@@@@",
"/@2@ws@192.168.1.10@00000000000000000000000000000000@@@@",
"/@2@ws@74.125.142.83@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.3@00000000000000000000000000000000@@@@",
"/@2@tcp@127.0.0.1@00000000000000000000000000000000@@@@",
"/@2@tcp@74.125.69.139@00000000000000000000000000000000@@@@",
"/@2@tcp@192.168.1.10@00000000000000000000000000000000@@@@",
"/@2@tcp@74.125.142.83@00000000000000000000000000000000@@@@",
}
if !reflect.DeepEqual(got, want) {
t.Errorf("got: %v, want %v", got, want)
}
}