func TestBasicRegisterAndServiceSet(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "basicTest" assert(client.RegisterWithAttributes(serviceName, ":1111", map[string]string{"foo": "bar"}), t) assert(client.Register(serviceName, ":2222"), t) set, err := client.NewServiceSet(serviceName) assert(err, t) waitUpdates(t, set, true, 2)() if len(set.Services()) < 2 || len(set.Addrs()) < 2 { t.Fatal("Registered services not online") } wait := waitUpdates(t, set, false, 1) assert(client.Unregister(serviceName, ":2222"), t) wait() if len(set.Services()) != 1 || len(set.Addrs()) != 1 { t.Fatal("Only 1 registered service should be left") } if set.Services()[0].Attrs["foo"] != "bar" { t.Fatal("Attribute not set on service as 'bar'") } assert(set.Close(), t) }
func TestSelecting(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "selectTest" set, err := client.NewServiceSet(serviceName) assert(err, t) assert(client.Register(serviceName, ":1111"), t) assert(client.RegisterWithAttributes(serviceName, ":2222", map[string]string{"foo": "qux", "id": "2"}), t) assert(client.RegisterWithAttributes(serviceName, ":3333", map[string]string{"foo": "qux", "id": "3"}), t) waitUpdates(t, set, true, 3)() if s := set.Select(map[string]string{"id": "3"}); len(s) != 1 { t.Fatalf("Expected one service, got: %#v", s) } assert(set.Close(), t) }
func TestNewAttributes(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "attributeTest" set, err := client.NewServiceSet(serviceName) assert(err, t) assert(client.RegisterWithAttributes(serviceName, ":1111", map[string]string{"foo": "bar"}), t) waitUpdates(t, set, true, 1)() wait := waitUpdates(t, set, false, 1) assert(client.RegisterWithAttributes(serviceName, ":1111", map[string]string{"foo": "baz"}), t) wait() if s := set.Services()[0]; s.Attrs["foo"] != "baz" { t.Fatalf(`Expected attribute set on re-registered service to be "baz", not %q`, s.Attrs["foo"]) } assert(set.Close(), t) }
func TestFiltering(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "filterTest" set, err := client.NewServiceSet(serviceName) assert(err, t) watchSet, err := client.NewServiceSet(serviceName) assert(err, t) assert(client.Register(serviceName, ":1111"), t) assert(client.RegisterWithAttributes(serviceName, ":2222", map[string]string{"foo": "qux", "id": "2"}), t) set.Filter(map[string]string{"foo": "qux"}) waitUpdates(t, watchSet, true, 2)() if len(set.Services()) > 1 { t.Fatal("Filter not limiting online services in set") } assert(client.RegisterWithAttributes(serviceName, ":3333", map[string]string{"foo": "qux", "id": "3"}), t) waitUpdates(t, set, true, 2)() if s := set.Services(); len(s) < 2 { t.Fatalf("Filter not letting new matching services in set: %#v", s[0]) } assert(client.RegisterWithAttributes(serviceName, ":4444", map[string]string{"foo": "baz"}), t) waitUpdates(t, watchSet, true, 4)() if len(set.Services()) > 2 { t.Fatal("Filter not limiting new unmatching services from set") } assert(set.Close(), t) assert(watchSet.Close(), t) }