2014-07-29 13:28:15 -07:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var chai = require('chai');
|
|
|
|
var should = chai.should;
|
2014-07-31 10:06:47 -07:00
|
|
|
var expect = chai.expect;
|
2014-07-29 13:28:15 -07:00
|
|
|
|
2014-07-31 10:06:47 -07:00
|
|
|
var levelup = require('levelup');
|
|
|
|
var memdown = require('memdown');
|
2014-07-31 11:16:05 -07:00
|
|
|
var microtime = require('microtime');
|
2014-08-04 11:43:38 -07:00
|
|
|
var MessageDb = require('../lib/MessageDb');
|
|
|
|
var bitcore = require('bitcore');
|
|
|
|
var SIN = bitcore.SIN;
|
|
|
|
var Key = bitcore.Key;
|
|
|
|
var AuthMessage = bitcore.AuthMessage;
|
2014-07-29 13:28:15 -07:00
|
|
|
|
|
|
|
describe('MessageDb', function() {
|
2014-07-31 10:06:47 -07:00
|
|
|
var opts = {
|
|
|
|
name: 'test-MessageDb',
|
|
|
|
db: levelup({
|
|
|
|
db: memdown,
|
|
|
|
sync: true,
|
2014-07-31 11:16:05 -07:00
|
|
|
valueEncoding: 'json'
|
2014-07-31 10:06:47 -07:00
|
|
|
})
|
|
|
|
};
|
2014-07-29 13:28:15 -07:00
|
|
|
it('should be able to create instance', function() {
|
2014-07-30 13:29:28 -07:00
|
|
|
var mdb = new MessageDb(opts);
|
2014-07-31 10:06:47 -07:00
|
|
|
expect(mdb).to.exist;
|
2014-07-29 13:28:15 -07:00
|
|
|
});
|
2014-07-31 10:06:47 -07:00
|
|
|
it('should be able to create default instance', function() {
|
|
|
|
var mdb = MessageDb.default();
|
|
|
|
expect(mdb).to.exist;
|
2014-07-30 13:29:28 -07:00
|
|
|
});
|
2014-08-04 11:43:38 -07:00
|
|
|
var fpk = Key.generateSync();
|
|
|
|
var tpk = Key.generateSync();
|
|
|
|
var from = fpk.public.toString('hex');
|
|
|
|
var to = tpk.public.toString('hex');
|
|
|
|
var messageData = {
|
2014-07-30 13:29:28 -07:00
|
|
|
a: 1,
|
|
|
|
b: 2
|
|
|
|
};
|
2014-08-04 11:43:38 -07:00
|
|
|
var messageData2 = {};
|
|
|
|
var messageData3 = ['a', 'b'];
|
|
|
|
var message = AuthMessage.encode(to, fpk, messageData);
|
|
|
|
var message2 = AuthMessage.encode(to, fpk, messageData2);
|
|
|
|
var message3 = AuthMessage.encode(to, fpk, messageData3);
|
2014-07-31 11:16:05 -07:00
|
|
|
it('should be able to add and read a message', function(done) {
|
2014-07-30 13:29:28 -07:00
|
|
|
var mdb = new MessageDb(opts);
|
2014-07-31 11:16:05 -07:00
|
|
|
var lower_ts = microtime.now();
|
2014-08-04 11:43:38 -07:00
|
|
|
mdb.addMessage(message, function(err) {
|
2014-07-31 10:06:47 -07:00
|
|
|
expect(err).to.not.exist;
|
2014-07-31 11:16:05 -07:00
|
|
|
var upper_ts = microtime.now();
|
2014-08-05 09:04:38 -07:00
|
|
|
mdb.getMessages(to, lower_ts, upper_ts, function(err, messages) {
|
2014-07-31 10:06:47 -07:00
|
|
|
expect(err).to.not.exist;
|
|
|
|
messages.length.should.equal(1);
|
2014-07-31 11:16:05 -07:00
|
|
|
messages[0].ts.should.be.below(upper_ts);
|
|
|
|
messages[0].ts.should.be.above(lower_ts);
|
2014-08-04 11:43:38 -07:00
|
|
|
var m = AuthMessage.decode(tpk, messages[0]).payload;
|
2014-07-31 10:06:47 -07:00
|
|
|
m.a.should.equal(1);
|
|
|
|
m.b.should.equal(2);
|
|
|
|
done();
|
2014-07-31 11:16:05 -07:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2014-08-05 11:58:08 -07:00
|
|
|
var sharedMDB;
|
|
|
|
it('should be able to add many messages and read some', function(done) {
|
2014-07-31 11:16:05 -07:00
|
|
|
var mdb = new MessageDb(opts);
|
2014-08-05 11:58:08 -07:00
|
|
|
sharedMDB = mdb;
|
2014-07-31 11:16:05 -07:00
|
|
|
var lower_ts = microtime.now();
|
2014-08-04 11:43:38 -07:00
|
|
|
mdb.addMessage(message, function(err) {
|
2014-07-31 11:16:05 -07:00
|
|
|
expect(err).to.not.exist;
|
2014-08-04 11:43:38 -07:00
|
|
|
mdb.addMessage(message2, function(err) {
|
2014-07-31 11:16:05 -07:00
|
|
|
expect(err).to.not.exist;
|
|
|
|
var upper_ts = microtime.now();
|
|
|
|
setTimeout(function() {
|
2014-08-04 11:43:38 -07:00
|
|
|
mdb.addMessage(message3, function(err) {
|
2014-07-31 11:16:05 -07:00
|
|
|
expect(err).to.not.exist;
|
2014-08-05 09:04:38 -07:00
|
|
|
mdb.getMessages(to, lower_ts, upper_ts, function(err, messages) {
|
2014-07-31 11:16:05 -07:00
|
|
|
expect(err).to.not.exist;
|
|
|
|
messages.length.should.equal(2);
|
|
|
|
messages[0].ts.should.be.below(upper_ts);
|
|
|
|
messages[0].ts.should.be.above(lower_ts);
|
2014-08-04 11:43:38 -07:00
|
|
|
var m0 = AuthMessage.decode(tpk, messages[0]).payload;
|
|
|
|
JSON.stringify(m0).should.equal('{"a":1,"b":2}');
|
2014-07-31 11:16:05 -07:00
|
|
|
messages[1].ts.should.be.below(upper_ts);
|
|
|
|
messages[1].ts.should.be.above(lower_ts);
|
2014-08-04 11:43:38 -07:00
|
|
|
var m1 = AuthMessage.decode(tpk, messages[1]).payload;
|
|
|
|
JSON.stringify(m1).should.equal('{}');
|
2014-07-31 11:16:05 -07:00
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}, 10);
|
2014-07-31 10:06:47 -07:00
|
|
|
});
|
2014-07-29 13:28:15 -07:00
|
|
|
});
|
|
|
|
});
|
2014-08-05 11:58:08 -07:00
|
|
|
it('should be able to add many messages and read all', function(done) {
|
|
|
|
var mdb = sharedMDB;
|
|
|
|
mdb.getMessages(to, null, null, function(err, messages) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
messages.length.should.equal(4);
|
|
|
|
var m0 = AuthMessage.decode(tpk, messages[0]).payload;
|
|
|
|
JSON.stringify(m0).should.equal('{"a":1,"b":2}');
|
|
|
|
var m1 = AuthMessage.decode(tpk, messages[1]).payload;
|
|
|
|
JSON.stringify(m1).should.equal('{"a":1,"b":2}');
|
|
|
|
var m2 = AuthMessage.decode(tpk, messages[2]).payload;
|
|
|
|
JSON.stringify(m2).should.equal('{}');
|
|
|
|
var m3 = AuthMessage.decode(tpk, messages[3]).payload;
|
|
|
|
JSON.stringify(m3).should.equal('["a","b"]');
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
2014-09-01 14:42:52 -07:00
|
|
|
it('should be able #removeUpTo', function(done) {
|
2014-09-01 14:13:37 -07:00
|
|
|
var mdb = sharedMDB;
|
2014-09-01 14:42:52 -07:00
|
|
|
var upper_ts = microtime.now();
|
|
|
|
mdb.addMessage(message, function(err) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
mdb.removeUpTo(upper_ts, function(err, n) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
n.should.equal(4);
|
|
|
|
mdb.getAll(function(error, all) {
|
|
|
|
expect(error).to.not.exist;
|
|
|
|
all.length.should.equal(1);
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
2014-09-01 14:13:37 -07:00
|
|
|
});
|
2014-07-31 10:06:47 -07:00
|
|
|
it('should be able to close instance', function() {
|
|
|
|
var mdb = new MessageDb(opts);
|
|
|
|
mdb.close();
|
|
|
|
expect(mdb).to.exist;
|
|
|
|
});
|
2014-07-29 13:28:15 -07:00
|
|
|
});
|