Skip to content

Commit e4460f7

Browse files
Sigillsindresorhus
andauthored
Add failing tests for #2170 (#2171)
Co-authored-by: Sindre Sorhus <[email protected]>
1 parent 13a68d3 commit e4460f7

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

test/cache.ts

+144
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {promisify} from 'util';
33
import {Readable as ReadableStream} from 'stream';
44
import {Agent} from 'http';
55
import {gzip} from 'zlib';
6+
import process from 'process';
67
import test from 'ava';
78
import {pEvent} from 'p-event';
89
import getStream from 'get-stream';
@@ -471,3 +472,146 @@ test('response.complete is true when using keepalive agent', withServer, async (
471472

472473
t.true(first.complete);
473474
});
475+
476+
test.failing('revalidated uncompressed responses are retrieved from cache', withServer, async (t, server, got) => {
477+
let revalidated = false;
478+
479+
const payload = JSON.stringify([1]);
480+
481+
server.get('/', (request, response) => {
482+
if (request.headers['if-none-match'] === 'asdf') {
483+
revalidated = true;
484+
response.writeHead(304, {etag: 'asdf'});
485+
response.end();
486+
} else {
487+
response.writeHead(200, {
488+
etag: 'asdf',
489+
'cache-control': 'public, max-age=1, s-maxage=1',
490+
'content-type': 'application/json',
491+
});
492+
response.write(payload);
493+
response.end();
494+
}
495+
});
496+
497+
t.timeout(5000);
498+
499+
const client = got.extend({cache: new Map(), responseType: 'json'});
500+
501+
await client('').then(response => {
502+
t.false(revalidated);
503+
t.deepEqual(response.body, [1]);
504+
t.true(response.complete);
505+
});
506+
507+
// eslint-disable-next-line no-promise-executor-return
508+
await new Promise(resolve => setTimeout(resolve, 3000));
509+
510+
console.log('max-age has expired, performing second request');
511+
512+
await client('').then(response => {
513+
t.true(revalidated);
514+
t.deepEqual(response.body, [1]);
515+
t.true(response.complete); // Fails here.
516+
});
517+
});
518+
519+
test.failing('revalidated compressed responses are retrieved from cache', withServer, async (t, server, got) => {
520+
let revalidated = false;
521+
522+
const payload = JSON.stringify([1]);
523+
const compressed = await promisify(gzip)(payload);
524+
525+
server.get('/', (request, response) => {
526+
if (request.headers['if-none-match'] === 'asdf') {
527+
revalidated = true;
528+
response.writeHead(304, {etag: 'asdf'});
529+
response.end();
530+
} else {
531+
response.writeHead(200, {
532+
etag: 'asdf',
533+
'cache-control': 'public, max-age=1, s-maxage=1',
534+
'content-type': 'application/json',
535+
'content-encoding': 'gzip',
536+
});
537+
response.write(compressed);
538+
response.end();
539+
}
540+
});
541+
542+
t.timeout(5000);
543+
544+
const client = got.extend({cache: new Map(), responseType: 'json'});
545+
546+
await client('').then(response => {
547+
t.false(revalidated);
548+
t.deepEqual(response.body, [1]);
549+
t.true(response.complete);
550+
});
551+
552+
// eslint-disable-next-line no-promise-executor-return
553+
await new Promise(resolve => setTimeout(resolve, 3000));
554+
555+
console.log('max-age has expired, performing second request (but it will actually hang)');
556+
557+
await client('').then(response => {
558+
t.true(revalidated);
559+
t.deepEqual(response.body, [1]);
560+
t.true(response.complete);
561+
});
562+
});
563+
564+
test.failing('revalidated uncompressed responses from github are retrieved from cache', async t => {
565+
const client = got.extend({
566+
cache: new Map(),
567+
cacheOptions: {shared: false},
568+
responseType: 'json',
569+
headers: {
570+
'accept-encoding': 'identity',
571+
...(process.env.GITHUB_TOKEN ? {authorization: `token ${process.env.GITHUB_TOKEN}`} : {}),
572+
},
573+
});
574+
575+
t.timeout(70_000);
576+
577+
await client('https://api.github.com/repos/octocat/Spoon-Knife').then(response => {
578+
t.is((response.body as any).name, 'Spoon-Knife');
579+
t.true(response.complete);
580+
});
581+
582+
// eslint-disable-next-line no-promise-executor-return
583+
await new Promise(resolve => setTimeout(resolve, 65_000));
584+
585+
console.log('max-age has expired, performing second request');
586+
587+
await client('https://api.github.com/repos/octocat/Spoon-Knife').then(response => {
588+
t.is((response.body as any).name, 'Spoon-Knife');
589+
t.true(response.complete); // Fails here.
590+
});
591+
});
592+
593+
test.failing('revalidated compressed responses from github are retrieved from cache', async t => {
594+
const client = got.extend({
595+
cache: new Map(),
596+
cacheOptions: {shared: false},
597+
responseType: 'json',
598+
headers: process.env.GITHUB_TOKEN ? {authorization: `token ${process.env.GITHUB_TOKEN}`} : {},
599+
});
600+
601+
t.timeout(70_000);
602+
603+
await client('https://api.github.com/repos/octocat/Spoon-Knife').then(response => {
604+
t.is((response.body as any).name, 'Spoon-Knife');
605+
t.true(response.complete);
606+
});
607+
608+
// eslint-disable-next-line no-promise-executor-return
609+
await new Promise(resolve => setTimeout(resolve, 65_000));
610+
611+
console.log('max-age has expired, performing second request (but it will actually hang)');
612+
613+
await client('https://api.github.com/repos/octocat/Spoon-Knife').then(response => {
614+
t.is((response.body as any).name, 'Spoon-Knife');
615+
t.true(response.complete);
616+
});
617+
});

0 commit comments

Comments
 (0)