Add Dialer option.

This commit is contained in:
Vladimir Mihailenco 2014-09-30 11:46:56 +03:00
parent 593d5d1d77
commit 2508d0a57e
2 changed files with 31 additions and 6 deletions

View File

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