tls: document and test option-less createServer

Either the options or the listener argument to tls.createServer() was
optional, but not both. This makes no sense, so align the argument
checking and documentation with net.createServer(), which accepts the
same option sequence, and which tls.createServer() is modelled on.

PR-URL: https://github.com/nodejs/node/pull/9800
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
This commit is contained in:
Sam Roberts committed 2016-12-12 08:15:36 -08:00
1 parent c3839f7ed4
commit d4050b38d6
3 files changed
+27 -11

No files matched your search

+1 -1
View File
@@ -948,7 +948,7 @@ publicly trusted list of CAs as given in
<http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt>.
## tls.createServer(options[, secureConnectionListener])
## tls.createServer([options][, secureConnectionListener])
<!-- YAML
added: v0.3.2
-->
+9 -8
View File
@@ -745,18 +745,19 @@ TLSSocket.prototype.getProtocol = function() {
// "PATH_LENGTH_EXCEEDED", "INVALID_PURPOSE" "CERT_UNTRUSTED",
// "CERT_REJECTED"
//
function Server(/* [options], listener */) {
var options, listener;
function Server(options, listener) {
if (!(this instanceof Server))
return new Server(options, listener);
if (arguments[0] !== null && typeof arguments[0] === 'object') {
options = arguments[0];
listener = arguments[1];
} else if (typeof arguments[0] === 'function') {
if (typeof options === 'function') {
listener = options;
options = {};
listener = arguments[0];
} else if (options == null || typeof options === 'object') {
options = options || {};
} else {
throw new TypeError('options must be an object');
}
if (!(this instanceof Server)) return new Server(options, listener);
this._contexts = [];
+17 -2
View File
@@ -1,4 +1,5 @@
'use strict';
var assert = require('assert');
var common = require('../common');
if (!common.hasCrypto) {
@@ -10,6 +11,20 @@ var tls = require('tls');
// Omitting the cert or pfx option to tls.createServer() should not throw.
// AECDH-NULL-SHA is a no-authentication/no-encryption cipher and hence
// doesn't need a certificate.
tls.createServer({ ciphers: 'AECDH-NULL-SHA' }).listen(0, function() {
tls.createServer({ ciphers: 'AECDH-NULL-SHA' })
.listen(0, common.mustCall(close));
tls.createServer(assert.fail)
.listen(0, common.mustCall(close));
tls.createServer({})
.listen(0, common.mustCall(close));
assert.throws(() => tls.createServer('this is not valid'), TypeError);
tls.createServer()
.listen(0, common.mustCall(close));
function close() {
this.close();
});
}