diff --git a/cluster_test.go b/cluster_test.go index a585ad7..fe004c9 100644 --- a/cluster_test.go +++ b/cluster_test.go @@ -230,9 +230,53 @@ var _ = Describe("Cluster", func() { }) It("should CLUSTER KEYSLOT", func() { - res, err := cluster.primary().ClusterKeySlot("somekey").Result() + hashSlot, err := cluster.primary().ClusterKeySlot("somekey").Result() Expect(err).NotTo(HaveOccurred()) - Expect(res).To(Equal(int64(11058))) + Expect(hashSlot).To(Equal(int64(11058))) + }) + + It("should CLUSTER COUNT-FAILURE-REPORTS", func() { + n, err := cluster.primary().ClusterCountFailureReports(cluster.nodeIds[0]).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(n).To(Equal(int64(0))) + }) + + It("should CLUSTER COUNTKEYSINSLOT", func() { + n, err := cluster.primary().ClusterCountKeysInSlot(10).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(n).To(Equal(int64(0))) + }) + + It("should CLUSTER DELSLOTS", func() { + res, err := cluster.primary().ClusterDelSlotsRange(16000, 16384-1).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(res).To(Equal("OK")) + cluster.primary().ClusterAddSlotsRange(16000, 16384-1) + }) + + It("should CLUSTER SAVECONFIG", func() { + res, err := cluster.primary().ClusterSaveConfig().Result() + Expect(err).NotTo(HaveOccurred()) + Expect(res).To(Equal("OK")) + }) + + It("should CLUSTER SLAVES", func() { + nodesList, err := cluster.primary().ClusterSlaves(cluster.nodeIds[0]).Result() + Expect(err).NotTo(HaveOccurred()) + Expect(nodesList).Should(ContainElement(ContainSubstring("slave"))) + Expect(nodesList).Should(HaveLen(1)) + }) + + It("should CLUSTER READONLY", func() { + res, err := cluster.primary().Readonly().Result() + Expect(err).NotTo(HaveOccurred()) + Expect(res).To(Equal("OK")) + }) + + It("should CLUSTER READWRITE", func() { + res, err := cluster.primary().ReadWrite().Result() + Expect(err).NotTo(HaveOccurred()) + Expect(res).To(Equal("OK")) }) }) diff --git a/commands.go b/commands.go index ef615b0..215f414 100644 --- a/commands.go +++ b/commands.go @@ -1705,6 +1705,68 @@ func (c *commandable) ClusterKeySlot(key string) *IntCmd { return cmd } +func (c *commandable) ClusterCountFailureReports(nodeID string) *IntCmd { + cmd := NewIntCmd("CLUSTER", "count-failure-reports", nodeID) + cmd._clusterKeyPos = 2 + c.Process(cmd) + return cmd +} + +func (c *commandable) ClusterCountKeysInSlot(slot int) *IntCmd { + cmd := NewIntCmd("CLUSTER", "countkeysinslot", slot) + cmd._clusterKeyPos = 2 + c.Process(cmd) + return cmd +} + +func (c *commandable) ClusterDelSlots(slots ...int) *StatusCmd { + args := make([]interface{}, 2+len(slots)) + args[0] = "CLUSTER" + args[1] = "DELSLOTS" + for i, slot := range slots { + args[2+i] = slot + } + cmd := newKeylessStatusCmd(args...) + c.Process(cmd) + return cmd +} + +func (c *commandable) ClusterDelSlotsRange(min, max int) *StatusCmd { + size := max - min + 1 + slots := make([]int, size) + for i := 0; i < size; i++ { + slots[i] = min + i + } + return c.ClusterDelSlots(slots...) +} + +func (c *commandable) ClusterSaveConfig() *StatusCmd { + cmd := newKeylessStatusCmd("CLUSTER", "saveconfig") + c.Process(cmd) + return cmd +} + +func (c *commandable) ClusterSlaves(nodeID string) *StringSliceCmd { + cmd := NewStringSliceCmd("CLUSTER", "SLAVES", nodeID) + cmd._clusterKeyPos = 2 + c.Process(cmd) + return cmd +} + +func (c *commandable) Readonly() *StatusCmd { + cmd := newKeylessStatusCmd("READONLY") + cmd._clusterKeyPos = 0 + c.Process(cmd) + return cmd +} + +func (c *commandable) ReadWrite() *StatusCmd { + cmd := newKeylessStatusCmd("READWRITE") + cmd._clusterKeyPos = 0 + c.Process(cmd) + return cmd +} + func (c *commandable) ClusterFailover() *StatusCmd { cmd := newKeylessStatusCmd("CLUSTER", "failover") c.Process(cmd)