|
|
@ -3,20 +3,22 @@ |
|
|
|
const assert = require('assert'); |
|
|
|
const CachePolicy = require('..'); |
|
|
|
|
|
|
|
describe('Cache', function() { |
|
|
|
const req = {method:'GET', headers:{}}; |
|
|
|
|
|
|
|
describe('Response headers', function() { |
|
|
|
it('simple miss', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{}}); |
|
|
|
const cache = new CachePolicy(req, {headers:{}}); |
|
|
|
assert(!cache.isFresh()); |
|
|
|
}); |
|
|
|
|
|
|
|
it('simple hit', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{'cache-control': 'public, max-age=999999'}}); |
|
|
|
const cache = new CachePolicy(req, {headers:{'cache-control': 'public, max-age=999999'}}); |
|
|
|
assert(cache.isFresh()); |
|
|
|
assert.equal(cache.maxAge(), 999999); |
|
|
|
}); |
|
|
|
|
|
|
|
it('cache with expires', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'date': new Date().toGMTString(), |
|
|
|
'expires': new Date(Date.now() + 2000).toGMTString(), |
|
|
|
}}); |
|
|
@ -25,7 +27,7 @@ describe('Cache', function() { |
|
|
|
}); |
|
|
|
|
|
|
|
it('cache expires no date', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'cache-control': 'public', |
|
|
|
'expires': new Date(Date.now()+3600*1000).toGMTString(), |
|
|
|
}}); |
|
|
@ -35,7 +37,7 @@ describe('Cache', function() { |
|
|
|
}); |
|
|
|
|
|
|
|
it('cache old files', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'date': new Date().toGMTString(), |
|
|
|
'last-modified': 'Mon, 07 Mar 2016 11:52:56 GMT', |
|
|
|
}}); |
|
|
@ -44,7 +46,7 @@ describe('Cache', function() { |
|
|
|
}); |
|
|
|
|
|
|
|
it('pragma: no-cache', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'pragma': 'no-cache', |
|
|
|
'last-modified': 'Mon, 07 Mar 2016 11:52:56 GMT', |
|
|
|
}}); |
|
|
@ -52,7 +54,7 @@ describe('Cache', function() { |
|
|
|
}); |
|
|
|
|
|
|
|
it('no-store', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'cache-control': 'no-store, public, max-age=1', |
|
|
|
}}); |
|
|
|
assert(!cache.isFresh()); |
|
|
@ -63,11 +65,11 @@ describe('Cache', function() { |
|
|
|
const privateHeader = { |
|
|
|
'cache-control': 'private, max-age=1234', |
|
|
|
}; |
|
|
|
const proxyCache = new CachePolicy({}, {headers:privateHeader}); |
|
|
|
const proxyCache = new CachePolicy(req, {headers:privateHeader}); |
|
|
|
assert(!proxyCache.isFresh()); |
|
|
|
assert.equal(0, proxyCache.maxAge()); |
|
|
|
|
|
|
|
const uaCache = new CachePolicy({}, {headers:privateHeader}, {shared:false}); |
|
|
|
const uaCache = new CachePolicy(req, {headers:privateHeader}, {shared:false}); |
|
|
|
assert(uaCache.isFresh()); |
|
|
|
assert.equal(1234, uaCache.maxAge()); |
|
|
|
}); |
|
|
@ -77,11 +79,11 @@ describe('Cache', function() { |
|
|
|
'set-cookie': 'foo=bar', |
|
|
|
'cache-control': 'max-age=99', |
|
|
|
}; |
|
|
|
const proxyCache = new CachePolicy({}, {headers:cookieHeader}, {shared:true}); |
|
|
|
const proxyCache = new CachePolicy(req, {headers:cookieHeader}, {shared:true}); |
|
|
|
assert(!proxyCache.isFresh()); |
|
|
|
assert.equal(0, proxyCache.maxAge()); |
|
|
|
|
|
|
|
const uaCache = new CachePolicy({}, {headers:cookieHeader}, {shared:false}); |
|
|
|
const uaCache = new CachePolicy(req, {headers:cookieHeader}, {shared:false}); |
|
|
|
assert(uaCache.isFresh()); |
|
|
|
assert.equal(99, uaCache.maxAge()); |
|
|
|
}); |
|
|
@ -91,21 +93,39 @@ describe('Cache', function() { |
|
|
|
'set-cookie': 'foo=bar', |
|
|
|
'cache-control': 'max-age=5, public', |
|
|
|
}; |
|
|
|
const proxyCache = new CachePolicy({}, {headers:cookieHeader}, {shared:true}); |
|
|
|
const proxyCache = new CachePolicy(req, {headers:cookieHeader}, {shared:true}); |
|
|
|
assert(proxyCache.isFresh()); |
|
|
|
assert.equal(5, proxyCache.maxAge()); |
|
|
|
}); |
|
|
|
|
|
|
|
it('miss max-age=0', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'cache-control': 'public, max-age=0', |
|
|
|
}}); |
|
|
|
assert(!cache.isFresh()); |
|
|
|
assert.equal(0, cache.maxAge()); |
|
|
|
}); |
|
|
|
|
|
|
|
it('cacheable 301', function() { |
|
|
|
const cache = new CachePolicy(req, { |
|
|
|
status: 301, |
|
|
|
headers:{ |
|
|
|
'last-modified': 'Mon, 07 Mar 2016 11:52:56 GMT', |
|
|
|
}}); |
|
|
|
assert(cache.isFresh()); |
|
|
|
}); |
|
|
|
|
|
|
|
it('cacheable 303', function() { |
|
|
|
const cache = new CachePolicy(req, { |
|
|
|
status: 303, |
|
|
|
headers:{ |
|
|
|
'cache-control': 'max-age=1000', |
|
|
|
}}); |
|
|
|
assert(cache.isFresh()); |
|
|
|
}); |
|
|
|
|
|
|
|
it('expired expires cached with max-age', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'cache-control': 'public, max-age=9999', |
|
|
|
'expires': 'Sat, 07 May 2016 15:35:18 GMT', |
|
|
|
}}); |
|
|
@ -118,17 +138,17 @@ describe('Cache', function() { |
|
|
|
'cache-control': 'public, s-maxage=9999', |
|
|
|
'expires': 'Sat, 07 May 2016 15:35:18 GMT', |
|
|
|
}; |
|
|
|
const proxyCache = new CachePolicy({}, {headers:sMaxAgeHeaders}); |
|
|
|
const proxyCache = new CachePolicy(req, {headers:sMaxAgeHeaders}); |
|
|
|
assert(proxyCache.isFresh()); |
|
|
|
assert.equal(9999, proxyCache.maxAge()); |
|
|
|
|
|
|
|
const uaCache = new CachePolicy({}, {headers:sMaxAgeHeaders}, {shared:false}); |
|
|
|
const uaCache = new CachePolicy(req, {headers:sMaxAgeHeaders}, {shared:false}); |
|
|
|
assert(!uaCache.isFresh()); |
|
|
|
assert.equal(0, uaCache.maxAge()); |
|
|
|
}); |
|
|
|
|
|
|
|
it('max-age wins over future expires', function() { |
|
|
|
const cache = new CachePolicy({}, {headers:{ |
|
|
|
const cache = new CachePolicy(req, {headers:{ |
|
|
|
'cache-control': 'public, max-age=333', |
|
|
|
'expires': new Date(Date.now()+3600*1000).toGMTString(), |
|
|
|
}}); |