From 29a88a2a759aeb5610bc368be031f5a7bc9345ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCrg=C3=BCn=20Day=C4=B1o=C4=9Flu?= Date: Tue, 28 Jan 2025 00:32:50 +0100 Subject: [PATCH] add test --- test/issue-3959.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 test/issue-3959.js diff --git a/test/issue-3959.js b/test/issue-3959.js new file mode 100644 index 00000000000..94544dc69ec --- /dev/null +++ b/test/issue-3959.js @@ -0,0 +1,55 @@ +const { describe, test } = require('node:test') +const assert = require('node:assert') +const { createServer } = require('node:http') +const MemoryCacheStore = require('../lib/cache/memory-cache-store.js') +const { request, Agent, setGlobalDispatcher } = require('..') +const { interceptors } = require('..') + +describe('Cache with Vary headers', () => { + test('should cache response when Vary header exists but request header is missing', async () => { + let requestCount = 0 + const server = createServer((req, res) => { + requestCount++ + res.setHeader('Vary', 'Accept-Encoding') + res.setHeader('Cache-Control', 'max-age=60') + res.end(`Request count: ${requestCount}`) + }) + + await new Promise(resolve => server.listen(0, resolve)) + const port = server.address().port + const url = `http://localhost:${port}` + + const store = new MemoryCacheStore() + const agent = new Agent() + setGlobalDispatcher( + agent.compose( + interceptors.cache({ + store, + cacheByDefault: 1000, + methods: ['GET'] + }) + ) + ) + + const res1 = await request(url) + const body1 = await res1.body.text() + assert.strictEqual(body1, 'Request count: 1') + assert.strictEqual(requestCount, 1) + + const res2 = await request(url) + const body2 = await res2.body.text() + assert.strictEqual(body2, 'Request count: 1') + assert.strictEqual(requestCount, 1) + + const res3 = await request(url, { + headers: { + 'Accept-Encoding': 'gzip' + } + }) + const body3 = await res3.body.text() + assert.strictEqual(body3, 'Request count: 2') + assert.strictEqual(requestCount, 2) + + await new Promise(resolve => server.close(resolve)) + }) +})