From c2fc8eaf293828a03739431b3b4daaa916ceb074 Mon Sep 17 00:00:00 2001 From: Wesley Moore Date: Sun, 30 Jan 2011 04:01:20 +1100 Subject: [PATCH] ImplementDb.clear and call at start of tests --- spec/kyoto-client_test.coffee | 142 +++++++++++++++++----------------- src/db.coffee | 11 ++- 2 files changed, 83 insertions(+), 70 deletions(-) diff --git a/spec/kyoto-client_test.coffee b/spec/kyoto-client_test.coffee index fdecb6f..2675584 100644 --- a/spec/kyoto-client_test.coffee +++ b/spec/kyoto-client_test.coffee @@ -11,83 +11,87 @@ vows.describe('kyoto-client').addBatch( 'after successfully opening': topic: (db) -> db.open 'localhost', 1978 - - 'getting a non-existent value': - topic: (db) -> - db.get 'not-here', this.callback - undefined - - 'returns null': (error, value) -> - assert.isNull value - - 'setting a value': - topic: (db) -> - db.set 'test', "Test Value", (error) => - db.get 'test', this.callback - undefined - - 'allows the value to be retrieved': (error, value) -> - assert.equal value.toString('utf8'), "Test Value" - - 'getBulk': - topic: (db) -> - db.set 'bulk1', "Bulk Value 1", (error) => - db.set 'bulk2', "Bulk Value 2", (error) => - db.getBulk ['bulk1', 'bulk2', 'missing'], this.callback - undefined - - 'allows multiple values to be retrieved at once': (error, results) -> + db.clear(this.callback) + undefined + + 'and clearing': + topic: (error, db) -> + db + + 'getting a non-existent value': + topic: (db) -> + db.get 'not-here', this.callback + undefined + + 'returns null': (error, value) -> + assert.isNull value + + 'setting a value': + topic: (db) -> + db.set 'test', "Test Value", (error) => + db.get 'test', this.callback + undefined + + 'allows the value to be retrieved': (error, value) -> + assert.equal value.toString('utf8'), "Test Value" + + 'getBulk': + topic: (db) -> + db.set 'bulk1', "Bulk Value 1", (error) => + db.set 'bulk2', "Bulk Value 2", (error) => + db.getBulk ['bulk1', 'bulk2', 'missing'], this.callback + undefined + + 'allows multiple values to be retrieved at once': (error, results) -> assert.equal results.bulk1, "Bulk Value 1" assert.equal results.bulk2, "Bulk Value 2" assert.isUndefined results.missing - 'getBulk with escaped values': - topic: (db) -> - db.set 'bulk3', "Bulk\tValue", (error) => - db.set 'bulk4', "Bulk Value 2", (error) => - db.getBulk ['bulk3', 'bulk4'], this.callback - undefined + 'getBulk with escaped values': + topic: (db) -> + db.set 'bulk3', "Bulk\tValue", (error) => + db.set 'bulk4', "Bulk Value 2", (error) => + db.getBulk ['bulk3', 'bulk4'], this.callback + undefined - 'allows multiple values to be retrieved at once': (error, results) -> + 'allows multiple values to be retrieved at once': (error, results) -> assert.equal results.bulk3, "Bulk\tValue" assert.equal results.bulk4, "Bulk Value 2" assert.isUndefined results.missing - - 'Cursor with starting key': - topic: (db) -> - # Add a value for the cursor to retrieve - db.set 'cursor-test', "Cursor\tValue", (error) => - db.getCursor 'cursor-test', this.callback - undefined - - 'current value can be retrieved': (error, cursor) -> - cursor.get (error, key, value) -> - assert.equal key.toString('utf8'), "cursor-test" - assert.equal value.toString('utf8'), "Cursor\tValue" - - 'can be enumerated': (error, cursor) -> - count = 0 - cursor.each (error, key, value) -> - assert.isUndefined error - if key? - count++ - else - assert.ok count > 0, "count is greater than zero" - - 'Cursor with no start key': - topic: (db) -> - db.getCursor this.callback - undefined - - 'can be enumerated': (error, cursor) -> - count = 0 - cursor.each (error, key, value) -> - assert.isUndefined error - if key? - count++ - else - assert.ok count > 0, "count is greater than zero" - + 'Cursor with starting key': + topic: (db) -> + # Add a value for the cursor to retrieve + db.set 'cursor-test', "Cursor\tValue", (error) => + db.getCursor 'cursor-test', this.callback + undefined + + 'current value can be retrieved': (error, cursor) -> + cursor.get (error, key, value) -> + assert.equal key.toString('utf8'), "cursor-test" + assert.equal value.toString('utf8'), "Cursor\tValue" + + 'can be enumerated': (error, cursor) -> + count = 0 + cursor.each (error, key, value) -> + assert.isUndefined error + if key? + count++ + else + assert.ok count > 0, "count is greater than zero" + + 'Cursor with no start key': + topic: (db) -> + db.getCursor this.callback + undefined + + 'can be enumerated': (error, cursor) -> + count = 0 + cursor.each (error, key, value) -> + assert.isUndefined error + if key? + count++ + else + assert.ok count > 0, "count is greater than zero" ).export(module) \ No newline at end of file diff --git a/src/db.coffee b/src/db.coffee index 5afa956..8f7a8c0 100644 --- a/src/db.coffee +++ b/src/db.coffee @@ -121,8 +121,17 @@ class DB when 200 then callback undefined, data else callback new Error("Unexpected response from server: #{response.statusCode}"); + # Remove all values + clear: (callback) -> + request = @client.request 'GET', '/rpc/clear', + 'Connection': 'keep-alive' + request.end() - clear: (error) -> + request.on 'response', (response) -> + response.on 'end', -> + switch response.statusCode + when 200 then callback() + else callback new Error("Unexpected response from server: #{response.statusCode}"); # TODO: Add optional database arg # Note: value can be a string or Buffer for utf-8 strings it should be a Buffer