client = redis.NewClient(redisOptions()) Expect(client.FlushDb().Err()).NotTo(HaveOccurred()) }) AfterEach(func() { Expect(client.Close()).NotTo(HaveOccurred()) }) It("should respect max size", func() { perform(1000, func(id int) { val, err := client.Ping().Result() Expect(err).NotTo(HaveOccurred()) Expect(val).To(Equal("PONG")) }) pool := client.Pool() Expect(pool.Len()).To(BeNumerically("<=", 10)) Expect(pool.FreeLen()).To(BeNumerically("<=", 10)) Expect(pool.Len()).To(Equal(pool.FreeLen())) }) It("should respect max on multi", func() { perform(1000, func(id int) { var ping *redis.StatusCmd multi := client.Multi() cmds, err := multi.Exec(func() error { ping = multi.Ping() return nil }) Expect(err).NotTo(HaveOccurred())
return nil }) Expect(err).NotTo(HaveOccurred()) Expect(len(cmds)).To(Equal(20000)) for _, cmd := range cmds { Expect(cmd.Err()).NotTo(HaveOccurred()) } get := client.Get("key") Expect(get.Err()).NotTo(HaveOccurred()) Expect(get.Val()).To(Equal("20000")) }) It("should recover from bad connection", func() { // Put bad connection in the pool. cn, err := client.Pool().Get() Expect(err).NotTo(HaveOccurred()) cn.NetConn = &badConn{} err = client.Pool().Put(cn) Expect(err).NotTo(HaveOccurred()) multi := client.Multi() defer func() { Expect(multi.Close()).NotTo(HaveOccurred()) }() _, err = multi.Exec(func() error { multi.Ping() return nil })