func TestCatalog_Node(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() catalog := c.Catalog() name, _ := c.Agent().NodeName() testutil.WaitForResult(func() (bool, error) { info, meta, err := catalog.Node(name, nil) if err != nil { return false, err } if meta.LastIndex == 0 { return false, fmt.Errorf("Bad: %v", meta) } if len(info.Services) == 0 { return false, fmt.Errorf("Bad: %v", info) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }
func TestCatalog_Service(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() catalog := c.Catalog() testutil.WaitForResult(func() (bool, error) { services, meta, err := catalog.Service("consul", "", nil) if err != nil { return false, err } if meta.LastIndex == 0 { return false, fmt.Errorf("Bad: %v", meta) } if len(services) == 0 { return false, fmt.Errorf("Bad: %v", services) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }
func TestHealth_Node(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() agent := c.Agent() health := c.Health() info, err := agent.Self() if err != nil { t.Fatalf("err: %v", err) } name := info["Config"]["NodeName"].(string) testutil.WaitForResult(func() (bool, error) { checks, meta, err := health.Node(name, nil) if err != nil { return false, err } if meta.LastIndex == 0 { return false, fmt.Errorf("bad: %v", meta) } if len(checks) == 0 { return false, fmt.Errorf("bad: %v", checks) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }
func TestEvent_FireList(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() event := c.Event() params := &UserEvent{Name: "foo"} id, meta, err := event.Fire(params, nil) if err != nil { t.Fatalf("err: %v", err) } if meta.RequestTime == 0 { t.Fatalf("bad: %v", meta) } if id == "" { t.Fatalf("invalid: %v", id) } var events []*UserEvent var qm *QueryMeta testutil.WaitForResult(func() (bool, error) { events, qm, err = event.List("", nil) if err != nil { t.Fatalf("err: %v", err) } return len(events) > 0, err }, func(err error) { t.Fatalf("err: %#v", err) }) if events[len(events)-1].ID != id { t.Fatalf("bad: %#v", events) } if qm.LastIndex != event.IDToIndex(id) { t.Fatalf("Bad: %#v", qm) } }
func TestCatalog_Datacenters(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() catalog := c.Catalog() testutil.WaitForResult(func() (bool, error) { datacenters, err := catalog.Datacenters() if err != nil { return false, err } if len(datacenters) == 0 { return false, fmt.Errorf("Bad: %v", datacenters) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }
func TestHealth_State(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() health := c.Health() testutil.WaitForResult(func() (bool, error) { checks, meta, err := health.State("any", nil) if err != nil { return false, err } if meta.LastIndex == 0 { return false, fmt.Errorf("bad: %v", meta) } if len(checks) == 0 { return false, fmt.Errorf("Bad: %v", checks) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }
func TestHealth_Checks(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() agent := c.Agent() health := c.Health() // Make a service with a check reg := &AgentServiceRegistration{ Name: "foo", Check: &AgentServiceCheck{ TTL: "15s", }, } if err := agent.ServiceRegister(reg); err != nil { t.Fatalf("err: %v", err) } defer agent.ServiceDeregister("foo") testutil.WaitForResult(func() (bool, error) { checks, meta, err := health.Checks("foo", nil) if err != nil { return false, err } if meta.LastIndex == 0 { return false, fmt.Errorf("bad: %v", meta) } if len(checks) == 0 { return false, fmt.Errorf("Bad: %v", checks) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }
func TestCatalog_Registration(t *testing.T) { t.Parallel() c, s := makeClient(t) defer s.Stop() catalog := c.Catalog() service := &AgentService{ ID: "redis1", Service: "redis", Tags: []string{"master", "v1"}, Port: 8000, } check := &AgentCheck{ Node: "foobar", CheckID: "service:redis1", Name: "Redis health check", Notes: "Script based health check", Status: "passing", ServiceID: "redis1", } reg := &CatalogRegistration{ Datacenter: "dc1", Node: "foobar", Address: "192.168.10.10", Service: service, Check: check, } testutil.WaitForResult(func() (bool, error) { if _, err := catalog.Register(reg, nil); err != nil { return false, err } node, _, err := catalog.Node("foobar", nil) if err != nil { return false, err } if _, ok := node.Services["redis1"]; !ok { return false, fmt.Errorf("missing service: redis1") } health, _, err := c.Health().Node("foobar", nil) if err != nil { return false, err } if health[0].CheckID != "service:redis1" { return false, fmt.Errorf("missing checkid service:redis1") } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) // Test catalog deregistration of the previously registered service dereg := &CatalogDeregistration{ Datacenter: "dc1", Node: "foobar", Address: "192.168.10.10", ServiceID: "redis1", } if _, err := catalog.Deregister(dereg, nil); err != nil { t.Fatalf("err: %v", err) } testutil.WaitForResult(func() (bool, error) { node, _, err := catalog.Node("foobar", nil) if err != nil { return false, err } if _, ok := node.Services["redis1"]; ok { return false, fmt.Errorf("ServiceID:redis1 is not deregistered") } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) // Test deregistration of the previously registered check dereg = &CatalogDeregistration{ Datacenter: "dc1", Node: "foobar", Address: "192.168.10.10", CheckID: "service:redis1", } if _, err := catalog.Deregister(dereg, nil); err != nil { t.Fatalf("err: %v", err) } testutil.WaitForResult(func() (bool, error) { health, _, err := c.Health().Node("foobar", nil) if err != nil { return false, err } if len(health) != 0 { return false, fmt.Errorf("CheckID:service:redis1 is not deregistered") } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) // Test node deregistration of the previously registered node dereg = &CatalogDeregistration{ Datacenter: "dc1", Node: "foobar", Address: "192.168.10.10", } if _, err := catalog.Deregister(dereg, nil); err != nil { t.Fatalf("err: %v", err) } testutil.WaitForResult(func() (bool, error) { node, _, err := catalog.Node("foobar", nil) if err != nil { return false, err } if node != nil { return false, fmt.Errorf("node is not deregistered: %v", node) } return true, nil }, func(err error) { t.Fatalf("err: %s", err) }) }