Skip to content

Commit 218dc71

Browse files
committed
WIP: Add logging to debug the get-port issue
1 parent 4df6252 commit 218dc71

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@
177177
"destroyable-server": "^1.1.1",
178178
"express": "^5.2.1",
179179
"fast-json-patch": "^3.1.1",
180+
"get-port": "^7.2.0",
180181
"graphql": "^14.0.2 || ^15.5 || ^16.0.0",
181182
"graphql-http": "^1.22.0",
182183
"graphql-subscriptions": "^2.0.0",

test/integration/subscriptions/response-events.spec.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as _ from 'lodash';
22
import { PassThrough } from 'stream';
3+
import * as net from 'net';
34
import * as http from 'http';
5+
import * as os from 'os';
46
import * as zlib from 'zlib';
57

68
import {
@@ -325,6 +327,15 @@ describe("Response subscriptions", () => {
325327
describe("Abort subscriptions", () => {
326328
let server = getLocal();
327329

330+
// DEBUG: Test whether get-port's presence causes flaky abort test
331+
before(async function () {
332+
this.timeout(30000);
333+
const { default: getPort } = await import('get-port');
334+
console.log('[DEBUG] Calling getPort() 50 times to simulate full suite usage...');
335+
for (let i = 0; i < 50; i++) await getPort();
336+
console.log('[DEBUG] Done. lockedPorts should now have 50 entries.');
337+
});
338+
328339
beforeEach(() => server.start());
329340
afterEach(() => server.stop());
330341

@@ -560,28 +571,40 @@ describe("Abort subscriptions", () => {
560571
});
561572

562573
it("should be sent in place of response notifications, not in addition", async () => {
574+
const t0 = performance.now();
575+
const ts = (label: string) => console.log(` [ABORT-DEBUG] ${label}: +${(performance.now() - t0).toFixed(1)}ms`);
576+
563577
let seenRequestPromise = getDeferred<CompletedRequest>();
564-
await server.on('request', (r) => seenRequestPromise.resolve(r));
578+
await server.on('request', (r) => { ts('request event received'); seenRequestPromise.resolve(r); });
565579

566580
let seenResponseInitiatedPromise = getDeferred<InitiatedResponse>();
567-
await server.on('response-initiated', (r) => seenResponseInitiatedPromise.resolve(r));
581+
await server.on('response-initiated', (r) => { ts('UNEXPECTED response-initiated event!'); seenResponseInitiatedPromise.resolve(r); });
568582

569583
let seenResponsePromise = getDeferred<CompletedResponse>();
570-
await server.on('response', (r) => seenResponsePromise.resolve(r));
584+
await server.on('response', (r) => { ts('UNEXPECTED response event!'); seenResponsePromise.resolve(r); });
571585

572-
await server.forPost('/mocked-endpoint').thenCallback((req) => delay(500).then(() => ({})));
586+
await server.forPost('/mocked-endpoint').thenCallback((req) => {
587+
ts('callback started');
588+
return delay(500).then(() => {
589+
ts('callback 500ms delay completed');
590+
return {};
591+
});
592+
});
573593

574594
let abortable = makeAbortableRequest(server, '/mocked-endpoint');
575595
nodeOnly(() => (abortable as http.ClientRequest).end('request body'));
576596

577597
await seenRequestPromise;
598+
ts('seenRequestPromise resolved, calling abort()');
578599
abortable.abort();
600+
ts('abort() called');
579601

580602
await expect(Promise.race([
581603
seenResponseInitiatedPromise,
582604
seenResponsePromise,
583605
delay(100).then(() => { throw new Error('timeout') })
584606
])).to.be.rejectedWith('timeout');
607+
ts('test passed (timeout won)');
585608
});
586609

587610
it("should not trigger an ended response body event", async () => {

0 commit comments

Comments
 (0)