Skip to content
File

Blob: src/workerd/api/tests/queue-metrics-sentinel-test.js

javascript85 lines
1// Copyright (c) 2026 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5// Tests that the upstream sentinel value of 0 for oldestMessageTimestamp is
6// correctly converted to undefined (kj::none) by clearEpochSentinel().
7 
8import assert from 'node:assert';
9 
10export default {
11 async fetch(request) {
12 const { pathname } = new URL(request.url);
13 
14 if (pathname === '/metrics') {
15 return Response.json({
16 backlogCount: 5,
17 backlogBytes: 100,
18 oldestMessageTimestamp: 0,
19 });
20 }
21 
22 if (pathname === '/message') {
23 await request.arrayBuffer();
24 return Response.json({
25 metadata: {
26 metrics: {
27 backlogCount: 5,
28 backlogBytes: 100,
29 oldestMessageTimestamp: 0,
30 },
31 },
32 });
33 }
34 
35 if (pathname === '/batch') {
36 await request.arrayBuffer();
37 return Response.json({
38 metadata: {
39 metrics: {
40 backlogCount: 10,
41 backlogBytes: 200,
42 oldestMessageTimestamp: 0,
43 },
44 },
45 });
46 }
47 
48 return new Response('Not Found', { status: 404 });
49 },
50 
51 async test(ctrl, env) {
52 // Test metrics() zero-sentinel โ†’ undefined
53 const metrics = await env.QUEUE.metrics();
54 assert.strictEqual(metrics.backlogCount, 5);
55 assert.strictEqual(metrics.backlogBytes, 100);
56 assert.strictEqual(
57 metrics.oldestMessageTimestamp,
58 undefined,
59 'Expected oldestMessageTimestamp to be undefined when upstream sends 0'
60 );
61 
62 // Test send() zero-sentinel โ†’ undefined
63 const sendResult = await env.QUEUE.send('abc', { contentType: 'text' });
64 assert.strictEqual(sendResult.metadata.metrics.backlogCount, 5);
65 assert.strictEqual(sendResult.metadata.metrics.backlogBytes, 100);
66 assert.strictEqual(
67 sendResult.metadata.metrics.oldestMessageTimestamp,
68 undefined,
69 'Expected send oldestMessageTimestamp to be undefined when upstream sends 0'
70 );
71 
72 // Test sendBatch() zero-sentinel โ†’ undefined
73 const sendBatchResult = await env.QUEUE.sendBatch([
74 { body: 'def', contentType: 'text' },
75 ]);
76 assert.strictEqual(sendBatchResult.metadata.metrics.backlogCount, 10);
77 assert.strictEqual(sendBatchResult.metadata.metrics.backlogBytes, 200);
78 assert.strictEqual(
79 sendBatchResult.metadata.metrics.oldestMessageTimestamp,
80 undefined,
81 'Expected sendBatch oldestMessageTimestamp to be undefined when upstream sends 0'
82 );
83 },
84};