Skip to content
This repository was archived by the owner on Feb 11, 2020. It is now read-only.

Commit f3deb5d

Browse files
authored
Merge pull request #733 from martin-doyle/master
Catch http exception on server start
2 parents 822b2d4 + 9005cac commit f3deb5d

File tree

2 files changed

+69
-38
lines changed

2 files changed

+69
-38
lines changed

lib/interfaces.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,13 @@ function mqttsFactory(iface, fallback, mosca) {
9595

9696
return tls.createServer(credentials, buildWrap(mosca));
9797
}
98-
9998
function httpFactory(iface, fallback, mosca) {
10099
var serve = buildServe(iface, mosca);
101100
var server = http.createServer(serve);
102101

103-
mosca.attachHttpServer(server);
102+
server.on('listening', function () {
103+
mosca.attachHttpServer(server);
104+
});
104105
return server;
105106
}
106107

test/server_error.js

+66-36
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,77 @@
1-
var steed = require("steed");
1+
var steed = require('steed');
2+
var assert = chai.assert;
23

3-
var moscaSettings = function() {
4-
return {
5-
port: 1883
6-
};
4+
var moscaSettings = function () {
5+
return {
6+
port: 1883,
7+
http: {
8+
port: 8000
9+
}
10+
};
711
};
812

9-
describe("mosca.Server.error", function() {
10-
var instance;
11-
var secondInstance;
12-
var settings;
13+
var moscaSettings2 = function () {
14+
return {
15+
port: 1884,
16+
http: {
17+
port: 8000
18+
}
19+
};
20+
};
1321

14-
beforeEach(function(done) {
15-
settings = moscaSettings();
16-
settings.publishNewClient = false;
17-
settings.publishClientDisconnect = false;
18-
instance = new mosca.Server(settings, done);
19-
this.instance = instance;
20-
this.settings = settings;
21-
secondInstance = null;
2222

23-
});
23+
describe('mosca.Server.error', function () {
24+
var instance;
25+
var secondInstance;
2426

25-
afterEach(function(done) {
26-
var instances = [this.instance];
27+
beforeEach(function (done) {
28+
instance = null;
29+
secondInstance = null;
30+
done();
31+
});
2732

28-
if (secondInstance) {
29-
instances.push(secondInstance);
30-
}
33+
afterEach(function (done) {
34+
this.instance = instance;
35+
var instances = [this.instance];
3136

32-
steed.each(instances, function(instance, cb) {
33-
instance.close(cb);
34-
}, function() {
35-
setImmediate(done);
36-
});
37+
if (secondInstance) {
38+
instances.push(secondInstance);
39+
}
40+
41+
steed.each(instances, function (instance, cb) {
42+
instance.close(cb);
43+
}, function () {
44+
setImmediate(done);
45+
});
46+
});
47+
it('should get MQTT port Error: listen EADDRINUSE', function (done) {
48+
this.timeout(10000); // have to wait for the inject with delay of two seconds
49+
instance = new mosca.Server(moscaSettings(), function (err, server) {
50+
assert.ifError(err);
51+
expect(server === instance).to.be.true;
52+
});
53+
secondInstance = new mosca.Server(moscaSettings(), function (err, server) {
54+
assert.ifError(err);
55+
expect(server === secondInstance).to.be.true;
56+
});
57+
secondInstance.on('error', function (err) {
58+
expect(err.toString().substr(0, 24)).to.be.equal('Error: listen EADDRINUSE');
59+
done();
60+
});
61+
});
62+
it('should get HTTP port Error: listen EADDRINUSE', function (done) {
63+
this.timeout(10000); // have to wait for the inject with delay of two seconds
64+
instance = new mosca.Server(moscaSettings(), function (err, server) {
65+
assert.ifError(err);
66+
expect(server === instance).to.be.true;
67+
});
68+
secondInstance = new mosca.Server(moscaSettings2(), function (err, server) {
69+
assert.ifError(err);
70+
expect(server === secondInstance).to.be.true;
3771
});
38-
it("should get Error: listen EADDRINUSE :::1883", function(done) {
39-
secondInstance = new mosca.Server(moscaSettings(), function(err, server) {
40-
expect(server === secondInstance).to.be.true;
41-
});
42-
secondInstance.on('error', function(err) {
43-
expect(err.toString()).to.be.equal("Error: listen EADDRINUSE :::1883");
44-
done();
45-
});
72+
secondInstance.on('error', function (err) {
73+
expect(err.toString().substr(0, 24)).to.be.equal('Error: listen EADDRINUSE');
74+
done();
4675
});
76+
});
4777
});

0 commit comments

Comments
 (0)