Update tests
This commit is contained in:
parent
ce2bb55b24
commit
12efbec698
@ -161,7 +161,7 @@ test.cb("demux() should send input through correct pipeline using keyBy", t => {
|
|||||||
fromArray(input).pipe(demuxed);
|
fromArray(input).pipe(demuxed);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("demux() write should return false after if it has >= highWaterMark items buffered and drain should be emitted", t => {
|
test("demux() write should return false and emit drain if more than highWaterMark items are buffered", t => {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
t.plan(7);
|
t.plan(7);
|
||||||
interface Chunk {
|
interface Chunk {
|
||||||
@ -224,7 +224,7 @@ test("demux() write should return false after if it has >= highWaterMark items b
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test("demux() should emit one drain event after slowProcessorSpeed * highWaterMark ms", t => {
|
test("demux() should emit one drain event after slowProcessorSpeed * highWaterMark ms when first stream is bottleneck", t => {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
t.plan(7);
|
t.plan(7);
|
||||||
interface Chunk {
|
interface Chunk {
|
||||||
@ -290,7 +290,7 @@ test("demux() should emit one drain event after slowProcessorSpeed * highWaterMa
|
|||||||
|
|
||||||
test("demux() should emit one drain event when writing 6 items with highWaterMark of 5", t => {
|
test("demux() should emit one drain event when writing 6 items with highWaterMark of 5", t => {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
t.plan(7);
|
t.plan(1);
|
||||||
interface Chunk {
|
interface Chunk {
|
||||||
key: string;
|
key: string;
|
||||||
mapped: number[];
|
mapped: number[];
|
||||||
@ -317,7 +317,6 @@ test("demux() should emit one drain event when writing 6 items with highWaterMar
|
|||||||
|
|
||||||
first.on("data", () => {
|
first.on("data", () => {
|
||||||
pendingReads--;
|
pendingReads--;
|
||||||
t.pass();
|
|
||||||
if (pendingReads === 0) {
|
if (pendingReads === 0) {
|
||||||
resolve();
|
resolve();
|
||||||
}
|
}
|
||||||
@ -349,8 +348,9 @@ test("demux() should emit one drain event when writing 6 items with highWaterMar
|
|||||||
});
|
});
|
||||||
|
|
||||||
test.cb(
|
test.cb(
|
||||||
"demux() should emit drain event when second stream is bottleneck",
|
"demux() should emit drain event when second stream is bottleneck after (highWaterMark - 2) * slowProcessorSpeed ms",
|
||||||
t => {
|
t => {
|
||||||
|
// ie) first two items are pushed directly into first and second streams (highWaterMark - 2 remain in demux)
|
||||||
t.plan(8);
|
t.plan(8);
|
||||||
const slowProcessorSpeed = 100;
|
const slowProcessorSpeed = 100;
|
||||||
const highWaterMark = 5;
|
const highWaterMark = 5;
|
||||||
@ -401,7 +401,7 @@ test.cb(
|
|||||||
_demux.on("drain", () => {
|
_demux.on("drain", () => {
|
||||||
expect(_demux._writableState.length).to.be.equal(0);
|
expect(_demux._writableState.length).to.be.equal(0);
|
||||||
expect(performance.now() - start).to.be.greaterThan(
|
expect(performance.now() - start).to.be.greaterThan(
|
||||||
slowProcessorSpeed,
|
slowProcessorSpeed * 3,
|
||||||
);
|
);
|
||||||
t.pass();
|
t.pass();
|
||||||
});
|
});
|
||||||
@ -425,6 +425,7 @@ test.cb(
|
|||||||
test.cb(
|
test.cb(
|
||||||
"demux() should emit drain event when third stream is bottleneck",
|
"demux() should emit drain event when third stream is bottleneck",
|
||||||
t => {
|
t => {
|
||||||
|
// @TODO investigate why drain is emitted after slowProcessorSpeed
|
||||||
t.plan(8);
|
t.plan(8);
|
||||||
const slowProcessorSpeed = 100;
|
const slowProcessorSpeed = 100;
|
||||||
const highWaterMark = 5;
|
const highWaterMark = 5;
|
||||||
@ -482,7 +483,6 @@ test.cb(
|
|||||||
t.end(err);
|
t.end(err);
|
||||||
});
|
});
|
||||||
|
|
||||||
// This event should be received after at least 3 * slowProcessorSpeed (two are read immediately by first and second, 3 remaining in demux before drain event)
|
|
||||||
_demux.on("drain", () => {
|
_demux.on("drain", () => {
|
||||||
expect(_demux._writableState.length).to.be.equal(0);
|
expect(_demux._writableState.length).to.be.equal(0);
|
||||||
expect(performance.now() - start).to.be.greaterThan(
|
expect(performance.now() - start).to.be.greaterThan(
|
||||||
@ -507,7 +507,7 @@ test.cb(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
test.skip("demux() should be blocked by slowest pipeline", t => {
|
test("demux() should be blocked by slowest pipeline", t => {
|
||||||
t.plan(1);
|
t.plan(1);
|
||||||
const slowProcessorSpeed = 100;
|
const slowProcessorSpeed = 100;
|
||||||
interface Chunk {
|
interface Chunk {
|
||||||
@ -571,75 +571,6 @@ test.skip("demux() should be blocked by slowest pipeline", t => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test("demux() should emit drain event when second stream in pipeline is bottleneck", t => {
|
|
||||||
t.plan(5);
|
|
||||||
const highWaterMark = 3;
|
|
||||||
return new Promise(async (resolve, reject) => {
|
|
||||||
interface Chunk {
|
|
||||||
key: string;
|
|
||||||
mapped: number[];
|
|
||||||
}
|
|
||||||
const sink = new Writable({
|
|
||||||
objectMode: true,
|
|
||||||
write(chunk, encoding, cb) {
|
|
||||||
expect(chunk.mapped).to.deep.equal([1, 2]);
|
|
||||||
t.pass();
|
|
||||||
cb();
|
|
||||||
if (pendingReads === 0) {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const construct = (destKey: string) => {
|
|
||||||
const first = map(
|
|
||||||
(chunk: Chunk) => {
|
|
||||||
expect(first._readableState.length).to.be.at.most(2);
|
|
||||||
chunk.mapped.push(1);
|
|
||||||
return chunk;
|
|
||||||
},
|
|
||||||
{ highWaterMark: 2 },
|
|
||||||
);
|
|
||||||
|
|
||||||
const second = map(
|
|
||||||
async (chunk: Chunk) => {
|
|
||||||
await sleep(100);
|
|
||||||
chunk.mapped.push(2);
|
|
||||||
expect(second._writableState.length).to.be.equal(1);
|
|
||||||
pendingReads--;
|
|
||||||
return chunk;
|
|
||||||
},
|
|
||||||
{ highWaterMark: 1 },
|
|
||||||
);
|
|
||||||
|
|
||||||
first.pipe(second).pipe(sink);
|
|
||||||
return first;
|
|
||||||
};
|
|
||||||
|
|
||||||
const _demux = demux(construct, "key", {
|
|
||||||
highWaterMark,
|
|
||||||
});
|
|
||||||
_demux.on("error", err => {
|
|
||||||
reject();
|
|
||||||
});
|
|
||||||
|
|
||||||
_demux.on("drain", () => {
|
|
||||||
expect(_demux._writableState.length).to.be.equal(0);
|
|
||||||
t.pass();
|
|
||||||
});
|
|
||||||
|
|
||||||
const input = [
|
|
||||||
{ key: "a", mapped: [] },
|
|
||||||
{ key: "a", mapped: [] },
|
|
||||||
{ key: "a", mapped: [] },
|
|
||||||
{ key: "a", mapped: [] },
|
|
||||||
];
|
|
||||||
let pendingReads = input.length;
|
|
||||||
|
|
||||||
fromArray(input).pipe(_demux);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
test.cb("Demux should remux to sink", t => {
|
test.cb("Demux should remux to sink", t => {
|
||||||
t.plan(6);
|
t.plan(6);
|
||||||
let i = 0;
|
let i = 0;
|
||||||
@ -724,7 +655,7 @@ test.cb("Demux should send data events", t => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test.cb.only("demux() `finish` and `end` propagates", t => {
|
test.cb("demux() `finish` and `end` propagates", t => {
|
||||||
interface Chunk {
|
interface Chunk {
|
||||||
key: string;
|
key: string;
|
||||||
mapped: number[];
|
mapped: number[];
|
||||||
|
Loading…
Reference in New Issue
Block a user