๐Ÿงช Worker Test Suite

hostedat.ditto.moe โ€” 2026-05-04

100.0%
Pass Rate
264
Total
264
Passed
0
Failed

Completed in 9.6s ยท View JSON

Summary

CategoryPassFailTotalRate
โœ…web-apis37037100%
โœ…fetch11011100%
โœ…crypto31031100%
โœ…kv10010100%
โœ…d1909100%
โœ…cache606100%
โœ…do909100%
โœ…storage15015100%
โœ…htmlrewriter10010100%
โœ…compression909100%
โœ…websocket707100%
โœ…streams10010100%
โœ…tcp606100%
โœ…eventsource303100%
โœ…textstreams303100%
โœ…messagechannel404100%
โœ…blob11011100%
โœ…misc14014100%
โœ…env404100%
โœ…ctx404100%
โœ…routing606100%
โœ…json-api707100%
โœ…auth606100%
โœ…workflows606100%
โœ…concurrent505100%
โœ…errors606100%
โœ…binary707100%
โœ…edge-cases808100%

Details

โœ… web-apis โ€” 37/37

TestResult
โœ…Request constructorPASS
โœ…Request with initPASS
โœ…Request headersPASS
โœ…Request text()PASS
โœ…Request json()PASS
โœ…Request arrayBuffer()PASS
โœ…Request clone()PASS
โœ…Response constructorPASS
โœ…Response.json()PASS
โœ…Response.redirect()PASS
โœ…Response with statusPASS
โœ…Response text()PASS
โœ…Headers constructorPASS
โœ…Headers case insensitivePASS
โœ…Headers has()PASS
โœ…Headers delete()PASS
โœ…Headers append()PASS
โœ…Headers forEach()PASS
โœ…Headers entries()PASS
โœ…Headers keys()PASS
โœ…Headers values()PASS
โœ…URL constructorPASS
โœ…URL propertiesPASS
โœ…URL with basePASS
โœ…URL toString()PASS
โœ…URLSearchParams constructorPASS
โœ…URLSearchParams get()PASS
โœ…URLSearchParams getAll()PASS
โœ…URLSearchParams has()PASS
โœ…URLSearchParams set()PASS
โœ…URLSearchParams append()PASS
โœ…URLSearchParams delete()PASS
โœ…URLSearchParams toString()PASS
โœ…URLSearchParams forEach()PASS
โœ…URLSearchParams entries()PASS
โœ…URLSearchParams keys()PASS
โœ…URLSearchParams values()PASS

โœ… fetch โ€” 11/11

TestResult
โœ…Basic GET requestPASS
โœ…POST with JSON bodyPASS
โœ…POST with headersPASS
โœ…Response text()PASS
โœ…Response json()PASS
โœ…Response arrayBuffer()PASS
โœ…Redirect followingPASS
โœ…Error handling invalid URLPASS
โœ…AbortController integrationPASS
โœ…AbortSignal.timeout()PASS
โœ…AbortSignal.abort()PASS

โœ… crypto โ€” 31/31

TestResult
โœ…crypto.randomUUID()PASS
โœ…crypto.getRandomValues()PASS
โœ…SHA-256 digestPASS
โœ…SHA-1 digestPASS
โœ…SHA-384 digestPASS
โœ…SHA-512 digestPASS
โœ…HMAC generateKeyPASS
โœ…HMAC sign/verifyPASS
โœ…AES-GCM generateKeyPASS
โœ…AES-GCM encrypt/decryptPASS
โœ…AES-CBC encrypt/decryptPASS
โœ…AES-CTR encrypt/decryptPASS
โœ…AES-KW wrapKey/unwrapKeyPASS
โœ…ECDSA P-256 generateKeyPASS
โœ…ECDSA P-256 sign/verifyPASS
โœ…ECDSA P-384 generateKeyPASS
โœ…ECDH P-256 generateKeyPASS
โœ…ECDH P-256 deriveBitsPASS
โœ…X25519 generateKeyPASS
โœ…X25519 deriveBitsPASS
โœ…Ed25519 generateKeyPASS
โœ…Ed25519 sign/verifyPASS
โœ…RSA-OAEP generateKeyPASS
โœ…RSA-OAEP encrypt/decryptPASS
โœ…RSASSA-PKCS1-v1_5 generateKeyPASS
โœ…RSASSA-PKCS1-v1_5 sign/verifyPASS
โœ…HKDF deriveBitsPASS
โœ…PBKDF2 deriveBitsPASS
โœ…importKey/exportKey rawPASS
โœ…importKey/exportKey JWKPASS
โœ…DigestStream SHA-256PASS

โœ… kv โ€” 10/10

