(#2608) - race condition in sync replication test
diff --git a/lib/adapters/leveldb.js b/lib/adapters/leveldb.js index 5cd7223..d284c96 100644 --- a/lib/adapters/leveldb.js +++ b/lib/adapters/leveldb.js
@@ -987,15 +987,19 @@ opts = utils.clone(opts); var leveldown = opts.db || originalLeveldown; - if (typeof leveldown.destroy !== 'function') { - leveldown.destroy = function (name, cb) { cb(); }; + function callDestroy(name, cb) { + if (typeof leveldown.destroy === 'function') { + leveldown.destroy(name, cb); + } else { + process.nextTick(callback); + } } var dbStore; if (dbStores.has(leveldown.name)) { dbStore = dbStores.get(leveldown.name); } else { - dbStore = new utils.Map(); + return callDestroy(name, callback); } if (dbStore.has(name)) { @@ -1004,10 +1008,10 @@ dbStore.get(name).close(function () { dbStore.delete(name); - leveldown.destroy(name, callback); + callDestroy(name, callback); }); } else { - leveldown.destroy(name, callback); + callDestroy(name, callback); } });
diff --git a/tests/test.sync.js b/tests/test.sync.js index b537a0e..d373fbd 100644 --- a/tests/test.sync.js +++ b/tests/test.sync.js
@@ -252,7 +252,7 @@ it('Push and pull changes both fire (issue 2555)', function (done) { var db = new PouchDB(dbs.name); var remote = new PouchDB(dbs.remote); - + var correct = false; db.post({}).then(function () { return remote.post({}); }).then(function () { @@ -269,8 +269,12 @@ lastChange.should.not.equal(change.direction); } if (++numChanges === 2) { - done(); + correct = true; + sync.cancel(); } + }).on('complete', function () { + correct.should.equal(true, 'things happened right'); + done(); }); }); });