From 2fd3b46835d4ae4e679a8a309f360127578177c0 Mon Sep 17 00:00:00 2001 From: Benjamin Coe Date: Fri, 14 Aug 2015 22:30:58 -0700 Subject: [PATCH] ported sdiff, sdiffstore, sinterstore, smembers, smove, spop, sunion, client.monitor --- test/commands/sdiff.spec.js | 54 ++++++++++++++++++++++++++++++ test/commands/sdiffstore.spec.js | 54 ++++++++++++++++++++++++++++++ test/commands/sinterstore.spec.js | 55 +++++++++++++++++++++++++++++++ test/commands/smembers.spec.js | 45 +++++++++++++++++++++++++ test/commands/smove.spec.js | 48 +++++++++++++++++++++++++++ test/commands/spop.spec.js | 45 +++++++++++++++++++++++++ test/commands/sunion.spec.js | 53 +++++++++++++++++++++++++++++ 7 files changed, 354 insertions(+) create mode 100644 test/commands/sdiff.spec.js create mode 100644 test/commands/sdiffstore.spec.js create mode 100644 test/commands/sinterstore.spec.js create mode 100644 test/commands/smembers.spec.js create mode 100644 test/commands/smove.spec.js create mode 100644 test/commands/spop.spec.js create mode 100644 test/commands/sunion.spec.js diff --git a/test/commands/sdiff.spec.js b/test/commands/sdiff.spec.js new file mode 100644 index 0000000000..deb0628326 --- /dev/null +++ b/test/commands/sdiff.spec.js @@ -0,0 +1,54 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'sdiff' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('returns set difference', function (done) { + client.sadd('foo', 'x', helper.isNumber(1)); + client.sadd('foo', 'a', helper.isNumber(1)); + client.sadd('foo', 'b', helper.isNumber(1)); + client.sadd('foo', 'c', helper.isNumber(1)); + + client.sadd('bar', 'c', helper.isNumber(1)); + + client.sadd('baz', 'a', helper.isNumber(1)); + client.sadd('baz', 'd', helper.isNumber(1)); + + client.sdiff('foo', 'bar', 'baz', function (err, values) { + values.sort(); + assert.equal(values.length, 2); + assert.equal(values[0], 'b'); + assert.equal(values[1], 'x'); + return done(err); + }); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +}); diff --git a/test/commands/sdiffstore.spec.js b/test/commands/sdiffstore.spec.js new file mode 100644 index 0000000000..2aac531b4f --- /dev/null +++ b/test/commands/sdiffstore.spec.js @@ -0,0 +1,54 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'sdiffstore' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('calculates set difference ands stores it in a key', function (done) { + client.sadd('foo', 'x', helper.isNumber(1)); + client.sadd('foo', 'a', helper.isNumber(1)); + client.sadd('foo', 'b', helper.isNumber(1)); + client.sadd('foo', 'c', helper.isNumber(1)); + + client.sadd('bar', 'c', helper.isNumber(1)); + + client.sadd('baz', 'a', helper.isNumber(1)); + client.sadd('baz', 'd', helper.isNumber(1)); + + client.sdiffstore('quux', 'foo', 'bar', 'baz', helper.isNumber(2)); + + client.smembers('quux', function (err, values) { + var members = values.sort(); + assert.deepEqual(members, [ 'b', 'x' ]); + return done(err); + }); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +}); diff --git a/test/commands/sinterstore.spec.js b/test/commands/sinterstore.spec.js new file mode 100644 index 0000000000..f27d47eea6 --- /dev/null +++ b/test/commands/sinterstore.spec.js @@ -0,0 +1,55 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'sinterstore' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('calculates set intersection and stores it in a key', function (done) { + client.sadd('sa', 'a', helper.isNumber(1)); + client.sadd('sa', 'b', helper.isNumber(1)); + client.sadd('sa', 'c', helper.isNumber(1)); + + client.sadd('sb', 'b', helper.isNumber(1)); + client.sadd('sb', 'c', helper.isNumber(1)); + client.sadd('sb', 'd', helper.isNumber(1)); + + client.sadd('sc', 'c', helper.isNumber(1)); + client.sadd('sc', 'd', helper.isNumber(1)); + client.sadd('sc', 'e', helper.isNumber(1)); + + client.sinterstore('foo', 'sa', 'sb', 'sc', helper.isNumber(1)); + + client.smembers('foo', function (err, members) { + assert.deepEqual(members, [ 'c' ]); + return done(err); + }); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +}); diff --git a/test/commands/smembers.spec.js b/test/commands/smembers.spec.js new file mode 100644 index 0000000000..0832742ec0 --- /dev/null +++ b/test/commands/smembers.spec.js @@ -0,0 +1,45 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'smembers' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('returns all values in a set', function (done) { + client.sadd('foo', 'x', helper.isNumber(1)); + client.sadd('foo', 'y', helper.isNumber(1)); + client.smembers('foo', function (err, values) { + assert.equal(values.length, 2); + var members = values.sort(); + assert.deepEqual(members, [ 'x', 'y' ]); + return done(err); + }); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +}); diff --git a/test/commands/smove.spec.js b/test/commands/smove.spec.js new file mode 100644 index 0000000000..598be28860 --- /dev/null +++ b/test/commands/smove.spec.js @@ -0,0 +1,48 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'smove' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('moves a value to a set that does not yet exist', function (done) { + client.sadd('foo', 'x', helper.isNumber(1)); + client.smove('foo', 'bar', 'x', helper.isNumber(1)); + client.sismember('foo', 'x', helper.isNumber(0)); + client.sismember('bar', 'x', helper.isNumber(1, done)); + }); + + it("does not move a value if it does not exist in the first set", function (done) { + client.sadd('foo', 'x', helper.isNumber(1)); + client.smove('foo', 'bar', 'y', helper.isNumber(0)); + client.sismember('foo', 'y', helper.isNumber(0)); + client.sismember('bar', 'y', helper.isNumber(0, done)); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +}); diff --git a/test/commands/spop.spec.js b/test/commands/spop.spec.js new file mode 100644 index 0000000000..43b31442e2 --- /dev/null +++ b/test/commands/spop.spec.js @@ -0,0 +1,45 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'spop' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('returns a random element from the set', function (done) { + client.sadd('zzz', 'member0', helper.isNumber(1)); + client.scard('zzz', helper.isNumber(1)); + + client.spop('zzz', function (err, value) { + if (err) return done(err); + assert.equal(value, 'member0'); + client.scard('zzz', helper.isNumber(0, done)); + }); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +}); diff --git a/test/commands/sunion.spec.js b/test/commands/sunion.spec.js new file mode 100644 index 0000000000..92cd81d08f --- /dev/null +++ b/test/commands/sunion.spec.js @@ -0,0 +1,53 @@ +var assert = require("assert"); +var config = require("../lib/config"); +var helper = require("../helper"); +var redis = config.redis; + +describe("The 'sunion' method", function () { + + function allTests(parser, ip) { + var args = config.configureClient(parser, ip); + + describe("using " + parser + " and " + ip, function () { + var client; + + beforeEach(function (done) { + client = redis.createClient.apply(redis.createClient, args); + client.once("error", done); + client.once("connect", function () { + client.flushdb(done); + }); + }); + + it('returns the union of a group of sets', function (done) { + client.sadd('sa', 'a', helper.isNumber(1)); + client.sadd('sa', 'b', helper.isNumber(1)); + client.sadd('sa', 'c', helper.isNumber(1)); + + client.sadd('sb', 'b', helper.isNumber(1)); + client.sadd('sb', 'c', helper.isNumber(1)); + client.sadd('sb', 'd', helper.isNumber(1)); + + client.sadd('sc', 'c', helper.isNumber(1)); + client.sadd('sc', 'd', helper.isNumber(1)); + client.sadd('sc', 'e', helper.isNumber(1)); + + client.sunion('sa', 'sb', 'sc', function (err, union) { + assert.deepEqual(union.sort(), ['a', 'b', 'c', 'd', 'e']); + return done(err); + }); + }); + + afterEach(function () { + client.end(); + }); + }); + } + + ['javascript', 'hiredis'].forEach(function (parser) { + allTests(parser, "/tmp/redis.sock"); + ['IPv4', 'IPv6'].forEach(function (ip) { + allTests(parser, ip); + }) + }); +});