func TestRegisterWithSetLeaderSelf(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "registerWithSetLeaderSelfTest" assert(client.Register(serviceName, ":1111"), t) set, err := client.RegisterWithSet(serviceName, ":2222", nil) assert(err, t) leader := make(chan *discoverd.Service, 2) go func() { leaders := set.Leaders() for { leader <- <-leaders } }() assert(client.Register(serviceName, ":3333"), t) if (<-leader).Addr != "127.0.0.1:1111" { t.Fatal("Incorrect leader") } assert(client.Unregister(serviceName, ":1111"), t) if (<-leader).Addr != set.SelfAddr() { t.Fatal("Incorrect leader", leader) } assert(set.Close(), t) }
func TestServiceAge(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "ageTest" checkOldest := func(addr string) { services, err := client.Services(serviceName, 1) assert(err, t) if services[0].Addr != "127.0.0.1"+addr { t.Fatal("Oldest service is not first in Services() slice") } } assert(client.Register(serviceName, ":1111"), t) checkOldest(":1111") assert(client.Register(serviceName, ":2222"), t) checkOldest(":1111") assert(client.Register(serviceName, ":3333"), t) checkOldest(":1111") assert(client.Register(serviceName, ":4444"), t) checkOldest(":1111") assert(client.Unregister(serviceName, ":1111"), t) checkOldest(":2222") }
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 main() { flag.Parse() name := flag.Arg(0) addr := flag.Arg(1) client, err := discoverd.NewClient() if err != nil { log.Fatal("Error making client:", err) } if err = client.Register(name, addr); err != nil { log.Fatal("Error registering:", err) } log.Printf("Registered %s at %s.\n", name, addr) exit := make(chan os.Signal, 1) signal.Notify(exit, os.Interrupt, syscall.SIGTERM) go func() { <-exit log.Println("Shutting down...") client.Unregister(name, addr) os.Exit(0) }() set, err := client.NewServiceSet(name) if err != nil { log.Fatal("Error getting ServiceSet:", err) } for range time.Tick(time.Second) { log.Println(strings.Join(set.Addrs(), ", ")) } }
func TestLeaderChannel(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "leadersTest" assert(client.Register(serviceName, ":1111"), t) set, err := client.NewServiceSet(serviceName) assert(err, t) leader := make(chan *discoverd.Service, 3) go func() { leaders := set.Leaders() for { leader <- <-leaders } }() if (<-leader).Addr != "127.0.0.1:1111" { t.Fatal("Incorrect leader") } assert(client.Unregister(serviceName, ":1111"), t) if (<-leader) != nil { t.Fatal("Incorrect leader") } assert(client.Register(serviceName, ":2222"), t) assert(client.Register(serviceName, ":3333"), t) if (<-leader).Addr != "127.0.0.1:2222" { t.Fatal("Incorrect leader", leader) } assert(client.Unregister(serviceName, ":2222"), t) if (<-leader).Addr != "127.0.0.1:3333" { t.Fatal("Incorrect leader") } assert(set.Close(), t) }
func TestRegisterAndStandby(t *testing.T) { client, cleanup := testutil.SetupDiscoverd(t) defer cleanup() serviceName := "registerAndStandbyTest" assert(client.Register(serviceName, ":1111"), t) standbyCh, err := client.RegisterAndStandby(serviceName, ":2222", nil) assert(err, t) assert(client.Register(serviceName, ":3333"), t) assert(client.Unregister(serviceName, ":3333"), t) assert(client.Unregister(serviceName, ":1111"), t) leader := <-standbyCh if leader.Addr != "127.0.0.1:2222" { t.Fatal("Incorrect leader", leader) } }