Fix streaming tests for browser, drop NodeReadableStream tests in Node.js

Unclear why the Node tests fails, but we're planning to drop support
This commit is contained in:
larabr 2023-05-17 19:20:22 +02:00
parent b094274d98
commit 1aefed9602
2 changed files with 16 additions and 82 deletions

View File

@ -3329,10 +3329,8 @@ XfA3pqV4mTzF
it('Streaming encrypt and decrypt small message roundtrip', async function() {
const plaintext = [];
let i = 0;
const useNativeStream = (() => { try { new global.ReadableStream(); return true; } catch (e) { return false; } })(); // eslint-disable-line no-new
await loadStreamsPolyfill();
const GenericReadableStream = useNativeStream ? global.ReadableStream : ReadableStream;
const data = new GenericReadableStream({
const data = new globalThis.ReadableStream({
pull(controller) {
if (i++ < 4) {
const randomBytes = random.getRandomBytes(10);
@ -3347,7 +3345,7 @@ XfA3pqV4mTzF
message: await openpgp.createMessage({ binary: data }),
passwords: ['test']
}));
expect(stream.isStream(encrypted)).to.equal(useNativeStream ? 'web' : 'web-like');
expect(stream.isStream(encrypted)).to.equal('web');
const message = await openpgp.readMessage({ armoredMessage: encrypted });
const decrypted = await openpgp.decrypt({
@ -3355,7 +3353,7 @@ XfA3pqV4mTzF
message,
format: 'binary'
});
expect(stream.isStream(decrypted.data)).to.equal(useNativeStream ? 'web' : 'web-like');
expect(stream.isStream(decrypted.data)).to.equal('web');
expect(await stream.readToEnd(decrypted.data)).to.deep.equal(util.concatUint8Array(plaintext));
});
});
@ -3658,17 +3656,13 @@ XfA3pqV4mTzF
it('should streaming sign and verify binary data without one-pass signature', async function () {
const data = new Uint8Array([3, 14, 15, 92, 65, 35, 59]);
const dataStream = global.ReadableStream ? new global.ReadableStream({
const dataStream = new globalThis.ReadableStream({
start(controller) {
controller.enqueue(data);
controller.close();
}
}) : new (require('stream').Readable)({
read() {
this.push(data);
this.push(null);
}
});
const signOpt = {
message: await openpgp.createMessage({ binary: dataStream }),
signingKeys: privateKey,
@ -3679,7 +3673,7 @@ XfA3pqV4mTzF
format: 'binary'
};
return openpgp.sign(signOpt).then(async function (signed) {
expect(stream.isStream(signed)).to.equal(global.ReadableStream ? 'web' : 'node');
expect(stream.isStream(signed)).to.equal('web');
const message = await openpgp.readMessage({ binaryMessage: signed });
message.packets.push(...await stream.readToEnd(message.packets.stream, _ => _));
const packets = new openpgp.PacketList();
@ -3687,12 +3681,12 @@ XfA3pqV4mTzF
packets.push(message.packets.findPacket(openpgp.enums.packet.literalData));
verifyOpt.message = await openpgp.readMessage({
binaryMessage: stream[
global.ReadableStream ? 'toStream' : 'webToNode'
globalThis.ReadableStream ? 'toStream' : 'webToNode'
](packets.write())
});
return openpgp.verify(verifyOpt);
}).then(async function (verified) {
expect(stream.isStream(verified.data)).to.equal(global.ReadableStream ? 'web' : 'node');
expect(stream.isStream(verified.data)).to.equal('web');
expect([].slice.call(await stream.readToEnd(verified.data))).to.deep.equal([].slice.call(data));
expect(await verified.signatures[0].verified).to.be.true;
expect(await privateKey.getSigningKey(verified.signatures[0].keyID))

View File

@ -12,9 +12,6 @@ import util from '../../src/util.js';
import * as input from './testInputs.js';
const useNativeStream = (() => { try { new global.ReadableStream(); return true; } catch (e) { return false; } })(); // eslint-disable-line no-new
const NodeReadableStream = useNativeStream ? undefined : require('stream').Readable;
const detectNode = () => typeof globalThis.process === 'object' && typeof globalThis.process.versions === 'object';
const pub_key = [
@ -180,18 +177,12 @@ let dataArrived;
function tests() {
it('Encrypt small message', async function() {
dataArrived(); // Do not wait until data arrived.
const data = global.ReadableStream ? new global.ReadableStream({
const data = new globalThis.ReadableStream({
start(controller) {
controller.enqueue(util.stringToUint8Array('hello '));
controller.enqueue(util.stringToUint8Array('world'));
controller.close();
}
}) : new NodeReadableStream({
read() {
this.push(util.stringToUint8Array('hello '));
this.push(util.stringToUint8Array('world'));
this.push(null);
}
});
const encrypted = await openpgp.encrypt({
message: await openpgp.createMessage({ binary: data }),
@ -657,18 +648,12 @@ function tests() {
it('Detached sign small message', async function() {
dataArrived(); // Do not wait until data arrived.
const data = global.ReadableStream ? new global.ReadableStream({
const data = new globalThis.ReadableStream({
start(controller) {
controller.enqueue(util.stringToUint8Array('hello '));
controller.enqueue(util.stringToUint8Array('world'));
controller.close();
}
}) : new NodeReadableStream({
read() {
this.push(util.stringToUint8Array('hello '));
this.push(util.stringToUint8Array('world'));
this.push(null);
}
});
const signed = await openpgp.sign({
message: await openpgp.createMessage({ binary: data }),
@ -692,18 +677,12 @@ function tests() {
it('Detached sign small message using brainpool curve keys', async function() {
dataArrived(); // Do not wait until data arrived.
const data = global.ReadableStream ? new global.ReadableStream({
const data = new globalThis.ReadableStream({
start(controller) {
controller.enqueue(util.stringToUint8Array('hello '));
controller.enqueue(util.stringToUint8Array('world'));
controller.close();
}
}) : new NodeReadableStream({
read() {
this.push(util.stringToUint8Array('hello '));
this.push(util.stringToUint8Array('world'));
this.push(null);
}
});
const pub = await openpgp.readKey({ armoredKey: brainpoolPub });
const priv = await openpgp.decryptKey({
@ -734,18 +713,12 @@ function tests() {
it('Detached sign small message using curve25519 keys (legacy format)', async function() {
dataArrived(); // Do not wait until data arrived.
const data = global.ReadableStream ? new global.ReadableStream({
const data = new globalThis.ReadableStream({
async start(controller) {
controller.enqueue(util.stringToUint8Array('hello '));
controller.enqueue(util.stringToUint8Array('world'));
controller.close();
}
}) : new NodeReadableStream({
read() {
this.push(util.stringToUint8Array('hello '));
this.push(util.stringToUint8Array('world'));
this.push(null);
}
});
const pub = await openpgp.readKey({ armoredKey: xPub });
const priv = await openpgp.decryptKey({
@ -843,7 +816,7 @@ function tests() {
const plaintext = [];
let i = 0;
const data = global.ReadableStream ? new global.ReadableStream({
const data = new globalThis.ReadableStream({
async pull(controller) {
await new Promise(resolve => { setTimeout(resolve, 10); });
if (i++ < 10) {
@ -854,20 +827,6 @@ function tests() {
controller.close();
}
}
}) : new NodeReadableStream({
encoding: 'utf8',
async read() {
while (true) {
await new Promise(resolve => { setTimeout(resolve, 10); });
if (i++ < 10) {
const randomData = input.createSomeMessage();
plaintext.push(randomData);
if (!this.push(randomData)) break;
} else {
return this.push(null);
}
}
}
});
const encrypted = await openpgp.encrypt({
message: await openpgp.createMessage({ text: data }),
@ -970,7 +929,7 @@ export default () => describe('Streaming', function() {
plaintext = [];
i = 0;
canceled = false;
data = global.ReadableStream ? new global.ReadableStream({
data = new globalThis.ReadableStream({
async pull(controller) {
await new Promise(setTimeout);
if (test === currentTest && i < (expectedType === 'web' ? 100 : 500)) {
@ -988,27 +947,8 @@ export default () => describe('Streaming', function() {
}
}, new ByteLengthQueuingStrategy({
highWaterMark: 1024
})) : new NodeReadableStream({
highWaterMark: 1024,
async read() {
while (true) {
await new Promise(setTimeout);
if (test === currentTest && i < (expectedType === 'web' ? 100 : 500)) {
i++;
if (i === 4) await dataArrivedPromise;
const randomBytes = random.getRandomBytes(1024);
plaintext.push(randomBytes);
if (!this.push(randomBytes)) break;
} else {
return this.push(null);
}
}
},
destroy() {
canceled = true;
}
});
expectedType = global.ReadableStream ? 'web' : 'node';
}));
expectedType = 'web';
});
tests();