From e2e14d161e898aaa963671b7e3d58b2e5ed2c379 Mon Sep 17 00:00:00 2001 From: Matt Ranney Date: Tue, 14 Sep 2010 01:12:32 -0700 Subject: [PATCH] Starting to add tests. --- test.js | 200 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 177 insertions(+), 23 deletions(-) diff --git a/test.js b/test.js index 77a7ba7905..33c89505a7 100644 --- a/test.js +++ b/test.js @@ -1,33 +1,187 @@ var redis = require("./redis"), client = redis.createClient(), - inspector = require("eyes").inspector(); + assert = require("assert"), + inspector = require("eyes").inspector(), + tests = {}; -function print_response(err, results) { - if (err) { - console.log("response sent back an error: " + err.stack); - return; - } - console.log("response: " + (typeof results) + ": " + results); +function require_number(expected, label) { + return function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(expected, results, label + " " + expected + " !== " + results); + assert.strictEqual(typeof results, "number", label); + }; } +function require_number_any(label) { + return function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(typeof results, "number", label); + }; +} + +function require_number_pos(label) { + return function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(true, (results > 0), label); + }; +} + +function require_string(str, label) { + return function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.equal(str, results, label); + }; +} + +tests.EXISTS = function () { + client.del(["foo", "foo2"], require_number_any("EXISTS")); + client.set(['foo', 'bar'], require_string("OK", "EXISTS")); + client.EXISTS(['foo'], require_number(1, "EXISTS")); + client.EXISTS(['foo2'], require_number(0, "EXISTS")); +}; + +tests.DEL = function () { + client.DEL(["delkey"], require_number_any("DEL")); + client.set(["delkey", "delvalue"], require_string("OK", "DEL")); + client.DEL(["delkey"], require_number(1, "DEL")); + client.exists(["delkey"], require_number(0, "DEL")); + client.DEL(["delkey"], require_number(0, "DEL")); + client.mset(["delkey", "delvalue", "delkey2", "delvalue2"], require_string("OK", "DEL")); + client.DEL(["delkey", "delkey2"], require_number(2, "DEL")); +}; + +tests.TYPE = function () { + client.set(["string key", "should be a string"], require_string("OK", "TYPE")); + client.rpush(["list key", "should be a list"], require_number_pos("TYPE")); + client.sadd(["set key", "should be a set"], require_number_any("TYPE")); + client.zadd(["zset key", "10.0", "should be a zset"], require_number_any("TYPE")); + client.hset(["hash key", "hashtest", "should be a hash"], require_number_any(0, "TYPE")); + + client.TYPE(["string key"], require_string("string", "TYPE")); + client.TYPE(["list key"], require_string("list", "TYPE")); + client.TYPE(["set key"], require_string("set", "TYPE")); + client.TYPE(["zset key"], require_string("zset", "TYPE")); + client.TYPE(["hash key"], require_string("hash", "TYPE")); +}; + +tests.KEYS = function () { + client.mset(["test keys 1", "test val 1", "test keys 2", "test val 2"], require_string("OK", "KEYS")); + client.KEYS(["test keys*"], function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(2, results.length, "KEYS"); + assert.strictEqual("test keys 1", results[0].toString(), "KEYS"); + assert.strictEqual("test keys 2", results[1].toString(), "KEYS"); + }); +}; + +tests.RANDOMKEY = function () { + client.mset(["test keys 1", "test val 1", "test keys 2", "test val 2"], require_string("OK", "RANDOMKEY")); + client.RANDOMKEY([], function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(true, /\w+/.test(results), "RANDOMKEY"); + }); +}; + +tests.RENAME = function () { + client.set(['foo', 'bar'], require_string("OK", "RENAME")); + client.RENAME(["foo", "new foo"], require_string("OK", "RENAME")); + client.exists(["foo"], require_number(0, "RENAME")); + client.exists(["new foo"], require_number(1, "RENAME")); +}; + +tests.RENAMENX = function () { + client.set(['foo', 'bar'], require_string("OK", "RENAMENX")); + client.set(['foo2', 'bar2'], require_string("OK", "RENAMENX")); + client.RENAMENX(["foo", "foo2"], require_number(0, "RENAMENX")); + client.exists(["foo"], require_number(1, "RENAMENX")); + client.exists(["foo2"], require_number(1, "RENAMENX")); + client.del(["foo2"], require_number(1, "RENAMENX")); + client.RENAMENX(["foo", "foo2"], require_number(1, "RENAMENX")); + client.exists(["foo"], require_number(0, "RENAMENX")); + client.exists(["foo2"], require_number(1, "RENAMENX")); +}; + +tests.DBSIZE = function () { + client.set(['foo', 'bar'], require_string("OK", "DBSIZE")); + client.DBSIZE([], require_number_pos("DBSIZE")); +}; + +tests.EXPIRE = function () { + client.set(['expiry key', 'bar'], require_string("OK", "EXPIRE")); + client.EXPIRE(["expiry key", "1"], require_number_pos("EXPIRE")); + setTimeout(function () { + client.exists(["expiry key"], require_number(0, "EXPIRE")); + }, 2000); +}; + +tests.TTL = function () { + client.set(["ttl key", "ttl val"], require_string("OK", "TTL")); + client.expire(["ttl key", "100"], require_number_pos("TTL")); + setTimeout(function () { + client.TTL(["ttl key"], require_number_pos(0, "TTL")); + }, 500); +}; + +tests.FLUSHDB = function () { + client.mset(["flush keys 1", "flush val 1", "flush keys 2", "flush val 2"], require_string("OK", "FLUSHDB")); + setTimeout(function () { + client.FLUSHDB([], require_string("OK", "FLUSHDB")); + client.dbsize([], require_number(0, "FLUSHDB")); + }, 3000); +}; + +tests.GET = function () { + client.set(["get key", "get val"], require_string("OK", "GET")); + client.GET(["get key"], require_string("get val", "GET")); +}; + +tests.SET = function () { + client.SET(["set key", "set val"], require_string("OK", "SET")); + client.get(["set key"], require_string("set val", "SET")); +}; + +tests.GETSET = function () { + client.set(["getset key", "getset val"], require_string("OK", "GETSET")); + client.GETSET(["getset key", "new getset val"], require_string("getset val", "GETSET")); + client.get(["getset key"], require_string("new getset val", "GETSET")); +}; + +tests.MGET = function () { + client.mset(["mget keys 1", "mget val 1", "mget keys 2", "mget val 2", "mget keys 3", "mget val 3"], require_string("OK", "MGET")); + client.MGET(["mget keys 1", "mget keys 2", "mget keys 3"], function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(3, results.length, "MGET"); + assert.strictEqual("mget val 1", results[0].toString(), "MGET"); + assert.strictEqual("mget val 2", results[1].toString(), "MGET"); + assert.strictEqual("mget val 3", results[2].toString(), "MGET"); + }); + client.MGET(["mget keys 1", "some random shit", "mget keys 2", "mget keys 3"], function (err, results) { + assert.strictEqual(null, err, "result sent back unexpected error"); + assert.strictEqual(4, results.length, "MGET"); + assert.strictEqual("mget val 1", results[0].toString(), "MGET"); + assert.strictEqual(null, results[1], "MGET"); + assert.strictEqual("mget val 2", results[2].toString(), "MGET"); + assert.strictEqual("mget val 3", results[3].toString(), "MGET"); + }); +}; + client.on("connect", function () { - console.log("Tester got connection"); - try { - // client.INFO([], print_response); - // client.SET(["now", Date.now()], print_response); - // client.GET(["now"], print_response); - // client.GET(["some bullshit"], print_response); - // client.TYPE(["now"], print_response); - // client.EXISTS(["now"], print_response); - // client.EXISTS(["some bullshit"], print_response); - // client.DEL(["now"], print_response); - // client.MSET(["key1", "value1", "key2", "value2", "key3", "value3", "key4", "value4"], print_response); - client.MGET(["key1", "key2", "key3", "key4", "key5"], print_response); - } catch (err) { - console.log("Tester caught exception: " + err.stack); - } + console.log("Tester got connection, initializing database for tests."); + client.FLUSHDB([], require_string("OK", "test init")); + redis.commands.forEach(function (command) { + try { + if (typeof tests[command] === "function") { + console.log(command); + tests[command](); + } else { + console.log("No test for " + command); + } + } catch (err) { + console.log("Error testing command " + command + " " + err.stack); + } + }); }); process.on('uncaughtException', function (err) { console.log("Uncaught exception: " + err); -}); \ No newline at end of file +});