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.
221 lines
5.5 KiB
221 lines
5.5 KiB
"use strict"; |
|
global.sinon = require("sinon"); |
|
global.chai = require("chai"); |
|
global.expect = require("chai").expect; |
|
|
|
global.redisSettings = function() { |
|
return { |
|
json: false, |
|
port: 6379, |
|
host: '127.0.0.1' |
|
}; |
|
}; |
|
|
|
var portCounter = 7042; |
|
global.nextPort = function() { |
|
return ++portCounter; |
|
}; |
|
|
|
global.zeromqSettings = function(remote_ports) { |
|
return { |
|
json: false, |
|
zmq: require("zmq"), |
|
port: "tcp://127.0.0.1:" + global.nextPort(), |
|
controlPort: "tcp://127.0.0.1:" + global.nextPort(), |
|
delay: 10 |
|
}; |
|
}; |
|
|
|
global.kafkaSettings = function(useHighLevelConsumer) { |
|
return { |
|
json: false, |
|
kafka: require("kafka-node"), |
|
connectionString: "localhost:2181", |
|
clientId: "test", |
|
groupId: "test", |
|
useHighLevelConsumer: useHighLevelConsumer || false , |
|
defaultEncoding: "utf8", |
|
encodings: {image: "buffer", hello_42: "utf-8"} |
|
}; |
|
}; |
|
|
|
global.AMQPSettings = function() { |
|
return { |
|
json: false, |
|
amqp: require("amqp"), |
|
exchange: "ascolatore" + global.nextPort() |
|
}; |
|
}; |
|
|
|
global.AMQPLibSettings = function() { |
|
return { |
|
json: false, |
|
amqp: require("amqplib/callback_api"), |
|
exchange: "ascolatore" + global.nextPort() |
|
}; |
|
}; |
|
|
|
global.MQTTSettings = function() { |
|
return { |
|
json: false, |
|
mqtt: require("mqtt"), |
|
host: "127.0.0.1", |
|
port: 5883 |
|
}; |
|
}; |
|
|
|
global.mongoSettings = function() { |
|
return { |
|
url: 'mongodb://127.0.0.1/ascoltatoriTests?auto_reconnect=true', |
|
pubsubCollection: 'pubsub', |
|
json: false, |
|
mongo: {} // put here your mongo-specific options! |
|
}; |
|
}; |
|
|
|
global.trieSettings = function() { |
|
return { |
|
json: false |
|
}; |
|
}; |
|
|
|
global.fileSystemSettings = function() { |
|
return { |
|
single: false, |
|
json: false |
|
}; |
|
}; |
|
|
|
global.eventEmitter2Settings = function() { |
|
return { |
|
json: false |
|
}; |
|
}; |
|
|
|
global.trieSettings = function() { |
|
return { |
|
json: false |
|
}; |
|
}; |
|
|
|
global.decoratorSettings = function() { |
|
var r = global.trieSettings(); |
|
r.WrappedAscoltatore = global.ascoltatori.TrieAscoltatore; |
|
return r; |
|
}; |
|
|
|
global.JSONSettings = global.decoratorSettings; |
|
|
|
global.prefixSettings = function() { |
|
var r = global.decoratorSettings(); |
|
r.args = [this.separator + "myprefix"]; |
|
return r; |
|
}; |
|
|
|
var mosca = require("mosca"); |
|
|
|
global.mqttServer = new mosca.Server({ |
|
port: 5883, |
|
stats: false, |
|
logger: { |
|
level: "fatal" |
|
} |
|
}); |
|
|
|
if (process.env.COVER) { |
|
global.ascoltatori = require("../lib-cov/ascoltatori"); |
|
} else { |
|
global.ascoltatori = require("../"); |
|
} |
|
|
|
global.wrap = require("../lib/util").wrap; |
|
|
|
global.chai.use(require("sinon-chai")); |
|
|
|
global.check_no_topic_transform = function () { |
|
it("should not transform topics", function () { |
|
global.expect(this.instance._reInSeparator).not.to.exist; |
|
global.expect(this.instance._reOutSeparator).not.to.exist; |
|
global.expect(this.instance._reInWildcardOne).not.to.exist; |
|
global.expect(this.instance._reInWildcardSome).not.to.exist; |
|
|
|
var s = ''; |
|
for (var i = 0; i < 256; i += 1) { |
|
s += String.fromCharCode(i); |
|
} |
|
|
|
global.expect(this.instance._subTopic(s)).to.equal(s); |
|
global.expect(this.instance._recvTopic(s)).to.equal(s); |
|
global.expect(this.instance._pubTopic(s)).to.equal(s); |
|
}); |
|
}; |
|
|
|
function intercept(instance, separator, wildcardOne, wildcardSome) |
|
{ |
|
var replace_sep = function(topic) { |
|
return topic.replace(/\//g, separator); |
|
}; |
|
var replace_all = function(topic) { |
|
return replace_sep(topic) |
|
.replace(/\+/g, wildcardOne) |
|
.replace(/\*/g, wildcardSome); |
|
}; |
|
var subscribe = instance.subscribe; |
|
var unsubscribe = instance.unsubscribe; |
|
var publish = instance.publish; |
|
instance.subscribe = function(topic, callback, done) { |
|
subscribe.call(this, replace_all(topic), callback, done); |
|
}; |
|
instance.unsubscribe = function(topic, callback, done) { |
|
unsubscribe.call(this, replace_all(topic), callback, done); |
|
}; |
|
instance.publish = function(topic, message, options, done) { |
|
publish.call(this, replace_sep(topic), message, options, done); |
|
}; |
|
instance.sub = instance.subscribe; |
|
instance.unsub = instance.unsubscribe; |
|
instance.pub = instance.publish; |
|
} |
|
|
|
global.describeAscoltatore = function(type, f) { |
|
var typeCap = type[0].toUpperCase() + type.slice(1) + "Ascoltatore", |
|
makeSettings = global[type + "Settings"]; |
|
|
|
var test = function(custom, separator, wildcardOne, wildcardSome, f2) { |
|
describe("ascoltatori." + typeCap + (custom || ""), function () { |
|
beforeEach(function(done) { |
|
this.separator = separator || "/"; |
|
var settings = makeSettings.call(this), |
|
args = settings.args || []; |
|
if (custom) { |
|
settings.separator = separator; |
|
settings.wildcardOne = wildcardOne; |
|
settings.wildcardSome = wildcardSome; |
|
} |
|
if (settings.WrappedAscoltatore) { |
|
this.wrapped = settings = new settings.WrappedAscoltatore(settings); |
|
if (custom) { |
|
intercept(this.wrapped, separator, wildcardOne, wildcardSome); |
|
} |
|
} |
|
args.push(settings); |
|
this.instance = new global.ascoltatori[typeCap](args[0], args[1]); |
|
if (custom) { |
|
intercept(this.instance, separator, wildcardOne, wildcardSome); |
|
} |
|
this.instance.on("ready", done); |
|
}); |
|
global.ascoltatori.behaveLikeAnAscoltatore(); |
|
if (f) { f(); } |
|
if (f2) { f2(); } |
|
}); |
|
}; |
|
|
|
test(); |
|
test("DifferentWildcardAndSeparator", "|", "!", "$"); |
|
test("MQTTWildcardAndSeparator", "/", "+", "#", function () { |
|
if (type === "MQTT") { |
|
global.check_no_topic_transform(); |
|
} |
|
}); |
|
};
|
|
|