rivetkit 2.0.42 → 2.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{tsup/config-CLnylLYY.d.ts → browser/client.d.ts} +2127 -1910
- package/dist/browser/client.js +5182 -0
- package/dist/browser/client.js.map +1 -0
- package/dist/browser/inspector/client.d.ts +130 -0
- package/dist/browser/inspector/client.js +2854 -0
- package/dist/browser/inspector/client.js.map +1 -0
- package/dist/browser/v3-DnYObHH3.d.ts +279 -0
- package/dist/schemas/actor-inspector/v2.ts +796 -0
- package/dist/schemas/actor-inspector/v3.ts +899 -0
- package/dist/schemas/actor-persist/v4.ts +406 -0
- package/dist/schemas/client-protocol/v3.ts +554 -0
- package/dist/schemas/persist/v1.ts +781 -0
- package/dist/schemas/transport/v1.ts +697 -0
- package/dist/tsup/actor/errors.cjs +27 -3
- package/dist/tsup/actor/errors.cjs.map +1 -1
- package/dist/tsup/actor/errors.d.cts +37 -1
- package/dist/tsup/actor/errors.d.ts +37 -1
- package/dist/tsup/actor/errors.js +26 -1
- package/dist/tsup/{actor-router-consts-DzI2szci.d.cts → actor-router-consts-D29T1Z-K.d.cts} +1 -1
- package/dist/tsup/{actor-router-consts-DzI2szci.d.ts → actor-router-consts-D29T1Z-K.d.ts} +1 -1
- package/dist/tsup/chunk-424PT5DM.js +23 -0
- package/dist/tsup/chunk-424PT5DM.js.map +1 -0
- package/dist/tsup/{chunk-JDAD2YFA.js → chunk-5ESWDTHJ.js} +148 -273
- package/dist/tsup/chunk-5ESWDTHJ.js.map +1 -0
- package/dist/tsup/{chunk-FJ3KTN4V.js → chunk-6LIBPELE.js} +119 -11
- package/dist/tsup/chunk-6LIBPELE.js.map +1 -0
- package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
- package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
- package/dist/tsup/{chunk-LFVF5SCU.js → chunk-7HTNH26M.js} +126 -1
- package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
- package/dist/tsup/chunk-7K4CYDGD.js +630 -0
- package/dist/tsup/chunk-7K4CYDGD.js.map +1 -0
- package/dist/tsup/{chunk-XXGJCOL6.js → chunk-A6YIZWTK.js} +2 -2
- package/dist/tsup/chunk-AIYEYMX5.cjs +630 -0
- package/dist/tsup/chunk-AIYEYMX5.cjs.map +1 -0
- package/dist/tsup/{chunk-Q6W7RJJP.js → chunk-DIGBC2VI.js} +211 -2316
- package/dist/tsup/chunk-DIGBC2VI.js.map +1 -0
- package/dist/tsup/{chunk-RZW2DNND.cjs → chunk-F6JYU5IK.cjs} +1957 -1039
- package/dist/tsup/chunk-F6JYU5IK.cjs.map +1 -0
- package/dist/tsup/chunk-HAZL2EPK.cjs +534 -0
- package/dist/tsup/chunk-HAZL2EPK.cjs.map +1 -0
- package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
- package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
- package/dist/tsup/chunk-HIDX4C5Y.cjs +1036 -0
- package/dist/tsup/chunk-HIDX4C5Y.cjs.map +1 -0
- package/dist/tsup/chunk-IVG73YCW.js +534 -0
- package/dist/tsup/chunk-IVG73YCW.js.map +1 -0
- package/dist/tsup/chunk-KJSYAUOM.js +96 -0
- package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
- package/dist/tsup/{chunk-2XQS746M.cjs → chunk-L47L3ZWJ.cjs} +127 -2
- package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
- package/dist/tsup/{chunk-H4TB4X25.cjs → chunk-LW6KLR7A.cjs} +126 -18
- package/dist/tsup/chunk-LW6KLR7A.cjs.map +1 -0
- package/dist/tsup/chunk-LXUQ667X.js +2006 -0
- package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
- package/dist/tsup/{chunk-GMAVRZSF.js → chunk-M2T62AZQ.js} +1790 -872
- package/dist/tsup/chunk-M2T62AZQ.js.map +1 -0
- package/dist/tsup/chunk-MZ37VV3P.js +5974 -0
- package/dist/tsup/chunk-MZ37VV3P.js.map +1 -0
- package/dist/tsup/chunk-N4KRDJ56.js +72 -0
- package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
- package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
- package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
- package/dist/tsup/chunk-OMEPCQK2.js +649 -0
- package/dist/tsup/chunk-OMEPCQK2.js.map +1 -0
- package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
- package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
- package/dist/tsup/chunk-SSEP6DHP.cjs +2657 -0
- package/dist/tsup/chunk-SSEP6DHP.cjs.map +1 -0
- package/dist/tsup/chunk-T5YCUGVS.js +1036 -0
- package/dist/tsup/chunk-T5YCUGVS.js.map +1 -0
- package/dist/tsup/{chunk-EJVBH5VF.cjs → chunk-TPGXWFQT.cjs} +3 -3
- package/dist/tsup/{chunk-EJVBH5VF.cjs.map → chunk-TPGXWFQT.cjs.map} +1 -1
- package/dist/tsup/{chunk-X35U3YNX.cjs → chunk-TYLXNCA5.cjs} +214 -339
- package/dist/tsup/chunk-TYLXNCA5.cjs.map +1 -0
- package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
- package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
- package/dist/tsup/chunk-XWBAQO5H.cjs +649 -0
- package/dist/tsup/chunk-XWBAQO5H.cjs.map +1 -0
- package/dist/tsup/chunk-YQ4LDVD6.cjs +5974 -0
- package/dist/tsup/chunk-YQ4LDVD6.cjs.map +1 -0
- package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
- package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +9 -10
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +11 -5
- package/dist/tsup/client/mod.d.ts +11 -5
- package/dist/tsup/client/mod.js +8 -8
- package/dist/tsup/common/log.cjs +4 -4
- package/dist/tsup/common/log.d.cts +2 -2
- package/dist/tsup/common/log.d.ts +2 -2
- package/dist/tsup/common/log.js +3 -2
- package/dist/tsup/common/websocket.cjs +5 -5
- package/dist/tsup/common/websocket.js +4 -3
- package/dist/tsup/config-BFqid9Gr.d.ts +2574 -0
- package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
- package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
- package/dist/tsup/{config-CZB2-W8x.d.cts → config-CAZphOS1.d.cts} +681 -355
- package/dist/tsup/db/drizzle/mod.cjs +49 -0
- package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
- package/dist/tsup/db/drizzle/mod.d.cts +17 -0
- package/dist/tsup/db/drizzle/mod.d.ts +17 -0
- package/dist/tsup/db/drizzle/mod.js +49 -0
- package/dist/tsup/db/drizzle/mod.js.map +1 -0
- package/dist/tsup/db/mod.cjs +9 -0
- package/dist/tsup/db/mod.cjs.map +1 -0
- package/dist/tsup/db/mod.d.cts +9 -0
- package/dist/tsup/db/mod.d.ts +9 -0
- package/dist/tsup/db/mod.js +9 -0
- package/dist/tsup/db/mod.js.map +1 -0
- package/dist/tsup/{driver-D0QX9M11.d.ts → driver-Bxv62E2p.d.ts} +2 -2
- package/dist/tsup/{driver-q-zqG7fc.d.cts → driver-DYXwJR5D.d.cts} +2 -2
- package/dist/tsup/driver-helpers/mod.cjs +12 -6
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +12 -5
- package/dist/tsup/driver-helpers/mod.d.ts +12 -5
- package/dist/tsup/driver-helpers/mod.js +12 -5
- package/dist/tsup/driver-test-suite/mod.cjs +1370 -116
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +10 -4
- package/dist/tsup/driver-test-suite/mod.d.ts +10 -4
- package/dist/tsup/driver-test-suite/mod.js +2093 -838
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +29 -3
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.d.cts +124 -3
- package/dist/tsup/inspector/mod.d.ts +124 -3
- package/dist/tsup/inspector/mod.js +72 -45
- package/dist/tsup/keys-CydblqMh.d.cts +13 -0
- package/dist/tsup/keys-CydblqMh.d.ts +13 -0
- package/dist/tsup/mod.cjs +16 -10
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +26 -14
- package/dist/tsup/mod.d.ts +26 -14
- package/dist/tsup/mod.js +20 -13
- package/dist/tsup/serve-test-suite/mod.cjs +1165 -83
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/serve-test-suite/mod.js +1114 -29
- package/dist/tsup/serve-test-suite/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +84 -11
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +10 -5
- package/dist/tsup/test/mod.d.ts +10 -5
- package/dist/tsup/test/mod.js +85 -11
- package/dist/tsup/test/mod.js.map +1 -1
- package/dist/tsup/utils.cjs +10 -4
- package/dist/tsup/utils.cjs.map +1 -1
- package/dist/tsup/utils.d.cts +72 -2
- package/dist/tsup/utils.d.ts +72 -2
- package/dist/tsup/utils.js +9 -2
- package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
- package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
- package/dist/tsup/workflow/mod.cjs +16 -0
- package/dist/tsup/workflow/mod.cjs.map +1 -0
- package/dist/tsup/workflow/mod.d.cts +83 -0
- package/dist/tsup/workflow/mod.d.ts +83 -0
- package/dist/tsup/workflow/mod.js +16 -0
- package/dist/tsup/workflow/mod.js.map +1 -0
- package/package.json +62 -5
- package/src/actor/config.ts +478 -68
- package/src/actor/conn/mod.ts +68 -16
- package/src/actor/conn/state-manager.ts +2 -2
- package/src/actor/contexts/action.ts +20 -12
- package/src/actor/contexts/base/actor.ts +137 -7
- package/src/actor/contexts/base/conn-init.ts +27 -7
- package/src/actor/contexts/base/conn.ts +27 -18
- package/src/actor/contexts/before-action-response.ts +9 -2
- package/src/actor/contexts/before-connect.ts +7 -2
- package/src/actor/contexts/connect.ts +9 -2
- package/src/actor/contexts/create-conn-state.ts +7 -2
- package/src/actor/contexts/create-vars.ts +16 -3
- package/src/actor/contexts/create.ts +16 -3
- package/src/actor/contexts/destroy.ts +9 -3
- package/src/actor/contexts/disconnect.ts +10 -4
- package/src/actor/contexts/index.ts +4 -3
- package/src/actor/contexts/request.ts +23 -6
- package/src/actor/contexts/run.ts +47 -0
- package/src/actor/contexts/sleep.ts +9 -3
- package/src/actor/contexts/state-change.ts +9 -3
- package/src/actor/contexts/wake.ts +9 -3
- package/src/actor/contexts/websocket.ts +23 -6
- package/src/actor/database.ts +8 -18
- package/src/actor/definition.ts +20 -6
- package/src/actor/driver.ts +32 -3
- package/src/actor/errors.ts +127 -0
- package/src/actor/instance/connection-manager.ts +183 -80
- package/src/actor/instance/event-manager.ts +26 -15
- package/src/actor/instance/keys.ts +117 -0
- package/src/actor/instance/mod.ts +784 -174
- package/src/actor/instance/queue-manager.ts +603 -0
- package/src/actor/instance/queue.ts +287 -0
- package/src/actor/instance/schedule-manager.ts +49 -7
- package/src/actor/instance/state-manager.ts +35 -11
- package/src/actor/instance/traces-driver.ts +128 -0
- package/src/actor/mod.ts +26 -2
- package/src/actor/protocol/old.ts +28 -13
- package/src/actor/protocol/serde.ts +1 -1
- package/src/actor/router-endpoints.ts +177 -21
- package/src/actor/router-websocket-endpoints.ts +18 -29
- package/src/actor/router.ts +177 -0
- package/src/actor/schema.ts +291 -0
- package/src/actor/utils.ts +40 -0
- package/src/client/actor-common.ts +1 -1
- package/src/client/actor-conn.ts +100 -33
- package/src/client/actor-handle.ts +61 -33
- package/src/client/client.ts +2 -4
- package/src/client/config.ts +1 -1
- package/src/client/mod.browser.ts +2 -0
- package/src/client/mod.ts +1 -4
- package/src/client/queue.ts +146 -0
- package/src/client/utils.ts +1 -1
- package/src/common/log.ts +1 -1
- package/src/common/utils.ts +3 -3
- package/src/db/config.ts +100 -0
- package/src/db/drizzle/mod.ts +226 -0
- package/src/db/drizzle/sqlite-core.ts +22 -0
- package/src/db/mod.ts +125 -0
- package/src/db/shared.ts +92 -0
- package/src/db/sqlite-vfs.ts +12 -0
- package/src/driver-helpers/mod.ts +1 -0
- package/src/driver-test-suite/mod.ts +69 -43
- package/src/driver-test-suite/tests/access-control.ts +218 -0
- package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
- package/src/driver-test-suite/tests/actor-db.ts +394 -0
- package/src/driver-test-suite/tests/actor-inspector.ts +259 -358
- package/src/driver-test-suite/tests/actor-kv.ts +41 -20
- package/src/driver-test-suite/tests/actor-queue.ts +324 -0
- package/src/driver-test-suite/tests/actor-run.ts +181 -0
- package/src/driver-test-suite/tests/actor-schedule.ts +5 -2
- package/src/driver-test-suite/tests/actor-sleep.ts +3 -3
- package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
- package/src/driver-test-suite/tests/actor-workflow.ts +108 -0
- package/src/driver-test-suite/tests/manager-driver.ts +11 -0
- package/src/driver-test-suite/tests/raw-http-request-properties.ts +1 -1
- package/src/driver-test-suite/tests/raw-websocket.ts +12 -12
- package/src/drivers/default.ts +7 -2
- package/src/drivers/engine/actor-driver.ts +45 -37
- package/src/drivers/engine/config.ts +1 -1
- package/src/drivers/file-system/actor.ts +20 -2
- package/src/drivers/file-system/global-state.ts +569 -258
- package/src/drivers/file-system/kv-limits.ts +70 -0
- package/src/drivers/file-system/manager.ts +22 -6
- package/src/drivers/file-system/mod.ts +39 -16
- package/src/drivers/file-system/sqlite-runtime.ts +210 -0
- package/src/inspector/actor-inspector.ts +224 -102
- package/src/inspector/config.ts +1 -1
- package/src/inspector/handler.ts +102 -20
- package/src/inspector/mod.browser.ts +8 -0
- package/src/inspector/mod.ts +2 -0
- package/src/inspector/serve-ui.ts +40 -0
- package/src/inspector/transport.ts +18 -0
- package/src/inspector/utils.ts +5 -39
- package/src/manager/gateway.ts +1 -1
- package/src/manager/protocol/mod.ts +1 -1
- package/src/manager/protocol/query.ts +1 -1
- package/src/manager/router-schema.ts +1 -1
- package/src/manager/router.ts +38 -12
- package/src/manager-api/actors.ts +1 -1
- package/src/manager-api/common.ts +1 -1
- package/src/registry/config/driver.ts +1 -1
- package/src/registry/config/index.ts +212 -43
- package/src/registry/config/legacy-runner.ts +1 -1
- package/src/registry/config/runner.ts +1 -1
- package/src/registry/config/serverless.ts +1 -1
- package/src/registry/index.ts +7 -5
- package/src/remote-manager-driver/api-utils.ts +1 -1
- package/src/schemas/actor-inspector/mod.ts +1 -1
- package/src/schemas/actor-inspector/versioned.ts +195 -8
- package/src/schemas/actor-persist/versioned.ts +87 -7
- package/src/schemas/client-protocol/mod.ts +1 -1
- package/src/schemas/client-protocol/versioned.ts +127 -11
- package/src/schemas/client-protocol-zod/mod.ts +16 -1
- package/src/schemas/persist/mod.ts +1 -0
- package/src/schemas/transport/mod.ts +1 -0
- package/src/serde.ts +1 -1
- package/src/serve-test-suite/mod.ts +10 -9
- package/src/test/mod.ts +15 -56
- package/src/utils/endpoint-parser.test.ts +1 -1
- package/src/utils/endpoint-parser.ts +1 -1
- package/src/utils/env-vars.ts +12 -1
- package/src/utils/node.ts +15 -2
- package/src/utils.test.ts +34 -0
- package/src/utils.ts +140 -6
- package/src/workflow/constants.ts +2 -0
- package/src/workflow/context.ts +532 -0
- package/src/workflow/driver.ts +191 -0
- package/src/workflow/inspector.ts +268 -0
- package/src/workflow/mod.ts +122 -0
- package/dist/tsup/chunk-2IJTYN6K.cjs +0 -278
- package/dist/tsup/chunk-2IJTYN6K.cjs.map +0 -1
- package/dist/tsup/chunk-2XQS746M.cjs.map +0 -1
- package/dist/tsup/chunk-3VP5CSHV.cjs +0 -114
- package/dist/tsup/chunk-3VP5CSHV.cjs.map +0 -1
- package/dist/tsup/chunk-AQFSQMBG.js +0 -114
- package/dist/tsup/chunk-AQFSQMBG.js.map +0 -1
- package/dist/tsup/chunk-E6ZE2YEA.js +0 -664
- package/dist/tsup/chunk-E6ZE2YEA.js.map +0 -1
- package/dist/tsup/chunk-FJ3KTN4V.js.map +0 -1
- package/dist/tsup/chunk-GBENOENJ.cjs +0 -8
- package/dist/tsup/chunk-GBENOENJ.cjs.map +0 -1
- package/dist/tsup/chunk-GD7UXGOE.cjs +0 -4762
- package/dist/tsup/chunk-GD7UXGOE.cjs.map +0 -1
- package/dist/tsup/chunk-GMAVRZSF.js.map +0 -1
- package/dist/tsup/chunk-H4TB4X25.cjs.map +0 -1
- package/dist/tsup/chunk-JDAD2YFA.js.map +0 -1
- package/dist/tsup/chunk-KCOVZOPS.js +0 -1946
- package/dist/tsup/chunk-KCOVZOPS.js.map +0 -1
- package/dist/tsup/chunk-KDFWJKMJ.cjs +0 -664
- package/dist/tsup/chunk-KDFWJKMJ.cjs.map +0 -1
- package/dist/tsup/chunk-LFVF5SCU.js.map +0 -1
- package/dist/tsup/chunk-Q6W7RJJP.js.map +0 -1
- package/dist/tsup/chunk-RUW5CZ5Z.cjs +0 -1949
- package/dist/tsup/chunk-RUW5CZ5Z.cjs.map +0 -1
- package/dist/tsup/chunk-RZW2DNND.cjs.map +0 -1
- package/dist/tsup/chunk-TCOEBUUE.js +0 -278
- package/dist/tsup/chunk-TCOEBUUE.js.map +0 -1
- package/dist/tsup/chunk-X35U3YNX.cjs.map +0 -1
- package/dist/tsup/keys-Chhy4ylv.d.cts +0 -8
- package/dist/tsup/keys-Chhy4ylv.d.ts +0 -8
- package/dist/tsup/v1-Gq4avTK3.d.cts +0 -240
- package/dist/tsup/v1-Gq4avTK3.d.ts +0 -240
- /package/dist/tsup/{chunk-XXGJCOL6.js.map → chunk-A6YIZWTK.js.map} +0 -0
|
@@ -2,21 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var _chunk2IJTYN6Kcjs = require('../chunk-2IJTYN6K.cjs');
|
|
6
5
|
|
|
7
6
|
|
|
8
|
-
var
|
|
9
|
-
require('../chunk-
|
|
10
|
-
require('../chunk-
|
|
7
|
+
var _chunkXWBAQO5Hcjs = require('../chunk-XWBAQO5H.cjs');
|
|
8
|
+
require('../chunk-AIYEYMX5.cjs');
|
|
9
|
+
require('../chunk-HAZL2EPK.cjs');
|
|
10
|
+
require('../chunk-TYLXNCA5.cjs');
|
|
11
|
+
require('../chunk-YQ4LDVD6.cjs');
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
var
|
|
17
|
+
var _chunkSSEP6DHPcjs = require('../chunk-SSEP6DHP.cjs');
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
var
|
|
20
|
+
var _chunkTPGXWFQTcjs = require('../chunk-TPGXWFQT.cjs');
|
|
21
|
+
require('../chunk-6LJAZ5R4.cjs');
|
|
22
|
+
require('../chunk-SR3KQE7Q.cjs');
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
|
|
@@ -26,17 +29,19 @@ var _chunkEJVBH5VFcjs = require('../chunk-EJVBH5VF.cjs');
|
|
|
26
29
|
|
|
27
30
|
|
|
28
31
|
|
|
32
|
+
var _chunkF6JYU5IKcjs = require('../chunk-F6JYU5IK.cjs');
|
|
33
|
+
require('../chunk-NIYZDWMW.cjs');
|
|
29
34
|
|
|
30
|
-
var _chunkRZW2DNNDcjs = require('../chunk-RZW2DNND.cjs');
|
|
31
|
-
require('../chunk-KDFWJKMJ.cjs');
|
|
32
35
|
|
|
36
|
+
var _chunkHIDX4C5Ycjs = require('../chunk-HIDX4C5Y.cjs');
|
|
33
37
|
|
|
34
|
-
var _chunkH4TB4X25cjs = require('../chunk-H4TB4X25.cjs');
|
|
35
38
|
|
|
39
|
+
var _chunkLW6KLR7Acjs = require('../chunk-LW6KLR7A.cjs');
|
|
36
40
|
|
|
37
41
|
|
|
38
|
-
|
|
39
|
-
require('../chunk-
|
|
42
|
+
|
|
43
|
+
var _chunkL47L3ZWJcjs = require('../chunk-L47L3ZWJ.cjs');
|
|
44
|
+
require('../chunk-HDQ2JUQT.cjs');
|
|
40
45
|
|
|
41
46
|
// src/driver-test-suite/mod.ts
|
|
42
47
|
var _nodeserver = require('@hono/node-server');
|
|
@@ -80,20 +85,20 @@ function createTestInlineClientDriver(endpoint, encoding) {
|
|
|
80
85
|
const oldUrl = new URL(actorRequest.url);
|
|
81
86
|
const normalizedPath = oldUrl.pathname.startsWith("/") ? oldUrl.pathname.slice(1) : oldUrl.pathname;
|
|
82
87
|
const pathWithQuery = normalizedPath + oldUrl.search;
|
|
83
|
-
|
|
88
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
|
|
84
89
|
msg: "sending raw http request via test inline driver",
|
|
85
90
|
actorId,
|
|
86
91
|
encoding,
|
|
87
92
|
path: pathWithQuery
|
|
88
93
|
});
|
|
89
94
|
const url = `${endpoint}/.test/inline-driver/send-request/${pathWithQuery}`;
|
|
90
|
-
|
|
95
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
|
|
91
96
|
msg: "rewriting http url",
|
|
92
97
|
from: oldUrl,
|
|
93
98
|
to: url
|
|
94
99
|
});
|
|
95
100
|
const headers = new Headers(actorRequest.headers);
|
|
96
|
-
headers.set(
|
|
101
|
+
headers.set(_chunkF6JYU5IKcjs.HEADER_ACTOR_ID, actorId);
|
|
97
102
|
const response = await fetch(
|
|
98
103
|
new Request(url, {
|
|
99
104
|
method: actorRequest.method,
|
|
@@ -109,7 +114,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
|
|
|
109
114
|
const errorData = await clonedResponse.json();
|
|
110
115
|
if (errorData.error) {
|
|
111
116
|
if (typeof errorData.error === "object") {
|
|
112
|
-
throw new (0,
|
|
117
|
+
throw new (0, _chunkSSEP6DHPcjs.ActorError)(
|
|
113
118
|
errorData.error.code,
|
|
114
119
|
errorData.error.message,
|
|
115
120
|
errorData.error.metadata
|
|
@@ -117,7 +122,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
|
|
|
117
122
|
}
|
|
118
123
|
}
|
|
119
124
|
} catch (e) {
|
|
120
|
-
if (!(e instanceof
|
|
125
|
+
if (!(e instanceof _chunkSSEP6DHPcjs.ActorError)) {
|
|
121
126
|
return response;
|
|
122
127
|
}
|
|
123
128
|
throw e;
|
|
@@ -126,33 +131,33 @@ function createTestInlineClientDriver(endpoint, encoding) {
|
|
|
126
131
|
return response;
|
|
127
132
|
},
|
|
128
133
|
async openWebSocket(path, actorId, encoding2, params) {
|
|
129
|
-
const WebSocket2 = await
|
|
134
|
+
const WebSocket2 = await _chunkTPGXWFQTcjs.importWebSocket.call(void 0, );
|
|
130
135
|
const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
|
|
131
136
|
const wsUrl = new URL(
|
|
132
137
|
`${endpoint}/.test/inline-driver/connect-websocket/ws`
|
|
133
138
|
);
|
|
134
|
-
|
|
139
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
|
|
135
140
|
msg: "creating websocket connection via test inline driver",
|
|
136
141
|
url: wsUrl.toString()
|
|
137
142
|
});
|
|
138
143
|
const wsProtocol = wsUrl.protocol === "https:" ? "wss:" : "ws:";
|
|
139
144
|
const finalWsUrl = `${wsProtocol}//${wsUrl.host}${wsUrl.pathname}`;
|
|
140
145
|
const protocols = [];
|
|
141
|
-
protocols.push(
|
|
142
|
-
protocols.push(`${
|
|
146
|
+
protocols.push(_chunkF6JYU5IKcjs.WS_PROTOCOL_STANDARD);
|
|
147
|
+
protocols.push(`${_chunkF6JYU5IKcjs.WS_PROTOCOL_TARGET}actor`);
|
|
143
148
|
protocols.push(
|
|
144
|
-
`${
|
|
149
|
+
`${_chunkF6JYU5IKcjs.WS_PROTOCOL_ACTOR}${encodeURIComponent(actorId)}`
|
|
145
150
|
);
|
|
146
|
-
protocols.push(`${
|
|
151
|
+
protocols.push(`${_chunkF6JYU5IKcjs.WS_PROTOCOL_ENCODING}${encoding2}`);
|
|
147
152
|
protocols.push(
|
|
148
|
-
`${
|
|
153
|
+
`${_chunkF6JYU5IKcjs.WS_TEST_PROTOCOL_PATH}${encodeURIComponent(normalizedPath)}`
|
|
149
154
|
);
|
|
150
155
|
if (params !== void 0) {
|
|
151
156
|
protocols.push(
|
|
152
|
-
`${
|
|
157
|
+
`${_chunkF6JYU5IKcjs.WS_PROTOCOL_CONN_PARAMS}${encodeURIComponent(JSON.stringify(params))}`
|
|
153
158
|
);
|
|
154
159
|
}
|
|
155
|
-
|
|
160
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
|
|
156
161
|
msg: "connecting to websocket",
|
|
157
162
|
url: finalWsUrl,
|
|
158
163
|
protocols
|
|
@@ -172,7 +177,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
|
|
|
172
177
|
encoding2,
|
|
173
178
|
params
|
|
174
179
|
);
|
|
175
|
-
return upgradeWebSocket(() => wsHandler)(c,
|
|
180
|
+
return upgradeWebSocket(() => wsHandler)(c, _chunkLW6KLR7Acjs.noopNext.call(void 0, ));
|
|
176
181
|
},
|
|
177
182
|
async buildGatewayUrl(actorId) {
|
|
178
183
|
return `${endpoint}/gateway/${actorId}`;
|
|
@@ -189,7 +194,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
|
|
|
189
194
|
};
|
|
190
195
|
}
|
|
191
196
|
async function makeInlineRequest(endpoint, encoding, method, args) {
|
|
192
|
-
|
|
197
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
|
|
193
198
|
msg: "sending inline request",
|
|
194
199
|
encoding,
|
|
195
200
|
method,
|
|
@@ -219,14 +224,14 @@ async function makeInlineRequest(endpoint, encoding, method, args) {
|
|
|
219
224
|
if ("ok" in callResponse) {
|
|
220
225
|
return callResponse.ok;
|
|
221
226
|
} else if ("err" in callResponse) {
|
|
222
|
-
throw new (0,
|
|
227
|
+
throw new (0, _chunkSSEP6DHPcjs.ActorError)(
|
|
223
228
|
callResponse.err.group,
|
|
224
229
|
callResponse.err.code,
|
|
225
230
|
callResponse.err.message,
|
|
226
231
|
callResponse.err.metadata
|
|
227
232
|
);
|
|
228
233
|
} else {
|
|
229
|
-
|
|
234
|
+
_chunkHIDX4C5Ycjs.assertUnreachable.call(void 0, callResponse);
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
237
|
|
|
@@ -239,12 +244,12 @@ async function setupDriverTest(c, driverTestConfig) {
|
|
|
239
244
|
}
|
|
240
245
|
const { endpoint, namespace, runnerName, cleanup } = await driverTestConfig.start();
|
|
241
246
|
c.onTestFinished(() => {
|
|
242
|
-
|
|
247
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).info("cleaning up test");
|
|
243
248
|
cleanup();
|
|
244
249
|
});
|
|
245
250
|
let client;
|
|
246
251
|
if (driverTestConfig.clientType === "http") {
|
|
247
|
-
client =
|
|
252
|
+
client = _chunkSSEP6DHPcjs.createClient.call(void 0, {
|
|
248
253
|
endpoint,
|
|
249
254
|
namespace,
|
|
250
255
|
runnerName,
|
|
@@ -257,12 +262,12 @@ async function setupDriverTest(c, driverTestConfig) {
|
|
|
257
262
|
} else if (driverTestConfig.clientType === "inline") {
|
|
258
263
|
const encoding = _nullishCoalesce(driverTestConfig.encoding, () => ( "bare"));
|
|
259
264
|
const managerDriver = createTestInlineClientDriver(endpoint, encoding);
|
|
260
|
-
const runConfig =
|
|
265
|
+
const runConfig = _chunkSSEP6DHPcjs.ClientConfigSchema.parse({
|
|
261
266
|
encoding
|
|
262
267
|
});
|
|
263
|
-
client =
|
|
268
|
+
client = _chunkSSEP6DHPcjs.createClientWithDriver.call(void 0, managerDriver, runConfig);
|
|
264
269
|
} else {
|
|
265
|
-
|
|
270
|
+
_chunkHIDX4C5Ycjs.assertUnreachable.call(void 0, driverTestConfig.clientType);
|
|
266
271
|
}
|
|
267
272
|
if (!driverTestConfig.HACK_skipCleanupNet) {
|
|
268
273
|
c.onTestFinished(async () => await client.dispose());
|
|
@@ -404,6 +409,194 @@ function runActionFeaturesTests(driverTestConfig) {
|
|
|
404
409
|
});
|
|
405
410
|
}
|
|
406
411
|
|
|
412
|
+
// src/driver-test-suite/tests/access-control.ts
|
|
413
|
+
|
|
414
|
+
function runAccessControlTests(driverTestConfig) {
|
|
415
|
+
_vitest.describe.call(void 0, "access control", () => {
|
|
416
|
+
_vitest.test.call(void 0, "actions run without entrypoint auth gating", async (c) => {
|
|
417
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
418
|
+
const handle = client.accessControlActor.getOrCreate(["actions"]);
|
|
419
|
+
const allowed = await handle.allowedAction("ok");
|
|
420
|
+
_vitest.expect.call(void 0, allowed).toBe("allowed:ok");
|
|
421
|
+
});
|
|
422
|
+
_vitest.test.call(void 0, "passes connection id into canPublish context", async (c) => {
|
|
423
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
424
|
+
const handle = client.accessControlActor.getOrCreate(["publish-ctx"]);
|
|
425
|
+
await handle.send("allowedQueue", { value: "one" });
|
|
426
|
+
const connId = await handle.allowedGetLastCanPublishConnId();
|
|
427
|
+
_vitest.expect.call(void 0, typeof connId).toBe("string");
|
|
428
|
+
_vitest.expect.call(void 0, connId.length).toBeGreaterThan(0);
|
|
429
|
+
});
|
|
430
|
+
_vitest.test.call(void 0, "allows and denies queue sends, and ignores undefined queues", async (c) => {
|
|
431
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
432
|
+
const handle = client.accessControlActor.getOrCreate(["queue"]);
|
|
433
|
+
await handle.send("allowedQueue", { value: "one" });
|
|
434
|
+
await _vitest.expect.call(void 0,
|
|
435
|
+
handle.send("blockedQueue", { value: "two" })
|
|
436
|
+
).rejects.toMatchObject({
|
|
437
|
+
code: "forbidden"
|
|
438
|
+
});
|
|
439
|
+
await _vitest.expect.call(void 0,
|
|
440
|
+
handle.send("missingQueue", { value: "three" })
|
|
441
|
+
).resolves.toBeUndefined();
|
|
442
|
+
await _vitest.expect.call(void 0,
|
|
443
|
+
handle.send(
|
|
444
|
+
"missingQueue",
|
|
445
|
+
{ value: "four" },
|
|
446
|
+
{ wait: true, timeout: 50 }
|
|
447
|
+
)
|
|
448
|
+
).resolves.toMatchObject({ status: "completed" });
|
|
449
|
+
const allowedMessage = await handle.allowedReceiveQueue();
|
|
450
|
+
_vitest.expect.call(void 0, allowedMessage).toEqual({ value: "one" });
|
|
451
|
+
const remainingMessage = await handle.allowedReceiveAnyQueue();
|
|
452
|
+
_vitest.expect.call(void 0, remainingMessage).toBeNull();
|
|
453
|
+
});
|
|
454
|
+
_vitest.test.call(void 0, "ignores incoming queue sends when actor has no queues config", async (c) => {
|
|
455
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
456
|
+
const handle = client.accessControlNoQueuesActor.getOrCreate([
|
|
457
|
+
"no-queues"
|
|
458
|
+
]);
|
|
459
|
+
await _vitest.expect.call(void 0,
|
|
460
|
+
handle.send("anyQueue", { value: "ignored" })
|
|
461
|
+
).resolves.toBeUndefined();
|
|
462
|
+
await _vitest.expect.call(void 0,
|
|
463
|
+
handle.send(
|
|
464
|
+
"anyQueue",
|
|
465
|
+
{ value: "ignored-wait" },
|
|
466
|
+
{ wait: true, timeout: 50 }
|
|
467
|
+
)
|
|
468
|
+
).resolves.toMatchObject({ status: "completed" });
|
|
469
|
+
_vitest.expect.call(void 0, await handle.readAnyQueue()).toBeNull();
|
|
470
|
+
});
|
|
471
|
+
_vitest.test.call(void 0, "allows and denies subscriptions with canSubscribe", async (c) => {
|
|
472
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
473
|
+
const handle = client.accessControlActor.getOrCreate([
|
|
474
|
+
"subscription"
|
|
475
|
+
]);
|
|
476
|
+
const conn = handle.connect();
|
|
477
|
+
const allowedEventPromise = new Promise(
|
|
478
|
+
(resolve, reject) => {
|
|
479
|
+
const unsubscribeError = conn.onError((error) => {
|
|
480
|
+
reject(error);
|
|
481
|
+
});
|
|
482
|
+
const unsubscribeEvent = conn.on(
|
|
483
|
+
"allowedEvent",
|
|
484
|
+
(payload) => {
|
|
485
|
+
unsubscribeError();
|
|
486
|
+
unsubscribeEvent();
|
|
487
|
+
resolve(payload);
|
|
488
|
+
}
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
);
|
|
492
|
+
await conn.allowedAction("subscribe-ready");
|
|
493
|
+
await conn.allowedBroadcastAllowedEvent("hello");
|
|
494
|
+
_vitest.expect.call(void 0, await allowedEventPromise).toEqual({ value: "hello" });
|
|
495
|
+
const connId = await conn.allowedGetLastCanSubscribeConnId();
|
|
496
|
+
_vitest.expect.call(void 0, typeof connId).toBe("string");
|
|
497
|
+
_vitest.expect.call(void 0, connId.length).toBeGreaterThan(0);
|
|
498
|
+
await conn.dispose();
|
|
499
|
+
const blockedConn = handle.connect();
|
|
500
|
+
blockedConn.on("blockedEvent", () => {
|
|
501
|
+
});
|
|
502
|
+
await _vitest.expect.call(void 0,
|
|
503
|
+
blockedConn.allowedAction("blocked-subscribe-ready")
|
|
504
|
+
).rejects.toMatchObject({
|
|
505
|
+
code: "forbidden"
|
|
506
|
+
});
|
|
507
|
+
await blockedConn.dispose();
|
|
508
|
+
});
|
|
509
|
+
_vitest.test.call(void 0, "broadcasts undefined events without failing subscriptions", async (c) => {
|
|
510
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
511
|
+
const handle = client.accessControlActor.getOrCreate([
|
|
512
|
+
"undefined-event"
|
|
513
|
+
]);
|
|
514
|
+
const conn = handle.connect();
|
|
515
|
+
const eventPromise = new Promise((resolve, reject) => {
|
|
516
|
+
const unsubscribeError = conn.onError((error) => {
|
|
517
|
+
reject(error);
|
|
518
|
+
});
|
|
519
|
+
const unsubscribeEvent = conn.on("undefinedEvent", (payload) => {
|
|
520
|
+
unsubscribeError();
|
|
521
|
+
unsubscribeEvent();
|
|
522
|
+
resolve(payload);
|
|
523
|
+
});
|
|
524
|
+
});
|
|
525
|
+
await conn.allowedAction("undefined-subscribe-ready");
|
|
526
|
+
await conn.allowedBroadcastUndefinedEvent("wildcard");
|
|
527
|
+
_vitest.expect.call(void 0, await eventPromise).toEqual({ value: "wildcard" });
|
|
528
|
+
await conn.dispose();
|
|
529
|
+
});
|
|
530
|
+
_vitest.test.call(void 0, "allows and denies raw request handlers", async (c) => {
|
|
531
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
532
|
+
const allowedHandle = client.accessControlActor.getOrCreate(
|
|
533
|
+
["raw-request-allow"],
|
|
534
|
+
{
|
|
535
|
+
params: { allowRequest: true }
|
|
536
|
+
}
|
|
537
|
+
);
|
|
538
|
+
const deniedHandle = client.accessControlActor.getOrCreate(
|
|
539
|
+
["raw-request-deny"],
|
|
540
|
+
{
|
|
541
|
+
params: { allowRequest: false }
|
|
542
|
+
}
|
|
543
|
+
);
|
|
544
|
+
const allowedResponse = await allowedHandle.fetch("/status");
|
|
545
|
+
_vitest.expect.call(void 0, allowedResponse.status).toBe(200);
|
|
546
|
+
_vitest.expect.call(void 0, await allowedResponse.json()).toEqual({ ok: true });
|
|
547
|
+
const deniedResponse = await deniedHandle.fetch("/status");
|
|
548
|
+
_vitest.expect.call(void 0, deniedResponse.status).toBe(403);
|
|
549
|
+
});
|
|
550
|
+
_vitest.test.call(void 0, "allows and denies raw websocket handlers", async (c) => {
|
|
551
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
552
|
+
const allowedHandle = client.accessControlActor.getOrCreate(
|
|
553
|
+
["raw-websocket-allow"],
|
|
554
|
+
{
|
|
555
|
+
params: { allowWebSocket: true }
|
|
556
|
+
}
|
|
557
|
+
);
|
|
558
|
+
const ws = await allowedHandle.webSocket();
|
|
559
|
+
const welcome = await new Promise((resolve) => {
|
|
560
|
+
ws.addEventListener(
|
|
561
|
+
"message",
|
|
562
|
+
(event) => {
|
|
563
|
+
resolve(
|
|
564
|
+
JSON.parse(event.data)
|
|
565
|
+
);
|
|
566
|
+
},
|
|
567
|
+
{ once: true }
|
|
568
|
+
);
|
|
569
|
+
});
|
|
570
|
+
_vitest.expect.call(void 0, welcome.type).toBe("welcome");
|
|
571
|
+
ws.close();
|
|
572
|
+
const deniedHandle = client.accessControlActor.getOrCreate(
|
|
573
|
+
["raw-websocket-deny"],
|
|
574
|
+
{
|
|
575
|
+
params: { allowWebSocket: false }
|
|
576
|
+
}
|
|
577
|
+
);
|
|
578
|
+
let denied = false;
|
|
579
|
+
try {
|
|
580
|
+
const deniedWs = await deniedHandle.webSocket();
|
|
581
|
+
const closeEvent = await new Promise((resolve) => {
|
|
582
|
+
deniedWs.addEventListener(
|
|
583
|
+
"close",
|
|
584
|
+
(event) => {
|
|
585
|
+
resolve(event);
|
|
586
|
+
},
|
|
587
|
+
{ once: true }
|
|
588
|
+
);
|
|
589
|
+
});
|
|
590
|
+
_vitest.expect.call(void 0, closeEvent.code).toBe(1011);
|
|
591
|
+
denied = true;
|
|
592
|
+
} catch (e2) {
|
|
593
|
+
denied = true;
|
|
594
|
+
}
|
|
595
|
+
_vitest.expect.call(void 0, denied).toBe(true);
|
|
596
|
+
});
|
|
597
|
+
});
|
|
598
|
+
}
|
|
599
|
+
|
|
407
600
|
// src/driver-test-suite/tests/actor-conn.ts
|
|
408
601
|
|
|
409
602
|
function runActorConnTests(driverTestConfig) {
|
|
@@ -796,7 +989,7 @@ function runActorConnHibernationTests(driverTestConfig) {
|
|
|
796
989
|
await hibernatingActor.triggerSleep();
|
|
797
990
|
await waitFor(
|
|
798
991
|
driverTestConfig,
|
|
799
|
-
|
|
992
|
+
_chunkXWBAQO5Hcjs.HIBERNATION_SLEEP_TIMEOUT + 100
|
|
800
993
|
);
|
|
801
994
|
const ping2 = await hibernatingActor.ping();
|
|
802
995
|
_vitest.expect.call(void 0, ping2).toBe("pong");
|
|
@@ -818,7 +1011,7 @@ function runActorConnHibernationTests(driverTestConfig) {
|
|
|
818
1011
|
await hibernatingActor.triggerSleep();
|
|
819
1012
|
await waitFor(
|
|
820
1013
|
driverTestConfig,
|
|
821
|
-
|
|
1014
|
+
_chunkXWBAQO5Hcjs.HIBERNATION_SLEEP_TIMEOUT + 100
|
|
822
1015
|
);
|
|
823
1016
|
const count3 = await hibernatingActor.getConnCount();
|
|
824
1017
|
_vitest.expect.call(void 0, count3).toBe(2);
|
|
@@ -840,7 +1033,7 @@ function runActorConnHibernationTests(driverTestConfig) {
|
|
|
840
1033
|
await conn1.triggerSleep();
|
|
841
1034
|
await waitFor(
|
|
842
1035
|
driverTestConfig,
|
|
843
|
-
|
|
1036
|
+
_chunkXWBAQO5Hcjs.HIBERNATION_SLEEP_TIMEOUT + 100
|
|
844
1037
|
);
|
|
845
1038
|
await conn1.dispose();
|
|
846
1039
|
await waitFor(driverTestConfig, 250);
|
|
@@ -1046,6 +1239,329 @@ function runActorConnStateTests(driverTestConfig) {
|
|
|
1046
1239
|
});
|
|
1047
1240
|
}
|
|
1048
1241
|
|
|
1242
|
+
// src/driver-test-suite/tests/actor-db.ts
|
|
1243
|
+
|
|
1244
|
+
var CHUNK_SIZE = 4096;
|
|
1245
|
+
var LARGE_PAYLOAD_SIZE = 32768;
|
|
1246
|
+
var HIGH_VOLUME_COUNT = 1e3;
|
|
1247
|
+
var SLEEP_WAIT_MS = 150;
|
|
1248
|
+
var LIFECYCLE_POLL_INTERVAL_MS = 25;
|
|
1249
|
+
var LIFECYCLE_POLL_ATTEMPTS = 40;
|
|
1250
|
+
var CHUNK_BOUNDARY_SIZES = [
|
|
1251
|
+
CHUNK_SIZE - 1,
|
|
1252
|
+
CHUNK_SIZE,
|
|
1253
|
+
CHUNK_SIZE + 1,
|
|
1254
|
+
2 * CHUNK_SIZE - 1,
|
|
1255
|
+
2 * CHUNK_SIZE,
|
|
1256
|
+
2 * CHUNK_SIZE + 1,
|
|
1257
|
+
4 * CHUNK_SIZE - 1,
|
|
1258
|
+
4 * CHUNK_SIZE,
|
|
1259
|
+
4 * CHUNK_SIZE + 1
|
|
1260
|
+
];
|
|
1261
|
+
var SHRINK_GROW_INITIAL_ROWS = 16;
|
|
1262
|
+
var SHRINK_GROW_REGROW_ROWS = 10;
|
|
1263
|
+
var SHRINK_GROW_INITIAL_PAYLOAD = 4096;
|
|
1264
|
+
var SHRINK_GROW_REGROW_PAYLOAD = 6144;
|
|
1265
|
+
var HOT_ROW_COUNT = 10;
|
|
1266
|
+
var HOT_ROW_UPDATES = 240;
|
|
1267
|
+
var INTEGRITY_SEED_COUNT = 64;
|
|
1268
|
+
var INTEGRITY_CHURN_COUNT = 120;
|
|
1269
|
+
function getDbActor(client, variant) {
|
|
1270
|
+
return variant === "raw" ? client.dbActorRaw : client.dbActorDrizzle;
|
|
1271
|
+
}
|
|
1272
|
+
function runActorDbTests(driverTestConfig) {
|
|
1273
|
+
const variants = ["raw", "drizzle"];
|
|
1274
|
+
for (const variant of variants) {
|
|
1275
|
+
_vitest.describe.call(void 0, `Actor Database (${variant}) Tests`, () => {
|
|
1276
|
+
_vitest.test.call(void 0, "bootstraps schema on startup", async (c) => {
|
|
1277
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1278
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1279
|
+
`db-${variant}-bootstrap-${crypto.randomUUID()}`
|
|
1280
|
+
]);
|
|
1281
|
+
const count = await actor.getCount();
|
|
1282
|
+
_vitest.expect.call(void 0, count).toBe(0);
|
|
1283
|
+
});
|
|
1284
|
+
_vitest.test.call(void 0, "supports CRUD, raw SQL, and multi-statement exec", async (c) => {
|
|
1285
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1286
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1287
|
+
`db-${variant}-crud-${crypto.randomUUID()}`
|
|
1288
|
+
]);
|
|
1289
|
+
await actor.reset();
|
|
1290
|
+
const first = await actor.insertValue("alpha");
|
|
1291
|
+
const second = await actor.insertValue("beta");
|
|
1292
|
+
const values = await actor.getValues();
|
|
1293
|
+
_vitest.expect.call(void 0, values).toHaveLength(2);
|
|
1294
|
+
_vitest.expect.call(void 0, values[0].value).toBe("alpha");
|
|
1295
|
+
_vitest.expect.call(void 0, values[1].value).toBe("beta");
|
|
1296
|
+
await actor.updateValue(first.id, "alpha-updated");
|
|
1297
|
+
const updated = await actor.getValue(first.id);
|
|
1298
|
+
_vitest.expect.call(void 0, updated).toBe("alpha-updated");
|
|
1299
|
+
await actor.deleteValue(second.id);
|
|
1300
|
+
const count = await actor.getCount();
|
|
1301
|
+
_vitest.expect.call(void 0, count).toBe(1);
|
|
1302
|
+
const rawCount = await actor.rawSelectCount();
|
|
1303
|
+
_vitest.expect.call(void 0, rawCount).toBe(1);
|
|
1304
|
+
const multiValue = await actor.multiStatementInsert("gamma");
|
|
1305
|
+
_vitest.expect.call(void 0, multiValue).toBe("gamma-updated");
|
|
1306
|
+
});
|
|
1307
|
+
_vitest.test.call(void 0, "handles transactions", async (c) => {
|
|
1308
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1309
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1310
|
+
`db-${variant}-tx-${crypto.randomUUID()}`
|
|
1311
|
+
]);
|
|
1312
|
+
await actor.reset();
|
|
1313
|
+
await actor.transactionCommit("commit");
|
|
1314
|
+
_vitest.expect.call(void 0, await actor.getCount()).toBe(1);
|
|
1315
|
+
await actor.transactionRollback("rollback");
|
|
1316
|
+
_vitest.expect.call(void 0, await actor.getCount()).toBe(1);
|
|
1317
|
+
});
|
|
1318
|
+
_vitest.test.call(void 0, "persists across sleep and wake cycles", async (c) => {
|
|
1319
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1320
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1321
|
+
`db-${variant}-sleep-${crypto.randomUUID()}`
|
|
1322
|
+
]);
|
|
1323
|
+
await actor.reset();
|
|
1324
|
+
await actor.insertValue("sleepy");
|
|
1325
|
+
_vitest.expect.call(void 0, await actor.getCount()).toBe(1);
|
|
1326
|
+
for (let i = 0; i < 3; i++) {
|
|
1327
|
+
await actor.triggerSleep();
|
|
1328
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS);
|
|
1329
|
+
_vitest.expect.call(void 0, await actor.getCount()).toBe(1);
|
|
1330
|
+
}
|
|
1331
|
+
});
|
|
1332
|
+
_vitest.test.call(void 0, "completes onDisconnect DB writes before sleeping", async (c) => {
|
|
1333
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1334
|
+
const key = `db-${variant}-disconnect-${crypto.randomUUID()}`;
|
|
1335
|
+
const actor = getDbActor(client, variant).getOrCreate([key]);
|
|
1336
|
+
await actor.reset();
|
|
1337
|
+
await actor.configureDisconnectInsert(true, 250);
|
|
1338
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 250);
|
|
1339
|
+
await actor.configureDisconnectInsert(false, 0);
|
|
1340
|
+
_vitest.expect.call(void 0, await actor.getDisconnectInsertCount()).toBe(1);
|
|
1341
|
+
});
|
|
1342
|
+
_vitest.test.call(void 0, "handles high-volume inserts", async (c) => {
|
|
1343
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1344
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1345
|
+
`db-${variant}-high-volume-${crypto.randomUUID()}`
|
|
1346
|
+
]);
|
|
1347
|
+
await actor.reset();
|
|
1348
|
+
await actor.insertMany(HIGH_VOLUME_COUNT);
|
|
1349
|
+
_vitest.expect.call(void 0, await actor.getCount()).toBe(HIGH_VOLUME_COUNT);
|
|
1350
|
+
});
|
|
1351
|
+
_vitest.test.call(void 0, "handles payloads across chunk boundaries", async (c) => {
|
|
1352
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1353
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1354
|
+
`db-${variant}-chunk-${crypto.randomUUID()}`
|
|
1355
|
+
]);
|
|
1356
|
+
await actor.reset();
|
|
1357
|
+
for (const size of CHUNK_BOUNDARY_SIZES) {
|
|
1358
|
+
const { id } = await actor.insertPayloadOfSize(size);
|
|
1359
|
+
const storedSize = await actor.getPayloadSize(id);
|
|
1360
|
+
_vitest.expect.call(void 0, storedSize).toBe(size);
|
|
1361
|
+
}
|
|
1362
|
+
});
|
|
1363
|
+
_vitest.test.call(void 0, "handles large payloads", async (c) => {
|
|
1364
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1365
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1366
|
+
`db-${variant}-large-${crypto.randomUUID()}`
|
|
1367
|
+
]);
|
|
1368
|
+
await actor.reset();
|
|
1369
|
+
const { id } = await actor.insertPayloadOfSize(LARGE_PAYLOAD_SIZE);
|
|
1370
|
+
const storedSize = await actor.getPayloadSize(id);
|
|
1371
|
+
_vitest.expect.call(void 0, storedSize).toBe(LARGE_PAYLOAD_SIZE);
|
|
1372
|
+
});
|
|
1373
|
+
_vitest.test.call(void 0, "supports shrink and regrow workloads with vacuum", async (c) => {
|
|
1374
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1375
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1376
|
+
`db-${variant}-shrink-regrow-${crypto.randomUUID()}`
|
|
1377
|
+
]);
|
|
1378
|
+
await actor.reset();
|
|
1379
|
+
await actor.vacuum();
|
|
1380
|
+
const baselinePages = await actor.getPageCount();
|
|
1381
|
+
await actor.insertPayloadRows(
|
|
1382
|
+
SHRINK_GROW_INITIAL_ROWS,
|
|
1383
|
+
SHRINK_GROW_INITIAL_PAYLOAD
|
|
1384
|
+
);
|
|
1385
|
+
const grownPages = await actor.getPageCount();
|
|
1386
|
+
await actor.reset();
|
|
1387
|
+
await actor.vacuum();
|
|
1388
|
+
const shrunkPages = await actor.getPageCount();
|
|
1389
|
+
await actor.insertPayloadRows(
|
|
1390
|
+
SHRINK_GROW_REGROW_ROWS,
|
|
1391
|
+
SHRINK_GROW_REGROW_PAYLOAD
|
|
1392
|
+
);
|
|
1393
|
+
const regrownPages = await actor.getPageCount();
|
|
1394
|
+
_vitest.expect.call(void 0, grownPages).toBeGreaterThanOrEqual(baselinePages);
|
|
1395
|
+
_vitest.expect.call(void 0, shrunkPages).toBeLessThanOrEqual(grownPages);
|
|
1396
|
+
_vitest.expect.call(void 0, regrownPages).toBeGreaterThan(shrunkPages);
|
|
1397
|
+
});
|
|
1398
|
+
_vitest.test.call(void 0, "handles repeated updates to the same row", async (c) => {
|
|
1399
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1400
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1401
|
+
`db-${variant}-updates-${crypto.randomUUID()}`
|
|
1402
|
+
]);
|
|
1403
|
+
await actor.reset();
|
|
1404
|
+
const { id } = await actor.insertValue("base");
|
|
1405
|
+
const result = await actor.repeatUpdate(id, 50);
|
|
1406
|
+
_vitest.expect.call(void 0, result.value).toBe("Updated 49");
|
|
1407
|
+
const value = await actor.getValue(id);
|
|
1408
|
+
_vitest.expect.call(void 0, value).toBe("Updated 49");
|
|
1409
|
+
const hotRowIds = [];
|
|
1410
|
+
for (let i = 0; i < HOT_ROW_COUNT; i++) {
|
|
1411
|
+
const row = await actor.insertValue(`init-${i}`);
|
|
1412
|
+
hotRowIds.push(row.id);
|
|
1413
|
+
}
|
|
1414
|
+
const updatedRows = await actor.roundRobinUpdateValues(
|
|
1415
|
+
hotRowIds,
|
|
1416
|
+
HOT_ROW_UPDATES
|
|
1417
|
+
);
|
|
1418
|
+
_vitest.expect.call(void 0, updatedRows).toHaveLength(HOT_ROW_COUNT);
|
|
1419
|
+
for (const row of updatedRows) {
|
|
1420
|
+
_vitest.expect.call(void 0, row.value).toMatch(/^v-\d+$/);
|
|
1421
|
+
}
|
|
1422
|
+
});
|
|
1423
|
+
_vitest.test.call(void 0, "passes integrity checks after mixed workload and sleep", async (c) => {
|
|
1424
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1425
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
1426
|
+
`db-${variant}-integrity-${crypto.randomUUID()}`
|
|
1427
|
+
]);
|
|
1428
|
+
await actor.reset();
|
|
1429
|
+
await actor.runMixedWorkload(
|
|
1430
|
+
INTEGRITY_SEED_COUNT,
|
|
1431
|
+
INTEGRITY_CHURN_COUNT
|
|
1432
|
+
);
|
|
1433
|
+
_vitest.expect.call(void 0, (await actor.integrityCheck()).toLowerCase()).toBe("ok");
|
|
1434
|
+
await actor.triggerSleep();
|
|
1435
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
1436
|
+
_vitest.expect.call(void 0, (await actor.integrityCheck()).toLowerCase()).toBe("ok");
|
|
1437
|
+
});
|
|
1438
|
+
});
|
|
1439
|
+
}
|
|
1440
|
+
_vitest.describe.call(void 0, "Actor Database Lifecycle Cleanup Tests", () => {
|
|
1441
|
+
_vitest.test.call(void 0, "runs db provider cleanup on sleep", async (c) => {
|
|
1442
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1443
|
+
const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
|
|
1444
|
+
const lifecycle = client.dbLifecycle.getOrCreate([
|
|
1445
|
+
`db-lifecycle-sleep-${crypto.randomUUID()}`
|
|
1446
|
+
]);
|
|
1447
|
+
const actorId = await lifecycle.getActorId();
|
|
1448
|
+
const before = await observer.getCounts(actorId);
|
|
1449
|
+
await lifecycle.insertValue("before-sleep");
|
|
1450
|
+
await lifecycle.triggerSleep();
|
|
1451
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
1452
|
+
await lifecycle.ping();
|
|
1453
|
+
let after = before;
|
|
1454
|
+
for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
|
|
1455
|
+
after = await observer.getCounts(actorId);
|
|
1456
|
+
if (after.cleanup >= before.cleanup + 1) {
|
|
1457
|
+
break;
|
|
1458
|
+
}
|
|
1459
|
+
await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
|
|
1460
|
+
}
|
|
1461
|
+
_vitest.expect.call(void 0, after.create).toBeGreaterThanOrEqual(before.create);
|
|
1462
|
+
_vitest.expect.call(void 0, after.migrate).toBeGreaterThanOrEqual(before.migrate);
|
|
1463
|
+
_vitest.expect.call(void 0, after.cleanup).toBeGreaterThanOrEqual(before.cleanup + 1);
|
|
1464
|
+
});
|
|
1465
|
+
_vitest.test.call(void 0, "runs db provider cleanup on destroy", async (c) => {
|
|
1466
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1467
|
+
const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
|
|
1468
|
+
const lifecycle = client.dbLifecycle.getOrCreate([
|
|
1469
|
+
`db-lifecycle-destroy-${crypto.randomUUID()}`
|
|
1470
|
+
]);
|
|
1471
|
+
const actorId = await lifecycle.getActorId();
|
|
1472
|
+
const before = await observer.getCounts(actorId);
|
|
1473
|
+
await lifecycle.insertValue("before-destroy");
|
|
1474
|
+
await lifecycle.triggerDestroy();
|
|
1475
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
1476
|
+
let cleanupCount = before.cleanup;
|
|
1477
|
+
for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
|
|
1478
|
+
const counts = await observer.getCounts(actorId);
|
|
1479
|
+
cleanupCount = counts.cleanup;
|
|
1480
|
+
if (cleanupCount >= before.cleanup + 1) {
|
|
1481
|
+
break;
|
|
1482
|
+
}
|
|
1483
|
+
await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
|
|
1484
|
+
}
|
|
1485
|
+
_vitest.expect.call(void 0, cleanupCount).toBeGreaterThanOrEqual(before.cleanup + 1);
|
|
1486
|
+
});
|
|
1487
|
+
_vitest.test.call(void 0, "runs db provider cleanup when migration fails", async (c) => {
|
|
1488
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1489
|
+
const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
|
|
1490
|
+
const key = `db-lifecycle-migrate-failure-${crypto.randomUUID()}`;
|
|
1491
|
+
const lifecycle = client.dbLifecycleFailing.getOrCreate([key]);
|
|
1492
|
+
let threw = false;
|
|
1493
|
+
try {
|
|
1494
|
+
await lifecycle.ping();
|
|
1495
|
+
} catch (e3) {
|
|
1496
|
+
threw = true;
|
|
1497
|
+
}
|
|
1498
|
+
_vitest.expect.call(void 0, threw).toBeTruthy();
|
|
1499
|
+
const actorId = await client.dbLifecycleFailing.get([key]).resolve();
|
|
1500
|
+
let cleanupCount = 0;
|
|
1501
|
+
for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
|
|
1502
|
+
const counts = await observer.getCounts(actorId);
|
|
1503
|
+
cleanupCount = counts.cleanup;
|
|
1504
|
+
if (cleanupCount >= 1) {
|
|
1505
|
+
break;
|
|
1506
|
+
}
|
|
1507
|
+
await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
|
|
1508
|
+
}
|
|
1509
|
+
_vitest.expect.call(void 0, cleanupCount).toBeGreaterThanOrEqual(1);
|
|
1510
|
+
});
|
|
1511
|
+
_vitest.test.call(void 0, "handles parallel actor lifecycle churn", async (c) => {
|
|
1512
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
1513
|
+
const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
|
|
1514
|
+
const actorHandles = Array.from(
|
|
1515
|
+
{ length: 12 },
|
|
1516
|
+
(_, i) => client.dbLifecycle.getOrCreate([
|
|
1517
|
+
`db-lifecycle-stress-${i}-${crypto.randomUUID()}`
|
|
1518
|
+
])
|
|
1519
|
+
);
|
|
1520
|
+
const actorIds = await Promise.all(
|
|
1521
|
+
actorHandles.map((handle) => handle.getActorId())
|
|
1522
|
+
);
|
|
1523
|
+
await Promise.all(
|
|
1524
|
+
actorHandles.map((handle, i) => handle.insertValue(`phase-1-${i}`))
|
|
1525
|
+
);
|
|
1526
|
+
await Promise.all(actorHandles.map((handle) => handle.triggerSleep()));
|
|
1527
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
1528
|
+
await Promise.all(
|
|
1529
|
+
actorHandles.map((handle, i) => handle.insertValue(`phase-2-${i}`))
|
|
1530
|
+
);
|
|
1531
|
+
const survivors = actorHandles.slice(0, 6);
|
|
1532
|
+
const destroyed = actorHandles.slice(6);
|
|
1533
|
+
await Promise.all(destroyed.map((handle) => handle.triggerDestroy()));
|
|
1534
|
+
await Promise.all(survivors.map((handle) => handle.triggerSleep()));
|
|
1535
|
+
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
1536
|
+
await Promise.all(survivors.map((handle) => handle.ping()));
|
|
1537
|
+
const survivorCounts = await Promise.all(
|
|
1538
|
+
survivors.map((handle) => handle.getCount())
|
|
1539
|
+
);
|
|
1540
|
+
for (const count of survivorCounts) {
|
|
1541
|
+
_vitest.expect.call(void 0, count).toBe(2);
|
|
1542
|
+
}
|
|
1543
|
+
const lifecycleCleanup = /* @__PURE__ */ new Map();
|
|
1544
|
+
for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
|
|
1545
|
+
let allCleaned = true;
|
|
1546
|
+
for (const actorId of actorIds) {
|
|
1547
|
+
const counts = await observer.getCounts(actorId);
|
|
1548
|
+
lifecycleCleanup.set(actorId, counts.cleanup);
|
|
1549
|
+
if (counts.cleanup < 1) {
|
|
1550
|
+
allCleaned = false;
|
|
1551
|
+
}
|
|
1552
|
+
}
|
|
1553
|
+
if (allCleaned) {
|
|
1554
|
+
break;
|
|
1555
|
+
}
|
|
1556
|
+
await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
|
|
1557
|
+
}
|
|
1558
|
+
for (const actorId of actorIds) {
|
|
1559
|
+
_vitest.expect.call(void 0, _nullishCoalesce(lifecycleCleanup.get(actorId), () => ( 0))).toBeGreaterThanOrEqual(1);
|
|
1560
|
+
}
|
|
1561
|
+
});
|
|
1562
|
+
});
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1049
1565
|
// src/driver-test-suite/tests/actor-destroy.ts
|
|
1050
1566
|
|
|
1051
1567
|
function runActorDestroyTests(driverTestConfig) {
|
|
@@ -1281,10 +1797,13 @@ function runActorScheduleTests(driverTestConfig) {
|
|
|
1281
1797
|
await scheduled.scheduleTaskAfterWithId("third", 1250);
|
|
1282
1798
|
await waitFor(driverTestConfig, 500);
|
|
1283
1799
|
const history1 = await scheduled.getTaskHistory();
|
|
1284
|
-
_vitest.expect.call(void 0, history1).
|
|
1800
|
+
_vitest.expect.call(void 0, history1[0]).toBe("first");
|
|
1285
1801
|
await waitFor(driverTestConfig, 500);
|
|
1286
1802
|
const history2 = await scheduled.getTaskHistory();
|
|
1287
|
-
_vitest.expect.call(void 0, history2).toEqual([
|
|
1803
|
+
_vitest.expect.call(void 0, history2.slice(0, 2)).toEqual([
|
|
1804
|
+
"first",
|
|
1805
|
+
"second"
|
|
1806
|
+
]);
|
|
1288
1807
|
await waitFor(driverTestConfig, 500);
|
|
1289
1808
|
const history3 = await scheduled.getTaskHistory();
|
|
1290
1809
|
_vitest.expect.call(void 0, history3).toEqual(["first", "second", "third"]);
|
|
@@ -1325,7 +1844,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1325
1844
|
}
|
|
1326
1845
|
await sleepActor.triggerSleep();
|
|
1327
1846
|
await sleepActor.dispose();
|
|
1328
|
-
await waitFor(driverTestConfig,
|
|
1847
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1329
1848
|
const sleepActor2 = client.sleep.getOrCreate();
|
|
1330
1849
|
{
|
|
1331
1850
|
const { startCount, sleepCount } = await sleepActor2.getCounts();
|
|
@@ -1341,7 +1860,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1341
1860
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1342
1861
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1343
1862
|
}
|
|
1344
|
-
await waitFor(driverTestConfig,
|
|
1863
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1345
1864
|
{
|
|
1346
1865
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1347
1866
|
_vitest.expect.call(void 0, sleepCount).toBe(1);
|
|
@@ -1357,7 +1876,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1357
1876
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1358
1877
|
}
|
|
1359
1878
|
await sleepActor.dispose();
|
|
1360
|
-
await waitFor(driverTestConfig,
|
|
1879
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1361
1880
|
const sleepActor2 = client.sleep.getOrCreate();
|
|
1362
1881
|
{
|
|
1363
1882
|
const { startCount, sleepCount } = await sleepActor2.getCounts();
|
|
@@ -1373,19 +1892,19 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1373
1892
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1374
1893
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1375
1894
|
}
|
|
1376
|
-
await waitFor(driverTestConfig,
|
|
1895
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT - 250);
|
|
1377
1896
|
{
|
|
1378
1897
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1379
1898
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1380
1899
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1381
1900
|
}
|
|
1382
|
-
await waitFor(driverTestConfig,
|
|
1901
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT - 250);
|
|
1383
1902
|
{
|
|
1384
1903
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1385
1904
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1386
1905
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1387
1906
|
}
|
|
1388
|
-
await waitFor(driverTestConfig,
|
|
1907
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1389
1908
|
{
|
|
1390
1909
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1391
1910
|
_vitest.expect.call(void 0, sleepCount).toBe(1);
|
|
@@ -1400,8 +1919,8 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1400
1919
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1401
1920
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1402
1921
|
}
|
|
1403
|
-
await sleepActor.setAlarm(
|
|
1404
|
-
await waitFor(driverTestConfig,
|
|
1922
|
+
await sleepActor.setAlarm(_chunkXWBAQO5Hcjs.SLEEP_TIMEOUT - 250);
|
|
1923
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1405
1924
|
{
|
|
1406
1925
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1407
1926
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
@@ -1416,8 +1935,8 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1416
1935
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1417
1936
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1418
1937
|
}
|
|
1419
|
-
await sleepActor.setAlarm(
|
|
1420
|
-
await waitFor(driverTestConfig,
|
|
1938
|
+
await sleepActor.setAlarm(_chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1939
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 200);
|
|
1421
1940
|
{
|
|
1422
1941
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1423
1942
|
_vitest.expect.call(void 0, sleepCount).toBe(1);
|
|
@@ -1437,7 +1956,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1437
1956
|
);
|
|
1438
1957
|
const longRunningPromise = sleepActor.longRunningRpc();
|
|
1439
1958
|
await waitPromise;
|
|
1440
|
-
await waitFor(driverTestConfig,
|
|
1959
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1441
1960
|
await sleepActor.finishLongRunningRpc();
|
|
1442
1961
|
await longRunningPromise;
|
|
1443
1962
|
{
|
|
@@ -1446,7 +1965,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1446
1965
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1447
1966
|
}
|
|
1448
1967
|
await sleepActor.dispose();
|
|
1449
|
-
await waitFor(driverTestConfig,
|
|
1968
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1450
1969
|
const sleepActor2 = client.sleepWithLongRpc.getOrCreate();
|
|
1451
1970
|
{
|
|
1452
1971
|
const { startCount, sleepCount } = await sleepActor2.getCounts();
|
|
@@ -1465,7 +1984,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1465
1984
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1466
1985
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1467
1986
|
}
|
|
1468
|
-
const ws = await sleepActor.
|
|
1987
|
+
const ws = await sleepActor.webSocket();
|
|
1469
1988
|
await new Promise((resolve, reject) => {
|
|
1470
1989
|
ws.onopen = () => resolve();
|
|
1471
1990
|
ws.onerror = reject;
|
|
@@ -1478,7 +1997,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1478
1997
|
}
|
|
1479
1998
|
};
|
|
1480
1999
|
});
|
|
1481
|
-
await waitFor(driverTestConfig,
|
|
2000
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1482
2001
|
ws.send(JSON.stringify({ type: "getCounts" }));
|
|
1483
2002
|
const counts = await new Promise((resolve) => {
|
|
1484
2003
|
ws.onmessage = (event) => {
|
|
@@ -1491,7 +2010,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1491
2010
|
_vitest.expect.call(void 0, counts.sleepCount).toBe(0);
|
|
1492
2011
|
_vitest.expect.call(void 0, counts.startCount).toBe(1);
|
|
1493
2012
|
ws.close();
|
|
1494
|
-
await waitFor(driverTestConfig,
|
|
2013
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1495
2014
|
{
|
|
1496
2015
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1497
2016
|
_vitest.expect.call(void 0, sleepCount).toBe(1);
|
|
@@ -1509,7 +2028,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1509
2028
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1510
2029
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1511
2030
|
}
|
|
1512
|
-
const fetchDuration =
|
|
2031
|
+
const fetchDuration = _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250;
|
|
1513
2032
|
const fetchPromise = sleepActor.fetch(
|
|
1514
2033
|
`long-request?duration=${fetchDuration}`
|
|
1515
2034
|
);
|
|
@@ -1522,7 +2041,7 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1522
2041
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1523
2042
|
_vitest.expect.call(void 0, requestCount).toBe(1);
|
|
1524
2043
|
}
|
|
1525
|
-
await waitFor(driverTestConfig,
|
|
2044
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1526
2045
|
{
|
|
1527
2046
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1528
2047
|
_vitest.expect.call(void 0, sleepCount).toBe(1);
|
|
@@ -1537,13 +2056,13 @@ function runActorSleepTests(driverTestConfig) {
|
|
|
1537
2056
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1538
2057
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1539
2058
|
}
|
|
1540
|
-
await waitFor(driverTestConfig,
|
|
2059
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1541
2060
|
{
|
|
1542
2061
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1543
2062
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
1544
2063
|
_vitest.expect.call(void 0, startCount).toBe(1);
|
|
1545
2064
|
}
|
|
1546
|
-
await waitFor(driverTestConfig,
|
|
2065
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
|
|
1547
2066
|
{
|
|
1548
2067
|
const { startCount, sleepCount } = await sleepActor.getCounts();
|
|
1549
2068
|
_vitest.expect.call(void 0, sleepCount).toBe(0);
|
|
@@ -1639,8 +2158,8 @@ function runActorErrorHandlingTests(driverTestConfig) {
|
|
|
1639
2158
|
await handle.throwInternalError();
|
|
1640
2159
|
_vitest.expect.call(void 0, true).toBe(false);
|
|
1641
2160
|
} catch (error) {
|
|
1642
|
-
_vitest.expect.call(void 0, error.code).toBe(
|
|
1643
|
-
_vitest.expect.call(void 0, error.message).toBe(
|
|
2161
|
+
_vitest.expect.call(void 0, error.code).toBe(_chunkL47L3ZWJcjs.INTERNAL_ERROR_CODE);
|
|
2162
|
+
_vitest.expect.call(void 0, error.message).toBe(_chunkL47L3ZWJcjs.INTERNAL_ERROR_DESCRIPTION);
|
|
1644
2163
|
}
|
|
1645
2164
|
});
|
|
1646
2165
|
});
|
|
@@ -2000,7 +2519,197 @@ function runActorInlineClientTests(driverTestConfig) {
|
|
|
2000
2519
|
// src/driver-test-suite/tests/actor-inspector.ts
|
|
2001
2520
|
|
|
2002
2521
|
function runActorInspectorTests(driverTestConfig) {
|
|
2003
|
-
_vitest.describe.
|
|
2522
|
+
_vitest.describe.call(void 0, "Actor Inspector HTTP API", () => {
|
|
2523
|
+
_vitest.test.call(void 0, "GET /inspector/state returns actor state", async (c) => {
|
|
2524
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2525
|
+
const handle = client.counter.getOrCreate(["inspector-state"]);
|
|
2526
|
+
await handle.increment(5);
|
|
2527
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2528
|
+
const response = await fetch(`${gatewayUrl}/inspector/state`, {
|
|
2529
|
+
headers: { Authorization: "Bearer token" }
|
|
2530
|
+
});
|
|
2531
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2532
|
+
const data = await response.json();
|
|
2533
|
+
_vitest.expect.call(void 0, data).toEqual({ state: { count: 5 } });
|
|
2534
|
+
});
|
|
2535
|
+
_vitest.test.call(void 0, "PATCH /inspector/state updates actor state", async (c) => {
|
|
2536
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2537
|
+
const handle = client.counter.getOrCreate([
|
|
2538
|
+
"inspector-set-state"
|
|
2539
|
+
]);
|
|
2540
|
+
await handle.increment(5);
|
|
2541
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2542
|
+
const patchResponse = await fetch(
|
|
2543
|
+
`${gatewayUrl}/inspector/state`,
|
|
2544
|
+
{
|
|
2545
|
+
method: "PATCH",
|
|
2546
|
+
headers: {
|
|
2547
|
+
"Content-Type": "application/json",
|
|
2548
|
+
Authorization: "Bearer token"
|
|
2549
|
+
},
|
|
2550
|
+
body: JSON.stringify({ state: { count: 42 } })
|
|
2551
|
+
}
|
|
2552
|
+
);
|
|
2553
|
+
_vitest.expect.call(void 0, patchResponse.status).toBe(200);
|
|
2554
|
+
const patchData = await patchResponse.json();
|
|
2555
|
+
_vitest.expect.call(void 0, patchData).toEqual({ ok: true });
|
|
2556
|
+
const count = await handle.getCount();
|
|
2557
|
+
_vitest.expect.call(void 0, count).toBe(42);
|
|
2558
|
+
});
|
|
2559
|
+
_vitest.test.call(void 0, "GET /inspector/connections returns connections list", async (c) => {
|
|
2560
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2561
|
+
const handle = client.counter.getOrCreate([
|
|
2562
|
+
"inspector-connections"
|
|
2563
|
+
]);
|
|
2564
|
+
await handle.increment(0);
|
|
2565
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2566
|
+
const response = await fetch(
|
|
2567
|
+
`${gatewayUrl}/inspector/connections`,
|
|
2568
|
+
{
|
|
2569
|
+
headers: { Authorization: "Bearer token" }
|
|
2570
|
+
}
|
|
2571
|
+
);
|
|
2572
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2573
|
+
const data = await response.json();
|
|
2574
|
+
_vitest.expect.call(void 0, data).toHaveProperty("connections");
|
|
2575
|
+
_vitest.expect.call(void 0, Array.isArray(data.connections)).toBe(true);
|
|
2576
|
+
});
|
|
2577
|
+
_vitest.test.call(void 0, "GET /inspector/rpcs returns available actions", async (c) => {
|
|
2578
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2579
|
+
const handle = client.counter.getOrCreate(["inspector-rpcs"]);
|
|
2580
|
+
await handle.increment(0);
|
|
2581
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2582
|
+
const response = await fetch(`${gatewayUrl}/inspector/rpcs`, {
|
|
2583
|
+
headers: { Authorization: "Bearer token" }
|
|
2584
|
+
});
|
|
2585
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2586
|
+
const data = await response.json();
|
|
2587
|
+
_vitest.expect.call(void 0, data).toHaveProperty("rpcs");
|
|
2588
|
+
_vitest.expect.call(void 0, data.rpcs).toContain("increment");
|
|
2589
|
+
_vitest.expect.call(void 0, data.rpcs).toContain("getCount");
|
|
2590
|
+
_vitest.expect.call(void 0, data.rpcs).toContain("setCount");
|
|
2591
|
+
});
|
|
2592
|
+
_vitest.test.call(void 0, "POST /inspector/action/:name executes an action", async (c) => {
|
|
2593
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2594
|
+
const handle = client.counter.getOrCreate([
|
|
2595
|
+
"inspector-action"
|
|
2596
|
+
]);
|
|
2597
|
+
await handle.increment(10);
|
|
2598
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2599
|
+
const response = await fetch(
|
|
2600
|
+
`${gatewayUrl}/inspector/action/increment`,
|
|
2601
|
+
{
|
|
2602
|
+
method: "POST",
|
|
2603
|
+
headers: {
|
|
2604
|
+
"Content-Type": "application/json",
|
|
2605
|
+
Authorization: "Bearer token"
|
|
2606
|
+
},
|
|
2607
|
+
body: JSON.stringify({ args: [5] })
|
|
2608
|
+
}
|
|
2609
|
+
);
|
|
2610
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2611
|
+
const data = await response.json();
|
|
2612
|
+
_vitest.expect.call(void 0, data.output).toBe(15);
|
|
2613
|
+
const count = await handle.getCount();
|
|
2614
|
+
_vitest.expect.call(void 0, count).toBe(15);
|
|
2615
|
+
});
|
|
2616
|
+
_vitest.test.call(void 0, "GET /inspector/queue returns queue status", async (c) => {
|
|
2617
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2618
|
+
const handle = client.counter.getOrCreate(["inspector-queue"]);
|
|
2619
|
+
await handle.increment(0);
|
|
2620
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2621
|
+
const response = await fetch(
|
|
2622
|
+
`${gatewayUrl}/inspector/queue?limit=10`,
|
|
2623
|
+
{
|
|
2624
|
+
headers: { Authorization: "Bearer token" }
|
|
2625
|
+
}
|
|
2626
|
+
);
|
|
2627
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2628
|
+
const data = await response.json();
|
|
2629
|
+
_vitest.expect.call(void 0, data).toHaveProperty("size");
|
|
2630
|
+
_vitest.expect.call(void 0, data).toHaveProperty("maxSize");
|
|
2631
|
+
_vitest.expect.call(void 0, data).toHaveProperty("truncated");
|
|
2632
|
+
_vitest.expect.call(void 0, data).toHaveProperty("messages");
|
|
2633
|
+
_vitest.expect.call(void 0, typeof data.size).toBe("number");
|
|
2634
|
+
_vitest.expect.call(void 0, typeof data.maxSize).toBe("number");
|
|
2635
|
+
_vitest.expect.call(void 0, typeof data.truncated).toBe("boolean");
|
|
2636
|
+
_vitest.expect.call(void 0, Array.isArray(data.messages)).toBe(true);
|
|
2637
|
+
});
|
|
2638
|
+
_vitest.test.call(void 0, "GET /inspector/traces returns trace data", async (c) => {
|
|
2639
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2640
|
+
const handle = client.counter.getOrCreate([
|
|
2641
|
+
"inspector-traces"
|
|
2642
|
+
]);
|
|
2643
|
+
await handle.increment(1);
|
|
2644
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2645
|
+
const response = await fetch(
|
|
2646
|
+
`${gatewayUrl}/inspector/traces?startMs=0&endMs=${Date.now() + 6e4}&limit=100`,
|
|
2647
|
+
{
|
|
2648
|
+
headers: { Authorization: "Bearer token" }
|
|
2649
|
+
}
|
|
2650
|
+
);
|
|
2651
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2652
|
+
const data = await response.json();
|
|
2653
|
+
_vitest.expect.call(void 0, data).toHaveProperty("otlp");
|
|
2654
|
+
_vitest.expect.call(void 0, data).toHaveProperty("clamped");
|
|
2655
|
+
_vitest.expect.call(void 0, typeof data.clamped).toBe("boolean");
|
|
2656
|
+
});
|
|
2657
|
+
_vitest.test.call(void 0, "GET /inspector/workflow-history returns workflow status", async (c) => {
|
|
2658
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2659
|
+
const handle = client.counter.getOrCreate([
|
|
2660
|
+
"inspector-workflow"
|
|
2661
|
+
]);
|
|
2662
|
+
await handle.increment(0);
|
|
2663
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2664
|
+
const response = await fetch(
|
|
2665
|
+
`${gatewayUrl}/inspector/workflow-history`,
|
|
2666
|
+
{
|
|
2667
|
+
headers: { Authorization: "Bearer token" }
|
|
2668
|
+
}
|
|
2669
|
+
);
|
|
2670
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2671
|
+
const data = await response.json();
|
|
2672
|
+
_vitest.expect.call(void 0, data).toHaveProperty("history");
|
|
2673
|
+
_vitest.expect.call(void 0, data).toHaveProperty("isWorkflowEnabled");
|
|
2674
|
+
_vitest.expect.call(void 0, data.isWorkflowEnabled).toBe(false);
|
|
2675
|
+
_vitest.expect.call(void 0, data.history).toBeNull();
|
|
2676
|
+
});
|
|
2677
|
+
_vitest.test.call(void 0, "GET /inspector/summary returns full actor snapshot", async (c) => {
|
|
2678
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2679
|
+
const handle = client.counter.getOrCreate([
|
|
2680
|
+
"inspector-summary"
|
|
2681
|
+
]);
|
|
2682
|
+
await handle.increment(7);
|
|
2683
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2684
|
+
const response = await fetch(
|
|
2685
|
+
`${gatewayUrl}/inspector/summary`,
|
|
2686
|
+
{
|
|
2687
|
+
headers: { Authorization: "Bearer token" }
|
|
2688
|
+
}
|
|
2689
|
+
);
|
|
2690
|
+
_vitest.expect.call(void 0, response.status).toBe(200);
|
|
2691
|
+
const data = await response.json();
|
|
2692
|
+
_vitest.expect.call(void 0, data.state).toEqual({ count: 7 });
|
|
2693
|
+
_vitest.expect.call(void 0, Array.isArray(data.connections)).toBe(true);
|
|
2694
|
+
_vitest.expect.call(void 0, data.rpcs).toContain("increment");
|
|
2695
|
+
_vitest.expect.call(void 0, typeof data.queueSize).toBe("number");
|
|
2696
|
+
_vitest.expect.call(void 0, data.isStateEnabled).toBe(true);
|
|
2697
|
+
_vitest.expect.call(void 0, typeof data.isDatabaseEnabled).toBe("boolean");
|
|
2698
|
+
_vitest.expect.call(void 0, data.isWorkflowEnabled).toBe(false);
|
|
2699
|
+
_vitest.expect.call(void 0, data.workflowHistory).toBeNull();
|
|
2700
|
+
});
|
|
2701
|
+
_vitest.test.call(void 0, "inspector endpoints require auth in non-dev mode", async (c) => {
|
|
2702
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2703
|
+
const handle = client.counter.getOrCreate([
|
|
2704
|
+
"inspector-auth"
|
|
2705
|
+
]);
|
|
2706
|
+
await handle.increment(0);
|
|
2707
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
2708
|
+
const response = await fetch(`${gatewayUrl}/inspector/state`, {
|
|
2709
|
+
headers: { Authorization: "Bearer wrong-token" }
|
|
2710
|
+
});
|
|
2711
|
+
_vitest.expect.call(void 0, response.status).toBe(401);
|
|
2712
|
+
});
|
|
2004
2713
|
});
|
|
2005
2714
|
}
|
|
2006
2715
|
|
|
@@ -2009,7 +2718,11 @@ function runActorInspectorTests(driverTestConfig) {
|
|
|
2009
2718
|
function runActorKvTests(driverTestConfig) {
|
|
2010
2719
|
_vitest.describe.call(void 0, "Actor KV Tests", () => {
|
|
2011
2720
|
_vitest.test.call(void 0, "supports text encoding and decoding", async (c) => {
|
|
2012
|
-
const { client } = await setupDriverTest(
|
|
2721
|
+
const { client: rawClient } = await setupDriverTest(
|
|
2722
|
+
c,
|
|
2723
|
+
driverTestConfig
|
|
2724
|
+
);
|
|
2725
|
+
const client = rawClient;
|
|
2013
2726
|
const kvHandle = client.kvActor.getOrCreate(["kv-text"]);
|
|
2014
2727
|
await kvHandle.putText("greeting", "hello");
|
|
2015
2728
|
const value = await kvHandle.getText("greeting");
|
|
@@ -2026,8 +2739,14 @@ function runActorKvTests(driverTestConfig) {
|
|
|
2026
2739
|
_vitest.test.call(void 0,
|
|
2027
2740
|
"supports arrayBuffer encoding and decoding",
|
|
2028
2741
|
async (c) => {
|
|
2029
|
-
const { client } = await setupDriverTest(
|
|
2030
|
-
|
|
2742
|
+
const { client: rawClient } = await setupDriverTest(
|
|
2743
|
+
c,
|
|
2744
|
+
driverTestConfig
|
|
2745
|
+
);
|
|
2746
|
+
const client = rawClient;
|
|
2747
|
+
const kvHandle = client.kvActor.getOrCreate([
|
|
2748
|
+
"kv-array-buffer"
|
|
2749
|
+
]);
|
|
2031
2750
|
const values = await kvHandle.roundtripArrayBuffer("bytes", [
|
|
2032
2751
|
4,
|
|
2033
2752
|
8,
|
|
@@ -2172,6 +2891,437 @@ function runActorOnStateChangeTests(driverTestConfig) {
|
|
|
2172
2891
|
});
|
|
2173
2892
|
}
|
|
2174
2893
|
|
|
2894
|
+
// src/driver-test-suite/tests/actor-queue.ts
|
|
2895
|
+
|
|
2896
|
+
function runActorQueueTests(driverTestConfig) {
|
|
2897
|
+
_vitest.describe.call(void 0, "Actor Queue Tests", () => {
|
|
2898
|
+
_vitest.test.call(void 0, "client can send to actor queue", async (c) => {
|
|
2899
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2900
|
+
const handle = client.queueActor.getOrCreate(["client-send"]);
|
|
2901
|
+
await handle.send("greeting", { hello: "world" });
|
|
2902
|
+
const message = await handle.receiveOne("greeting");
|
|
2903
|
+
_vitest.expect.call(void 0, message).toEqual({
|
|
2904
|
+
name: "greeting",
|
|
2905
|
+
body: { hello: "world" }
|
|
2906
|
+
});
|
|
2907
|
+
});
|
|
2908
|
+
_vitest.test.call(void 0, "actor can send to its own queue", async (c) => {
|
|
2909
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2910
|
+
const handle = client.queueActor.getOrCreate(["self-send"]);
|
|
2911
|
+
await handle.sendToSelf("self", { value: 42 });
|
|
2912
|
+
const message = await handle.receiveOne("self");
|
|
2913
|
+
_vitest.expect.call(void 0, message).toEqual({ name: "self", body: { value: 42 } });
|
|
2914
|
+
});
|
|
2915
|
+
_vitest.test.call(void 0, "next supports name arrays and counts", async (c) => {
|
|
2916
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2917
|
+
const handle = client.queueActor.getOrCreate(["receive-array"]);
|
|
2918
|
+
await handle.send("a", 1);
|
|
2919
|
+
await handle.send("b", 2);
|
|
2920
|
+
await handle.send("c", 3);
|
|
2921
|
+
const messages = await handle.receiveMany(["a", "b"], { count: 2 });
|
|
2922
|
+
_vitest.expect.call(void 0, messages).toEqual([
|
|
2923
|
+
{ name: "a", body: 1 },
|
|
2924
|
+
{ name: "b", body: 2 }
|
|
2925
|
+
]);
|
|
2926
|
+
});
|
|
2927
|
+
_vitest.test.call(void 0, "next supports request objects", async (c) => {
|
|
2928
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2929
|
+
const handle = client.queueActor.getOrCreate(["receive-request"]);
|
|
2930
|
+
await handle.send("one", "first");
|
|
2931
|
+
await handle.send("two", "second");
|
|
2932
|
+
const messages = await handle.receiveRequest({
|
|
2933
|
+
names: ["one", "two"],
|
|
2934
|
+
count: 2
|
|
2935
|
+
});
|
|
2936
|
+
_vitest.expect.call(void 0, messages).toEqual([
|
|
2937
|
+
{ name: "one", body: "first" },
|
|
2938
|
+
{ name: "two", body: "second" }
|
|
2939
|
+
]);
|
|
2940
|
+
});
|
|
2941
|
+
_vitest.test.call(void 0, "next defaults to all names when names is omitted", async (c) => {
|
|
2942
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2943
|
+
const handle = client.queueActor.getOrCreate([
|
|
2944
|
+
"receive-request-all"
|
|
2945
|
+
]);
|
|
2946
|
+
await handle.send("one", "first");
|
|
2947
|
+
await handle.send("two", "second");
|
|
2948
|
+
const messages = await handle.receiveRequest({ count: 2 });
|
|
2949
|
+
_vitest.expect.call(void 0, messages).toEqual([
|
|
2950
|
+
{ name: "one", body: "first" },
|
|
2951
|
+
{ name: "two", body: "second" }
|
|
2952
|
+
]);
|
|
2953
|
+
});
|
|
2954
|
+
_vitest.test.call(void 0, "next timeout returns empty array", async (c) => {
|
|
2955
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2956
|
+
const handle = client.queueActor.getOrCreate(["receive-timeout"]);
|
|
2957
|
+
const promise = handle.receiveMany(["missing"], { timeout: 50 });
|
|
2958
|
+
await waitFor(driverTestConfig, 60);
|
|
2959
|
+
const messages = await promise;
|
|
2960
|
+
_vitest.expect.call(void 0, messages).toEqual([]);
|
|
2961
|
+
});
|
|
2962
|
+
_vitest.test.call(void 0, "tryNext does not wait and returns empty array", async (c) => {
|
|
2963
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2964
|
+
const handle = client.queueActor.getOrCreate(["try-next-empty"]);
|
|
2965
|
+
const messages = await handle.tryReceiveMany({
|
|
2966
|
+
names: ["missing"],
|
|
2967
|
+
count: 1
|
|
2968
|
+
});
|
|
2969
|
+
_vitest.expect.call(void 0, messages).toEqual([]);
|
|
2970
|
+
});
|
|
2971
|
+
_vitest.test.call(void 0, "abort throws ActorAborted", async (c) => {
|
|
2972
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2973
|
+
const handle = client.queueActor.getOrCreate(["abort-test"]);
|
|
2974
|
+
try {
|
|
2975
|
+
await handle.waitForAbort();
|
|
2976
|
+
_vitest.expect.fail("expected ActorAborted error");
|
|
2977
|
+
} catch (error) {
|
|
2978
|
+
_vitest.expect.call(void 0, error.group).toBe("actor");
|
|
2979
|
+
_vitest.expect.call(void 0, error.code).toBe("aborted");
|
|
2980
|
+
}
|
|
2981
|
+
});
|
|
2982
|
+
_vitest.test.call(void 0, "next supports signal abort", async (c) => {
|
|
2983
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2984
|
+
const handle = client.queueActor.getOrCreate(["signal-abort-next"]);
|
|
2985
|
+
const result = await handle.waitForSignalAbort();
|
|
2986
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
2987
|
+
group: "actor",
|
|
2988
|
+
code: "aborted"
|
|
2989
|
+
});
|
|
2990
|
+
});
|
|
2991
|
+
_vitest.test.call(void 0, "next supports actor abort when signal is provided", async (c) => {
|
|
2992
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2993
|
+
const handle = client.queueActor.getOrCreate([
|
|
2994
|
+
"actor-abort-with-signal-next"
|
|
2995
|
+
]);
|
|
2996
|
+
const result = await handle.waitForActorAbortWithSignal();
|
|
2997
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
2998
|
+
group: "actor",
|
|
2999
|
+
code: "aborted"
|
|
3000
|
+
});
|
|
3001
|
+
});
|
|
3002
|
+
_vitest.test.call(void 0, "iter supports signal abort", async (c) => {
|
|
3003
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3004
|
+
const handle = client.queueActor.getOrCreate(["signal-abort-iter"]);
|
|
3005
|
+
const result = await handle.iterWithSignalAbort();
|
|
3006
|
+
_vitest.expect.call(void 0, result).toEqual({ ok: true });
|
|
3007
|
+
});
|
|
3008
|
+
_vitest.test.call(void 0, "enforces queue size limit", async (c) => {
|
|
3009
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3010
|
+
const key = `size-limit-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
3011
|
+
const handle = client.queueLimitedActor.getOrCreate([key]);
|
|
3012
|
+
await handle.send("message", 1);
|
|
3013
|
+
await waitFor(driverTestConfig, 10);
|
|
3014
|
+
try {
|
|
3015
|
+
await handle.send("message", 2);
|
|
3016
|
+
_vitest.expect.fail("expected queue full error");
|
|
3017
|
+
} catch (error) {
|
|
3018
|
+
_vitest.expect.call(void 0, error).toBeInstanceOf(Error);
|
|
3019
|
+
_vitest.expect.call(void 0, error.message).toContain(
|
|
3020
|
+
"Queue is full. Limit is"
|
|
3021
|
+
);
|
|
3022
|
+
if (driverTestConfig.clientType !== "http") {
|
|
3023
|
+
_vitest.expect.call(void 0, error.group).toBe("queue");
|
|
3024
|
+
_vitest.expect.call(void 0, error.code).toBe("full");
|
|
3025
|
+
}
|
|
3026
|
+
}
|
|
3027
|
+
});
|
|
3028
|
+
_vitest.test.call(void 0, "enforces message size limit", async (c) => {
|
|
3029
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3030
|
+
const handle = client.queueLimitedActor.getOrCreate([
|
|
3031
|
+
"message-limit"
|
|
3032
|
+
]);
|
|
3033
|
+
const largePayload = "a".repeat(200);
|
|
3034
|
+
try {
|
|
3035
|
+
await handle.send("oversize", largePayload);
|
|
3036
|
+
_vitest.expect.fail("expected message_too_large error");
|
|
3037
|
+
} catch (error) {
|
|
3038
|
+
_vitest.expect.call(void 0, error.group).toBe("queue");
|
|
3039
|
+
_vitest.expect.call(void 0, error.code).toBe("message_too_large");
|
|
3040
|
+
}
|
|
3041
|
+
});
|
|
3042
|
+
_vitest.test.call(void 0, "wait send returns completion response", async (c) => {
|
|
3043
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3044
|
+
const handle = client.queueActor.getOrCreate(["wait-complete"]);
|
|
3045
|
+
const actionPromise = handle.receiveAndComplete("tasks");
|
|
3046
|
+
const result = await handle.send(
|
|
3047
|
+
"tasks",
|
|
3048
|
+
{ value: 123 },
|
|
3049
|
+
{ wait: true, timeout: 1e3 }
|
|
3050
|
+
);
|
|
3051
|
+
await actionPromise;
|
|
3052
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
3053
|
+
status: "completed",
|
|
3054
|
+
response: { echo: { value: 123 } }
|
|
3055
|
+
});
|
|
3056
|
+
});
|
|
3057
|
+
_vitest.test.call(void 0, "wait send times out", async (c) => {
|
|
3058
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3059
|
+
const handle = client.queueActor.getOrCreate(["wait-timeout"]);
|
|
3060
|
+
const resultPromise = handle.send(
|
|
3061
|
+
"timeout",
|
|
3062
|
+
{ value: 456 },
|
|
3063
|
+
{ wait: true, timeout: 50 }
|
|
3064
|
+
);
|
|
3065
|
+
await waitFor(driverTestConfig, 60);
|
|
3066
|
+
const result = await resultPromise;
|
|
3067
|
+
_vitest.expect.call(void 0, result.status).toBe("timedOut");
|
|
3068
|
+
});
|
|
3069
|
+
_vitest.test.call(void 0, "manual receive retries message when not completed", async (c) => {
|
|
3070
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3071
|
+
const handle = client.queueActor.getOrCreate([
|
|
3072
|
+
"manual-retry-uncompleted"
|
|
3073
|
+
]);
|
|
3074
|
+
await handle.send("tasks", { value: 789 });
|
|
3075
|
+
const first = await handle.receiveWithoutComplete("tasks");
|
|
3076
|
+
_vitest.expect.call(void 0, first).toEqual({ name: "tasks", body: { value: 789 } });
|
|
3077
|
+
const retried = await handle.receiveOne("tasks", { timeout: 1e3 });
|
|
3078
|
+
_vitest.expect.call(void 0, retried).toEqual({ name: "tasks", body: { value: 789 } });
|
|
3079
|
+
});
|
|
3080
|
+
_vitest.test.call(void 0, "next throws when previous manual message is not completed", async (c) => {
|
|
3081
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3082
|
+
const handle = client.queueActor.getOrCreate([
|
|
3083
|
+
"manual-next-requires-complete"
|
|
3084
|
+
]);
|
|
3085
|
+
await handle.send("tasks", { value: 111 });
|
|
3086
|
+
const result = await handle.receiveManualThenNextWithoutComplete(
|
|
3087
|
+
"tasks"
|
|
3088
|
+
);
|
|
3089
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
3090
|
+
group: "queue",
|
|
3091
|
+
code: "previous_message_not_completed"
|
|
3092
|
+
});
|
|
3093
|
+
});
|
|
3094
|
+
_vitest.test.call(void 0, "manual receive includes complete even without completion schema", async (c) => {
|
|
3095
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3096
|
+
const handle = client.queueActor.getOrCreate([
|
|
3097
|
+
"complete-not-allowed"
|
|
3098
|
+
]);
|
|
3099
|
+
await handle.send("nowait", { value: "test" });
|
|
3100
|
+
const result = await handle.receiveWithoutCompleteMethod("nowait");
|
|
3101
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
3102
|
+
hasComplete: true
|
|
3103
|
+
});
|
|
3104
|
+
});
|
|
3105
|
+
_vitest.test.call(void 0, "manual receive retries queues without completion schema until completed", async (c) => {
|
|
3106
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3107
|
+
const handle = client.queueActor.getOrCreate([
|
|
3108
|
+
"complete-not-allowed-consume"
|
|
3109
|
+
]);
|
|
3110
|
+
await handle.send("nowait", { value: "test" });
|
|
3111
|
+
const result = await handle.receiveWithoutCompleteMethod("nowait");
|
|
3112
|
+
_vitest.expect.call(void 0, result).toEqual({ hasComplete: true });
|
|
3113
|
+
const next = await handle.receiveOne("nowait", { timeout: 1e3 });
|
|
3114
|
+
_vitest.expect.call(void 0, next).toEqual({ name: "nowait", body: { value: "test" } });
|
|
3115
|
+
});
|
|
3116
|
+
_vitest.test.call(void 0, "complete throws when called twice", async (c) => {
|
|
3117
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3118
|
+
const handle = client.queueActor.getOrCreate([
|
|
3119
|
+
"complete-twice"
|
|
3120
|
+
]);
|
|
3121
|
+
await handle.send("twice", { value: "test" });
|
|
3122
|
+
const result = await handle.receiveAndCompleteTwice("twice");
|
|
3123
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
3124
|
+
group: "queue",
|
|
3125
|
+
code: "already_completed"
|
|
3126
|
+
});
|
|
3127
|
+
});
|
|
3128
|
+
_vitest.test.call(void 0, "wait send no longer requires queue completion schema", async (c) => {
|
|
3129
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3130
|
+
const handle = client.queueActor.getOrCreate([
|
|
3131
|
+
"missing-completion-schema"
|
|
3132
|
+
]);
|
|
3133
|
+
const result = await handle.send(
|
|
3134
|
+
"nowait",
|
|
3135
|
+
{ value: "test" },
|
|
3136
|
+
{ wait: true, timeout: 50 }
|
|
3137
|
+
);
|
|
3138
|
+
_vitest.expect.call(void 0, result).toEqual({ status: "timedOut" });
|
|
3139
|
+
});
|
|
3140
|
+
_vitest.test.call(void 0, "iter can consume queued messages", async (c) => {
|
|
3141
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3142
|
+
const handle = client.queueActor.getOrCreate(["iter-consume"]);
|
|
3143
|
+
await handle.send("one", "first");
|
|
3144
|
+
const message = await handle.receiveWithIterator("one");
|
|
3145
|
+
_vitest.expect.call(void 0, message).toEqual({ name: "one", body: "first" });
|
|
3146
|
+
});
|
|
3147
|
+
_vitest.test.call(void 0, "queue async iterator can consume queued messages", async (c) => {
|
|
3148
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3149
|
+
const handle = client.queueActor.getOrCreate([
|
|
3150
|
+
"async-iter-consume"
|
|
3151
|
+
]);
|
|
3152
|
+
await handle.send("two", "second");
|
|
3153
|
+
const message = await handle.receiveWithAsyncIterator();
|
|
3154
|
+
_vitest.expect.call(void 0, message).toEqual({ name: "two", body: "second" });
|
|
3155
|
+
});
|
|
3156
|
+
});
|
|
3157
|
+
}
|
|
3158
|
+
|
|
3159
|
+
// src/driver-test-suite/tests/actor-run.ts
|
|
3160
|
+
|
|
3161
|
+
function runActorRunTests(driverTestConfig) {
|
|
3162
|
+
var _a;
|
|
3163
|
+
_vitest.describe.skipIf((_a = driverTestConfig.skip) == null ? void 0 : _a.sleep)("Actor Run Tests", () => {
|
|
3164
|
+
_vitest.test.call(void 0, "run handler starts after actor startup", async (c) => {
|
|
3165
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3166
|
+
const actor = client.runWithTicks.getOrCreate(["run-starts"]);
|
|
3167
|
+
await waitFor(driverTestConfig, 100);
|
|
3168
|
+
const state = await actor.getState();
|
|
3169
|
+
_vitest.expect.call(void 0, state.runStarted).toBe(true);
|
|
3170
|
+
_vitest.expect.call(void 0, state.tickCount).toBeGreaterThan(0);
|
|
3171
|
+
});
|
|
3172
|
+
_vitest.test.call(void 0, "run handler ticks continuously", async (c) => {
|
|
3173
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3174
|
+
const actor = client.runWithTicks.getOrCreate(["run-ticks"]);
|
|
3175
|
+
await waitFor(driverTestConfig, 200);
|
|
3176
|
+
const state1 = await actor.getState();
|
|
3177
|
+
_vitest.expect.call(void 0, state1.tickCount).toBeGreaterThan(0);
|
|
3178
|
+
const count1 = state1.tickCount;
|
|
3179
|
+
await waitFor(driverTestConfig, 200);
|
|
3180
|
+
const state2 = await actor.getState();
|
|
3181
|
+
_vitest.expect.call(void 0, state2.tickCount).toBeGreaterThan(count1);
|
|
3182
|
+
});
|
|
3183
|
+
_vitest.test.call(void 0, "active run handler keeps actor awake past sleep timeout", async (c) => {
|
|
3184
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3185
|
+
const actor = client.runWithTicks.getOrCreate([
|
|
3186
|
+
"run-stays-awake"
|
|
3187
|
+
]);
|
|
3188
|
+
await waitFor(driverTestConfig, 100);
|
|
3189
|
+
const state1 = await actor.getState();
|
|
3190
|
+
_vitest.expect.call(void 0, state1.runStarted).toBe(true);
|
|
3191
|
+
const tickCount1 = state1.tickCount;
|
|
3192
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.RUN_SLEEP_TIMEOUT + 300);
|
|
3193
|
+
const state2 = await actor.getState();
|
|
3194
|
+
_vitest.expect.call(void 0, state2.runStarted).toBe(true);
|
|
3195
|
+
_vitest.expect.call(void 0, state2.runExited).toBe(false);
|
|
3196
|
+
_vitest.expect.call(void 0, state2.tickCount).toBeGreaterThan(tickCount1);
|
|
3197
|
+
});
|
|
3198
|
+
_vitest.test.call(void 0, "actor without run handler works normally", async (c) => {
|
|
3199
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3200
|
+
const actor = client.runWithoutHandler.getOrCreate([
|
|
3201
|
+
"no-run-handler"
|
|
3202
|
+
]);
|
|
3203
|
+
const state = await actor.getState();
|
|
3204
|
+
_vitest.expect.call(void 0, state.wakeCount).toBe(1);
|
|
3205
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.RUN_SLEEP_TIMEOUT + 300);
|
|
3206
|
+
const state2 = await actor.getState();
|
|
3207
|
+
_vitest.expect.call(void 0, state2.wakeCount).toBe(2);
|
|
3208
|
+
});
|
|
3209
|
+
_vitest.test.call(void 0, "run handler can consume from queue", async (c) => {
|
|
3210
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3211
|
+
const actor = client.runWithQueueConsumer.getOrCreate([
|
|
3212
|
+
"queue-consumer"
|
|
3213
|
+
]);
|
|
3214
|
+
await waitFor(driverTestConfig, 100);
|
|
3215
|
+
await actor.sendMessage({ type: "test", value: 1 });
|
|
3216
|
+
await actor.sendMessage({ type: "test", value: 2 });
|
|
3217
|
+
await actor.sendMessage({ type: "test", value: 3 });
|
|
3218
|
+
await waitFor(driverTestConfig, 1200);
|
|
3219
|
+
const state = await actor.getState();
|
|
3220
|
+
_vitest.expect.call(void 0, state.runStarted).toBe(true);
|
|
3221
|
+
_vitest.expect.call(void 0, state.messagesReceived.length).toBe(3);
|
|
3222
|
+
_vitest.expect.call(void 0, state.messagesReceived[0].body).toEqual({
|
|
3223
|
+
type: "test",
|
|
3224
|
+
value: 1
|
|
3225
|
+
});
|
|
3226
|
+
_vitest.expect.call(void 0, state.messagesReceived[1].body).toEqual({
|
|
3227
|
+
type: "test",
|
|
3228
|
+
value: 2
|
|
3229
|
+
});
|
|
3230
|
+
_vitest.expect.call(void 0, state.messagesReceived[2].body).toEqual({
|
|
3231
|
+
type: "test",
|
|
3232
|
+
value: 3
|
|
3233
|
+
});
|
|
3234
|
+
});
|
|
3235
|
+
_vitest.test.call(void 0, "queue-waiting run handler can sleep and resume", async (c) => {
|
|
3236
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3237
|
+
const actor = client.runWithQueueConsumer.getOrCreate([
|
|
3238
|
+
"queue-consumer-sleep"
|
|
3239
|
+
]);
|
|
3240
|
+
await waitFor(driverTestConfig, 100);
|
|
3241
|
+
const state1 = await actor.getState();
|
|
3242
|
+
_vitest.expect.call(void 0, state1.runStarted).toBe(true);
|
|
3243
|
+
await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.RUN_SLEEP_TIMEOUT + 500);
|
|
3244
|
+
const state2 = await actor.getState();
|
|
3245
|
+
_vitest.expect.call(void 0, state2.wakeCount).toBeGreaterThan(state1.wakeCount);
|
|
3246
|
+
});
|
|
3247
|
+
_vitest.test.call(void 0, "run handler that exits early triggers destroy", async (c) => {
|
|
3248
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3249
|
+
const actor = client.runWithEarlyExit.getOrCreate(["early-exit"]);
|
|
3250
|
+
await waitFor(driverTestConfig, 100);
|
|
3251
|
+
const state1 = await actor.getState();
|
|
3252
|
+
_vitest.expect.call(void 0, state1.runStarted).toBe(true);
|
|
3253
|
+
await waitFor(driverTestConfig, 300);
|
|
3254
|
+
const actor2 = client.runWithEarlyExit.getOrCreate([
|
|
3255
|
+
"early-exit-fresh"
|
|
3256
|
+
]);
|
|
3257
|
+
const state2 = await actor2.getState();
|
|
3258
|
+
_vitest.expect.call(void 0, state2.runStarted).toBe(true);
|
|
3259
|
+
});
|
|
3260
|
+
_vitest.test.call(void 0, "run handler that throws error triggers destroy", async (c) => {
|
|
3261
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3262
|
+
const actor = client.runWithError.getOrCreate(["run-error"]);
|
|
3263
|
+
await waitFor(driverTestConfig, 100);
|
|
3264
|
+
const state1 = await actor.getState();
|
|
3265
|
+
_vitest.expect.call(void 0, state1.runStarted).toBe(true);
|
|
3266
|
+
await waitFor(driverTestConfig, 300);
|
|
3267
|
+
const actor2 = client.runWithError.getOrCreate(["run-error-fresh"]);
|
|
3268
|
+
const state2 = await actor2.getState();
|
|
3269
|
+
_vitest.expect.call(void 0, state2.runStarted).toBe(true);
|
|
3270
|
+
});
|
|
3271
|
+
});
|
|
3272
|
+
}
|
|
3273
|
+
|
|
3274
|
+
// src/driver-test-suite/tests/actor-stateless.ts
|
|
3275
|
+
|
|
3276
|
+
function runActorStatelessTests(driverTestConfig) {
|
|
3277
|
+
_vitest.describe.call(void 0, "Actor Stateless Tests", () => {
|
|
3278
|
+
_vitest.describe.call(void 0, "Stateless Actor Operations", () => {
|
|
3279
|
+
_vitest.test.call(void 0, "can call actions on stateless actor", async (c) => {
|
|
3280
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3281
|
+
const instance = client.statelessActor.getOrCreate();
|
|
3282
|
+
const result = await instance.ping();
|
|
3283
|
+
_vitest.expect.call(void 0, result).toBe("pong");
|
|
3284
|
+
});
|
|
3285
|
+
_vitest.test.call(void 0, "can echo messages", async (c) => {
|
|
3286
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3287
|
+
const instance = client.statelessActor.getOrCreate();
|
|
3288
|
+
const message = "Hello, World!";
|
|
3289
|
+
const result = await instance.echo(message);
|
|
3290
|
+
_vitest.expect.call(void 0, result).toBe(message);
|
|
3291
|
+
});
|
|
3292
|
+
_vitest.test.call(void 0, "can access actorId", async (c) => {
|
|
3293
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3294
|
+
const instance = client.statelessActor.getOrCreate(["test-id"]);
|
|
3295
|
+
const actorId = await instance.getActorId();
|
|
3296
|
+
_vitest.expect.call(void 0, actorId).toBeDefined();
|
|
3297
|
+
_vitest.expect.call(void 0, typeof actorId).toBe("string");
|
|
3298
|
+
});
|
|
3299
|
+
_vitest.test.call(void 0, "accessing state throws StateNotEnabled", async (c) => {
|
|
3300
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3301
|
+
const instance = client.statelessActor.getOrCreate();
|
|
3302
|
+
const result = await instance.tryGetState();
|
|
3303
|
+
_vitest.expect.call(void 0, result.success).toBe(false);
|
|
3304
|
+
_vitest.expect.call(void 0, result.error).toContain("state");
|
|
3305
|
+
});
|
|
3306
|
+
_vitest.test.call(void 0, "accessing db throws DatabaseNotEnabled", async (c) => {
|
|
3307
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3308
|
+
const instance = client.statelessActor.getOrCreate();
|
|
3309
|
+
const result = await instance.tryGetDb();
|
|
3310
|
+
_vitest.expect.call(void 0, result.success).toBe(false);
|
|
3311
|
+
_vitest.expect.call(void 0, result.error).toContain("database");
|
|
3312
|
+
});
|
|
3313
|
+
_vitest.test.call(void 0, "multiple stateless actors can exist independently", async (c) => {
|
|
3314
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3315
|
+
const actor1 = client.statelessActor.getOrCreate(["actor-1"]);
|
|
3316
|
+
const actor2 = client.statelessActor.getOrCreate(["actor-2"]);
|
|
3317
|
+
const id1 = await actor1.getActorId();
|
|
3318
|
+
const id2 = await actor2.getActorId();
|
|
3319
|
+
_vitest.expect.call(void 0, id1).not.toBe(id2);
|
|
3320
|
+
});
|
|
3321
|
+
});
|
|
3322
|
+
});
|
|
3323
|
+
}
|
|
3324
|
+
|
|
2175
3325
|
// src/driver-test-suite/tests/actor-vars.ts
|
|
2176
3326
|
|
|
2177
3327
|
function runActorVarsTests(driverTestConfig) {
|
|
@@ -2236,6 +3386,89 @@ function runActorVarsTests(driverTestConfig) {
|
|
|
2236
3386
|
});
|
|
2237
3387
|
}
|
|
2238
3388
|
|
|
3389
|
+
// src/driver-test-suite/tests/actor-workflow.ts
|
|
3390
|
+
|
|
3391
|
+
function runActorWorkflowTests(driverTestConfig) {
|
|
3392
|
+
_vitest.describe.call(void 0, "Actor Workflow Tests", () => {
|
|
3393
|
+
var _a;
|
|
3394
|
+
_vitest.test.call(void 0, "replays steps and guards state access", async (c) => {
|
|
3395
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3396
|
+
const actor = client.workflowCounterActor.getOrCreate([
|
|
3397
|
+
"workflow-basic"
|
|
3398
|
+
]);
|
|
3399
|
+
await waitFor(driverTestConfig, 1e3);
|
|
3400
|
+
const state = await actor.getState();
|
|
3401
|
+
_vitest.expect.call(void 0, state.runCount).toBeGreaterThan(0);
|
|
3402
|
+
_vitest.expect.call(void 0, state.history.length).toBeGreaterThan(0);
|
|
3403
|
+
_vitest.expect.call(void 0, state.guardTriggered).toBe(true);
|
|
3404
|
+
});
|
|
3405
|
+
_vitest.test.call(void 0, "consumes queue messages via workflow queue.next", async (c) => {
|
|
3406
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3407
|
+
const actor = client.workflowQueueActor.getOrCreate(["workflow-queue"]);
|
|
3408
|
+
await actor.send(_chunkXWBAQO5Hcjs.WORKFLOW_QUEUE_NAME, {
|
|
3409
|
+
hello: "world"
|
|
3410
|
+
});
|
|
3411
|
+
await waitFor(driverTestConfig, 200);
|
|
3412
|
+
const messages = await actor.getMessages();
|
|
3413
|
+
_vitest.expect.call(void 0, messages).toEqual([{ hello: "world" }]);
|
|
3414
|
+
});
|
|
3415
|
+
_vitest.test.call(void 0, "workflow queue.next supports completing wait sends", async (c) => {
|
|
3416
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3417
|
+
const actor = client.workflowQueueActor.getOrCreate([
|
|
3418
|
+
"workflow-queue-wait"
|
|
3419
|
+
]);
|
|
3420
|
+
const result = await actor.sendAndWait({ value: 123 });
|
|
3421
|
+
_vitest.expect.call(void 0, result).toEqual({
|
|
3422
|
+
status: "completed",
|
|
3423
|
+
response: { echo: { value: 123 } }
|
|
3424
|
+
});
|
|
3425
|
+
});
|
|
3426
|
+
_vitest.test.call(void 0, "db and client are step-only in workflow context", async (c) => {
|
|
3427
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3428
|
+
const actor = client.workflowAccessActor.getOrCreate([
|
|
3429
|
+
"workflow-access"
|
|
3430
|
+
]);
|
|
3431
|
+
let state = await actor.getState();
|
|
3432
|
+
for (let i = 0; i < 20 && state.insideDbCount === 0; i++) {
|
|
3433
|
+
await waitFor(driverTestConfig, 50);
|
|
3434
|
+
state = await actor.getState();
|
|
3435
|
+
}
|
|
3436
|
+
_vitest.expect.call(void 0, state.outsideDbError).toBe(
|
|
3437
|
+
"db is only available inside workflow steps"
|
|
3438
|
+
);
|
|
3439
|
+
_vitest.expect.call(void 0, state.outsideClientError).toBe(
|
|
3440
|
+
"client is only available inside workflow steps"
|
|
3441
|
+
);
|
|
3442
|
+
_vitest.expect.call(void 0, state.insideDbCount).toBeGreaterThan(0);
|
|
3443
|
+
_vitest.expect.call(void 0, state.insideClientAvailable).toBe(true);
|
|
3444
|
+
});
|
|
3445
|
+
_vitest.test.call(void 0, "sleeps and resumes between ticks", async (c) => {
|
|
3446
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3447
|
+
const actor = client.workflowSleepActor.getOrCreate(["workflow-sleep"]);
|
|
3448
|
+
const initial = await actor.getState();
|
|
3449
|
+
await waitFor(driverTestConfig, 200);
|
|
3450
|
+
const next = await actor.getState();
|
|
3451
|
+
_vitest.expect.call(void 0, next.ticks).toBeGreaterThan(initial.ticks);
|
|
3452
|
+
});
|
|
3453
|
+
_vitest.test.skipIf((_a = driverTestConfig.skip) == null ? void 0 : _a.sleep)(
|
|
3454
|
+
"workflow run teardown does not wait for runStopTimeout",
|
|
3455
|
+
async (c) => {
|
|
3456
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3457
|
+
const actor = client.workflowStopTeardownActor.getOrCreate([
|
|
3458
|
+
"workflow-stop-teardown"
|
|
3459
|
+
]);
|
|
3460
|
+
await actor.getTimeline();
|
|
3461
|
+
await waitFor(driverTestConfig, 1200);
|
|
3462
|
+
const timeline = await actor.getTimeline();
|
|
3463
|
+
_vitest.expect.call(void 0, timeline.wakeAts.length).toBeGreaterThanOrEqual(2);
|
|
3464
|
+
_vitest.expect.call(void 0, timeline.sleepAts.length).toBeGreaterThanOrEqual(1);
|
|
3465
|
+
const firstSleepDelayMs = timeline.sleepAts[0] - timeline.wakeAts[0];
|
|
3466
|
+
_vitest.expect.call(void 0, firstSleepDelayMs).toBeLessThan(1800);
|
|
3467
|
+
}
|
|
3468
|
+
);
|
|
3469
|
+
});
|
|
3470
|
+
}
|
|
3471
|
+
|
|
2239
3472
|
// src/driver-test-suite/tests/manager-driver.ts
|
|
2240
3473
|
|
|
2241
3474
|
function runManagerDriverTests(driverTestConfig) {
|
|
@@ -2355,6 +3588,12 @@ function runManagerDriverTests(driverTestConfig) {
|
|
|
2355
3588
|
});
|
|
2356
3589
|
});
|
|
2357
3590
|
_vitest.describe.call(void 0, "Key Matching", () => {
|
|
3591
|
+
_vitest.test.call(void 0, "multi-part actor keys are passed through correctly", async (c) => {
|
|
3592
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3593
|
+
const multiPartKey = ["tenant/with/slash", "room"];
|
|
3594
|
+
const counter = client.counter.getOrCreate(multiPartKey);
|
|
3595
|
+
_vitest.expect.call(void 0, await counter.getKey()).toEqual(multiPartKey);
|
|
3596
|
+
});
|
|
2358
3597
|
_vitest.test.call(void 0, "matches actors only with exactly the same keys", async (c) => {
|
|
2359
3598
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
2360
3599
|
const originalCounter = client.counter.getOrCreate([
|
|
@@ -2536,7 +3775,7 @@ function runRawHttpTests(driverTestConfig) {
|
|
|
2536
3775
|
_vitest.expect.call(void 0, errorData.message).toContain(
|
|
2537
3776
|
"onRequest handler must return a Response"
|
|
2538
3777
|
);
|
|
2539
|
-
} catch (
|
|
3778
|
+
} catch (e4) {
|
|
2540
3779
|
}
|
|
2541
3780
|
});
|
|
2542
3781
|
_vitest.test.call(void 0, "should handle different HTTP methods", async (c) => {
|
|
@@ -3071,7 +4310,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3071
4310
|
_vitest.test.call(void 0, "should establish raw WebSocket connection", async (c) => {
|
|
3072
4311
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3073
4312
|
const actor = client.rawWebSocketActor.getOrCreate(["basic"]);
|
|
3074
|
-
const ws = await actor.
|
|
4313
|
+
const ws = await actor.webSocket();
|
|
3075
4314
|
await new Promise((resolve) => {
|
|
3076
4315
|
if (ws.readyState === WebSocket.OPEN) {
|
|
3077
4316
|
resolve();
|
|
@@ -3102,7 +4341,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3102
4341
|
_vitest.test.call(void 0, "should echo messages", async (c) => {
|
|
3103
4342
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3104
4343
|
const actor = client.rawWebSocketActor.getOrCreate(["echo"]);
|
|
3105
|
-
const ws = await actor.
|
|
4344
|
+
const ws = await actor.webSocket();
|
|
3106
4345
|
if (ws.readyState !== WebSocket.OPEN) {
|
|
3107
4346
|
await new Promise((resolve, reject) => {
|
|
3108
4347
|
ws.addEventListener("open", () => resolve(), {
|
|
@@ -3133,7 +4372,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3133
4372
|
_vitest.test.call(void 0, "should handle ping/pong protocol", async (c) => {
|
|
3134
4373
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3135
4374
|
const actor = client.rawWebSocketActor.getOrCreate(["ping"]);
|
|
3136
|
-
const ws = await actor.
|
|
4375
|
+
const ws = await actor.webSocket();
|
|
3137
4376
|
if (ws.readyState !== WebSocket.OPEN) {
|
|
3138
4377
|
await new Promise((resolve, reject) => {
|
|
3139
4378
|
ws.addEventListener("open", () => resolve(), {
|
|
@@ -3163,7 +4402,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3163
4402
|
_vitest.test.call(void 0, "should track stats across connections", async (c) => {
|
|
3164
4403
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3165
4404
|
const actor1 = client.rawWebSocketActor.getOrCreate(["stats"]);
|
|
3166
|
-
const ws1 = await actor1.
|
|
4405
|
+
const ws1 = await actor1.webSocket();
|
|
3167
4406
|
const ws1MessagePromise = new Promise((resolve, reject) => {
|
|
3168
4407
|
ws1.addEventListener("message", () => resolve(), {
|
|
3169
4408
|
once: true
|
|
@@ -3172,7 +4411,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3172
4411
|
});
|
|
3173
4412
|
await ws1MessagePromise;
|
|
3174
4413
|
const actor2 = client.rawWebSocketActor.get(["stats"]);
|
|
3175
|
-
const ws2 = await actor2.
|
|
4414
|
+
const ws2 = await actor2.webSocket();
|
|
3176
4415
|
const ws2MessagePromise = new Promise((resolve, reject) => {
|
|
3177
4416
|
ws2.addEventListener("message", () => resolve(), {
|
|
3178
4417
|
once: true
|
|
@@ -3217,7 +4456,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3217
4456
|
const actor = client.rawWebSocketBinaryActor.getOrCreate([
|
|
3218
4457
|
"binary"
|
|
3219
4458
|
]);
|
|
3220
|
-
const ws = await actor.
|
|
4459
|
+
const ws = await actor.webSocket();
|
|
3221
4460
|
if (ws.readyState !== WebSocket.OPEN) {
|
|
3222
4461
|
await new Promise((resolve, reject) => {
|
|
3223
4462
|
ws.addEventListener("open", () => resolve(), {
|
|
@@ -3262,7 +4501,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3262
4501
|
_vitest.test.call(void 0, "should work with custom paths", async (c) => {
|
|
3263
4502
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3264
4503
|
const actor = client.rawWebSocketActor.getOrCreate(["paths"]);
|
|
3265
|
-
const ws = await actor.
|
|
4504
|
+
const ws = await actor.webSocket("custom/path");
|
|
3266
4505
|
await new Promise((resolve, reject) => {
|
|
3267
4506
|
ws.addEventListener("open", () => {
|
|
3268
4507
|
resolve();
|
|
@@ -3285,7 +4524,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3285
4524
|
_vitest.test.call(void 0, "should handle connection close properly", async (c) => {
|
|
3286
4525
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
3287
4526
|
const actor = client.rawWebSocketActor.getOrCreate(["close-test"]);
|
|
3288
|
-
const ws = await actor.
|
|
4527
|
+
const ws = await actor.webSocket();
|
|
3289
4528
|
if (ws.readyState !== WebSocket.OPEN) {
|
|
3290
4529
|
await new Promise((resolve, reject) => {
|
|
3291
4530
|
ws.addEventListener("open", () => resolve(), {
|
|
@@ -3316,7 +4555,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3316
4555
|
const actor = client.rawWebSocketActor.getOrCreate([
|
|
3317
4556
|
"open-close-test"
|
|
3318
4557
|
]);
|
|
3319
|
-
const ws1 = await actor.
|
|
4558
|
+
const ws1 = await actor.webSocket();
|
|
3320
4559
|
await new Promise((resolve, reject) => {
|
|
3321
4560
|
ws1.addEventListener("open", () => resolve(), { once: true });
|
|
3322
4561
|
ws1.addEventListener("close", reject);
|
|
@@ -3333,7 +4572,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3333
4572
|
});
|
|
3334
4573
|
_vitest.expect.call(void 0, welcome1.type).toBe("welcome");
|
|
3335
4574
|
_vitest.expect.call(void 0, welcome1.connectionCount).toBe(1);
|
|
3336
|
-
const ws2 = await actor.
|
|
4575
|
+
const ws2 = await actor.webSocket();
|
|
3337
4576
|
await new Promise((resolve, reject) => {
|
|
3338
4577
|
ws2.addEventListener("open", () => resolve(), { once: true });
|
|
3339
4578
|
ws2.addEventListener("close", reject);
|
|
@@ -3384,7 +4623,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3384
4623
|
const actor = client.rawWebSocketActor.getOrCreate([
|
|
3385
4624
|
"query-params"
|
|
3386
4625
|
]);
|
|
3387
|
-
const ws = await actor.
|
|
4626
|
+
const ws = await actor.webSocket(
|
|
3388
4627
|
"api/v1/stream?token=abc123&user=test"
|
|
3389
4628
|
);
|
|
3390
4629
|
await new Promise((resolve, reject) => {
|
|
@@ -3412,7 +4651,7 @@ function runRawWebSocketTests(driverTestConfig) {
|
|
|
3412
4651
|
const actor = client.rawWebSocketActor.getOrCreate([
|
|
3413
4652
|
"base-path-query-params"
|
|
3414
4653
|
]);
|
|
3415
|
-
const ws = await actor.
|
|
4654
|
+
const ws = await actor.webSocket("?token=secret&session=123");
|
|
3416
4655
|
await new Promise((resolve, reject) => {
|
|
3417
4656
|
ws.addEventListener("open", () => resolve(), { once: true });
|
|
3418
4657
|
ws.addEventListener("error", reject);
|
|
@@ -3527,41 +4766,49 @@ function runRequestAccessTests(driverTestConfig) {
|
|
|
3527
4766
|
|
|
3528
4767
|
// src/driver-test-suite/mod.ts
|
|
3529
4768
|
function runDriverTests(driverTestConfigPartial) {
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
4769
|
+
_vitest.describe.call(void 0, "Driver Tests", () => {
|
|
4770
|
+
var _a;
|
|
4771
|
+
const clientTypes = ((_a = driverTestConfigPartial.skip) == null ? void 0 : _a.inline) ? ["http"] : ["http", "inline"];
|
|
4772
|
+
for (const clientType of clientTypes) {
|
|
4773
|
+
_vitest.describe.call(void 0, `client type (${clientType})`, () => {
|
|
4774
|
+
const encodings = ["bare", "cbor", "json"];
|
|
4775
|
+
for (const encoding of encodings) {
|
|
4776
|
+
_vitest.describe.call(void 0, `encoding (${encoding})`, () => {
|
|
4777
|
+
const driverTestConfig = {
|
|
4778
|
+
...driverTestConfigPartial,
|
|
4779
|
+
clientType,
|
|
4780
|
+
encoding
|
|
4781
|
+
};
|
|
4782
|
+
runActorDriverTests(driverTestConfig);
|
|
4783
|
+
runManagerDriverTests(driverTestConfig);
|
|
4784
|
+
runActorConnTests(driverTestConfig);
|
|
4785
|
+
runActorConnStateTests(driverTestConfig);
|
|
4786
|
+
runActorConnHibernationTests(driverTestConfig);
|
|
4787
|
+
runActorDbTests(driverTestConfig);
|
|
4788
|
+
runActorDestroyTests(driverTestConfig);
|
|
4789
|
+
runRequestAccessTests(driverTestConfig);
|
|
4790
|
+
runActorHandleTests(driverTestConfig);
|
|
4791
|
+
runActionFeaturesTests(driverTestConfig);
|
|
4792
|
+
runAccessControlTests(driverTestConfig);
|
|
4793
|
+
runActorVarsTests(driverTestConfig);
|
|
4794
|
+
runActorMetadataTests(driverTestConfig);
|
|
4795
|
+
runActorOnStateChangeTests(driverTestConfig);
|
|
4796
|
+
runActorErrorHandlingTests(driverTestConfig);
|
|
4797
|
+
runActorQueueTests(driverTestConfig);
|
|
4798
|
+
runActorRunTests(driverTestConfig);
|
|
4799
|
+
runActorInlineClientTests(driverTestConfig);
|
|
4800
|
+
runActorKvTests(driverTestConfig);
|
|
4801
|
+
runActorWorkflowTests(driverTestConfig);
|
|
4802
|
+
runActorStatelessTests(driverTestConfig);
|
|
4803
|
+
runRawHttpTests(driverTestConfig);
|
|
4804
|
+
runRawHttpRequestPropertiesTests(driverTestConfig);
|
|
4805
|
+
runRawWebSocketTests(driverTestConfig);
|
|
4806
|
+
runActorInspectorTests(driverTestConfig);
|
|
4807
|
+
});
|
|
4808
|
+
}
|
|
4809
|
+
});
|
|
4810
|
+
}
|
|
4811
|
+
});
|
|
3565
4812
|
}
|
|
3566
4813
|
async function createTestRuntime(registryPath, driverFactory) {
|
|
3567
4814
|
var _a;
|
|
@@ -3591,7 +4838,7 @@ async function createTestRuntime(registryPath, driverFactory) {
|
|
|
3591
4838
|
const parsedConfig = registry.parseConfig();
|
|
3592
4839
|
const managerDriver = (_a = driver.manager) == null ? void 0 : _a.call(driver, parsedConfig);
|
|
3593
4840
|
_invariant2.default.call(void 0, managerDriver, "missing manager driver");
|
|
3594
|
-
const { router } =
|
|
4841
|
+
const { router } = _chunkF6JYU5IKcjs.buildManagerRouter.call(void 0,
|
|
3595
4842
|
parsedConfig,
|
|
3596
4843
|
managerDriver,
|
|
3597
4844
|
() => upgradeWebSocket
|
|
@@ -3599,19 +4846,26 @@ async function createTestRuntime(registryPath, driverFactory) {
|
|
|
3599
4846
|
const nodeWebSocket = _nodews.createNodeWebSocket.call(void 0, { app: router });
|
|
3600
4847
|
upgradeWebSocket = nodeWebSocket.upgradeWebSocket;
|
|
3601
4848
|
managerDriver.setGetUpgradeWebSocket(() => upgradeWebSocket);
|
|
3602
|
-
const port = await _chunk3VP5CSHVcjs.getPort.call(void 0, );
|
|
3603
4849
|
const server = _nodeserver.serve.call(void 0, {
|
|
3604
4850
|
fetch: router.fetch,
|
|
3605
4851
|
hostname: "127.0.0.1",
|
|
3606
|
-
port
|
|
4852
|
+
port: 0
|
|
3607
4853
|
});
|
|
4854
|
+
if (!server.listening) {
|
|
4855
|
+
await new Promise((resolve) => {
|
|
4856
|
+
server.once("listening", () => resolve());
|
|
4857
|
+
});
|
|
4858
|
+
}
|
|
3608
4859
|
_invariant2.default.call(void 0,
|
|
3609
4860
|
nodeWebSocket.injectWebSocket !== void 0,
|
|
3610
4861
|
"should have injectWebSocket"
|
|
3611
4862
|
);
|
|
3612
4863
|
nodeWebSocket.injectWebSocket(server);
|
|
4864
|
+
const address = server.address();
|
|
4865
|
+
_invariant2.default.call(void 0, address && typeof address !== "string", "missing server address");
|
|
4866
|
+
const port = address.port;
|
|
3613
4867
|
const serverEndpoint = `http://127.0.0.1:${port}`;
|
|
3614
|
-
|
|
4868
|
+
_chunkXWBAQO5Hcjs.logger.call(void 0, ).info({ msg: "test serer listening", port });
|
|
3615
4869
|
const cleanup = async () => {
|
|
3616
4870
|
await new Promise(
|
|
3617
4871
|
(resolve) => server.close(() => resolve(void 0))
|