diff options
author | Jimmy Cann <mail@jimmycann.com> | 2017-08-14 00:24:12 +1000 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2017-08-27 10:53:32 -0300 |
commit | a7dccd040d72ce7de61d9160ec031420c52a49d4 (patch) | |
tree | 800671809fc2b5af3498e185ebc7cee8ae2b28ec /test/parallel/test-tls-options-boolean-check.js | |
parent | 0097794922d29692b3487eccf5c6204fe230543d (diff) | |
download | android-node-v8-a7dccd040d72ce7de61d9160ec031420c52a49d4.tar.gz android-node-v8-a7dccd040d72ce7de61d9160ec031420c52a49d4.tar.bz2 android-node-v8-a7dccd040d72ce7de61d9160ec031420c52a49d4.zip |
tls: type checking for `key`, `cert` and `ca` options
PR-URL: https://github.com/nodejs/node/pull/14807
Fixes: https://github.com/nodejs/node/issues/12802
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test/parallel/test-tls-options-boolean-check.js')
-rw-r--r-- | test/parallel/test-tls-options-boolean-check.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/test/parallel/test-tls-options-boolean-check.js b/test/parallel/test-tls-options-boolean-check.js new file mode 100644 index 0000000000..4cc0aaf377 --- /dev/null +++ b/test/parallel/test-tls-options-boolean-check.js @@ -0,0 +1,156 @@ +'use strict'; + +const common = require('../common'); +const fixtures = require('../common/fixtures'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const assert = require('assert'); +const tls = require('tls'); + +function toArrayBuffer(buf) { + const ab = new ArrayBuffer(buf.length); + const view = new Uint8Array(ab); + return buf.map((b, i) => view[i] = b); +} + +function toDataView(buf) { + const ab = new ArrayBuffer(buf.length); + const view = new DataView(ab); + return buf.map((b, i) => view[i] = b); +} + +const keyBuff = fixtures.readKey('agent1-key.pem'); +const certBuff = fixtures.readKey('agent1-cert.pem'); +const keyBuff2 = fixtures.readKey('ec-key.pem'); +const certBuff2 = fixtures.readKey('ec-cert.pem'); +const caCert = fixtures.readKey('ca1-cert.pem'); +const caCert2 = fixtures.readKey('ca2-cert.pem'); +const keyStr = keyBuff.toString(); +const certStr = certBuff.toString(); +const keyStr2 = keyBuff2.toString(); +const certStr2 = certBuff2.toString(); +const caCertStr = caCert.toString(); +const caCertStr2 = caCert2.toString(); +const keyArrBuff = toArrayBuffer(keyBuff); +const certArrBuff = toArrayBuffer(certBuff); +const caArrBuff = toArrayBuffer(caCert); +const keyDataView = toDataView(keyBuff); +const certDataView = toDataView(certBuff); +const caArrDataView = toDataView(caCert); +const invalidKeyRE = /^The "key" argument must be one of type string, Buffer, TypedArray, or DataView$/; +const invalidCertRE = /^The "cert" argument must be one of type string, Buffer, TypedArray, or DataView$/; + +// Checks to ensure tls.createServer doesn't throw an error +// Format ['key', 'cert'] +[ + [keyBuff, certBuff], + [false, certBuff], + [keyBuff, false], + [keyStr, certStr], + [false, certStr], + [keyStr, false], + [false, false], + [keyArrBuff, certArrBuff], + [keyArrBuff, false], + [false, certArrBuff], + [keyDataView, certDataView], + [keyDataView, false], + [false, certDataView], + [[keyBuff, keyBuff2], [certBuff, certBuff2]], + [[keyStr, keyStr2], [certStr, certStr2]], + [[keyStr, keyStr2], false], + [false, [certStr, certStr2]], + [[{ pem: keyBuff }], false], + [[{ pem: keyBuff }, { pem: keyBuff }], false] +].map((params) => { + assert.doesNotThrow(() => { + tls.createServer({ + key: params[0], + cert: params[1] + }); + }); +}); + +// Checks to ensure tls.createServer predictably throws an error +// Format ['key', 'cert', 'expected message'] +[ + [true, certBuff, invalidKeyRE], + [keyBuff, true, invalidCertRE], + [true, certStr, invalidKeyRE], + [keyStr, true, invalidCertRE], + [true, certArrBuff, invalidKeyRE], + [keyArrBuff, true, invalidCertRE], + [true, certDataView, invalidKeyRE], + [keyDataView, true, invalidCertRE], + [true, true, invalidCertRE], + [true, false, invalidKeyRE], + [false, true, invalidCertRE], + [true, false, invalidKeyRE], + [{ pem: keyBuff }, false, invalidKeyRE], + [false, { pem: keyBuff }, invalidCertRE], + [1, false, invalidKeyRE], + [false, 1, invalidCertRE], + [[keyBuff, true], [certBuff, certBuff2], invalidKeyRE], + [[true, keyStr2], [certStr, certStr2], invalidKeyRE], + [[keyBuff, keyBuff2], [true, certBuff2], invalidCertRE], + [[keyStr, keyStr2], [certStr, true], invalidCertRE], + [[true, false], [certBuff, certBuff2], invalidKeyRE], + [[keyStr, keyStr2], [true, false], invalidCertRE], + [[keyStr, keyStr2], true, invalidCertRE], + [true, [certBuff, certBuff2], invalidKeyRE] +].map((params) => { + assert.throws(() => { + tls.createServer({ + key: params[0], + cert: params[1] + }); + }, common.expectsError({ + code: 'ERR_INVALID_ARG_TYPE', + type: TypeError, + message: params[2] + })); +}); + +// Checks to ensure tls.createServer works with the CA parameter +// Format ['key', 'cert', 'ca'] +[ + [keyBuff, certBuff, caCert], + [keyBuff, certBuff, [caCert, caCert2]], + [keyBuff, certBuff, caCertStr], + [keyBuff, certBuff, [caCertStr, caCertStr2]], + [keyBuff, certBuff, caArrBuff], + [keyBuff, certBuff, caArrDataView], + [keyBuff, certBuff, false], +].map((params) => { + assert.doesNotThrow(() => { + tls.createServer({ + key: params[0], + cert: params[1], + ca: params[2] + }); + }); +}); + +// Checks to ensure tls.createServer throws an error for CA assignment +// Format ['key', 'cert', 'ca'] +[ + [keyBuff, certBuff, true], + [keyBuff, certBuff, {}], + [keyBuff, certBuff, 1], + [keyBuff, certBuff, true], + [keyBuff, certBuff, [caCert, true]] +].map((params) => { + assert.throws(() => { + tls.createServer({ + key: params[0], + cert: params[1], + ca: params[2] + }); + }, common.expectsError({ + code: 'ERR_INVALID_ARG_TYPE', + type: TypeError, + message: /^The "ca" argument must be one of type string, Buffer, TypedArray, or DataView$/ + })); +}); |