// checkGossip fetches the gossip infoStore from each node and invokes the given // function. The test passes if the function returns 0 for every node, // retrying for up to the given duration. func checkGossip(t *testing.T, c cluster.Cluster, d time.Duration, f checkGossipFunc) { util.SucceedsWithin(t, d, func() error { select { case <-stopper: t.Fatalf("interrupted") return nil case <-time.After(1 * time.Second): } for i := 0; i < c.NumNodes(); i++ { var m map[string]interface{} if err := c.Get(i, "/_status/gossip/local", &m); err != nil { return err } infos := m["infos"].(map[string]interface{}) if err := f(infos); err != nil { return util.Errorf("node %d: %s", i, err) } } return nil }) }