UNPKG

memcached

Version:

A fully featured Memcached API client, supporting both single and clustered Memcached servers through consistent hashing and failover/failure. Memcached is rewrite of nMemcached, which will be deprecated in the near future.

137 lines (112 loc) 3.97 kB
'use strict'; /** * Test dependencies */ var assert = require('assert') , common = require('./common') , Memcached = require('../'); global.testnumbers = global.testnumbers || +(Math.random(10) * 1000000).toFixed(); /** * Expresso test suite for all `get` related * memcached commands */ describe('Memcached CAS', function () { /** * For a proper CAS update in memcached you will need to know the CAS value * of a given key, this is done by the `gets` command. So we will need to make * sure that a `cas` key is given. */ it('set and gets for cas result', function (done) { var memcached = new Memcached(common.servers.single) , message = common.alphabet(256) , testnr = ++global.testnumbers , callbacks = 0; memcached.set('test:' + testnr, message, 1000, function (error, ok) { ++callbacks; assert.ok(!error); ok.should.be.true; memcached.gets('test:' + testnr, function (error, answer) { ++callbacks; assert.ok(!error); assert.ok(typeof answer === 'object'); assert.ok(!!answer.cas); answer['test:' + testnr].should.eql(message); memcached.end(); // close connections assert.equal(callbacks, 2); done(); }); }); }); /** * Create a successful cas update, so we are sure we send a cas request correctly. */ it('successful cas update', function(done) { var memcached = new Memcached(common.servers.single) , message = common.alphabet(256) , testnr = ++global.testnumbers , callbacks = 0; memcached.set('test:' + testnr, message, 1000, function (error, ok) { ++callbacks; assert.ok(!error); ok.should.be.true; memcached.gets('test:' + testnr, function (error, answer) { ++callbacks; assert.ok(!error); assert.ok(!!answer.cas); // generate new message for the cas update message = common.alphabet(256); memcached.cas('test:' + testnr, message, answer.cas, 1000, function (error, answer) { ++callbacks; assert.ok(!error); assert.ok(!!answer); memcached.get('test:' + testnr, function (error, answer) { ++callbacks; assert.ok(!error); answer.should.eql(message); memcached.end(); // close connections assert.equal(callbacks, 4); done(); }); }); }); }); }); /** * Create a unsuccessful cas update, which would indicate that the server has changed * while we where doing nothing. */ it('unsuccessful cas update', function (done) { var memcached = new Memcached(common.servers.single) , message = common.alphabet(256) , testnr = ++global.testnumbers , callbacks = 0; memcached.set('test:' + testnr, message, 1000, function (error, ok) { ++callbacks; assert.ok(!error); ok.should.be.true; memcached.gets('test:' + testnr, function (error, answer) { ++callbacks; assert.ok(!error); assert.ok(!!answer.cas); // generate new message message = common.alphabet(256); memcached.set('test:' + testnr, message, 1000, function () { ++callbacks; memcached.cas('test:' + testnr, message, answer.cas, 1000, function (error, answer) { ++callbacks; assert.ok(!error); assert.ok(!answer); memcached.get('test:' + testnr, function (error, answer) { ++callbacks; assert.ok(!error); answer.should.eql(message); memcached.end(); // close connections assert.equal(callbacks, 5); done(); }); }); }); }); }); }); });