summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnton Salikhmetov <anton.salikhmetov@gmail.com>2018-03-02 21:46:34 +0200
committerMyles Borins <mylesborins@google.com>2018-08-16 01:59:10 -0400
commit1f49de4b24455ccc504e6255a496b5b2075d0182 (patch)
treef1609aef3726b0c74b29c964c3cfd846964b87ff /test
parentf57c53c811d6f51fb03dabe496a4eb5958b6cbb3 (diff)
downloadnode-new-1f49de4b24455ccc504e6255a496b5b2075d0182.tar.gz
tls: expose Finished messages in TLSSocket
Exposes SSL_get_finished and SSL_get_peer_finished routines in OpenSSL as tlsSocket.getFinished and tlsSocket.getPeerFinished, respectively. PR-URL: https://github.com/nodejs/node/pull/19102 Fixes: https://github.com/nodejs/node/issues/19055 Refs: https://github.com/ripple/rippled/issues/2413 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-tls-finished.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/parallel/test-tls-finished.js b/test/parallel/test-tls-finished.js
new file mode 100644
index 0000000000..8b52934b04
--- /dev/null
+++ b/test/parallel/test-tls-finished.js
@@ -0,0 +1,66 @@
+'use strict';
+
+const common = require('../common');
+const fixtures = require('../common/fixtures');
+
+if (!common.hasCrypto)
+ common.skip('missing crypto');
+
+// This test ensures that tlsSocket.getFinished() and
+// tlsSocket.getPeerFinished() return undefined before
+// secure connection is established, and return non-empty
+// Buffer objects with Finished messages afterwards, also
+// verifying alice.getFinished() == bob.getPeerFinished()
+// and alice.getPeerFinished() == bob.getFinished().
+
+const assert = require('assert');
+const tls = require('tls');
+
+const msg = {};
+const pem = (n) => fixtures.readKey(`${n}.pem`);
+const server = tls.createServer({
+ key: pem('agent1-key'),
+ cert: pem('agent1-cert')
+}, common.mustCall((alice) => {
+ msg.server = {
+ alice: alice.getFinished(),
+ bob: alice.getPeerFinished()
+ };
+ server.close();
+}));
+
+server.listen(0, common.mustCall(() => {
+ const bob = tls.connect({
+ port: server.address().port,
+ rejectUnauthorized: false
+ }, common.mustCall(() => {
+ msg.client = {
+ alice: bob.getPeerFinished(),
+ bob: bob.getFinished()
+ };
+ bob.end();
+ }));
+
+ msg.before = {
+ alice: bob.getPeerFinished(),
+ bob: bob.getFinished()
+ };
+}));
+
+process.on('exit', () => {
+ assert.strictEqual(undefined, msg.before.alice);
+ assert.strictEqual(undefined, msg.before.bob);
+
+ assert(Buffer.isBuffer(msg.server.alice));
+ assert(Buffer.isBuffer(msg.server.bob));
+ assert(Buffer.isBuffer(msg.client.alice));
+ assert(Buffer.isBuffer(msg.client.bob));
+
+ assert(msg.server.alice.length > 0);
+ assert(msg.server.bob.length > 0);
+ assert(msg.client.alice.length > 0);
+ assert(msg.client.bob.length > 0);
+
+ assert(msg.server.alice.equals(msg.client.alice));
+ assert(msg.server.bob.equals(msg.client.bob));
+});