Skip to content

Commit 6db3d6d

Browse files
author
martin-doyle
committed
Catch http exception on server start
1 parent 793f076 commit 6db3d6d

2 files changed

Lines changed: 64 additions & 38 deletions

File tree

lib/interfaces.js

Lines changed: 3 additions & 2 deletions
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

Lines changed: 61 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,72 @@
1-
var steed = require("steed");
1+
var steed = require('steed');
22

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

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

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;
2221

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

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

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

32-
steed.each(instances, function(instance, cb) {
33-
instance.close(cb);
34-
}, function() {
35-
setImmediate(done);
36-
});
36+
if (secondInstance) {
37+
instances.push(secondInstance);
38+
}
39+
40+
steed.each(instances, function (instance, cb) {
41+
instance.close(cb);
42+
}, function () {
43+
setImmediate(done);
44+
});
45+
});
46+
it('should get MQTT port Error: listen EADDRINUSE :::1883', function (done) {
47+
this.timeout(10000); // have to wait for the inject with delay of two seconds
48+
instance = new mosca.Server(moscaSettings(), function (err, server) {
49+
expect(server === instance).to.be.true;
50+
});
51+
secondInstance = new mosca.Server(moscaSettings(), function (err, server) {
52+
expect(server === secondInstance).to.be.true;
53+
});
54+
secondInstance.on('error', function (err) {
55+
expect(err.toString()).to.be.equal('Error: listen EADDRINUSE :::1883');
56+
done();
57+
});
58+
});
59+
it('should get HTTP port Error: listen EADDRINUSE :::8000', function (done) {
60+
this.timeout(10000); // have to wait for the inject with delay of two seconds
61+
instance = new mosca.Server(moscaSettings(), function (err, server) {
62+
expect(server === instance).to.be.true;
63+
});
64+
secondInstance = new mosca.Server(moscaSettings2(), function (err, server) {
65+
expect(server === secondInstance).to.be.true;
3766
});
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-
});
67+
secondInstance.on('error', function (err) {
68+
expect(err.toString()).to.be.equal('Error: listen EADDRINUSE :::8000');
69+
done();
4670
});
71+
});
4772
});

0 commit comments

Comments
 (0)