From 382a1a7fa3312600ea7c95e173a628a3d2a4f3e1 Mon Sep 17 00:00:00 2001 From: Julian Gruber Date: Tue, 26 May 2015 18:25:02 +0200 Subject: [PATCH] add compression test suite --- package.json | 2 + test/compression-test.js | 92 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 test/compression-test.js diff --git a/package.json b/package.json index 07f5f817..28b753b1 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ "nan": "~1.8.4" }, "devDependencies": { + "async": "~1.0.0", + "delayed": "~1.0.1", "du": "~0.1.0", "faucet": "0.0.1", "mkfiletree": "~0.0.1", diff --git a/test/compression-test.js b/test/compression-test.js new file mode 100644 index 00000000..af86e2ca --- /dev/null +++ b/test/compression-test.js @@ -0,0 +1,92 @@ +/* Copyright (c) 2012-2015 LevelUP contributors + * See list at + * MIT License + */ + +var async = require('async') + , du = require('du') + , delayed = require('delayed') + , common = require('abstract-leveldown/testCommon') + , leveldown = require('../') + , test = require('tape') + + , compressableData = new Buffer(Array.apply(null, Array(1024 * 100)).map(function () { return 'aaaaaaaaaa' }).join('')) + , multiples = 10 + , dataSize = compressableData.length * multiples + + , verify = function (location, compression, t) { + du(location, function (err, size) { + t.error(err) + if (compression) + t.ok(size < dataSize, 'on-disk size (' + size + ') is less than data size (' + dataSize + ')') + else + t.ok(size >= dataSize, 'on-disk size (' + size + ') is greater than data size (' + dataSize + ')') + t.end() + }) + } + + // close, open, close again.. 'compaction' is also performed on open()s + , cycle = function (db, compression, t, callback) { + var location = db.location + db.close(function (err) { + t.error(err) + db = leveldown(location) + db.open({ errorIfExists: false, compression: compression }, function () { + t.error(err) + db.close(function (err) { + t.error(err) + callback() + }) + }) + }) + } + +test('Compression', function (t) { + t.test('set up', common.setUp) + + t.test('test data is compressed by default (db.put())', function (t) { + var db = leveldown(common.location()) + db.open(function (err) { + t.error(err) + async.forEach( + Array.apply(null, Array(multiples)).map(function (e, i) { + return [ i, compressableData ] + }) + , function (args, callback) { + db.put.apply(db, args.concat([callback])) + } + , cycle.bind(null, db, true, t, delayed.delayed(verify.bind(null, db.location, true, t), 0.01)) + ) + }) + }) + + t.test('test data is not compressed with compression=false on open() (db.put())', function (t) { + var db = leveldown(common.location()) + db.open({ compression: false }, function (err) { + t.error(err) + async.forEach( + Array.apply(null, Array(multiples)).map(function (e, i) { + return [ i, compressableData ] + }) + , function (args, callback) { + db.put.apply(db, args.concat([callback])) + } + , cycle.bind(null, db, false, t, delayed.delayed(verify.bind(null, db.location, false, t), 0.01)) + ) + }) + }) + + t.test('test data is compressed by default (db.batch())', function (t) { + var db = leveldown(common.location()) + db.open(function (err) { + t.error(err) + db.batch( + Array.apply(null, Array(multiples)).map(function (e, i) { + return { type: 'put', key: i, value: compressableData } + }) + , cycle.bind(null, db, false, t, delayed.delayed(verify.bind(null, db.location, false, t), 0.01)) + ) + }) + }) +}) +