You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.5 KiB
152 lines
4.5 KiB
|
|
var MongoClient = require('mongodb').MongoClient; |
|
var steed = require('steed')(); |
|
|
|
describeAscoltatore("mongo", function() { |
|
afterEach(function(done) { |
|
this.instance.close(done); |
|
}); |
|
|
|
it("should publish a binary payload", function(done) { |
|
var that = this; |
|
that.instance.sub("hello/*", function(topic, value) { |
|
expect(value).to.eql(new Buffer("42")); |
|
done(); |
|
}, function() { |
|
that.instance.pub("hello/123", new Buffer("42")); |
|
}); |
|
}); |
|
|
|
it("should support the old connect uri + db", function(done) { |
|
this.instance.close(function() { |
|
this.instance = new ascoltatori.MongoAscoltatore({ uri: 'mongodb://127.0.0.1/', db: 'ascoltatoriTests2' }); |
|
this.instance.on('ready', function() { |
|
expect(this.instance.db.databaseName).to.eql('ascoltatoriTests2'); |
|
done(); |
|
}.bind(this)); |
|
}.bind(this)); |
|
}); |
|
|
|
it("should reuse another mongo connection", function(done) { |
|
this.instance.close(function() { |
|
MongoClient.connect('mongodb://127.0.0.1/ascoltatoriTest3', {}, function(err, db) { |
|
this.instance = new ascoltatori.MongoAscoltatore({ db: db }); |
|
this.instance.on('ready', done); |
|
}.bind(this)); |
|
}.bind(this)); |
|
}); |
|
|
|
it.skip("should publish 2000 messages without skipping one", function(done) { |
|
var that = this; |
|
var count = 0; |
|
var max = 2000; |
|
|
|
function doPub(n, next) { |
|
that.instance.pub("hello/123", "abcde " + n, {}, next); |
|
} |
|
|
|
that.instance.sub("hello/*", function(topic, value) { |
|
count++; |
|
if (count === max) { |
|
done(); |
|
} |
|
}, function() { |
|
steed.times(max, doPub); |
|
}); |
|
}); |
|
|
|
it("should publish a big payload", function(done) { |
|
var that = this; |
|
var payload = new Buffer(5 * 1024); |
|
that.instance.sub("hello/*", function(topic, value) { |
|
expect(value).to.eql(payload); |
|
done(); |
|
}, function(err) { |
|
that.instance.pub("hello/123", payload); |
|
}); |
|
}); |
|
|
|
it("should publish with options", function(done) { |
|
var that = this; |
|
that.instance.subscribe("hello/*", function(topic, value, options) { |
|
expect(value).to.equal("42"); |
|
expect(options.qos).to.equal(1); |
|
expect(options.messageId).to.equal(5); |
|
done(); |
|
}, function() { |
|
that.instance.publish("hello/123", "42", { qos: 1, messageId: 5 }); |
|
}); |
|
}); |
|
|
|
// flaky test on CI |
|
it.skip("should not suffer from mongo interruptions", function (done) { |
|
this.instance.close(function () { |
|
MongoClient.connect('mongodb://127.0.0.1/ascoltatoriTest4', {}, function (err, db) { |
|
db.on('error', done); |
|
this.instance = new ascoltatori.MongoAscoltatore({ db: db }); |
|
this.instance.on('error', done); |
|
this.instance.on('ready', function () { |
|
_test(this); |
|
}.bind(this)); |
|
}.bind(this)); |
|
}.bind(this)); |
|
|
|
function _test(that) { |
|
that.instance.subscribe("hello/*", function (topic, value, options) { |
|
if (value === "42") { |
|
done(); |
|
} |
|
}, function () { |
|
that.instance.publish("hello/123", "21"); |
|
that.instance.db.logout({}, function (err, res) { |
|
if (err) { |
|
throw(err); |
|
} |
|
that.instance.publish("hello/456", "42"); |
|
}); |
|
}); |
|
} |
|
}); |
|
|
|
it("should not duplicate messages", function(done) { |
|
this.timeout(5000); |
|
|
|
var that = this; |
|
var called = 0; |
|
that.instance.sub("hello", function(topic, value) { |
|
called++; |
|
expect(called).to.be.lessThan(3); |
|
expect(value).to.eql(new Buffer("42")); |
|
}, function() { |
|
that.instance.pub("hello", new Buffer("42")); |
|
that.instance.pub("hello", new Buffer("42")); |
|
setTimeout(done, 3000); |
|
}); |
|
}); |
|
|
|
it("should not duplicate messages when sending messages sequentially", function(done) { |
|
this.timeout(5000); |
|
|
|
var that = this; |
|
var called = 0; |
|
that.instance.sub("hello", function(topic, value) { |
|
called++; |
|
expect(called).to.be.lessThan(7); |
|
expect(value).to.eql(new Buffer("42")); |
|
}, function() { |
|
setTimeout(function(){ |
|
that.instance.pub("hello", new Buffer("42")); |
|
that.instance.pub("hello", new Buffer("42")); |
|
setTimeout(function(){ |
|
that.instance.pub("hello", new Buffer("42")); |
|
that.instance.pub("hello", new Buffer("42")); |
|
setTimeout(function(){ |
|
that.instance.pub("hello", new Buffer("42")); |
|
that.instance.pub("hello", new Buffer("42")); |
|
},100); |
|
},100); |
|
},100); |
|
setTimeout(done, 3000); |
|
}); |
|
}); |
|
});
|
|
|