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.
This commit is contained in:
Maximilian Krambach 2018-09-19 10:56:36 +02:00
parent 362caaf02f
commit 7f14958606
12 changed files with 41 additions and 29 deletions

View File

@ -32,7 +32,7 @@ describe('Key importing', function () {
let context = null; let context = null;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
context.Keyring.getKeys({ pattern: fpr }).then( context.Keyring.getKeys({ pattern: fpr }).then(

View File

@ -27,7 +27,7 @@
describe('Key information', function () { describe('Key information', function () {
let context = null; let context = null;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -29,7 +29,7 @@ describe('Decryption', function () {
const good_fpr = inputvalues.encrypt.good.fingerprint; const good_fpr = inputvalues.encrypt.good.fingerprint;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout:2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -29,7 +29,7 @@ describe('Encryption and Decryption', function (){
let good_fpr = inputvalues.encrypt.good.fingerprint; let good_fpr = inputvalues.encrypt.good.fingerprint;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -28,7 +28,7 @@ describe('Encryption', function () {
let context = null; let context = null;
const good_fpr = inputvalues.encrypt.good.fingerprint; const good_fpr = inputvalues.encrypt.good.fingerprint;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -27,7 +27,7 @@ describe('Long running Encryption/Decryption', function () {
let context = null; let context = null;
const good_fpr = inputvalues.encrypt.good.fingerprint; const good_fpr = inputvalues.encrypt.good.fingerprint;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -29,7 +29,7 @@ describe('Signing', function () {
const good_fpr = inputvalues.encrypt.good.fingerprint; const good_fpr = inputvalues.encrypt.good.fingerprint;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -25,7 +25,7 @@
describe('GPGME context', function (){ describe('GPGME context', function (){
it('Starting a GpgME instance', function (done){ it('Starting a GpgME instance', function (done){
let prm = Gpgmejs.init(); let prm = Gpgmejs.init({ timeout: 2000 });
const input = inputvalues.someInputParameter; const input = inputvalues.someInputParameter;
prm.then( prm.then(
function (context){ function (context){

View File

@ -28,7 +28,7 @@
describe('Verifying data', function () { describe('Verifying data', function () {
let context = null; let context = null;
before(function (done){ before(function (done){
const prm = Gpgmejs.init(); const prm = Gpgmejs.init({ timeout: 2000 });
prm.then(function (gpgmejs){ prm.then(function (gpgmejs){
context = gpgmejs; context = gpgmejs;
done(); done();

View File

@ -74,11 +74,15 @@ export class Connection{
* Retrieves the information about the backend. * Retrieves the information about the backend.
* @param {Boolean} details (optional) If set to false, the promise will * @param {Boolean} details (optional) If set to false, the promise will
* just return if a connection was successful. * just return if a connection was successful.
* @param {Number} timeout (optional)
* @returns {Promise<backEndDetails>|Promise<Boolean>} Details from the * @returns {Promise<backEndDetails>|Promise<Boolean>} Details from the
* backend * backend
* @async * @async
*/ */
checkConnection (details = true){ checkConnection (details = true, timeout = 1000){
if (typeof timeout !== 'number' && timeout <= 0) {
timeout = 1000;
}
const msg = createMessage('version'); const msg = createMessage('version');
if (details === true) { if (details === true) {
return this.post(msg); return this.post(msg);
@ -90,7 +94,7 @@ export class Connection{
new Promise(function (resolve, reject){ new Promise(function (resolve, reject){
setTimeout(function (){ setTimeout(function (){
reject(gpgme_error('CONN_TIMEOUT')); reject(gpgme_error('CONN_TIMEOUT'));
}, 500); }, timeout);
}) })
]).then(function (){ // success ]).then(function (){ // success
resolve(true); resolve(true);

View File

@ -31,13 +31,17 @@ import { Connection } from './Connection';
* connection once, and then offers the available functions as method of the * connection once, and then offers the available functions as method of the
* response object. * response object.
* An unsuccessful attempt will reject as a GPGME_Error. * 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<GpgME>} * @returns {Promise<GpgME>}
* @async * @async
*/ */
function init (){ function init ({ timeout = 500 } = {}){
return new Promise(function (resolve, reject){ return new Promise(function (resolve, reject){
const connection = new Connection; const connection = new Connection;
connection.checkConnection(false).then( connection.checkConnection(false, timeout).then(
function (result){ function (result){
if (result === true) { if (result === true) {
resolve(new GpgME()); resolve(new GpgME());

View File

@ -34,34 +34,38 @@ import { GPGME_Message, createMessage } from './src/Message';
mocha.setup('bdd'); mocha.setup('bdd');
const expect = chai.expect; const expect = chai.expect;
chai.config.includeStack = true; chai.config.includeStack = true;
const connectionTimeout = 2000;
function unittests (){ function unittests (){
describe('Connection testing', function (){ describe('Connection testing', function (){
it('Connecting', function (done) { it('Connecting', function (done) {
let conn0 = new Connection; let conn0 = new Connection;
conn0.checkConnection().then(function (answer) { conn0.checkConnection(true, connectionTimeout).then(
expect(answer).to.not.be.empty; function (answer) {
expect(answer.gpgme).to.not.be.undefined; expect(answer).to.not.be.empty;
expect(answer.gpgme).to.be.a('string'); expect(answer.gpgme).to.not.be.undefined;
expect(answer.info).to.be.an('Array'); expect(answer.gpgme).to.be.a('string');
expect(conn0.disconnect).to.be.a('function'); expect(answer.info).to.be.an('Array');
expect(conn0.post).to.be.a('function'); expect(conn0.disconnect).to.be.a('function');
done(); expect(conn0.post).to.be.a('function');
}); done();
});
}); });
it('Disconnecting', function (done) { it('Disconnecting', function (done) {
let conn0 = new Connection; let conn0 = new Connection;
conn0.checkConnection(false).then(function (answer) { conn0.checkConnection(false, connectionTimeout).then(
expect(answer).to.be.true; function (answer) {
conn0.disconnect(); expect(answer).to.be.true;
conn0.checkConnection(false).then(function (result) { conn0.disconnect();
expect(result).to.be.false; conn0.checkConnection(false, connectionTimeout).then(
done(); function (result) {
expect(result).to.be.false;
done();
});
}); });
});
}); });
}); });