Skip to content

Commit f43ef6e

Browse files
GrinZerobugyaluwang
authored andcommitted
test: add more case
1 parent e544a08 commit f43ef6e

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

test/parallel/test-inspector-emit-protocol-event-errors.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,26 @@ const NETWORK_ERROR_CASES = [
184184
}),
185185
'Invalid initiator.stack in event',
186186
],
187+
[
188+
'requestWillBeSent',
189+
networkRequest({
190+
initiator: {
191+
type: 'script',
192+
stack: (() => {
193+
const stack = {};
194+
Object.defineProperty(stack, 'callFrames', {
195+
enumerable: true,
196+
configurable: true,
197+
get() {
198+
throw new Error('boom');
199+
},
200+
});
201+
return stack;
202+
})(),
203+
},
204+
}),
205+
'Invalid initiator.stack in event',
206+
],
187207

188208
[
189209
'responseReceived',

test/parallel/test-inspector-emit-protocol-event.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,53 @@ for (const [domain, events] of Object.entries(EXPECTED_EVENTS)) {
194194
}
195195
}
196196

197+
// Verify a user-supplied initiator (with stack) is preserved end-to-end.
198+
// Covers the success body of `if (ObjectGetObject(... "stack"))` in
199+
// NetworkAgent::createInitiatorFromObject (network_agent.cc L159).
200+
session.removeAllListeners('Network.requestWillBeSent');
201+
const userInitiator = {
202+
type: 'script',
203+
stack: { callFrames: [] },
204+
url: 'https://nodejs.org/test.js',
205+
lineNumber: 12,
206+
columnNumber: 34,
207+
};
208+
session.on('Network.requestWillBeSent', common.mustCall(({ params }) => {
209+
assert.strictEqual(params.requestId, 'request-with-user-initiator');
210+
assert.deepStrictEqual(params.initiator, userInitiator);
211+
}));
212+
inspector.Network.requestWillBeSent({
213+
requestId: 'request-with-user-initiator',
214+
request: {
215+
url: 'https://nodejs.org/en',
216+
method: 'GET',
217+
headers: {},
218+
},
219+
timestamp: 1000,
220+
wallTime: 1000,
221+
initiator: userInitiator,
222+
});
223+
224+
// Verify a duplicate requestId is silently ignored. Covers the early
225+
// return when `requests_.contains(request_id)` (network_agent.cc L610).
226+
session.removeAllListeners('Network.requestWillBeSent');
227+
const duplicateId = 'duplicate-request-id';
228+
const duplicateParams = {
229+
requestId: duplicateId,
230+
request: {
231+
url: 'https://nodejs.org/en',
232+
method: 'GET',
233+
headers: {},
234+
},
235+
timestamp: 1000,
236+
wallTime: 1000,
237+
};
238+
session.on('Network.requestWillBeSent', common.mustCall(({ params }) => {
239+
assert.strictEqual(params.requestId, duplicateId);
240+
}, 1));
241+
inspector.Network.requestWillBeSent(duplicateParams);
242+
inspector.Network.requestWillBeSent(duplicateParams);
243+
197244
// Check tht no events are emitted after disabling the domain.
198245
await session.post('Network.disable');
199246
session.on('Network.requestWillBeSent', common.mustNotCall());

0 commit comments

Comments
 (0)