11 "github.com/go-kit/kit/endpoint"
12 "github.com/go-kit/kit/log"
13 "github.com/go-kit/kit/sd"
14 stdconsul "github.com/hashicorp/consul/api"
17 func TestIntegration(t *testing.T) {
18 consulAddr := os.Getenv("CONSUL_ADDR")
20 t.Fatal("CONSUL_ADDR is not set")
22 stdClient, err := stdconsul.NewClient(&stdconsul.Config{
28 client := NewClient(stdClient)
29 logger := log.NewLogfmtLogger(os.Stderr)
31 // Produce a fake service registration.
32 r := &stdconsul.AgentServiceRegistration{
34 Name: "my-service-name",
35 Tags: []string{"alpha", "beta"},
37 Address: "my-address",
38 EnableTagOverride: false,
42 // Build an Instancer on r.Name + r.Tags.
43 factory := func(instance string) (endpoint.Endpoint, io.Closer, error) {
44 t.Logf("factory invoked for %q", instance)
45 return endpoint.Nop, nil, nil
47 instancer := NewInstancer(
49 log.With(logger, "component", "instancer"),
54 endpointer := sd.NewEndpointer(
57 log.With(logger, "component", "endpointer"),
60 time.Sleep(time.Second)
62 // Before we publish, we should have no endpoints.
63 endpoints, err := endpointer.Endpoints()
67 if want, have := 0, len(endpoints); want != have {
68 t.Errorf("want %d, have %d", want, have)
71 // Build a registrar for r.
72 registrar := NewRegistrar(client, r, log.With(logger, "component", "registrar"))
74 defer registrar.Deregister()
76 time.Sleep(time.Second)
78 // Now we should have one active endpoints.
79 endpoints, err = endpointer.Endpoints()
83 if want, have := 1, len(endpoints); want != have {
84 t.Errorf("want %d, have %d", want, have)