daily-storage
Version:
daily - The LevelDB storage abstaction
96 lines (78 loc) • 2.51 kB
JavaScript
var test = require('tap').test;
var async = require('async');
var setup = require('../setup.js')();
setup.open();
var CRITICAL_LIMIT = Math.pow(2, 16);
var FUTURE_SECOND = Math.ceil(Date.now() / 1000) + 5;
var PAST_SECOND = Math.ceil(Date.now() / 1000) - 20; // timecache is 10 sec
function createQueue(message, amount) {
var queue = [];
for (var i = 0; i < amount; i++) {
queue.push(job);
}
function job(done) {
setup.storage.write(message, done);
}
return queue;
}
test('write in past time', function (t) {
var writeRequest = {
'type': 'write',
'id': 0,
'seconds': PAST_SECOND,
'milliseconds': 500,
'level': 1,
'message': new Buffer('past')
};
t.test('past - fill up database to the critical limit', function (t) {
async.parallel(createQueue(writeRequest, CRITICAL_LIMIT + 1), function (err, result) {
t.ifError(err);
var failures = result.filter(function (res) { return res.error !== null; });
t.equal(failures.length, 1);
t.end();
});
});
t.test('past - executing future writes will also result in error', function (t) {
setup.storage.write(writeRequest, function (err, result) {
t.equal(err, null);
t.notEqual(result.error, null);
if (result.error !== null) {
t.equal(result.error.name, 'RangeError');
t.equal(result.error.message, 'duplicate decrementer exceeded 16 bit uint capacity');
}
t.end();
});
});
t.end();
});
test('write in future time', function (t) {
var writeRequest = {
'type': 'write',
'id': 0,
'seconds': FUTURE_SECOND,
'milliseconds': 500,
'level': 1,
'message': new Buffer('future')
};
t.test('future - fill up database to the critical limit', {timeout: Infinity }, function (t) {
async.parallel(createQueue(writeRequest, CRITICAL_LIMIT + 1), function (err, result) {
t.ifError(err);
var failures = result.filter(function (res) { return res.error !== null; });
t.equal(failures.length, 1);
t.end();
});
});
t.test('future - executing future writes will also result in error', function (t) {
setup.storage.write(writeRequest, function (err, result) {
t.equal(err, null);
t.notEqual(result.error, null);
if (result.error !== null) {
t.equal(result.error.name, 'RangeError');
t.equal(result.error.message, 'duplicate decrementer exceeded 16 bit uint capacity');
}
t.end();
});
});
t.end();
});
setup.close();