From ae4ed1fbf3794ddc48f24438f9306807c29f4efe Mon Sep 17 00:00:00 2001 From: larabr <7375870+larabr@users.noreply.github.com> Date: Fri, 2 Jun 2023 14:12:14 +0200 Subject: [PATCH] Tests: explicitly share openpgp instance used in tests Also, init config before any code is run in tests --- .eslintrc.js | 1 + test/crypto/crypto.js | 4 ++-- test/crypto/eax.js | 4 ++-- test/crypto/ecdh.js | 4 ++-- test/crypto/elliptic.js | 4 ++-- test/crypto/gcm.js | 4 ++-- test/crypto/ocb.js | 4 ++-- test/crypto/rsa.js | 4 ++-- test/crypto/validate.js | 4 ++-- test/general/armor.js | 2 +- test/general/biginteger.js | 2 +- test/general/brainpool.js | 4 ++-- test/general/config.js | 2 +- test/general/decompression.js | 4 ++-- test/general/ecc_nist.js | 4 ++-- test/general/ecc_secp256k1.js | 4 ++-- test/general/key.js | 4 ++-- test/general/openpgp.js | 4 ++-- test/general/packet.js | 4 ++-- test/general/signature.js | 4 ++-- test/general/streaming.js | 4 ++-- test/general/x25519.js | 5 ++--- test/initOpenpgp.js | 14 ++++++++++++++ test/security/message_signature_bypass.js | 4 ++-- test/security/preferred_algo_mismatch.js | 4 ++-- test/security/subkey_trust.js | 5 ++--- test/security/unsigned_subpackets.js | 5 ++--- test/unittests.js | 7 +------ 28 files changed, 63 insertions(+), 56 deletions(-) create mode 100644 test/initOpenpgp.js diff --git a/.eslintrc.js b/.eslintrc.js index 6a58bb27..93758d15 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -96,6 +96,7 @@ module.exports = { // eslint-plugin-import rules: 'import/named': 'error', 'import/extensions': 'error', + 'import/first': 'off', 'import/no-extraneous-dependencies': ['error', { 'devDependencies': true, 'optionalDependencies': false, 'peerDependencies': false }], 'import/no-unassigned-import': 'error', 'import/prefer-default-export': 'off', diff --git a/test/crypto/crypto.js b/test/crypto/crypto.js index 5f2f7b31..05d89880 100644 --- a/test/crypto/crypto.js +++ b/test/crypto/crypto.js @@ -1,9 +1,9 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); import sandbox from 'sinon/lib/sinon/sandbox'; +import openpgp from '../initOpenpgp.js'; import crypto from '../../src/crypto'; import util from '../../src/util.js'; diff --git a/test/crypto/eax.js b/test/crypto/eax.js index 5c8e535d..54023f46 100644 --- a/test/crypto/eax.js +++ b/test/crypto/eax.js @@ -3,10 +3,10 @@ // Adapted from https://github.com/artjomb/cryptojs-extension/blob/8c61d159/test/eax.js import sandbox from 'sinon/lib/sinon/sandbox'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import EAX from '../../src/crypto/mode/eax.js'; import util from '../../src/util.js'; diff --git a/test/crypto/ecdh.js b/test/crypto/ecdh.js index fc0edb19..35ae5c3a 100644 --- a/test/crypto/ecdh.js +++ b/test/crypto/ecdh.js @@ -1,9 +1,9 @@ import sandbox from 'sinon/lib/sinon/sandbox'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import OID from '../../src/type/oid.js'; import KDFParams from '../../src/type/kdf_params.js'; import * as elliptic_curves from '../../src/crypto/public_key/elliptic'; diff --git a/test/crypto/elliptic.js b/test/crypto/elliptic.js index 6072ae44..c92102b1 100644 --- a/test/crypto/elliptic.js +++ b/test/crypto/elliptic.js @@ -1,9 +1,9 @@ import sandbox from 'sinon/lib/sinon/sandbox'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import * as elliptic_curves from '../../src/crypto/public_key/elliptic'; import hashMod from '../../src/crypto/hash'; import config from '../../src/config'; diff --git a/test/crypto/gcm.js b/test/crypto/gcm.js index 4e06806e..441d6f9c 100644 --- a/test/crypto/gcm.js +++ b/test/crypto/gcm.js @@ -1,9 +1,9 @@ import sandbox from 'sinon/lib/sinon/sandbox'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import crypto from '../../src/crypto'; import util from '../../src/util.js'; diff --git a/test/crypto/ocb.js b/test/crypto/ocb.js index 67bea175..ef80a96b 100644 --- a/test/crypto/ocb.js +++ b/test/crypto/ocb.js @@ -2,10 +2,10 @@ // Adapted from https://github.com/artjomb/cryptojs-extension/blob/8c61d159/test/eax.js import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import OCB from '../../src/crypto/mode/ocb.js'; import util from '../../src/util.js'; diff --git a/test/crypto/rsa.js b/test/crypto/rsa.js index 4aa24d61..1be4a127 100644 --- a/test/crypto/rsa.js +++ b/test/crypto/rsa.js @@ -1,9 +1,9 @@ import sandbox from 'sinon/lib/sinon/sandbox'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import crypto from '../../src/crypto'; import * as random from '../../src/crypto/random.js'; import util from '../../src/util.js'; diff --git a/test/crypto/validate.js b/test/crypto/validate.js index 610728b5..54d79ca3 100644 --- a/test/crypto/validate.js +++ b/test/crypto/validate.js @@ -1,9 +1,9 @@ import BN from 'bn.js'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; const armoredDSAKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- diff --git a/test/general/armor.js b/test/general/armor.js index 53119f2b..10624ee2 100644 --- a/test/general/armor.js +++ b/test/general/armor.js @@ -1,6 +1,6 @@ import { expect } from 'chai'; -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; export default () => describe('ASCII armor', function() { diff --git a/test/general/biginteger.js b/test/general/biginteger.js index 142b5026..90fd0d38 100644 --- a/test/general/biginteger.js +++ b/test/general/biginteger.js @@ -1,5 +1,5 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); import BN from 'bn.js'; diff --git a/test/general/brainpool.js b/test/general/brainpool.js index ce662ca6..e22dae58 100644 --- a/test/general/brainpool.js +++ b/test/general/brainpool.js @@ -1,9 +1,9 @@ /* globals tryTests */ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import util from '../../src/util.js'; import * as input from './testInputs.js'; diff --git a/test/general/config.js b/test/general/config.js index b86b1eb7..038e72f5 100644 --- a/test/general/config.js +++ b/test/general/config.js @@ -1,6 +1,6 @@ import { expect } from 'chai'; -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; export default () => describe('Custom configuration', function() { it('openpgp.readMessage', async function() { diff --git a/test/general/decompression.js b/test/general/decompression.js index 844bd259..7680a73d 100644 --- a/test/general/decompression.js +++ b/test/general/decompression.js @@ -1,8 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; const password = 'I am a password'; diff --git a/test/general/ecc_nist.js b/test/general/ecc_nist.js index 93234716..1838e031 100644 --- a/test/general/ecc_nist.js +++ b/test/general/ecc_nist.js @@ -1,8 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import util from '../../src/util.js'; diff --git a/test/general/ecc_secp256k1.js b/test/general/ecc_secp256k1.js index f539a3ad..da457640 100644 --- a/test/general/ecc_secp256k1.js +++ b/test/general/ecc_secp256k1.js @@ -1,8 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import util from '../../src/util.js'; export default () => describe('Elliptic Curve Cryptography for secp256k1 curve @lightweight', function () { diff --git a/test/general/key.js b/test/general/key.js index 3024b933..661f1904 100644 --- a/test/general/key.js +++ b/test/general/key.js @@ -1,10 +1,10 @@ /* eslint-disable max-lines */ /* globals tryTests */ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import util from '../../src/util.js'; import { isAEADSupported, getPreferredAlgo } from '../../src/key'; import KeyID from '../../src/type/keyid.js'; diff --git a/test/general/openpgp.js b/test/general/openpgp.js index 5f41ba5f..1d435d60 100644 --- a/test/general/openpgp.js +++ b/test/general/openpgp.js @@ -3,10 +3,10 @@ import spy from 'sinon/lib/sinon/spy'; import * as stream from '@openpgp/web-stream-tools'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import crypto from '../../src/crypto'; import * as random from '../../src/crypto/random.js'; import util from '../../src/util.js'; diff --git a/test/general/packet.js b/test/general/packet.js index ba229dbb..5590e6cd 100644 --- a/test/general/packet.js +++ b/test/general/packet.js @@ -2,10 +2,10 @@ import * as stream from '@openpgp/web-stream-tools'; import stub from 'sinon/lib/sinon/stub'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import crypto from '../../src/crypto'; import util from '../../src/util.js'; diff --git a/test/general/signature.js b/test/general/signature.js index a4d8e31e..1c123f75 100644 --- a/test/general/signature.js +++ b/test/general/signature.js @@ -2,10 +2,10 @@ /* globals tryTests, loadStreamsPolyfill */ import * as stream from '@openpgp/web-stream-tools'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import util from '../../src/util.js'; diff --git a/test/general/streaming.js b/test/general/streaming.js index b26db049..1a1ad5fb 100644 --- a/test/general/streaming.js +++ b/test/general/streaming.js @@ -3,10 +3,10 @@ import * as stream from '@openpgp/web-stream-tools'; import stub from 'sinon/lib/sinon/stub'; import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import * as random from '../../src/crypto/random.js'; import util from '../../src/util.js'; diff --git a/test/general/x25519.js b/test/general/x25519.js index 0cf9e2e3..52bd19c2 100644 --- a/test/general/x25519.js +++ b/test/general/x25519.js @@ -1,10 +1,9 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); - import nacl from '@openpgp/tweetnacl'; +import openpgp from '../initOpenpgp.js'; import * as elliptic from '../../src/crypto/public_key/elliptic'; import * as signature from '../../src/crypto/signature'; diff --git a/test/initOpenpgp.js b/test/initOpenpgp.js new file mode 100644 index 00000000..4fd4a360 --- /dev/null +++ b/test/initOpenpgp.js @@ -0,0 +1,14 @@ +/** + * This module centralises the openpgp import and ensures that the module is initialised + * at the top of the test bundle, and that the config is initialised before the tests code runs (incl. that outside of `describe`). + */ + +import * as openpgp from 'openpgp'; + +if (typeof window !== 'undefined') { + window.openpgp = openpgp; +} + +openpgp.config.s2kIterationCountByte = 0; + +export default openpgp; diff --git a/test/security/message_signature_bypass.js b/test/security/message_signature_bypass.js index 28f7879f..614d5c05 100644 --- a/test/security/message_signature_bypass.js +++ b/test/security/message_signature_bypass.js @@ -1,8 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; import util from '../../src/util.js'; const { readKey, readCleartextMessage, SignaturePacket } = openpgp; diff --git a/test/security/preferred_algo_mismatch.js b/test/security/preferred_algo_mismatch.js index 4277eb48..c000d9d7 100644 --- a/test/security/preferred_algo_mismatch.js +++ b/test/security/preferred_algo_mismatch.js @@ -1,8 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; const armoredMessage = `-----BEGIN PGP MESSAGE----- Version: OpenPGP.js VERSION diff --git a/test/security/subkey_trust.js b/test/security/subkey_trust.js index 54dcca56..e8aee45b 100644 --- a/test/security/subkey_trust.js +++ b/test/security/subkey_trust.js @@ -1,9 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; - +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; const { readKey, PublicKey, readCleartextMessage, createCleartextMessage, enums, PacketList, SignaturePacket } = openpgp; diff --git a/test/security/unsigned_subpackets.js b/test/security/unsigned_subpackets.js index 68ca86ca..82721103 100644 --- a/test/security/unsigned_subpackets.js +++ b/test/security/unsigned_subpackets.js @@ -1,9 +1,8 @@ import { use as chaiUse, expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; - +import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); -const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : await import('openpgp'); +import openpgp from '../initOpenpgp.js'; const { readKey, PrivateKey, createMessage, enums, PacketList, SignaturePacket } = openpgp; diff --git a/test/unittests.js b/test/unittests.js index a9460817..54f63c3c 100644 --- a/test/unittests.js +++ b/test/unittests.js @@ -1,6 +1,4 @@ -import * as openpgp from 'openpgp'; -if (typeof window !== 'undefined' && !window.openpgp) { window.openpgp = openpgp } - +import openpgp from './initOpenpgp.js'; (typeof window !== 'undefined' ? window : global).globalThis = (typeof window !== 'undefined' ? window : global); @@ -38,9 +36,6 @@ import runGeneralTests from './general'; import runSecurityTests from './security'; describe('Unit Tests', function () { - - openpgp.config.s2kIterationCountByte = 0; - if (typeof window !== 'undefined') { // Safari 14.1.*, 15.* and 16.* seem to have issues handling rejections when their native TransformStream implementation is involved, // so for now we ignore unhandled rejections for those browser versions.