diff --git a/lib/server.js b/lib/server.js index 84984d0..74d8bc4 100644 --- a/lib/server.js +++ b/lib/server.js @@ -491,38 +491,53 @@ function Server(options) { this.server.on('error', function (err) { self.emit('error', err); }); - - this.__defineGetter__('maxConnections', function () { - return self.server.maxConnections; - }); - this.__defineSetter__('maxConnections', function (val) { - self.server.maxConnections = val; - }); - this.__defineGetter__('connections', function () { - return self.server.connections; - }); - this.__defineGetter__('name', function () { - return 'LDAPServer'; - }); - this.__defineGetter__('url', function () { - var str; - if (!this.server.address().family) { - str = 'ldapi://'; - str += this.host.replace(new RegExp('/', 'g'), '%2f'); - return str; - } - if (this.server instanceof tls.Server) { - str = 'ldaps://'; - } else { - str = 'ldap://'; - } - str += self.host || 'localhost'; - str += ':'; - str += self.port || 389; - return str; - }); } util.inherits(Server, EventEmitter); +Object.defineProperties(Server.prototype, { + maxConnections: { + get: function getMaxConnections() { + return this.server.maxConnections; + }, + set: function setMaxConnections(val) { + this.server.maxConnections = val; + }, + configurable: false + }, + connections: { + get: function getConnections() { + return this.server.connections; + }, + configurable: false + }, + name: { + get: function getName() { + return 'LDAPServer'; + }, + configurable: false + }, + url: { + get: function getURL() { + var str; + var addr = this.server.address(); + if (!addr) { + return null; + } + if (!addr.family) { + str = 'ldapi://'; + str += this.host.replace(new RegExp('/', 'g'), '%2f'); + return str; + } + if (this.server instanceof tls.Server) { + str = 'ldaps://'; + } else { + str = 'ldap://'; + } + str += this.host + ':' + this.port; + return str; + }, + configurable: false + } +}); module.exports = Server; @@ -705,7 +720,7 @@ Server.prototype.listen = function (port, host, callback) { } var self = this; - function _callback() { + function cbListen() { if (typeof (port) === 'number') { self.host = self.address().address; self.port = self.address().port; @@ -719,9 +734,9 @@ Server.prototype.listen = function (port, host, callback) { } if (typeof (port) === 'number') { - return this.server.listen(port, host, _callback); + return this.server.listen(port, host, cbListen); } else { - return this.server.listen(port, _callback); + return this.server.listen(port, cbListen); } }; Server.prototype.listenFD = function (fd) { diff --git a/test/server.test.js b/test/server.test.js index c4e5c19..d9125d8 100644 --- a/test/server.test.js +++ b/test/server.test.js @@ -45,12 +45,30 @@ test('basic create', function (t) { t.end(); }); +test('properties', function (t) { + t.equal(server.name, 'LDAPServer'); + + // TODO: better test + server.maxConnections = 10; + t.equal(server.maxConnections, 10); + + t.equal(server.url, null, 'url empty before bind'); + // listen on a random port so we have a url + server.listen(0, 'localhost', function () { + t.ok(server.url); + + server.close(); + t.end(); + }); +}); + test('listen on unix/named socket', function (t) { - t.plan(1); + t.plan(2); server = ldap.createServer(); sock = getSock(); server.listen(sock, function () { - t.ok(true); + t.ok(server.url); + t.equal(server.url.split(':')[0], 'ldapi'); server.close(); t.end(); });