From 5b8aa7cbd3ca39f75b4f2db15dcdd2e3cf301958 Mon Sep 17 00:00:00 2001 From: Ambrose Chua Date: Fri, 3 Sep 2021 19:24:42 +0800 Subject: [PATCH] test: IPv6 literals support --- test/main.js | 30 ++++++++++++++++++++++++++++++ test/utils/server.js | 13 +++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/test/main.js b/test/main.js index 1e1f368c3..77d352ba4 100644 --- a/test/main.js +++ b/test/main.js @@ -2334,3 +2334,33 @@ describe('node-fetch', () => { expect(res.url).to.equal(`${base}m%C3%B6bius`); }); }); + +describe('node-fetch using IPv6', () => { + const local = new TestServer('[::1]'); + let base; + + before(async () => { + await local.start(); + base = `http://${local.hostname}:${local.port}/`; + }); + + after(async () => { + return local.stop(); + }); + + it('should resolve into response', () => { + const url = `${base}hello`; + expect(url).to.contain('[::1]'); + return fetch(url).then(res => { + expect(res).to.be.an.instanceof(Response); + expect(res.headers).to.be.an.instanceof(Headers); + expect(res.body).to.be.an.instanceof(stream.Transform); + expect(res.bodyUsed).to.be.false; + + expect(res.url).to.equal(url); + expect(res.ok).to.be.true; + expect(res.status).to.equal(200); + expect(res.statusText).to.equal('OK'); + }); + }); +}); diff --git a/test/utils/server.js b/test/utils/server.js index 9bfe1c5af..25eec43fa 100644 --- a/test/utils/server.js +++ b/test/utils/server.js @@ -4,7 +4,7 @@ import {once} from 'events'; import Busboy from 'busboy'; export default class TestServer { - constructor() { + constructor(hostname) { this.server = http.createServer(this.router); // Node 8 default keepalive timeout is 5000ms // make it shorter here as we want to close server quickly at the end of tests @@ -15,10 +15,15 @@ export default class TestServer { this.server.on('connection', socket => { socket.setTimeout(1500); }); + this.hostname = hostname || 'localhost'; } async start() { - this.server.listen(0, 'localhost'); + let host = this.hostname; + if (host.startsWith('[')) { + host = host.slice(1, -1); + } + this.server.listen(0, host); return once(this.server, 'listening'); } @@ -31,10 +36,6 @@ export default class TestServer { return this.server.address().port; } - get hostname() { - return 'localhost'; - } - mockResponse(responseHandler) { this.server.nextResponseHandler = responseHandler; return `http://${this.hostname}:${this.port}/mocked`;