From eadbcb5a0cb3bb31793ffad9f3d10b24ae76427c Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Fri, 27 Jun 2014 09:41:41 +0200 Subject: [PATCH] Improved reliability of LevelUp persistence tests. Still the 'database not open spurious failure remains'. --- lib/persistence/levelup.js | 9 ++++++++- package.json | 20 +++++++++++--------- test/persistence/levelup_spec.js | 18 +++++++++--------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/lib/persistence/levelup.js b/lib/persistence/levelup.js index f3fe9d2..f7357d2 100644 --- a/lib/persistence/levelup.js +++ b/lib/persistence/levelup.js @@ -84,6 +84,8 @@ function LevelUpPersistence(options, callback) { this._subscriptions = this.db.sublevel("subscriptions"); this._offlinePackets = this.db.sublevel("offlinePackets"); this._subMatcher = new Matcher(); + this._packetCounter = 0; + this._lastStoredPacketTime = Date.now(); var that = this; var stream = this._subscriptions.createReadStream(); @@ -321,7 +323,12 @@ LevelUpPersistence.prototype.updateOfflinePacket = function(client, messageId, n }; LevelUpPersistence.prototype._storePacket = function(client, packet, cb) { - var key = util.format("%s:%s:%d", client, new Date().toISOString(), Math.floor(Math.random() * 2048)); + var currentTime = Date.now(); + if (currentTime !== this._lastStoredPacketTime) { + this._packetCounter = 0; + } + this._lastStoredPacketTime = currentTime; + var key = util.format("%s:%d:%d", client, currentTime, ++this._packetCounter); var ttl = { ttl: this.options.ttl.subscriptions }; diff --git a/package.json b/package.json index edba51e..c6ecd59 100644 --- a/package.json +++ b/package.json @@ -48,20 +48,22 @@ "author": "Matteo Collina ", "license": "MIT", "devDependencies": { - "mocha": "~1.20.0", + "async_bench": "~0.3.0", "chai": "~1.9.1", - "sinon": "~1.7.3", - "sinon-chai": "~2.5.0", - "underscore": "~1.6.0", + "coveralls": "~2.10.0", "dox-foundation": "~0.5.4", + "istanbul": "~0.2.6", "jshint": "~2.4.4", "microtime": "~0.5.0", - "tmp": "0.0.23", + "mocha": "~1.20.0", + "mongo-clean": "0.0.1", + "osenv": "^0.1.0", + "rimraf": "^2.2.8", + "sinon": "~1.7.3", + "sinon-chai": "~2.5.0", "supertest": "~0.10.0", - "coveralls": "~2.10.0", - "istanbul": "~0.2.6", - "async_bench": "~0.3.0", - "mongo-clean": "0.0.1" + "tmp": "0.0.23", + "underscore": "~1.6.0" }, "dependencies": { "mqtt": "~0.3.10", diff --git a/test/persistence/levelup_spec.js b/test/persistence/levelup_spec.js index 72d49ce..da81a61 100644 --- a/test/persistence/levelup_spec.js +++ b/test/persistence/levelup_spec.js @@ -2,14 +2,16 @@ var abstract = require("./abstract"); var LevelUp = require("../../").persistence.LevelUp; -var tmp = require("tmp"); var async = require("async"); +var tmpdir = require("osenv").tmpdir(); +var path = require("path"); +var rimraf = require("rimraf"); describe("mosca.persistence.LevelUp", function() { this.timeout(2000); - var opts = { + var opts = { ttl: { checkFrequency: 250, subscriptions: 250, @@ -19,14 +21,12 @@ describe("mosca.persistence.LevelUp", function() { abstract(LevelUp, function(cb) { var that = this; - tmp.dir(function (err, path) { - if (err) { - return cb(err); - } + opts.path = path.join(tmpdir, 'level_' + Date.now()); + cb(null, opts); + }); - opts.path = path; - cb(null, opts); - }); + afterEach(function deleteLevel(done) { + rimraf(opts.path, done); }); describe("two instances", function() {