Skip to content

Commit 31a2d84

Browse files
author
Ruben Bridgewater
committed
Add slave ready test
1 parent 2684fdb commit 31a2d84

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

test/conect.slave.spec.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
'use strict';
2+
3+
var assert = require("assert");
4+
var config = require("./lib/config");
5+
var helper = require('./helper');
6+
var RedisProcess = require("./lib/redis-process");
7+
var rp;
8+
var path = require('path');
9+
var redis = config.redis;
10+
11+
describe('master slave sync', function () {
12+
var master = null;
13+
var slave = null;
14+
15+
before(function (done) {
16+
helper.stopRedis(function () {
17+
helper.startRedis('./conf/password.conf', done);
18+
});
19+
});
20+
21+
before(function (done) {
22+
master = redis.createClient({
23+
password: 'porkchopsandwiches'
24+
});
25+
var multi = master.multi();
26+
var i = 0;
27+
while (i < 1000) {
28+
i++;
29+
// Write some data in the redis instance, so there's something to sync
30+
multi.set('foo' + i, 'bar' + new Array(500).join(Math.random()));
31+
}
32+
multi.exec(done);
33+
});
34+
35+
it("sync process and no master should delay ready being emitted for slaves", function (done) {
36+
if (helper.redisProcess().spawnFailed()) this.skip();
37+
38+
var port = 6381;
39+
var firstInfo;
40+
slave = redis.createClient({
41+
port: port,
42+
retry_strategy: function (options) {
43+
// Try to reconnect in very small intervals to catch the master_link_status down before the sync completes
44+
return 10;
45+
}
46+
});
47+
48+
var tmp = slave.info.bind(slave);
49+
var i = 0;
50+
slave.info = function (err, res) {
51+
i++;
52+
tmp(err, res);
53+
if (!firstInfo || Object.keys(firstInfo).length === 0) {
54+
firstInfo = slave.server_info;
55+
}
56+
};
57+
58+
slave.on('connect', function () {
59+
assert.strictEqual(i, 0);
60+
});
61+
62+
var end = helper.callFuncAfter(done, 2);
63+
64+
slave.on('ready', function () {
65+
assert.strictEqual(this.server_info.master_link_status, 'up');
66+
assert.strictEqual(firstInfo.master_link_status, 'down');
67+
assert(i > 1);
68+
this.get('foo300', function (err, res) {
69+
assert.strictEqual(res.substr(0, 3), 'bar');
70+
end(err);
71+
});
72+
});
73+
74+
RedisProcess.start(function (err, _rp) {
75+
rp = _rp;
76+
end(err);
77+
}, path.resolve(__dirname, './conf/slave.conf'), port);
78+
});
79+
80+
after(function (done) {
81+
var end = helper.callFuncAfter(done, 3);
82+
rp.stop(end);
83+
slave.end(true);
84+
master.flushdb(function (err) {
85+
end(err);
86+
master.end(true);
87+
});
88+
helper.stopRedis(function () {
89+
helper.startRedis('./conf/redis.conf', end);
90+
});
91+
});
92+
});

test/conf/slave.conf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
port 6381
2+
bind ::1 127.0.0.1
3+
unixsocket /tmp/redis6381.sock
4+
unixsocketperm 755
5+
slaveof localhost 6379
6+
masterauth porkchopsandwiches

0 commit comments

Comments
 (0)