TestResult
โœ…KV put/get stringPASS
โœ…KV put/get with metadataPASS
โœ…KV put with TTLPASS
โœ…KV get expired key returns nullPASS
โœ…KV delete keyPASS
โœ…KV list with prefixPASS
โœ…KV list with limitPASS
โœ…KV metadata roundtripPASS
โœ…KV overwrite existing keyPASS
โœ…KV cleanup test keysPASS

โœ… d1 โ€” 9/9

TestResult
โœ…D1 exec CREATE TABLEPASS
โœ…D1 prepare().bind().run() INSERTPASS
โœ…D1 prepare().bind().first() SELECTPASS
โœ…D1 prepare().bind().all() SELECTPASS
โœ…D1 prepare().raw() array formatPASS
โœ…D1 batch multiple statementsPASS
โœ…D1 meta informationPASS
โœ…D1 error handling invalid SQLPASS
โœ…D1 cleanup test tablePASS

โœ… cache โ€” 6/6

TestResult
โœ…caches.default put/matchPASS
โœ…caches.default deletePASS
โœ…caches.open named cachePASS
โœ…Cache-Control max-age TTLPASS
โœ…Match returns undefined for missingPASS
โœ…Delete returns booleanPASS

โœ… do โ€” 9/9

TestResult
โœ…DO idFromName deterministicPASS
โœ…DO idFromString from hexPASS
โœ…DO newUniqueId randomPASS
โœ…DO get stub โ†’ storage.put/getPASS
โœ…DO storage.put/get bulkPASS
โœ…DO storage.delete singlePASS
โœ…DO storage.delete multiplePASS
โœ…DO storage.deleteAllPASS
โœ…DO storage.list with optionsPASS

โœ… storage โ€” 15/15

TestResult
โœ…Storage put string bodyPASS
โœ…Storage get text()PASS
โœ…Storage put ArrayBuffer bodyPASS
โœ…Storage get arrayBuffer()PASS
โœ…Storage put with httpMetadataPASS
โœ…Storage put with customMetadataPASS
โœ…Storage get json()PASS
โœ…Storage get returns null for missingPASS
โœ…Storage head metadata onlyPASS
โœ…Storage list objectsPASS
โœ…Storage list with limitPASS
โœ…Storage createSignedUrlPASS
โœ…Storage publicUrl (bucket is public)PASS
โœ…Storage delete single keyPASS
โœ…Storage delete array of keysPASS

โœ… htmlrewriter โ€” 10/10

TestResult
โœ…HTMLRewriter on(selector) element handlerPASS
โœ…HTMLRewriter getAttribute/setAttributePASS
โœ…HTMLRewriter removeAttributePASS
โœ…HTMLRewriter hasAttributePASS
โœ…HTMLRewriter prepend/appendPASS
โœ…HTMLRewriter remove elementPASS
โœ…HTMLRewriter tagName readPASS
โœ…HTMLRewriter comments handlerPASS
โœ…HTMLRewriter text handlerPASS
โœ…HTMLRewriter chained transformationsPASS

โœ… compression โ€” 9/9

TestResult
โœ…CompressionStream gzipPASS
โœ…DecompressionStream gzipPASS
โœ…Gzip roundtripPASS
โœ…CompressionStream deflatePASS
โœ…DecompressionStream deflatePASS
โœ…Deflate roundtripPASS
โœ…CompressionStream brotliPASS
โœ…DecompressionStream brotliPASS
โœ…Brotli roundtripPASS

โœ… websocket โ€” 7/7

TestResult
โœ…WebSocketPair creationPASS
โœ…Object.values() iterationPASS
โœ…server.accept()PASS
โœ…server.send() โ†’ client receivesPASS
โœ…client.send() โ†’ server receivesPASS
โœ…close eventPASS
โœ…Return 101 with webSocket in ResponsePASS

โœ… streams โ€” 10/10

TestResult
โœ…ReadableStream constructorPASS
โœ…ReadableStream getReader/readPASS
โœ…ReadableStream cancelPASS
โœ…WritableStream constructorPASS
โœ…TransformStream readable/writablePASS
โœ…Pipe readable.pipeThroughPASS
โœ…ReadableStream.from()PASS
โœ…FixedLengthStreamPASS
โœ…BYOB ReaderPASS
โœ…Symbol.asyncIterator on ReadableStreamPASS

โœ… tcp โ€” 6/6

TestResult
โœ…connect() to external hostPASS
โœ…Write dataPASS
โœ…Read responsePASS
โœ…socket.opened promisePASS
โœ…socket.closed promisePASS
โœ…TLS connectionPASS

โœ… eventsource โ€” 3/3

TestResult
โœ…EventSource constructor existsPASS
โœ…EventSource readyState propertyPASS
โœ…EventSource close() methodPASS

โœ… textstreams โ€” 3/3

TestResult
โœ…TextEncoderStreamPASS
โœ…TextDecoderStreamPASS
โœ…IdentityTransformStreamPASS

โœ… messagechannel โ€” 4/4

