Skip to content

Commit

Permalink
Rough in collapsing
Browse files Browse the repository at this point in the history
  • Loading branch information
mnot committed Feb 27, 2024
1 parent 028eaf9 commit fefdd29
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 5 deletions.
14 changes: 12 additions & 2 deletions test-engine/client/test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export function makeTest (test) {
const reqNum = idx + 1
const url = clientUtils.makeTestUrl(uuid, reqConfig)
let prevRes
if (i > 0) {
if (i > 0 && !('async' in requests[i - 1])) {
prevRes = Object.fromEntries(responses[i - 1].headers)
}
const init = fetching.init(idx, reqConfig, prevRes)
Expand All @@ -43,14 +43,19 @@ export function makeTest (test) {
clearTimeout(timeout)
})
},
pauseAfter: 'pause_after' in requests[i]
pauseAfter: 'pause_after' in requests[i],
async: 'async' in requests[i]
})
}

let idx = 0
function runNextStep () {
if (fetchFunctions.length) {
const nextFetchFunction = fetchFunctions.shift()
if (nextFetchFunction.async === true) {
nextFetchFunction.code(idx++)
return runNextStep()
}
if (nextFetchFunction.pauseAfter === true) {
return nextFetchFunction.code(idx++)
.then(clientUtils.pause)
Expand All @@ -77,6 +82,7 @@ export function makeTest (test) {
resolve()
})
.catch(err => { // fail
throw (err)
if (test.id in testResults) throw new Error(`Duplicate test ${test.id}`)
testResults[test.id] = [(err.name || 'unknown'), err.message]
resolve()
Expand Down Expand Up @@ -111,6 +117,10 @@ function checkResponse (test, requests, idx, response) {
if (reqConfig.expected_type === 'not_cached') {
assert(typeSetup, resNum === reqNum, `Response ${reqNum} comes from cache`)
}
if (reqConfig.expected_type === 'collapsed') {
assert(typeSetup, resNum === 1, `Request ${reqNum} was not collapsed`)
}

}

// check response status
Expand Down
4 changes: 2 additions & 2 deletions test-engine/server/handle-test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export default function handleTest (pathSegs, request, response) {
sendResponse(response, 409, `${requests[0].id} config not found for request ${srvReqNum} (anticipating ${requests.length})`)
return
}
if (reqConfig.dump) logRequest(request, srvReqNum)
if (reqConfig.dump) logRequest(request, reqNum)

// response_pause
if ('response_pause' in reqConfig) {
Expand Down Expand Up @@ -114,5 +114,5 @@ function continueHandleTest (uuid, request, response, requests, serverState) {
}

// logging
if (reqConfig.dump) logResponse(response, srvReqNum)
if (reqConfig.dump) logResponse(response, reqNum)
}
27 changes: 27 additions & 0 deletions tests/collapse.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import * as templates from './lib/templates.mjs'
import * as utils from './lib/utils.mjs'

export default

{
name: 'Collapsed Requests',
id: 'collapse',
description: 'These tests check how caches [collapse requests](https://httpwg.org/specs/rfc9111.html#constructing.responses.from.caches).',
tests: [
{
name: 'Does HTTP cache collapse two requests?',
id: 'collapse-basic',
depends_on: ['freshness-max-age'],
requests: [
templates.fresh({
response_pause: true,
async: true,
expected_type: 'collapsed'
}),
{
expected_type: 'collapsed'
}
]
}
]
}
3 changes: 2 additions & 1 deletion tests/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ import updateHead from './updateHead.mjs'
import invalidation from './invalidation.mjs'
import partial from './partial.mjs'
import auth from './authorization.mjs'
import collapse from './collapse.mjs'
import other from './other.mjs'
import cdncc from './cdn-cache-control.mjs'

export default [ccFreshness, ccParse, ageParse, expires, expiresParse, ccResponse, stale, heuristic, methods, statuses, ccRequest, pragma, vary, varyParse, conditionalLm, conditionalEtag, headers, update304, updateHead, invalidation, partial, auth, other, cdncc]
export default [ccFreshness, ccParse, ageParse, expires, expiresParse, ccResponse, stale, heuristic, methods, statuses, ccRequest, pragma, vary, varyParse, conditionalLm, conditionalEtag, headers, update304, updateHead, invalidation, partial, auth, collapse, other, cdncc]

0 comments on commit fefdd29

Please sign in to comment.