Skip to content

Commit a41cfa9

Browse files
author
Ruben Bridgewater
committed
Add good stack traces tests and fix stack traces in debug mode
1 parent 579584d commit a41cfa9

File tree

4 files changed

+81
-3
lines changed

4 files changed

+81
-3
lines changed

lib/command.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

3-
var debug_mode = require('../').debug_mode;
4-
var betterStackTraces = process.env.NODE_ENV && process.env.NODE_ENV.toUpperCase() === 'DEVELOPMENT' || debug_mode;
3+
var betterStackTraces = /development/i.test(process.env.NODE_ENV) || /\bredis\b/i.test(process.env.NODE_DEBUG);
54

65
function Command (command, args, callback, call_on_write) {
76
this.command = command;

test/good_traces.spec.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
'use strict';
2+
3+
var assert = require('assert');
4+
var config = require('./lib/config');
5+
var fork = require('child_process').fork;
6+
var redis = config.redis;
7+
8+
describe('stack traces', function () {
9+
10+
it('should return good traces with NODE_ENV=development set', function (done) {
11+
var external = fork('./test/lib/good-traces.js', {
12+
env: {
13+
NODE_ENV: 'development'
14+
}
15+
});
16+
17+
var id = setTimeout(function () {
18+
external.kill();
19+
done(new Error('Timeout'));
20+
}, 6000);
21+
22+
external.on('close', function (code) {
23+
clearTimeout(id);
24+
assert.strictEqual(code, 0);
25+
done();
26+
});
27+
});
28+
29+
it('should return good traces with NODE_DEBUG=redis env set', function (done) {
30+
var external = fork('./test/lib/good-traces.js', {
31+
env: {
32+
NODE_DEBUG: 'redis'
33+
},
34+
silent: true
35+
});
36+
37+
var id = setTimeout(function () {
38+
external.kill();
39+
done(new Error('Timeout'));
40+
}, 6000);
41+
42+
external.on('close', function (code) {
43+
clearTimeout(id);
44+
assert.strictEqual(code, 0);
45+
done();
46+
});
47+
});
48+
49+
// This is always going to return good stack traces
50+
it('should always return good stack traces for rejected offline commands', function (done) {
51+
var client = redis.createClient({
52+
enable_offline_queue: false
53+
});
54+
client.set('foo', function (err, res) {
55+
assert(/good_traces.spec.js/.test(err.stack));
56+
client.quit(done);
57+
});
58+
});
59+
});

test/lib/good-traces.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Spawned by the good_stacks.spec.js tests
2+
'use strict';
3+
4+
var assert = require('assert');
5+
var redis = require('../../index');
6+
var client = redis.createClient();
7+
8+
// Both error cases would normally return bad stack traces
9+
client.set('foo', function (err, res) {
10+
assert(/good-traces.js:9:8/.test(err.stack));
11+
client.set('foo', 'bar', function (err, res) {
12+
assert(/good-traces.js:11:12/.test(err.stack));
13+
client.quit(function () {
14+
process.exit(0);
15+
});
16+
});
17+
process.nextTick(function () {
18+
client.stream.destroy();
19+
});
20+
});

test/node_redis.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ describe('The node_redis client', function () {
851851

852852
var id = setTimeout(function () {
853853
external.kill();
854-
done(Error('unref subprocess timed out'));
854+
done(new Error('unref subprocess timed out'));
855855
}, 8000);
856856

857857
external.on('close', function (code) {

0 commit comments

Comments
 (0)