TestResult
โœ…MessageChannel creationPASS
โœ…port1/port2 existPASS
โœ…postMessage โ†’ onmessagePASS
โœ…structured clone of dataPASS

โœ… blob โ€” 11/11

TestResult
โœ…Blob constructorPASS
โœ…Blob text()PASS
โœ…Blob size and typePASS
โœ…File constructorPASS
โœ…File name and lastModifiedPASS
โœ…FormData constructorPASS
โœ…FormData append/getPASS
โœ…FormData getAllPASS
โœ…FormData hasPASS
โœ…FormData deletePASS
โœ…FormData entriesPASS

โœ… misc โ€” 14/14

TestResult
โœ…structuredClone objectPASS
โœ…structuredClone arrayPASS
โœ…structuredClone nestedPASS
โœ…performance.now() returns numberPASS
โœ…performance.now() increasesPASS
โœ…navigator.userAgentPASS
โœ…queueMicrotask fires callbackPASS
โœ…atob/btoa roundtripPASS
โœ…TextEncoder/TextDecoder roundtripPASS
โœ…setTimeout/clearTimeoutPASS
โœ…setInterval/clearIntervalPASS
โœ…URLPattern existsPASS
โœ…URLPattern testPASS
โœ…URLPattern exec named groupsPASS

โœ… env โ€” 4/4

TestResult
โœ…Plain env var accessiblePASS
โœ…Secret env var accessiblePASS
โœ…ASSETS binding fetchPASS
โœ…All bindings present on env objectPASS

โœ… ctx โ€” 4/4

TestResult
โœ…ctx.waitUntil existsPASS
โœ…ctx.passThroughOnException existsPASS
โœ…ctx.waitUntil no-op behaviorPASS
โœ…ctx.passThroughOnException no-op behaviorPASS

โœ… routing โ€” 6/6

TestResult
โœ…Method + path matching (GET vs POST)PASS
โœ…Query parameter extraction and handlingPASS
โœ…CORS preflight responsePASS
โœ…Path parameter extraction patternsPASS
โœ…Trailing slash normalizationPASS
โœ…Content-Type negotiation (JSON vs HTML)PASS

โœ… json-api โ€” 7/7

TestResult
โœ…Parse POST JSON body and validate fieldsPASS
โœ…Return 400 for invalid JSONPASS
โœ…Return 400 for missing required fieldsPASS
โœ…Return 404 with JSON error bodyPASS
โœ…Return 201 with Location headerPASS
โœ…Handle empty body gracefullyPASS
โœ…Large JSON body parsing (10KB+)PASS

โœ… auth โ€” 6/6

TestResult
โœ…Parse Bearer token from Authorization headerPASS
โœ…Reject missing Authorization with 401PASS
โœ…Reject invalid token format with 401PASS
โœ…Cookie parsingPASS
โœ…HMAC-based token verificationPASS
โœ…Constant-time token comparisonPASS

โœ… workflows โ€” 6/6

TestResult
โœ…Read-modify-write cycle on KVPASS
โœ…D1 insert then KV cachePASS
โœ…Fetch external API then store in KVPASS
โœ…Storage put then get then serve with content-typePASS
โœ…D1 batch insert + selectPASS
โœ…Durable Object as counterPASS

โœ… concurrent โ€” 5/5

TestResult
โœ…Promise.all with 3 KV readsPASS
โœ…Promise.all with KV + D1 + fetchPASS
โœ…Promise.allSettled with one failingPASS
โœ…Two writes to same KV keyPASS
โœ…Parallel storage put operationsPASS

โœ… errors โ€” 6/6

TestResult
โœ…fetch to non-existent domain catches errorPASS
โœ…D1 query on non-existent table catches errorPASS
โœ…KV get handles missing keys gracefullyPASS
โœ…Malformed URL construction catches TypeErrorPASS
โœ…Stack trace available in caught errorsPASS
โœ…Response after error can still return HTTP responsePASS

โœ… binary โ€” 7/7

TestResult
โœ…Serve image bytes from Storage with correct Content-TypePASS
โœ…Unicode in KV keys and valuesPASS
โœ…Base64 encode/decode roundtripPASS
โœ…ArrayBuffer to Blob to Response chainPASS
โœ…SQL injection-safe via bind paramsPASS
โœ…UTF-8 multibyte handling (emoji, CJK)PASS
โœ…Binary KV value via base64 encodingPASS

โœ… edge-cases โ€” 8/8

TestResult
โœ…Empty string KV valuePASS
โœ…Empty response body (204 No Content)PASS
โœ…Very large KV value (~500KB)PASS
โœ…Many headers in response (20+)PASS
โœ…Deeply nested JSON structuredClonePASS
โœ…URL with all special componentsPASS
โœ…Response with multiple Set-Cookie headersPASS
โœ…Request with duplicate headersPASS
โ† Back