bdb-fork-grimen
Version:
Berkeley DB(5.X) bindings for node
60 lines (51 loc) • 1.77 kB
JavaScript
// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.
var assert = require('assert');
var Buffer = require('buffer').Buffer;
var exec = require('child_process').exec;
var fs = require('fs');
var util = require('util');
var bdb = require('..');
var helper = require('./helper');
// setup
var ITERATIONS = 500;
var env = new bdb.DbEnv();
env.setLockDetect(bdb.FLAGS.DB_LOCK_MAXWRITE);
env.setMaxLockers(ITERATIONS * 6 + 1);
env.setMaxLockObjects(ITERATIONS * 6 + 1);
var env_location = "/tmp/" + helper.uuid();
fs.mkdirSync(env_location, 0750);
stat = env.openSync({home:env_location});
assert.equal(0, stat.code, stat.message);
var db = new bdb.Db(env);
stat = db.openSync({file: helper.uuid(), retries: 4});
assert.equal(0, stat.code, stat.message);
var run = function(callback) {
var key = new Buffer(helper.uuid());
var val = new Buffer(helper.uuid());
db.put({key: key, val: val}, function(res) {
assert.equal(0, res.code, res.message);
db.get({key: key}, function(res, data) {
assert.equal(0, res.code, res.message);
assert.ok(data, "no data from get");
assert.equal(val, data.toString(encoding='utf8'), 'Data mismatch');
db.del({key: key}, function(res) {
assert.equal(0, res.code, res.message);
callback();
});
});
});
};
// Make sure that multiple threads are kicking in for put/get/del
var finished = 0;
for(var i = 0; i < ITERATIONS; i++) {
run(function() {
if(++finished >= ITERATIONS) {
stat = db.closeSync();
assert.equal(0, stat.code, stat.message);
stat = env.closeSync();
assert.equal(0, stat.code, stat.message);
console.log('test_concurrent: PASSED');
exec("rm -fr " + env_location, function(err, stdout, stderr) {});
}
});
}