diff --git a/lib/dat-manager.js b/lib/dat-manager.js index 23460dd4..5a6ac5ea 100644 --- a/lib/dat-manager.js +++ b/lib/dat-manager.js @@ -27,6 +27,7 @@ function createManager ({ multidat, dbPaused }, onupdate) { return { create: create, close: close, + disconnect: multidat.disconnect, pause: pause, resume: resume, togglePause: togglePause diff --git a/package-lock.json b/package-lock.json index 4a5afd3b..311129b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5991,21 +5991,21 @@ "integrity": "sha512-PZM4dhYFmCF6uZGWpEmoPMUqJBywS9IcAgybT2GmSpYI1BvGvoWSdbio+ik+q/YD2vodhvslESWIS3NnkKYdqQ==" }, "multidat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/multidat/-/multidat-5.0.2.tgz", - "integrity": "sha1-oho8okb6PIfNX7wbeCJzFrTdndc=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/multidat/-/multidat-5.1.0.tgz", + "integrity": "sha512-SGRyp4I8ElZv/lbdo9t6tyii13Xd14uPtRglIw3ptFgsBNKq6PH3OYmV9MMfv3LjsjiLimjaO8ZIdQ07wbIv5w==", "requires": { "dat-node": "3.5.5", "explain-error": "1.0.4", "fast-json-parse": "1.0.3", - "multidrive": "5.1.1", + "multidrive": "5.2.0", "xtend": "4.0.1" } }, "multidrive": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/multidrive/-/multidrive-5.1.1.tgz", - "integrity": "sha1-ZQQJLCo/14GfH7xKO/ju4WuwYq0=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/multidrive/-/multidrive-5.2.0.tgz", + "integrity": "sha512-3uEuwoR/O0xxI2Do7AewEdk/uOTABcYmBAqAj1YbuEUx8O07v1PNPy7sKEWV4gr70GC+pJNwhIob95ULBfgitg==", "requires": { "debug": "2.6.9", "map-limit": "0.0.1" diff --git a/package.json b/package.json index aef1213a..84a0fe09 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "mirror-folder": "^2.1.0", "mkdirp": "^0.5.1", "ms": "^0.7.2", - "multidat": "^5.0.1", + "multidat": "^5.1.0", "nanologger": "^1.0.2", "nanomorph": "^5.0.0", "prettier-bytes": "^1.0.3", diff --git a/tests/dat-manager.js b/tests/dat-manager.js index 1570ace1..a867da32 100644 --- a/tests/dat-manager.js +++ b/tests/dat-manager.js @@ -4,9 +4,17 @@ var toilet = require('toiletdb/inmemory') var Manager = require('../lib/dat-manager') -function setup (cb) { - var db = toilet() - var dbPaused = toilet() +function setup (db, dbPaused, cb) { + if (typeof db === 'function') { + dbPaused = db + db = null + } + if (typeof dbPaused === 'function') { + cb = dbPaused + dbPaused = null + } + if (!db) db = toilet() + if (!dbPaused) dbPaused = toilet() Multidat(db, function (err, multidat) { if (err) return cb(err) cb(null, { multidat, dbPaused }) @@ -25,25 +33,44 @@ tape('dat-manager', function (t) { t.throws(Manager.bind(null, { multidat }, onupdate)) var manager = Manager({ multidat, dbPaused }, onupdate) t.ok(manager) - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) }) }) t.test('load existing dats', function (t) { - setup(function (err, { multidat, dbPaused }) { + var db = toilet() + var dbPaused = toilet() + setup(db, dbPaused, function (err, { multidat, dbPaused }) { t.error(err) function onupdate () {} - var managerA = Manager({ multidat, dbPaused }, onupdate) - managerA.create(`/tmp/${Math.random()}`, function (err) { + var manager = Manager({ multidat, dbPaused }, onupdate) + manager.create(`/tmp/${Math.random()}`, function (err) { + t.error(err) + manager.disconnect(function () { + t.error(err) + secondTime() + }) + }) + }) + function secondTime () { + setup(db, dbPaused, function (err, { multidat, dbPaused }) { t.error(err) + var manager = Manager({ multidat, dbPaused }, onupdate) + var ended = false function onupdate (err, dats) { - if (t.ended || dats.length !== 1) return + if (ended || dats.length !== 1) return + ended = true t.error(err) - t.equal(dats.length, 1) - t.end() + t.equal(dats.length, 1, 'The dat should exist the second time around') + manager.disconnect(function (err) { + t.error(err) + t.end() + }) } - Manager({ multidat, dbPaused }, onupdate) }) - }) + } }) }) @@ -59,20 +86,27 @@ tape('dat-manager', function (t) { t.throws(manager.create.bind(manager, dir, {})) manager.create(dir, {}, function () {}) manager.create(dir, function () {}) - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) }) }) t.test('create a dat', function (t) { setup(function (err, { multidat, dbPaused }) { t.error(err) + var ended = false function onupdate (err, dats) { - if (t.ended) return + if (ended) return t.error(err) var dat = dats[0] if (dat && dat.network && dat.metadata && dat.metadata.title && dat.stats && typeof dat.progress === 'number') { t.equal(dat.metadata.title, basename) t.equal(dat.metadata.author, 'Anonymous') - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) } } var manager = Manager({ multidat, dbPaused }, onupdate) @@ -88,12 +122,13 @@ tape('dat-manager', function (t) { t.test('.close(key, cb)', function (t) { t.test('close a dat', function (t) { - t.plan(5) + t.plan(6) setup(function (err, { multidat, dbPaused }) { t.error(err, 'setup') var closing = false + var ended = false function onupdate (err, dats) { - if (!t.ended && closing && dats.length === 0) { + if (!ended && closing && dats.length === 0) { t.error(err) t.ok(true, 'onupdate') } @@ -104,6 +139,10 @@ tape('dat-manager', function (t) { closing = true manager.close(dat.key, function (err) { t.error(err, 'dat closed') + ended = true + manager.disconnect(function (err) { + t.error(err) + }) }) }) }) @@ -120,7 +159,10 @@ tape('dat-manager', function (t) { var dat = dats[0] if (!dat) return t.notOk(dat.network) - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) } var manager = Manager({ multidat, dbPaused }, onupdate) manager.create(`/tmp/${Math.random()}`, function (err, dat) { @@ -138,12 +180,17 @@ tape('dat-manager', function (t) { setup(function (err, { multidat, dbPaused }) { t.error(err) var resuming = false + var ended = false function onupdate (err, dats) { - if (!dats.length || !resuming || t.ended) return + if (!dats.length || !resuming || ended) return + ended = true t.error(err) var dat = dats[0] t.ok(dat.network) - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) } var manager = Manager({ multidat, dbPaused }, onupdate) manager.create(`/tmp/${Math.random()}`, function (err, dat) { @@ -164,13 +211,17 @@ tape('dat-manager', function (t) { t.test('pause a dat', function (t) { setup(function (err, { multidat, dbPaused }) { t.error(err) + var ended = false function onupdate (err, dats) { - if (!dats.length || t.ended) return + if (!dats.length || ended) return + ended = true t.error(err) var dat = dats[0] - if (!dat) return t.notOk(dat.network) - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) } var manager = Manager({ multidat, dbPaused }, onupdate) manager.create(`/tmp/${Math.random()}`, function (err, dat) { @@ -185,12 +236,17 @@ tape('dat-manager', function (t) { setup(function (err, { multidat, dbPaused }) { t.error(err) var resuming = false + var ended = false function onupdate (err, dats) { - if (!dats.length || !resuming || t.ended) return + if (!dats.length || !resuming || ended) return + ended = true t.error(err) var dat = dats[0] t.ok(dat.network) - t.end() + manager.disconnect(function (err) { + t.error(err) + t.end() + }) } var manager = Manager({ multidat, dbPaused }, onupdate) manager.create(`/tmp/${Math.random()}`, function (err, dat) {