summaryrefslogtreecommitdiffstats
path: root/test/fetch/fetch-timeouts.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/fetch/fetch-timeouts.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/test/fetch/fetch-timeouts.js b/test/fetch/fetch-timeouts.js
new file mode 100644
index 0000000..b659aaa
--- /dev/null
+++ b/test/fetch/fetch-timeouts.js
@@ -0,0 +1,56 @@
+'use strict'
+
+const { test } = require('tap')
+
+const { fetch, Agent } = require('../..')
+const timers = require('../../lib/timers')
+const { createServer } = require('http')
+const FakeTimers = require('@sinonjs/fake-timers')
+
+test('Fetch very long request, timeout overridden so no error', (t) => {
+ const minutes = 6
+ const msToDelay = 1000 * 60 * minutes
+
+ t.setTimeout(undefined)
+ t.plan(1)
+
+ const clock = FakeTimers.install()
+ t.teardown(clock.uninstall.bind(clock))
+
+ const orgTimers = { ...timers }
+ Object.assign(timers, { setTimeout, clearTimeout })
+ t.teardown(() => {
+ Object.assign(timers, orgTimers)
+ })
+
+ const server = createServer((req, res) => {
+ setTimeout(() => {
+ res.end('hello')
+ }, msToDelay)
+ clock.tick(msToDelay + 1)
+ })
+ t.teardown(server.close.bind(server))
+
+ server.listen(0, () => {
+ fetch(`http://localhost:${server.address().port}`, {
+ path: '/',
+ method: 'GET',
+ dispatcher: new Agent({
+ headersTimeout: 0,
+ connectTimeout: 0,
+ bodyTimeout: 0
+ })
+ })
+ .then((response) => response.text())
+ .then((response) => {
+ t.equal('hello', response)
+ t.end()
+ })
+ .catch((err) => {
+ // This should not happen, a timeout error should not occur
+ t.error(err)
+ })
+
+ clock.tick(msToDelay - 1)
+ })
+})