| // Flags: --expose-internals --no-warnings |
| 'use strict'; |
| |
| const { hasQuic } = require('../common'); |
| |
| const { |
| describe, |
| it, |
| } = require('node:test'); |
| |
| describe('quic internal setCallbacks', { skip: !hasQuic }, () => { |
| const { internalBinding } = require('internal/test/binding'); |
| const quic = internalBinding('quic'); |
| |
| it('require all callbacks to be set', (t) => { |
| const callbacks = { |
| onEndpointClose() {}, |
| onSessionNew() {}, |
| onSessionClose() {}, |
| onSessionDatagram() {}, |
| onSessionDatagramStatus() {}, |
| onSessionHandshake() {}, |
| onSessionPathValidation() {}, |
| onSessionTicket() {}, |
| onSessionVersionNegotiation() {}, |
| onStreamCreated() {}, |
| onStreamBlocked() {}, |
| onStreamClose() {}, |
| onStreamReset() {}, |
| onStreamHeaders() {}, |
| onStreamTrailers() {}, |
| }; |
| // Fail if any callback is missing |
| for (const fn of Object.keys(callbacks)) { |
| // eslint-disable-next-line no-unused-vars |
| const { [fn]: _, ...rest } = callbacks; |
| t.assert.throws(() => quic.setCallbacks(rest), { |
| code: 'ERR_MISSING_ARGS', |
| }); |
| } |
| // If all callbacks are present it should work |
| quic.setCallbacks(callbacks); |
| |
| // Multiple calls should just be ignored. |
| quic.setCallbacks(callbacks); |
| }); |
| }); |