diff --git a/integration-tests/js-compute/fixtures/app/src/request-clone.js b/integration-tests/js-compute/fixtures/app/src/request-clone.js index 1cbc2c3a9e..982ecf249d 100644 --- a/integration-tests/js-compute/fixtures/app/src/request-clone.js +++ b/integration-tests/js-compute/fixtures/app/src/request-clone.js @@ -46,6 +46,36 @@ routes.set('/request/clone/valid', async () => { assert(newRequest.bodyUsed, false, 'newRequest.bodyUsed'); assert(newRequest.body, null, 'newRequest.body'); }); +routes.set('/request/clone/headers-are-independent', () => { + const request = new Request('https://www.fastly.com', { + headers: { 'x-foo': 'original' }, + method: 'get', + }); + const cloned = request.clone(); + + // Mutating the clone's headers must not affect the original + cloned.headers.set('x-foo', 'mutated'); + assert( + request.headers.get('x-foo'), + 'original', + 'original header unchanged after mutating clone', + ); + + // Mutating the original's headers must not affect the clone + request.headers.set('x-bar', 'added'); + assert( + cloned.headers.get('x-bar'), + null, + 'clone does not see header added to original', + ); + + // Clone must carry the headers that existed at clone time + assert( + cloned.headers.get('x-foo'), + 'mutated', + 'clone has header value set on it', + ); +}); routes.set('/request/clone/invalid', async () => { const request = new Request('https://www.fastly.com', { headers: { diff --git a/integration-tests/js-compute/fixtures/app/tests.json b/integration-tests/js-compute/fixtures/app/tests.json index 6817434bf3..b46c16f05f 100644 --- a/integration-tests/js-compute/fixtures/app/tests.json +++ b/integration-tests/js-compute/fixtures/app/tests.json @@ -1222,6 +1222,7 @@ "GET /request/clone/called-as-constructor": {}, "GET /request/clone/called-unbound": {}, "GET /request/clone/valid": {}, + "GET /request/clone/headers-are-independent": {}, "GET /request/clone/invalid": {}, "POST /request/body-async-simple/no-workaround": { "environments": ["viceroy", "compute"],