From ebbb0146b98b112e2be57f62220111f890abfeb2 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Mon, 14 Sep 2015 22:13:43 +0200 Subject: [PATCH] Fix auth emitting the error even though a callback is present Fix auth manipulating the returned error And this is also removing some dead code --- index.js | 12 ++++++------ test/auth.spec.js | 27 ++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index bae89112e4..efca586644 100644 --- a/index.js +++ b/index.js @@ -206,20 +206,20 @@ RedisClient.prototype.do_auth = function () { debug("Warning: Redis server does not require a password, but a password was supplied."); err = null; res = "OK"; + } else if (self.auth_callback) { + self.auth_callback(err); + self.auth_callback = null; } else { - return self.emit("error", new Error("Auth error: " + err.message)); + self.emit("error", err); + return; } } res = res.toString(); - if (res !== "OK") { - return self.emit("error", new Error("Auth failed: " + res)); - } - debug("Auth succeeded " + self.address + " id " + self.connection_id); if (self.auth_callback) { - self.auth_callback(err, res); + self.auth_callback(null, res); self.auth_callback = null; } diff --git a/test/auth.spec.js b/test/auth.spec.js index 88b68c97eb..3a1c8812ca 100644 --- a/test/auth.spec.js +++ b/test/auth.spec.js @@ -34,7 +34,7 @@ describe("client authentication", function () { }); }); - it("raises error when auth is bad", function (done) { + it("emits error when auth is bad without callback", function (done) { if (helper.redisProcess().spawnFailed()) this.skip(); client = redis.createClient.apply(redis.createClient, args); @@ -48,6 +48,18 @@ describe("client authentication", function () { client.auth(auth + 'bad'); }); + it("returns an error when auth is bad with a callback", function (done) { + if (helper.redisProcess().spawnFailed()) this.skip(); + + client = redis.createClient.apply(redis.createClient, args); + + client.auth(auth + 'bad', function (err, res) { + assert.strictEqual(err.command_used, 'AUTH'); + assert.ok(/ERR invalid password/.test(err.message)); + done(); + }); + }); + if (ip === 'IPv4') { it('allows auth to be provided as part of redis url', function (done) { if (helper.redisProcess().spawnFailed()) this.skip(); @@ -71,6 +83,19 @@ describe("client authentication", function () { }); }); + it('allows auth and no_ready_check to be provided as config option for client', function (done) { + if (helper.redisProcess().spawnFailed()) this.skip(); + + var args = config.configureClient(parser, ip, { + auth_pass: auth, + no_ready_check: true + }); + client = redis.createClient.apply(redis.createClient, args); + client.on("ready", function () { + done(); + }); + }); + it('allows auth to be provided post-hoc with auth method', function (done) { if (helper.redisProcess().spawnFailed()) this.skip();