From 4ae24be2876e6489c4984501b167c4117354dc61 Mon Sep 17 00:00:00 2001 From: Vladimir Mihailenco Date: Mon, 23 Jul 2018 12:01:13 +0300 Subject: [PATCH] Check cluster state before running the tests --- cluster_test.go | 36 +++++++++++++++++++++++++++++++++--- export_test.go | 4 ---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/cluster_test.go b/cluster_test.go index a64a0f6..e94a509 100644 --- a/cluster_test.go +++ b/cluster_test.go @@ -49,21 +49,51 @@ func (s *clusterScenario) addrs() []string { } func (s *clusterScenario) clusterClient(opt *redis.ClusterOptions) *redis.ClusterClient { + var errBadState = fmt.Errorf("cluster state is not consistent") + opt.Addrs = s.addrs() client := redis.NewClusterClient(opt) + err := eventually(func() error { - state, err := client.GetState() + if opt.ClusterSlots != nil { + return nil + } + + state, err := client.LoadState() if err != nil { return err } + if !state.IsConsistent() { - return fmt.Errorf("cluster state is not conistent") + return errBadState } + + if len(state.Masters) < 3 { + return errBadState + } + for _, master := range state.Masters { + s := master.Client.Info("replication").Val() + if !strings.Contains(s, "role:master") { + return errBadState + } + } + + if len(state.Slaves) < 3 { + return errBadState + } + for _, slave := range state.Slaves { + s := slave.Client.Info("replication").Val() + if !strings.Contains(s, "role:slave") { + return errBadState + } + } + return nil }, 30*time.Second) if err != nil { panic(err) } + return client } @@ -703,7 +733,7 @@ var _ = Describe("ClusterClient", func() { }) Expect(err).NotTo(HaveOccurred()) - state, err := client.GetState() + state, err := client.LoadState() Expect(err).NotTo(HaveOccurred()) Expect(state.IsConsistent()).To(BeTrue()) diff --git a/export_test.go b/export_test.go index 060df10..e9afda9 100644 --- a/export_test.go +++ b/export_test.go @@ -21,10 +21,6 @@ func (c *PubSub) ReceiveMessageTimeout(timeout time.Duration) (*Message, error) return c.receiveMessage(timeout) } -func (c *ClusterClient) GetState() (*clusterState, error) { - return c.state.Get() -} - func (c *ClusterClient) LoadState() (*clusterState, error) { return c.loadState() }