From 7f149586062ebae8114f64078771cb25579f5003 Mon Sep 17 00:00:00 2001 From: Maximilian Krambach Date: Wed, 19 Sep 2018 10:56:36 +0200 Subject: [PATCH] js: add configuration option on startup -- * src/index.js: Added an optional configuration object for the startup. * configuration: timeout - the initial check for a connection ran into timeouts on slower testing machines. 500ms for initial startup is not sufficient everywhere. The default timeout was raised to 1000ms, and as an option this timeout can be increased even further. * BrowsertestExtension: Set the initial connection timeouts to 2 seconds, to be able to test on slower machines. --- .../tests/KeyImportExport.js | 2 +- .../js/BrowserTestExtension/tests/KeyInfos.js | 2 +- .../BrowserTestExtension/tests/decryptTest.js | 2 +- .../tests/encryptDecryptTest.js | 2 +- .../BrowserTestExtension/tests/encryptTest.js | 2 +- .../tests/longRunningTests.js | 2 +- .../js/BrowserTestExtension/tests/signTest.js | 2 +- lang/js/BrowserTestExtension/tests/startup.js | 2 +- .../BrowserTestExtension/tests/verifyTest.js | 2 +- lang/js/src/Connection.js | 8 +++-- lang/js/src/index.js | 8 +++-- lang/js/unittests.js | 36 ++++++++++--------- 12 files changed, 41 insertions(+), 29 deletions(-) diff --git a/lang/js/BrowserTestExtension/tests/KeyImportExport.js b/lang/js/BrowserTestExtension/tests/KeyImportExport.js index f57877f4..b3d95bbc 100644 --- a/lang/js/BrowserTestExtension/tests/KeyImportExport.js +++ b/lang/js/BrowserTestExtension/tests/KeyImportExport.js @@ -32,7 +32,7 @@ describe('Key importing', function () { let context = null; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; context.Keyring.getKeys({ pattern: fpr }).then( diff --git a/lang/js/BrowserTestExtension/tests/KeyInfos.js b/lang/js/BrowserTestExtension/tests/KeyInfos.js index 553aedb9..d1229584 100644 --- a/lang/js/BrowserTestExtension/tests/KeyInfos.js +++ b/lang/js/BrowserTestExtension/tests/KeyInfos.js @@ -27,7 +27,7 @@ describe('Key information', function () { let context = null; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/BrowserTestExtension/tests/decryptTest.js b/lang/js/BrowserTestExtension/tests/decryptTest.js index 61a3fab9..5817eb49 100644 --- a/lang/js/BrowserTestExtension/tests/decryptTest.js +++ b/lang/js/BrowserTestExtension/tests/decryptTest.js @@ -29,7 +29,7 @@ describe('Decryption', function () { const good_fpr = inputvalues.encrypt.good.fingerprint; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout:2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js index c10c5d06..b4e4f3fb 100644 --- a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js +++ b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js @@ -29,7 +29,7 @@ describe('Encryption and Decryption', function (){ let good_fpr = inputvalues.encrypt.good.fingerprint; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/BrowserTestExtension/tests/encryptTest.js b/lang/js/BrowserTestExtension/tests/encryptTest.js index d97b458d..1017d714 100644 --- a/lang/js/BrowserTestExtension/tests/encryptTest.js +++ b/lang/js/BrowserTestExtension/tests/encryptTest.js @@ -28,7 +28,7 @@ describe('Encryption', function () { let context = null; const good_fpr = inputvalues.encrypt.good.fingerprint; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/BrowserTestExtension/tests/longRunningTests.js b/lang/js/BrowserTestExtension/tests/longRunningTests.js index f28a6e78..534a95aa 100644 --- a/lang/js/BrowserTestExtension/tests/longRunningTests.js +++ b/lang/js/BrowserTestExtension/tests/longRunningTests.js @@ -27,7 +27,7 @@ describe('Long running Encryption/Decryption', function () { let context = null; const good_fpr = inputvalues.encrypt.good.fingerprint; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/BrowserTestExtension/tests/signTest.js b/lang/js/BrowserTestExtension/tests/signTest.js index bd8db807..1e269e6a 100644 --- a/lang/js/BrowserTestExtension/tests/signTest.js +++ b/lang/js/BrowserTestExtension/tests/signTest.js @@ -29,7 +29,7 @@ describe('Signing', function () { const good_fpr = inputvalues.encrypt.good.fingerprint; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/BrowserTestExtension/tests/startup.js b/lang/js/BrowserTestExtension/tests/startup.js index cf5b0999..e7c74782 100644 --- a/lang/js/BrowserTestExtension/tests/startup.js +++ b/lang/js/BrowserTestExtension/tests/startup.js @@ -25,7 +25,7 @@ describe('GPGME context', function (){ it('Starting a GpgME instance', function (done){ - let prm = Gpgmejs.init(); + let prm = Gpgmejs.init({ timeout: 2000 }); const input = inputvalues.someInputParameter; prm.then( function (context){ diff --git a/lang/js/BrowserTestExtension/tests/verifyTest.js b/lang/js/BrowserTestExtension/tests/verifyTest.js index 04c7a77a..c63f6849 100644 --- a/lang/js/BrowserTestExtension/tests/verifyTest.js +++ b/lang/js/BrowserTestExtension/tests/verifyTest.js @@ -28,7 +28,7 @@ describe('Verifying data', function () { let context = null; before(function (done){ - const prm = Gpgmejs.init(); + const prm = Gpgmejs.init({ timeout: 2000 }); prm.then(function (gpgmejs){ context = gpgmejs; done(); diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js index 4055da6a..d43d55f1 100644 --- a/lang/js/src/Connection.js +++ b/lang/js/src/Connection.js @@ -74,11 +74,15 @@ export class Connection{ * Retrieves the information about the backend. * @param {Boolean} details (optional) If set to false, the promise will * just return if a connection was successful. + * @param {Number} timeout (optional) * @returns {Promise|Promise} Details from the * backend * @async */ - checkConnection (details = true){ + checkConnection (details = true, timeout = 1000){ + if (typeof timeout !== 'number' && timeout <= 0) { + timeout = 1000; + } const msg = createMessage('version'); if (details === true) { return this.post(msg); @@ -90,7 +94,7 @@ export class Connection{ new Promise(function (resolve, reject){ setTimeout(function (){ reject(gpgme_error('CONN_TIMEOUT')); - }, 500); + }, timeout); }) ]).then(function (){ // success resolve(true); diff --git a/lang/js/src/index.js b/lang/js/src/index.js index c52460cc..b8e4274d 100644 --- a/lang/js/src/index.js +++ b/lang/js/src/index.js @@ -31,13 +31,17 @@ import { Connection } from './Connection'; * connection once, and then offers the available functions as method of the * response object. * An unsuccessful attempt will reject as a GPGME_Error. + * @param {Object} config (optional) configuration options + * @param {Number} config.timeout set the timeout for the initial connection + * check. On some machines and operating systems a default timeout of 500 ms is + * too low, so a higher number might be attempted. * @returns {Promise} * @async */ -function init (){ +function init ({ timeout = 500 } = {}){ return new Promise(function (resolve, reject){ const connection = new Connection; - connection.checkConnection(false).then( + connection.checkConnection(false, timeout).then( function (result){ if (result === true) { resolve(new GpgME()); diff --git a/lang/js/unittests.js b/lang/js/unittests.js index de06320e..f28be76a 100644 --- a/lang/js/unittests.js +++ b/lang/js/unittests.js @@ -34,34 +34,38 @@ import { GPGME_Message, createMessage } from './src/Message'; mocha.setup('bdd'); const expect = chai.expect; chai.config.includeStack = true; +const connectionTimeout = 2000; function unittests (){ describe('Connection testing', function (){ it('Connecting', function (done) { let conn0 = new Connection; - conn0.checkConnection().then(function (answer) { - expect(answer).to.not.be.empty; - expect(answer.gpgme).to.not.be.undefined; - expect(answer.gpgme).to.be.a('string'); - expect(answer.info).to.be.an('Array'); - expect(conn0.disconnect).to.be.a('function'); - expect(conn0.post).to.be.a('function'); - done(); - }); + conn0.checkConnection(true, connectionTimeout).then( + function (answer) { + expect(answer).to.not.be.empty; + expect(answer.gpgme).to.not.be.undefined; + expect(answer.gpgme).to.be.a('string'); + expect(answer.info).to.be.an('Array'); + expect(conn0.disconnect).to.be.a('function'); + expect(conn0.post).to.be.a('function'); + done(); + }); }); it('Disconnecting', function (done) { let conn0 = new Connection; - conn0.checkConnection(false).then(function (answer) { - expect(answer).to.be.true; - conn0.disconnect(); - conn0.checkConnection(false).then(function (result) { - expect(result).to.be.false; - done(); + conn0.checkConnection(false, connectionTimeout).then( + function (answer) { + expect(answer).to.be.true; + conn0.disconnect(); + conn0.checkConnection(false, connectionTimeout).then( + function (result) { + expect(result).to.be.false; + done(); + }); }); - }); }); });