blob: 5454777d1f8663b2ca6764612059b8487be75e11 [file] [log] [blame]
'use strict';
var PouchDB = require('../../packages/pouchdb-for-coverage');
var Checkpointer = PouchDB.utils.checkpointer;
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
var replicationDoc;
function reject(req, res) {
replicationDoc = req.body.docs[0];
res.status(403).send({error: true, message: 'Unauthorized'});
}
app.post('*', reject);
app.delete('*', reject);
app.put('*', reject);
app.use(require('pouchdb-express-router')(PouchDB));
require('chai').should();
describe('test.read_only_replication.js', function () {
var server;
before(function () {
server = app.listen(0);
});
after(function () {
return server.close();
});
it('Test checkpointer handles error codes', function () {
var db = new PouchDB('test');
// These are the same, but one goes over HTTP so that we have the
// above access control
var remote = new PouchDB('remote');
var remoteName = 'http://127.0.0.1:' + server.address().port +
'/remote';
var remoteHTTP = new PouchDB(remoteName);
var expectedLastSeq;
var checkpointer;
return remote.bulkDocs([{_id: 'foo'}, {_id: 'bar'}]).then(function () {
return db.replicate.from(remoteHTTP);
}).then(function (replicationResult) {
expectedLastSeq = replicationResult.last_seq;
checkpointer = new Checkpointer(remoteHTTP, db, replicationDoc._id,
replicationResult);
return checkpointer.getCheckpoint().then(function (actualLastSeq) {
actualLastSeq.should.equal(expectedLastSeq);
});
}).then(function () {
return remote.destroy();
}).then(function () {
// By now, the checkpointer should have marked the source database
// read-only, and make no other request to read or write a
// replication log from or rather to it. We therefore expect
// `checkpointer.getCheckpoint()` to resolve with the same result
// as previously, even though the source database has now been
// destroyed.
return checkpointer.getCheckpoint().then(function (actualLastSeq) {
actualLastSeq.should.equal(expectedLastSeq);
});
}).then(function () {
return db.destroy();
});
});
});