You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-06 02:15:48 +03:00
ported sdiff, sdiffstore, sinterstore, smembers, smove, spop, sunion, client.monitor
This commit is contained in:
@@ -5,7 +5,7 @@ var helper = require('./helper')
|
|||||||
var fork = require("child_process").fork;
|
var fork = require("child_process").fork;
|
||||||
var redis = config.redis;
|
var redis = config.redis;
|
||||||
|
|
||||||
describe("a node_redis client", function () {
|
describe("The node_redis client", function () {
|
||||||
|
|
||||||
function allTests(parser, ip) {
|
function allTests(parser, ip) {
|
||||||
var args = config.configureClient(parser, ip);
|
var args = config.configureClient(parser, ip);
|
||||||
@@ -178,8 +178,43 @@ describe("a node_redis client", function () {
|
|||||||
return done()
|
return done()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
|
describe('monitor', function () {
|
||||||
|
it('monitors commands on all other redis clients', function (done) {
|
||||||
|
if (!helper.serverVersionAtLeast(client, [2, 6, 0])) return done();
|
||||||
|
|
||||||
|
var monitorClient = redis.createClient.apply(redis.createClient, args);
|
||||||
|
var responses = [];
|
||||||
|
|
||||||
|
monitorClient.monitor(function (err, res) {
|
||||||
|
client.mget("some", "keys", "foo", "bar");
|
||||||
|
client.set("json", JSON.stringify({
|
||||||
|
foo: "123",
|
||||||
|
bar: "sdflkdfsjk",
|
||||||
|
another: false
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorClient.on("monitor", function (time, args) {
|
||||||
|
responses.push(args);
|
||||||
|
if (responses.length === 2) {
|
||||||
|
assert.strictEqual(5, responses[0].length);
|
||||||
|
assert.strictEqual("mget", responses[0][0]);
|
||||||
|
assert.strictEqual("some", responses[0][1]);
|
||||||
|
assert.strictEqual("keys", responses[0][2]);
|
||||||
|
assert.strictEqual("foo", responses[0][3]);
|
||||||
|
assert.strictEqual("bar", responses[0][4]);
|
||||||
|
assert.strictEqual(3, responses[1].length);
|
||||||
|
assert.strictEqual("set", responses[1][0]);
|
||||||
|
assert.strictEqual("json", responses[1][1]);
|
||||||
|
assert.strictEqual('{"foo":"123","bar":"sdflkdfsjk","another":false}', responses[1][2]);
|
||||||
|
monitorClient.quit(done);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
215
test/test.js
215
test/test.js
@@ -1,180 +1,5 @@
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
tests.SPOP = function () {
|
|
||||||
var name = "SPOP";
|
|
||||||
|
|
||||||
client.del('zzz');
|
|
||||||
client.sadd('zzz', 'member0', require_number(1, name));
|
|
||||||
client.scard('zzz', require_number(1, name));
|
|
||||||
|
|
||||||
client.spop('zzz', function (err, value) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err);
|
|
||||||
}
|
|
||||||
assert.equal(value, 'member0', name);
|
|
||||||
});
|
|
||||||
|
|
||||||
client.scard('zzz', last(name, require_number(0, name)));
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SDIFF = function () {
|
|
||||||
var name = "SDIFF";
|
|
||||||
|
|
||||||
client.del('foo');
|
|
||||||
client.sadd('foo', 'x', require_number(1, name));
|
|
||||||
client.sadd('foo', 'a', require_number(1, name));
|
|
||||||
client.sadd('foo', 'b', require_number(1, name));
|
|
||||||
client.sadd('foo', 'c', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('bar', 'c', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('baz', 'a', require_number(1, name));
|
|
||||||
client.sadd('baz', 'd', require_number(1, name));
|
|
||||||
|
|
||||||
client.sdiff('foo', 'bar', 'baz', function (err, values) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err, name);
|
|
||||||
}
|
|
||||||
values.sort();
|
|
||||||
assert.equal(values.length, 2, name);
|
|
||||||
assert.equal(values[0], 'b', name);
|
|
||||||
assert.equal(values[1], 'x', name);
|
|
||||||
next(name);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SDIFFSTORE = function () {
|
|
||||||
var name = "SDIFFSTORE";
|
|
||||||
|
|
||||||
client.del('foo');
|
|
||||||
client.del('bar');
|
|
||||||
client.del('baz');
|
|
||||||
client.del('quux');
|
|
||||||
|
|
||||||
client.sadd('foo', 'x', require_number(1, name));
|
|
||||||
client.sadd('foo', 'a', require_number(1, name));
|
|
||||||
client.sadd('foo', 'b', require_number(1, name));
|
|
||||||
client.sadd('foo', 'c', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('bar', 'c', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('baz', 'a', require_number(1, name));
|
|
||||||
client.sadd('baz', 'd', require_number(1, name));
|
|
||||||
|
|
||||||
// NB: SDIFFSTORE returns the number of elements in the dstkey
|
|
||||||
|
|
||||||
client.sdiffstore('quux', 'foo', 'bar', 'baz', require_number(2, name));
|
|
||||||
|
|
||||||
client.smembers('quux', function (err, values) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err, name);
|
|
||||||
}
|
|
||||||
var members = buffers_to_strings(values).sort();
|
|
||||||
|
|
||||||
assert.deepEqual(members, [ 'b', 'x' ], name);
|
|
||||||
next(name);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SMEMBERS = function () {
|
|
||||||
var name = "SMEMBERS";
|
|
||||||
|
|
||||||
client.del('foo');
|
|
||||||
client.sadd('foo', 'x', require_number(1, name));
|
|
||||||
|
|
||||||
client.smembers('foo', function (err, members) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err, name);
|
|
||||||
}
|
|
||||||
assert.deepEqual(buffers_to_strings(members), [ 'x' ], name);
|
|
||||||
});
|
|
||||||
|
|
||||||
client.sadd('foo', 'y', require_number(1, name));
|
|
||||||
|
|
||||||
client.smembers('foo', function (err, values) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err, name);
|
|
||||||
}
|
|
||||||
assert.equal(values.length, 2, name);
|
|
||||||
var members = buffers_to_strings(values).sort();
|
|
||||||
|
|
||||||
assert.deepEqual(members, [ 'x', 'y' ], name);
|
|
||||||
next(name);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SMOVE = function () {
|
|
||||||
var name = "SMOVE";
|
|
||||||
|
|
||||||
client.del('foo');
|
|
||||||
client.del('bar');
|
|
||||||
|
|
||||||
client.sadd('foo', 'x', require_number(1, name));
|
|
||||||
client.smove('foo', 'bar', 'x', require_number(1, name));
|
|
||||||
client.sismember('foo', 'x', require_number(0, name));
|
|
||||||
client.sismember('bar', 'x', require_number(1, name));
|
|
||||||
client.smove('foo', 'bar', 'x', last(name, require_number(0, name)));
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SINTERSTORE = function () {
|
|
||||||
var name = "SINTERSTORE";
|
|
||||||
|
|
||||||
client.del('sa');
|
|
||||||
client.del('sb');
|
|
||||||
client.del('sc');
|
|
||||||
client.del('foo');
|
|
||||||
|
|
||||||
client.sadd('sa', 'a', require_number(1, name));
|
|
||||||
client.sadd('sa', 'b', require_number(1, name));
|
|
||||||
client.sadd('sa', 'c', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('sb', 'b', require_number(1, name));
|
|
||||||
client.sadd('sb', 'c', require_number(1, name));
|
|
||||||
client.sadd('sb', 'd', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('sc', 'c', require_number(1, name));
|
|
||||||
client.sadd('sc', 'd', require_number(1, name));
|
|
||||||
client.sadd('sc', 'e', require_number(1, name));
|
|
||||||
|
|
||||||
client.sinterstore('foo', 'sa', 'sb', 'sc', require_number(1, name));
|
|
||||||
|
|
||||||
client.smembers('foo', function (err, members) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err, name);
|
|
||||||
}
|
|
||||||
assert.deepEqual(buffers_to_strings(members), [ 'c' ], name);
|
|
||||||
next(name);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SUNION = function () {
|
|
||||||
var name = "SUNION";
|
|
||||||
|
|
||||||
client.del('sa');
|
|
||||||
client.del('sb');
|
|
||||||
client.del('sc');
|
|
||||||
|
|
||||||
client.sadd('sa', 'a', require_number(1, name));
|
|
||||||
client.sadd('sa', 'b', require_number(1, name));
|
|
||||||
client.sadd('sa', 'c', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('sb', 'b', require_number(1, name));
|
|
||||||
client.sadd('sb', 'c', require_number(1, name));
|
|
||||||
client.sadd('sb', 'd', require_number(1, name));
|
|
||||||
|
|
||||||
client.sadd('sc', 'c', require_number(1, name));
|
|
||||||
client.sadd('sc', 'd', require_number(1, name));
|
|
||||||
client.sadd('sc', 'e', require_number(1, name));
|
|
||||||
|
|
||||||
client.sunion('sa', 'sb', 'sc', function (err, union) {
|
|
||||||
if (err) {
|
|
||||||
assert.fail(err, name);
|
|
||||||
}
|
|
||||||
assert.deepEqual(buffers_to_strings(union).sort(), ['a', 'b', 'c', 'd', 'e'], name);
|
|
||||||
next(name);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.SUNIONSTORE = function () {
|
tests.SUNIONSTORE = function () {
|
||||||
var name = "SUNIONSTORE";
|
var name = "SUNIONSTORE";
|
||||||
|
|
||||||
@@ -212,46 +37,6 @@ tests.SUNIONSTORE = function () {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
tests.MONITOR = function () {
|
|
||||||
var name = "MONITOR", responses = [], monitor_client;
|
|
||||||
|
|
||||||
if (!server_version_at_least(client, [2, 6, 0])) {
|
|
||||||
console.log("Skipping " + name + " for old Redis server version < 2.6.x");
|
|
||||||
return next(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
monitor_client = redis.createClient(PORT, HOST, { parser: parser });
|
|
||||||
monitor_client.monitor(function (err, res) {
|
|
||||||
client.mget("some", "keys", "foo", "bar");
|
|
||||||
client.set("json", JSON.stringify({
|
|
||||||
foo: "123",
|
|
||||||
bar: "sdflkdfsjk",
|
|
||||||
another: false
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
monitor_client.on("monitor", function (time, args) {
|
|
||||||
// skip monitor command for Redis <= 2.4.16
|
|
||||||
if (args[0] === "monitor") return;
|
|
||||||
|
|
||||||
responses.push(args);
|
|
||||||
if (responses.length === 2) {
|
|
||||||
assert.strictEqual(5, responses[0].length);
|
|
||||||
assert.strictEqual("mget", responses[0][0]);
|
|
||||||
assert.strictEqual("some", responses[0][1]);
|
|
||||||
assert.strictEqual("keys", responses[0][2]);
|
|
||||||
assert.strictEqual("foo", responses[0][3]);
|
|
||||||
assert.strictEqual("bar", responses[0][4]);
|
|
||||||
assert.strictEqual(3, responses[1].length);
|
|
||||||
assert.strictEqual("set", responses[1][0]);
|
|
||||||
assert.strictEqual("json", responses[1][1]);
|
|
||||||
assert.strictEqual('{"foo":"123","bar":"sdflkdfsjk","another":false}', responses[1][2]);
|
|
||||||
monitor_client.quit(function (err, res) {
|
|
||||||
next(name);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
tests.BLPOP = function () {
|
tests.BLPOP = function () {
|
||||||
var name = "BLPOP";
|
var name = "BLPOP";
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user