Merge pull request #41 from go-redis/feature/add-dialer

Add Dialer option.
This commit is contained in:
Vladimir Mihailenco 2014-10-02 10:38:41 +03:00
commit 97695ed316
2 changed files with 31 additions and 6 deletions

View File

@ -152,7 +152,13 @@ type options struct {
} }
type Options struct { type Options struct {
Network string
Addr string Addr string
// Dialer creates new network connection and has priority over
// Network and Addr options.
Dialer func() (net.Conn, error)
Password string Password string
DB int64 DB int64
@ -196,10 +202,13 @@ type Client struct {
*baseClient *baseClient
} }
func newClient(clOpt *Options, network string) *Client { func NewClient(clOpt *Options) *Client {
opt := clOpt.options() opt := clOpt.options()
dialer := func() (net.Conn, error) { dialer := clOpt.Dialer
return net.DialTimeout(network, clOpt.Addr, opt.DialTimeout) if dialer == nil {
dialer = func() (net.Conn, error) {
return net.DialTimeout(clOpt.Network, clOpt.Addr, opt.DialTimeout)
}
} }
return &Client{ return &Client{
baseClient: &baseClient{ baseClient: &baseClient{
@ -209,10 +218,14 @@ func newClient(clOpt *Options, network string) *Client {
} }
} }
// Deprecated. Use NewClient instead.
func NewTCPClient(opt *Options) *Client { func NewTCPClient(opt *Options) *Client {
return newClient(opt, "tcp") opt.Network = "tcp"
return NewClient(opt)
} }
// Deprecated. Use NewClient instead.
func NewUnixClient(opt *Options) *Client { func NewUnixClient(opt *Options) *Client {
return newClient(opt, "unix") opt.Network = "unix"
return NewClient(opt)
} }

View File

@ -69,6 +69,18 @@ func (t *RedisConnectorTest) TestNewUnixClient(c *C) {
c.Assert(client.Close(), IsNil) c.Assert(client.Close(), IsNil)
} }
func (t *RedisConnectorTest) TestDialer(c *C) {
client := redis.NewClient(&redis.Options{
Dialer: func() (net.Conn, error) {
return net.Dial("tcp", redisAddr)
},
})
ping := client.Ping()
c.Check(ping.Err(), IsNil)
c.Check(ping.Val(), Equals, "PONG")
c.Assert(client.Close(), IsNil)
}
func (t *RedisConnectorTest) TestClose(c *C) { func (t *RedisConnectorTest) TestClose(c *C) {
client := redis.NewTCPClient(&redis.Options{ client := redis.NewTCPClient(&redis.Options{
Addr: redisAddr, Addr: redisAddr,