rivetkit 2.1.5 → 2.1.6-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/browser/client.d.ts +593 -588
- package/dist/browser/client.js +215 -35
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/inspector/client.js +109 -10
- package/dist/browser/inspector/client.js.map +1 -1
- package/dist/inspector.tar.gz +0 -0
- package/dist/tsup/actor/errors.cjs +2 -2
- package/dist/tsup/actor/errors.js +1 -1
- package/dist/tsup/{actor-router-consts-D29T1Z-K.d.cts → actor-router-consts-DU-1IdQj.d.cts} +1 -1
- package/dist/tsup/{actor-router-consts-D29T1Z-K.d.ts → actor-router-consts-DU-1IdQj.d.ts} +1 -1
- package/dist/tsup/chunk-2ELYUO6C.cjs +112 -0
- package/dist/tsup/chunk-2ELYUO6C.cjs.map +1 -0
- package/dist/tsup/chunk-2LY7RW3Y.cjs +2316 -0
- package/dist/tsup/chunk-2LY7RW3Y.cjs.map +1 -0
- package/dist/tsup/{chunk-L47L3ZWJ.cjs → chunk-6G7ZNM27.cjs} +11 -6
- package/dist/tsup/chunk-6G7ZNM27.cjs.map +1 -0
- package/dist/tsup/{chunk-PB5AEMKQ.cjs → chunk-A4KEUCB6.cjs} +84 -34
- package/dist/tsup/chunk-A4KEUCB6.cjs.map +1 -0
- package/dist/tsup/{chunk-7HTNH26M.js → chunk-AKUJ5OTO.js} +11 -6
- package/dist/tsup/chunk-AKUJ5OTO.js.map +1 -0
- package/dist/tsup/{chunk-TADUYCHF.js → chunk-C22JYHVT.js} +77 -27
- package/dist/tsup/chunk-C22JYHVT.js.map +1 -0
- package/dist/tsup/chunk-C4EB42ET.js +1459 -0
- package/dist/tsup/chunk-C4EB42ET.js.map +1 -0
- package/dist/tsup/chunk-CGGGBIDP.cjs +1459 -0
- package/dist/tsup/chunk-CGGGBIDP.cjs.map +1 -0
- package/dist/tsup/chunk-CMQPDBBR.cjs +1486 -0
- package/dist/tsup/chunk-CMQPDBBR.cjs.map +1 -0
- package/dist/tsup/{chunk-GQGRQDRL.cjs → chunk-DH6UINWA.cjs} +4 -4
- package/dist/tsup/{chunk-GQGRQDRL.cjs.map → chunk-DH6UINWA.cjs.map} +1 -1
- package/dist/tsup/chunk-DK46YYCJ.js +1486 -0
- package/dist/tsup/chunk-DK46YYCJ.js.map +1 -0
- package/dist/tsup/chunk-EGWXXBZV.js +2316 -0
- package/dist/tsup/chunk-EGWXXBZV.js.map +1 -0
- package/dist/tsup/{chunk-S662Y6ZU.js → chunk-EONWXYMN.js} +2 -2
- package/dist/tsup/{chunk-N4KRDJ56.js → chunk-GFGRBYO2.js} +35 -6
- package/dist/tsup/chunk-GFGRBYO2.js.map +1 -0
- package/dist/tsup/{chunk-IIJNPVPQ.cjs → chunk-GUHXWPGB.cjs} +1515 -1479
- package/dist/tsup/chunk-GUHXWPGB.cjs.map +1 -0
- package/dist/tsup/{chunk-TI5PXQGG.cjs → chunk-HNE2AK6C.cjs} +2375 -3713
- package/dist/tsup/chunk-HNE2AK6C.cjs.map +1 -0
- package/dist/tsup/{chunk-2OK7S6QF.js → chunk-I5I6OALK.js} +2 -2
- package/dist/tsup/chunk-IHQAF2HV.cjs +23 -0
- package/dist/tsup/chunk-IHQAF2HV.cjs.map +1 -0
- package/dist/tsup/{chunk-U5SMSA27.cjs → chunk-JJNZQDUN.cjs} +667 -2517
- package/dist/tsup/chunk-JJNZQDUN.cjs.map +1 -0
- package/dist/tsup/{chunk-ZPWOYQHN.js → chunk-JJSPHLJN.js} +219 -287
- package/dist/tsup/chunk-JJSPHLJN.js.map +1 -0
- package/dist/tsup/chunk-JRKPV5NJ.js +481 -0
- package/dist/tsup/chunk-JRKPV5NJ.js.map +1 -0
- package/dist/tsup/{chunk-VKVNIQRQ.js → chunk-K7MVU5SI.js} +36 -41
- package/dist/tsup/chunk-K7MVU5SI.js.map +1 -0
- package/dist/tsup/{chunk-KJSYAUOM.js → chunk-MLK3GY6P.js} +43 -27
- package/dist/tsup/chunk-MLK3GY6P.js.map +1 -0
- package/dist/tsup/{chunk-HYPIHCDT.cjs → chunk-MPLMTJY5.cjs} +123 -23
- package/dist/tsup/chunk-MPLMTJY5.cjs.map +1 -0
- package/dist/tsup/{chunk-MIX2KB6U.js → chunk-PQWI44WD.js} +1755 -3093
- package/dist/tsup/chunk-PQWI44WD.js.map +1 -0
- package/dist/tsup/{chunk-SR3KQE7Q.cjs → chunk-SQFCIDCG.cjs} +35 -6
- package/dist/tsup/chunk-SQFCIDCG.cjs.map +1 -0
- package/dist/tsup/{chunk-WY2SHWXQ.js → chunk-SVHJSM2E.js} +110 -24
- package/dist/tsup/chunk-SVHJSM2E.js.map +1 -0
- package/dist/tsup/chunk-T5KYKM6R.js +49 -0
- package/dist/tsup/chunk-T5KYKM6R.js.map +1 -0
- package/dist/tsup/{chunk-7WF2QSIC.cjs → chunk-TJ7DKW6F.cjs} +123 -37
- package/dist/tsup/chunk-TJ7DKW6F.cjs.map +1 -0
- package/dist/tsup/chunk-UQZRMTM3.js +23 -0
- package/dist/tsup/chunk-UQZRMTM3.js.map +1 -0
- package/dist/tsup/{chunk-JC6BEPE7.cjs → chunk-V3JSZR5P.cjs} +3 -3
- package/dist/tsup/{chunk-JC6BEPE7.cjs.map → chunk-V3JSZR5P.cjs.map} +1 -1
- package/dist/tsup/{chunk-OAXJWGMU.cjs → chunk-VBR35EQF.cjs} +271 -339
- package/dist/tsup/chunk-VBR35EQF.cjs.map +1 -0
- package/dist/tsup/{chunk-EIATSBYZ.js → chunk-VWYO36X4.js} +117 -17
- package/dist/tsup/chunk-VWYO36X4.js.map +1 -0
- package/dist/tsup/{chunk-JPXO2H55.js → chunk-WW27B6DM.js} +1452 -1416
- package/dist/tsup/chunk-WW27B6DM.js.map +1 -0
- package/dist/tsup/chunk-YAE3MEJM.cjs +49 -0
- package/dist/tsup/chunk-YAE3MEJM.cjs.map +1 -0
- package/dist/tsup/{chunk-SRIM3GHD.js → chunk-YGYGANCA.js} +473 -2323
- package/dist/tsup/chunk-YGYGANCA.js.map +1 -0
- package/dist/tsup/chunk-YZJWZBY5.cjs +481 -0
- package/dist/tsup/chunk-YZJWZBY5.cjs.map +1 -0
- package/dist/tsup/{chunk-ZFY5J2EP.cjs → chunk-ZZLJ5TSM.cjs} +39 -44
- package/dist/tsup/chunk-ZZLJ5TSM.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +10 -7
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +6 -6
- package/dist/tsup/client/mod.d.ts +6 -6
- package/dist/tsup/client/mod.js +11 -8
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{config-Qj-zLJPc.d.ts → config-C2Wwnc69.d.ts} +142 -208
- package/dist/tsup/{config-BiNoIHRs.d.ts → config-DROwzBLT.d.cts} +82 -6
- package/dist/tsup/{config-BiNoIHRs.d.cts → config-DROwzBLT.d.ts} +82 -6
- package/dist/tsup/{config-iPj5l1bL.d.cts → config-ehT-_3BB.d.cts} +142 -208
- package/dist/tsup/{context-DzvH1PBK.d.cts → context-DGMJuAyc.d.ts} +16 -3
- package/dist/tsup/{context-CQCMuHND.d.ts → context-Dpp2RJbW.d.cts} +16 -3
- package/dist/tsup/db/drizzle/mod.cjs +3 -3
- package/dist/tsup/db/drizzle/mod.d.cts +1 -1
- package/dist/tsup/db/drizzle/mod.d.ts +1 -1
- package/dist/tsup/db/drizzle/mod.js +2 -2
- package/dist/tsup/db/mod.cjs +3 -3
- package/dist/tsup/db/mod.d.cts +1 -1
- package/dist/tsup/db/mod.d.ts +1 -1
- package/dist/tsup/db/mod.js +2 -2
- package/dist/tsup/{driver-Jo8v-kbU.d.ts → driver-CYZP9QYo.d.ts} +1 -1
- package/dist/tsup/{driver-iV8J-WMv.d.cts → driver-CoTFpipv.d.cts} +1 -1
- package/dist/tsup/driver-helpers/mod.cjs +7 -5
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +17 -18
- package/dist/tsup/driver-helpers/mod.d.ts +17 -18
- package/dist/tsup/driver-helpers/mod.js +11 -9
- package/dist/tsup/driver-test-suite/mod.cjs +1275 -228
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +6 -5
- package/dist/tsup/driver-test-suite/mod.d.ts +6 -5
- package/dist/tsup/driver-test-suite/mod.js +1581 -534
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +4 -4
- package/dist/tsup/inspector/mod.js +3 -3
- package/dist/tsup/mod.cjs +15 -9
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +9 -9
- package/dist/tsup/mod.d.ts +9 -9
- package/dist/tsup/mod.js +19 -13
- package/dist/tsup/sandbox/client.cjs +28 -0
- package/dist/tsup/sandbox/client.cjs.map +1 -0
- package/dist/tsup/sandbox/client.d.cts +88 -0
- package/dist/tsup/sandbox/client.d.ts +88 -0
- package/dist/tsup/sandbox/client.js +28 -0
- package/dist/tsup/sandbox/client.js.map +1 -0
- package/dist/tsup/sandbox/index.cjs +761 -0
- package/dist/tsup/sandbox/index.cjs.map +1 -0
- package/dist/tsup/sandbox/index.d.cts +120 -0
- package/dist/tsup/sandbox/index.d.ts +120 -0
- package/dist/tsup/sandbox/index.js +761 -0
- package/dist/tsup/sandbox/index.js.map +1 -0
- package/dist/tsup/sandbox/providers/computesdk.cjs +3 -0
- package/dist/tsup/sandbox/providers/computesdk.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/computesdk.d.cts +7 -0
- package/dist/tsup/sandbox/providers/computesdk.d.ts +7 -0
- package/dist/tsup/sandbox/providers/computesdk.js +3 -0
- package/dist/tsup/sandbox/providers/computesdk.js.map +1 -0
- package/dist/tsup/sandbox/providers/daytona.cjs +3 -0
- package/dist/tsup/sandbox/providers/daytona.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/daytona.d.cts +1 -0
- package/dist/tsup/sandbox/providers/daytona.d.ts +1 -0
- package/dist/tsup/sandbox/providers/daytona.js +3 -0
- package/dist/tsup/sandbox/providers/daytona.js.map +1 -0
- package/dist/tsup/sandbox/providers/docker.cjs +3 -0
- package/dist/tsup/sandbox/providers/docker.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/docker.d.cts +1 -0
- package/dist/tsup/sandbox/providers/docker.d.ts +1 -0
- package/dist/tsup/sandbox/providers/docker.js +3 -0
- package/dist/tsup/sandbox/providers/docker.js.map +1 -0
- package/dist/tsup/sandbox/providers/e2b.cjs +3 -0
- package/dist/tsup/sandbox/providers/e2b.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/e2b.d.cts +1 -0
- package/dist/tsup/sandbox/providers/e2b.d.ts +1 -0
- package/dist/tsup/sandbox/providers/e2b.js +3 -0
- package/dist/tsup/sandbox/providers/e2b.js.map +1 -0
- package/dist/tsup/sandbox/providers/local.cjs +3 -0
- package/dist/tsup/sandbox/providers/local.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/local.d.cts +1 -0
- package/dist/tsup/sandbox/providers/local.d.ts +1 -0
- package/dist/tsup/sandbox/providers/local.js +3 -0
- package/dist/tsup/sandbox/providers/local.js.map +1 -0
- package/dist/tsup/sandbox/providers/modal.cjs +3 -0
- package/dist/tsup/sandbox/providers/modal.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/modal.d.cts +1 -0
- package/dist/tsup/sandbox/providers/modal.d.ts +1 -0
- package/dist/tsup/sandbox/providers/modal.js +3 -0
- package/dist/tsup/sandbox/providers/modal.js.map +1 -0
- package/dist/tsup/sandbox/providers/vercel.cjs +3 -0
- package/dist/tsup/sandbox/providers/vercel.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/vercel.d.cts +1 -0
- package/dist/tsup/sandbox/providers/vercel.d.ts +1 -0
- package/dist/tsup/sandbox/providers/vercel.js +3 -0
- package/dist/tsup/sandbox/providers/vercel.js.map +1 -0
- package/dist/tsup/serve-test-suite/mod.cjs +451 -327
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/serve-test-suite/mod.js +362 -238
- package/dist/tsup/serve-test-suite/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +17 -14
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +4 -4
- package/dist/tsup/test/mod.d.ts +4 -4
- package/dist/tsup/test/mod.js +14 -11
- package/dist/tsup/test/mod.js.map +1 -1
- package/dist/tsup/utils.cjs +3 -3
- package/dist/tsup/utils.js +2 -2
- package/dist/tsup/workflow/mod.cjs +6 -6
- package/dist/tsup/workflow/mod.d.cts +13 -9
- package/dist/tsup/workflow/mod.d.ts +13 -9
- package/dist/tsup/workflow/mod.js +5 -5
- package/package.json +114 -15
- package/src/actor/config.ts +94 -88
- package/src/actor/conn/drivers/websocket.ts +2 -1
- package/src/actor/contexts/base/actor.ts +27 -4
- package/src/actor/database.ts +6 -1
- package/src/actor/driver.ts +27 -8
- package/src/actor/errors.ts +10 -5
- package/src/actor/instance/connection-manager.ts +4 -3
- package/src/actor/instance/kv.ts +52 -9
- package/src/actor/instance/mod.ts +135 -84
- package/src/actor/instance/queue-manager.ts +2 -5
- package/src/actor/instance/queue.ts +31 -29
- package/src/actor/instance/state-manager.ts +7 -1
- package/src/actor/instance/traces-driver.ts +34 -36
- package/src/actor/metrics.ts +137 -0
- package/src/actor/protocol/old.ts +9 -12
- package/src/actor/router-websocket-endpoints.ts +12 -6
- package/src/actor/router.ts +46 -9
- package/src/actor/schema.ts +14 -22
- package/src/client/actor-common.ts +65 -0
- package/src/client/actor-conn.ts +71 -9
- package/src/client/actor-handle.ts +22 -5
- package/src/client/client.ts +32 -6
- package/src/client/config.ts +18 -21
- package/src/client/mod.ts +1 -0
- package/src/client/queue.ts +8 -6
- package/src/common/inline-websocket-adapter.ts +8 -2
- package/src/common/router.ts +1 -4
- package/src/common/utils.ts +2 -5
- package/src/db/config.ts +10 -5
- package/src/db/drizzle/mod.ts +51 -41
- package/src/db/mod.ts +54 -29
- package/src/db/shared.ts +42 -8
- package/src/driver-helpers/mod.ts +2 -1
- package/src/driver-helpers/sqlite-pool.ts +42 -0
- package/src/driver-helpers/utils.ts +0 -20
- package/src/driver-test-suite/mod.ts +11 -1
- package/src/driver-test-suite/tests/access-control.ts +19 -12
- package/src/driver-test-suite/tests/action-features.ts +20 -8
- package/src/driver-test-suite/tests/actor-conn.ts +94 -8
- package/src/driver-test-suite/tests/actor-db-kv-stats.ts +282 -0
- package/src/driver-test-suite/tests/actor-db-raw.ts +6 -2
- package/src/driver-test-suite/tests/actor-db.ts +101 -31
- package/src/driver-test-suite/tests/actor-inspector.ts +174 -32
- package/src/driver-test-suite/tests/actor-kv.ts +79 -33
- package/src/driver-test-suite/tests/actor-lifecycle.ts +4 -12
- package/src/driver-test-suite/tests/actor-queue.ts +125 -17
- package/src/driver-test-suite/tests/actor-run.ts +59 -55
- package/src/driver-test-suite/tests/actor-sandbox.ts +78 -0
- package/src/driver-test-suite/tests/actor-schedule.ts +1 -4
- package/src/driver-test-suite/tests/actor-sleep.ts +111 -0
- package/src/driver-test-suite/tests/actor-workflow.ts +387 -3
- package/src/driver-test-suite/tests/conn-error-serialization.ts +3 -1
- package/src/driver-test-suite/tests/raw-websocket.ts +5 -1
- package/src/drivers/default.ts +1 -3
- package/src/drivers/engine/actor-driver.ts +94 -21
- package/src/drivers/engine/config.ts +4 -12
- package/src/drivers/engine/mod.ts +1 -5
- package/src/drivers/file-system/actor.ts +43 -8
- package/src/drivers/file-system/global-state.ts +180 -64
- package/src/drivers/file-system/kv-limits.ts +1 -1
- package/src/drivers/file-system/sqlite-runtime.ts +13 -4
- package/src/engine-process/mod.ts +5 -1
- package/src/inspector/actor-inspector.ts +47 -21
- package/src/inspector/config.ts +1 -4
- package/src/inspector/mod.browser.ts +2 -2
- package/src/inspector/mod.ts +4 -1
- package/src/inspector/serve-ui.ts +0 -1
- package/src/inspector/workflow-history-json.ts +309 -0
- package/src/manager/gateway.ts +6 -2
- package/src/manager/router.ts +3 -3
- package/src/registry/config/index.ts +65 -12
- package/src/registry/config/runner.ts +19 -4
- package/src/registry/index.ts +42 -89
- package/src/sandbox/actor/db.ts +36 -0
- package/src/sandbox/actor/index.ts +476 -0
- package/src/sandbox/actor/session.ts +350 -0
- package/src/sandbox/actor.test.ts +36 -0
- package/src/sandbox/client.test.ts +484 -0
- package/src/sandbox/client.ts +707 -0
- package/src/sandbox/config.ts +151 -0
- package/src/sandbox/index.ts +41 -0
- package/src/sandbox/providers/computesdk.ts +1 -0
- package/src/sandbox/providers/daytona.ts +1 -0
- package/src/sandbox/providers/docker.ts +1 -0
- package/src/sandbox/providers/e2b.ts +1 -0
- package/src/sandbox/providers/local.ts +1 -0
- package/src/sandbox/providers/modal.ts +1 -0
- package/src/sandbox/providers/vercel.ts +1 -0
- package/src/sandbox/session-persist-driver.ts +180 -0
- package/src/sandbox/types.ts +138 -0
- package/src/serverless/configure.ts +5 -3
- package/src/serverless/router.test.ts +17 -9
- package/src/serverless/router.ts +20 -13
- package/src/test/mod.ts +3 -4
- package/src/utils/endpoint-parser.test.ts +6 -2
- package/src/utils/endpoint-parser.ts +6 -2
- package/src/utils/env-vars.ts +0 -2
- package/src/utils/node.ts +1 -1
- package/src/utils/serve.ts +10 -5
- package/src/utils.ts +6 -1
- package/src/workflow/constants.ts +1 -2
- package/src/workflow/context.ts +42 -9
- package/src/workflow/driver.ts +57 -23
- package/src/workflow/inspector.ts +7 -13
- package/src/workflow/mod.ts +91 -4
- package/dist/tsup/chunk-6LJAZ5R4.cjs +0 -96
- package/dist/tsup/chunk-6LJAZ5R4.cjs.map +0 -1
- package/dist/tsup/chunk-7HTNH26M.js.map +0 -1
- package/dist/tsup/chunk-7WF2QSIC.cjs.map +0 -1
- package/dist/tsup/chunk-D2SPAJVT.cjs +0 -645
- package/dist/tsup/chunk-D2SPAJVT.cjs.map +0 -1
- package/dist/tsup/chunk-EIATSBYZ.js.map +0 -1
- package/dist/tsup/chunk-HYPIHCDT.cjs.map +0 -1
- package/dist/tsup/chunk-IIJNPVPQ.cjs.map +0 -1
- package/dist/tsup/chunk-JPXO2H55.js.map +0 -1
- package/dist/tsup/chunk-KJSYAUOM.js.map +0 -1
- package/dist/tsup/chunk-L47L3ZWJ.cjs.map +0 -1
- package/dist/tsup/chunk-MIX2KB6U.js.map +0 -1
- package/dist/tsup/chunk-N4KRDJ56.js.map +0 -1
- package/dist/tsup/chunk-OAXJWGMU.cjs.map +0 -1
- package/dist/tsup/chunk-PB5AEMKQ.cjs.map +0 -1
- package/dist/tsup/chunk-R5OQUSLN.js +0 -645
- package/dist/tsup/chunk-R5OQUSLN.js.map +0 -1
- package/dist/tsup/chunk-SR3KQE7Q.cjs.map +0 -1
- package/dist/tsup/chunk-SRIM3GHD.js.map +0 -1
- package/dist/tsup/chunk-TADUYCHF.js.map +0 -1
- package/dist/tsup/chunk-TI5PXQGG.cjs.map +0 -1
- package/dist/tsup/chunk-U5SMSA27.cjs.map +0 -1
- package/dist/tsup/chunk-VKVNIQRQ.js.map +0 -1
- package/dist/tsup/chunk-WY2SHWXQ.js.map +0 -1
- package/dist/tsup/chunk-ZFY5J2EP.cjs.map +0 -1
- package/dist/tsup/chunk-ZPWOYQHN.js.map +0 -1
- package/src/db/sqlite-vfs.ts +0 -12
- /package/dist/tsup/{chunk-S662Y6ZU.js.map → chunk-EONWXYMN.js.map} +0 -0
- /package/dist/tsup/{chunk-2OK7S6QF.js.map → chunk-I5I6OALK.js.map} +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import type { DriverTestConfig } from "../mod";
|
|
3
|
+
import { setupDriverTest, waitFor } from "../utils";
|
|
4
|
+
|
|
5
|
+
export function runActorDbKvStatsTests(driverTestConfig: DriverTestConfig) {
|
|
6
|
+
describe("Actor Database KV Stats Tests", () => {
|
|
7
|
+
// -- Warm path tests --
|
|
8
|
+
// These call warmUp first to prime the pager cache and reset
|
|
9
|
+
// stats, then measure the exact KV behavior of subsequent ops.
|
|
10
|
+
// This is the steady-state path for a live actor.
|
|
11
|
+
|
|
12
|
+
test(
|
|
13
|
+
"warm UPDATE uses BATCH_ATOMIC: exactly 1 putBatch, 0 reads, no journal",
|
|
14
|
+
async (c) => {
|
|
15
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
16
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
17
|
+
`kv-stats-ba-${crypto.randomUUID()}`,
|
|
18
|
+
]);
|
|
19
|
+
|
|
20
|
+
await actor.warmUp();
|
|
21
|
+
|
|
22
|
+
await actor.increment();
|
|
23
|
+
const stats = await actor.getStats();
|
|
24
|
+
const log = await actor.getLog();
|
|
25
|
+
|
|
26
|
+
expect(stats.putBatchCalls).toBe(1);
|
|
27
|
+
expect(stats.getBatchCalls).toBe(0);
|
|
28
|
+
|
|
29
|
+
const allKeys = log.flatMap((e: { keys: string[] }) => e.keys);
|
|
30
|
+
const journalKeys = allKeys.filter((k: string) => k.includes("journal"));
|
|
31
|
+
expect(journalKeys.length).toBe(0);
|
|
32
|
+
},
|
|
33
|
+
30_000,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
test(
|
|
37
|
+
"warm SELECT uses 0 KV round trips",
|
|
38
|
+
async (c) => {
|
|
39
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
40
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
41
|
+
`kv-stats-2-${crypto.randomUUID()}`,
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
await actor.warmUp();
|
|
45
|
+
|
|
46
|
+
await actor.getCount();
|
|
47
|
+
const stats = await actor.getStats();
|
|
48
|
+
|
|
49
|
+
expect(stats.getBatchCalls).toBe(0);
|
|
50
|
+
expect(stats.putBatchCalls).toBe(0);
|
|
51
|
+
},
|
|
52
|
+
30_000,
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
test(
|
|
56
|
+
"warm SELECT after UPDATE adds no KV round trips",
|
|
57
|
+
async (c) => {
|
|
58
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
59
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
60
|
+
`kv-stats-3-${crypto.randomUUID()}`,
|
|
61
|
+
]);
|
|
62
|
+
|
|
63
|
+
await actor.warmUp();
|
|
64
|
+
|
|
65
|
+
await actor.increment();
|
|
66
|
+
const updateStats = await actor.getStats();
|
|
67
|
+
|
|
68
|
+
await actor.resetStats();
|
|
69
|
+
await actor.incrementAndRead();
|
|
70
|
+
const combinedStats = await actor.getStats();
|
|
71
|
+
|
|
72
|
+
expect(combinedStats.putBatchCalls).toBe(updateStats.putBatchCalls);
|
|
73
|
+
expect(combinedStats.getBatchCalls).toBe(updateStats.getBatchCalls);
|
|
74
|
+
},
|
|
75
|
+
30_000,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
test(
|
|
79
|
+
"warm multi-page INSERT writes multiple chunk keys",
|
|
80
|
+
async (c) => {
|
|
81
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
82
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
83
|
+
`kv-stats-4-${crypto.randomUUID()}`,
|
|
84
|
+
]);
|
|
85
|
+
|
|
86
|
+
// First call creates table/index and primes cache
|
|
87
|
+
await actor.insertWithIndex();
|
|
88
|
+
await actor.resetStats();
|
|
89
|
+
|
|
90
|
+
await actor.insertWithIndex();
|
|
91
|
+
const stats = await actor.getStats();
|
|
92
|
+
const log = await actor.getLog();
|
|
93
|
+
|
|
94
|
+
expect(stats.putBatchCalls).toBeGreaterThanOrEqual(1);
|
|
95
|
+
expect(stats.putBatchEntries).toBeGreaterThan(1);
|
|
96
|
+
|
|
97
|
+
const putOps = log.filter(
|
|
98
|
+
(e: { op: string }) => e.op === "putBatch" || e.op === "put",
|
|
99
|
+
);
|
|
100
|
+
const allKeys = putOps.flatMap((e: { keys: string[] }) => e.keys);
|
|
101
|
+
const mainChunkKeys = allKeys.filter((k: string) =>
|
|
102
|
+
k.startsWith("chunk:main["),
|
|
103
|
+
);
|
|
104
|
+
expect(mainChunkKeys.length).toBeGreaterThanOrEqual(1);
|
|
105
|
+
},
|
|
106
|
+
30_000,
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
test(
|
|
110
|
+
"warm ROLLBACK produces no data page writes",
|
|
111
|
+
async (c) => {
|
|
112
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
113
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
114
|
+
`kv-stats-5-${crypto.randomUUID()}`,
|
|
115
|
+
]);
|
|
116
|
+
|
|
117
|
+
await actor.rollbackTest();
|
|
118
|
+
await actor.resetStats();
|
|
119
|
+
|
|
120
|
+
await actor.rollbackTest();
|
|
121
|
+
const log = await actor.getLog();
|
|
122
|
+
|
|
123
|
+
const putOps = log.filter(
|
|
124
|
+
(e: { op: string }) => e.op === "putBatch" || e.op === "put",
|
|
125
|
+
);
|
|
126
|
+
const mainChunkKeys = putOps
|
|
127
|
+
.flatMap((e: { keys: string[] }) => e.keys)
|
|
128
|
+
.filter((k: string) => k.startsWith("chunk:main["));
|
|
129
|
+
expect(mainChunkKeys.length).toBe(0);
|
|
130
|
+
},
|
|
131
|
+
30_000,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
test(
|
|
135
|
+
"warm multi-statement transaction produces writes",
|
|
136
|
+
async (c) => {
|
|
137
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
138
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
139
|
+
`kv-stats-6-${crypto.randomUUID()}`,
|
|
140
|
+
]);
|
|
141
|
+
|
|
142
|
+
await actor.multiStmtTx();
|
|
143
|
+
await actor.resetStats();
|
|
144
|
+
|
|
145
|
+
await actor.multiStmtTx();
|
|
146
|
+
const stats = await actor.getStats();
|
|
147
|
+
|
|
148
|
+
expect(stats.putBatchCalls).toBeGreaterThanOrEqual(1);
|
|
149
|
+
},
|
|
150
|
+
30_000,
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
// -- Structural property tests --
|
|
154
|
+
// These assert invariants that hold regardless of cache state.
|
|
155
|
+
|
|
156
|
+
test(
|
|
157
|
+
"no WAL or SHM operations occur",
|
|
158
|
+
async (c) => {
|
|
159
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
160
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
161
|
+
`kv-stats-7-${crypto.randomUUID()}`,
|
|
162
|
+
]);
|
|
163
|
+
|
|
164
|
+
await actor.warmUp();
|
|
165
|
+
|
|
166
|
+
await actor.increment();
|
|
167
|
+
const log = await actor.getLog();
|
|
168
|
+
|
|
169
|
+
const allKeys = log.flatMap((e: { keys: string[] }) => e.keys);
|
|
170
|
+
const walOrShmKeys = allKeys.filter(
|
|
171
|
+
(k: string) => k.includes("wal") || k.includes("shm"),
|
|
172
|
+
);
|
|
173
|
+
expect(walOrShmKeys.length).toBe(0);
|
|
174
|
+
},
|
|
175
|
+
30_000,
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
test(
|
|
179
|
+
"every putBatch has at most 128 keys",
|
|
180
|
+
async (c) => {
|
|
181
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
182
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
183
|
+
`kv-stats-8-${crypto.randomUUID()}`,
|
|
184
|
+
]);
|
|
185
|
+
|
|
186
|
+
await actor.warmUp();
|
|
187
|
+
|
|
188
|
+
await actor.increment();
|
|
189
|
+
const log = await actor.getLog();
|
|
190
|
+
|
|
191
|
+
const putBatchOps = log.filter(
|
|
192
|
+
(e: { op: string }) => e.op === "putBatch",
|
|
193
|
+
);
|
|
194
|
+
for (const entry of putBatchOps) {
|
|
195
|
+
expect(
|
|
196
|
+
(entry as { keys: string[] }).keys.length,
|
|
197
|
+
).toBeLessThanOrEqual(128);
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
30_000,
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
// -- Large transaction tests --
|
|
204
|
+
|
|
205
|
+
test(
|
|
206
|
+
"large transaction falls back to journal when exceeding 127 dirty pages",
|
|
207
|
+
async (c) => {
|
|
208
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
209
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
210
|
+
`kv-stats-9-${crypto.randomUUID()}`,
|
|
211
|
+
]);
|
|
212
|
+
|
|
213
|
+
await actor.warmUp();
|
|
214
|
+
|
|
215
|
+
await actor.bulkInsertLarge();
|
|
216
|
+
const stats = await actor.getStats();
|
|
217
|
+
const log = await actor.getLog();
|
|
218
|
+
|
|
219
|
+
expect(stats.putBatchCalls).toBeGreaterThan(1);
|
|
220
|
+
|
|
221
|
+
const allKeys = log.flatMap((e: { keys: string[] }) => e.keys);
|
|
222
|
+
const journalKeys = allKeys.filter((k: string) =>
|
|
223
|
+
k.includes("journal"),
|
|
224
|
+
);
|
|
225
|
+
expect(journalKeys.length).toBeGreaterThan(0);
|
|
226
|
+
|
|
227
|
+
const putBatchOps = log.filter(
|
|
228
|
+
(e: { op: string }) => e.op === "putBatch",
|
|
229
|
+
);
|
|
230
|
+
for (const entry of putBatchOps) {
|
|
231
|
+
expect(
|
|
232
|
+
(entry as { keys: string[] }).keys.length,
|
|
233
|
+
).toBeLessThanOrEqual(128);
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
60_000,
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
test(
|
|
240
|
+
"large transaction data integrity: 200 rows and integrity check pass",
|
|
241
|
+
async (c) => {
|
|
242
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
243
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
244
|
+
`kv-stats-10-${crypto.randomUUID()}`,
|
|
245
|
+
]);
|
|
246
|
+
|
|
247
|
+
await actor.bulkInsertLarge();
|
|
248
|
+
|
|
249
|
+
const count = await actor.getRowCount();
|
|
250
|
+
expect(count).toBe(200);
|
|
251
|
+
|
|
252
|
+
const integrity = await actor.runIntegrityCheck();
|
|
253
|
+
expect(integrity).toBe("ok");
|
|
254
|
+
},
|
|
255
|
+
60_000,
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
test(
|
|
259
|
+
"large transaction survives actor sleep and wake",
|
|
260
|
+
async (c) => {
|
|
261
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
262
|
+
const actor = client.dbKvStatsActor.getOrCreate([
|
|
263
|
+
`kv-stats-11-${crypto.randomUUID()}`,
|
|
264
|
+
]);
|
|
265
|
+
|
|
266
|
+
await actor.bulkInsertLarge();
|
|
267
|
+
const countBefore = await actor.getRowCount();
|
|
268
|
+
expect(countBefore).toBe(200);
|
|
269
|
+
|
|
270
|
+
await actor.triggerSleep();
|
|
271
|
+
await waitFor(driverTestConfig, 250);
|
|
272
|
+
|
|
273
|
+
const countAfter = await actor.getRowCount();
|
|
274
|
+
expect(countAfter).toBe(200);
|
|
275
|
+
|
|
276
|
+
const integrity = await actor.runIntegrityCheck();
|
|
277
|
+
expect(integrity).toBe("ok");
|
|
278
|
+
},
|
|
279
|
+
60_000,
|
|
280
|
+
);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
@@ -25,12 +25,16 @@ export function runActorDbRawTests(driverTestConfig: DriverTestConfig) {
|
|
|
25
25
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
26
26
|
|
|
27
27
|
// First instance adds items
|
|
28
|
-
const instance1 = client.dbActorRaw.getOrCreate([
|
|
28
|
+
const instance1 = client.dbActorRaw.getOrCreate([
|
|
29
|
+
"test-persistence",
|
|
30
|
+
]);
|
|
29
31
|
await instance1.insertValue("Item 1");
|
|
30
32
|
await instance1.insertValue("Item 2");
|
|
31
33
|
|
|
32
34
|
// Second instance (same actor) should see persisted data
|
|
33
|
-
const instance2 = client.dbActorRaw.getOrCreate([
|
|
35
|
+
const instance2 = client.dbActorRaw.getOrCreate([
|
|
36
|
+
"test-persistence",
|
|
37
|
+
]);
|
|
34
38
|
const count = await instance2.getCount();
|
|
35
39
|
expect(count).toBe(2);
|
|
36
40
|
});
|
|
@@ -52,7 +52,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
52
52
|
test(
|
|
53
53
|
"bootstraps schema on startup",
|
|
54
54
|
async (c) => {
|
|
55
|
-
const { client } = await setupDriverTest(
|
|
55
|
+
const { client } = await setupDriverTest(
|
|
56
|
+
c,
|
|
57
|
+
driverTestConfig,
|
|
58
|
+
);
|
|
56
59
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
57
60
|
`db-${variant}-bootstrap-${crypto.randomUUID()}`,
|
|
58
61
|
]);
|
|
@@ -66,7 +69,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
66
69
|
test(
|
|
67
70
|
"supports CRUD, raw SQL, and multi-statement exec",
|
|
68
71
|
async (c) => {
|
|
69
|
-
const { client } = await setupDriverTest(
|
|
72
|
+
const { client } = await setupDriverTest(
|
|
73
|
+
c,
|
|
74
|
+
driverTestConfig,
|
|
75
|
+
);
|
|
70
76
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
71
77
|
`db-${variant}-crud-${crypto.randomUUID()}`,
|
|
72
78
|
]);
|
|
@@ -78,8 +84,12 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
78
84
|
|
|
79
85
|
const values = await actor.getValues();
|
|
80
86
|
expect(values.length).toBeGreaterThanOrEqual(2);
|
|
81
|
-
expect(
|
|
82
|
-
|
|
87
|
+
expect(
|
|
88
|
+
values.some((row) => row.value === "alpha"),
|
|
89
|
+
).toBeTruthy();
|
|
90
|
+
expect(
|
|
91
|
+
values.some((row) => row.value === "beta"),
|
|
92
|
+
).toBeTruthy();
|
|
83
93
|
|
|
84
94
|
await actor.updateValue(first.id, "alpha-updated");
|
|
85
95
|
const updated = await actor.getValue(first.id);
|
|
@@ -100,7 +110,8 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
100
110
|
expect(rawCount).toBe(1);
|
|
101
111
|
}
|
|
102
112
|
|
|
103
|
-
const multiValue =
|
|
113
|
+
const multiValue =
|
|
114
|
+
await actor.multiStatementInsert("gamma");
|
|
104
115
|
expect(multiValue).toBe("gamma-updated");
|
|
105
116
|
},
|
|
106
117
|
dbTestTimeout,
|
|
@@ -109,7 +120,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
109
120
|
test(
|
|
110
121
|
"handles transactions",
|
|
111
122
|
async (c) => {
|
|
112
|
-
const { client } = await setupDriverTest(
|
|
123
|
+
const { client } = await setupDriverTest(
|
|
124
|
+
c,
|
|
125
|
+
driverTestConfig,
|
|
126
|
+
);
|
|
113
127
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
114
128
|
`db-${variant}-tx-${crypto.randomUUID()}`,
|
|
115
129
|
]);
|
|
@@ -127,7 +141,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
127
141
|
test(
|
|
128
142
|
"persists across sleep and wake cycles",
|
|
129
143
|
async (c) => {
|
|
130
|
-
const { client } = await setupDriverTest(
|
|
144
|
+
const { client } = await setupDriverTest(
|
|
145
|
+
c,
|
|
146
|
+
driverTestConfig,
|
|
147
|
+
);
|
|
131
148
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
132
149
|
`db-${variant}-sleep-${crypto.randomUUID()}`,
|
|
133
150
|
]);
|
|
@@ -149,10 +166,15 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
149
166
|
test(
|
|
150
167
|
"completes onDisconnect DB writes before sleeping",
|
|
151
168
|
async (c) => {
|
|
152
|
-
const { client } = await setupDriverTest(
|
|
169
|
+
const { client } = await setupDriverTest(
|
|
170
|
+
c,
|
|
171
|
+
driverTestConfig,
|
|
172
|
+
);
|
|
153
173
|
const key = `db-${variant}-disconnect-${crypto.randomUUID()}`;
|
|
154
174
|
|
|
155
|
-
const actor = getDbActor(client, variant).getOrCreate([
|
|
175
|
+
const actor = getDbActor(client, variant).getOrCreate([
|
|
176
|
+
key,
|
|
177
|
+
]);
|
|
156
178
|
await actor.reset();
|
|
157
179
|
await actor.configureDisconnectInsert(true, 250);
|
|
158
180
|
|
|
@@ -167,7 +189,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
167
189
|
test(
|
|
168
190
|
"handles high-volume inserts",
|
|
169
191
|
async (c) => {
|
|
170
|
-
const { client } = await setupDriverTest(
|
|
192
|
+
const { client } = await setupDriverTest(
|
|
193
|
+
c,
|
|
194
|
+
driverTestConfig,
|
|
195
|
+
);
|
|
171
196
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
172
197
|
`db-${variant}-high-volume-${crypto.randomUUID()}`,
|
|
173
198
|
]);
|
|
@@ -187,7 +212,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
187
212
|
test(
|
|
188
213
|
"handles payloads across chunk boundaries",
|
|
189
214
|
async (c) => {
|
|
190
|
-
const { client } = await setupDriverTest(
|
|
215
|
+
const { client } = await setupDriverTest(
|
|
216
|
+
c,
|
|
217
|
+
driverTestConfig,
|
|
218
|
+
);
|
|
191
219
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
192
220
|
`db-${variant}-chunk-${crypto.randomUUID()}`,
|
|
193
221
|
]);
|
|
@@ -205,13 +233,17 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
205
233
|
test(
|
|
206
234
|
"handles large payloads",
|
|
207
235
|
async (c) => {
|
|
208
|
-
const { client } = await setupDriverTest(
|
|
236
|
+
const { client } = await setupDriverTest(
|
|
237
|
+
c,
|
|
238
|
+
driverTestConfig,
|
|
239
|
+
);
|
|
209
240
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
210
241
|
`db-${variant}-large-${crypto.randomUUID()}`,
|
|
211
242
|
]);
|
|
212
243
|
|
|
213
244
|
await actor.reset();
|
|
214
|
-
const { id } =
|
|
245
|
+
const { id } =
|
|
246
|
+
await actor.insertPayloadOfSize(LARGE_PAYLOAD_SIZE);
|
|
215
247
|
const storedSize = await actor.getPayloadSize(id);
|
|
216
248
|
expect(storedSize).toBe(LARGE_PAYLOAD_SIZE);
|
|
217
249
|
},
|
|
@@ -221,7 +253,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
221
253
|
test(
|
|
222
254
|
"supports shrink and regrow workloads with vacuum",
|
|
223
255
|
async (c) => {
|
|
224
|
-
const { client } = await setupDriverTest(
|
|
256
|
+
const { client } = await setupDriverTest(
|
|
257
|
+
c,
|
|
258
|
+
driverTestConfig,
|
|
259
|
+
);
|
|
225
260
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
226
261
|
`db-${variant}-shrink-regrow-${crypto.randomUUID()}`,
|
|
227
262
|
]);
|
|
@@ -256,7 +291,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
256
291
|
test(
|
|
257
292
|
"handles repeated updates to the same row",
|
|
258
293
|
async (c) => {
|
|
259
|
-
const { client } = await setupDriverTest(
|
|
294
|
+
const { client } = await setupDriverTest(
|
|
295
|
+
c,
|
|
296
|
+
driverTestConfig,
|
|
297
|
+
);
|
|
260
298
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
261
299
|
`db-${variant}-updates-${crypto.randomUUID()}`,
|
|
262
300
|
]);
|
|
@@ -289,7 +327,10 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
289
327
|
test(
|
|
290
328
|
"passes integrity checks after mixed workload and sleep",
|
|
291
329
|
async (c) => {
|
|
292
|
-
const { client } = await setupDriverTest(
|
|
330
|
+
const { client } = await setupDriverTest(
|
|
331
|
+
c,
|
|
332
|
+
driverTestConfig,
|
|
333
|
+
);
|
|
293
334
|
const actor = getDbActor(client, variant).getOrCreate([
|
|
294
335
|
`db-${variant}-integrity-${crypto.randomUUID()}`,
|
|
295
336
|
]);
|
|
@@ -299,11 +340,15 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
299
340
|
INTEGRITY_SEED_COUNT,
|
|
300
341
|
INTEGRITY_CHURN_COUNT,
|
|
301
342
|
);
|
|
302
|
-
expect((await actor.integrityCheck()).toLowerCase()).toBe(
|
|
343
|
+
expect((await actor.integrityCheck()).toLowerCase()).toBe(
|
|
344
|
+
"ok",
|
|
345
|
+
);
|
|
303
346
|
|
|
304
347
|
await actor.triggerSleep();
|
|
305
348
|
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
306
|
-
expect((await actor.integrityCheck()).toLowerCase()).toBe(
|
|
349
|
+
expect((await actor.integrityCheck()).toLowerCase()).toBe(
|
|
350
|
+
"ok",
|
|
351
|
+
);
|
|
307
352
|
},
|
|
308
353
|
dbTestTimeout,
|
|
309
354
|
);
|
|
@@ -315,7 +360,9 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
315
360
|
"runs db provider cleanup on sleep",
|
|
316
361
|
async (c) => {
|
|
317
362
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
318
|
-
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
363
|
+
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
364
|
+
"observer",
|
|
365
|
+
]);
|
|
319
366
|
|
|
320
367
|
const lifecycle = client.dbLifecycle.getOrCreate([
|
|
321
368
|
`db-lifecycle-sleep-${crypto.randomUUID()}`,
|
|
@@ -340,7 +387,9 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
340
387
|
|
|
341
388
|
expect(after.create).toBeGreaterThanOrEqual(before.create);
|
|
342
389
|
expect(after.migrate).toBeGreaterThanOrEqual(before.migrate);
|
|
343
|
-
expect(after.cleanup).toBeGreaterThanOrEqual(
|
|
390
|
+
expect(after.cleanup).toBeGreaterThanOrEqual(
|
|
391
|
+
before.cleanup + 1,
|
|
392
|
+
);
|
|
344
393
|
},
|
|
345
394
|
lifecycleTestTimeout,
|
|
346
395
|
);
|
|
@@ -349,7 +398,9 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
349
398
|
"runs db provider cleanup on destroy",
|
|
350
399
|
async (c) => {
|
|
351
400
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
352
|
-
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
401
|
+
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
402
|
+
"observer",
|
|
403
|
+
]);
|
|
353
404
|
|
|
354
405
|
const lifecycle = client.dbLifecycle.getOrCreate([
|
|
355
406
|
`db-lifecycle-destroy-${crypto.randomUUID()}`,
|
|
@@ -380,8 +431,11 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
380
431
|
"runs db provider cleanup when migration fails",
|
|
381
432
|
async (c) => {
|
|
382
433
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
383
|
-
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
384
|
-
|
|
434
|
+
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
435
|
+
"observer",
|
|
436
|
+
]);
|
|
437
|
+
const beforeTotalCleanup =
|
|
438
|
+
await observer.getTotalCleanupCount();
|
|
385
439
|
const key = `db-lifecycle-migrate-failure-${crypto.randomUUID()}`;
|
|
386
440
|
const lifecycle = client.dbLifecycleFailing.getOrCreate([key]);
|
|
387
441
|
|
|
@@ -402,7 +456,9 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
402
456
|
await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
|
|
403
457
|
}
|
|
404
458
|
|
|
405
|
-
expect(cleanupCount).toBeGreaterThanOrEqual(
|
|
459
|
+
expect(cleanupCount).toBeGreaterThanOrEqual(
|
|
460
|
+
beforeTotalCleanup + 1,
|
|
461
|
+
);
|
|
406
462
|
},
|
|
407
463
|
lifecycleTestTimeout,
|
|
408
464
|
);
|
|
@@ -411,7 +467,9 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
411
467
|
"handles parallel actor lifecycle churn",
|
|
412
468
|
async (c) => {
|
|
413
469
|
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
414
|
-
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
470
|
+
const observer = client.dbLifecycleObserver.getOrCreate([
|
|
471
|
+
"observer",
|
|
472
|
+
]);
|
|
415
473
|
|
|
416
474
|
const actorHandles = Array.from({ length: 12 }, (_, i) =>
|
|
417
475
|
client.dbLifecycle.getOrCreate([
|
|
@@ -423,19 +481,29 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
423
481
|
);
|
|
424
482
|
|
|
425
483
|
await Promise.all(
|
|
426
|
-
actorHandles.map((handle, i) =>
|
|
484
|
+
actorHandles.map((handle, i) =>
|
|
485
|
+
handle.insertValue(`phase-1-${i}`),
|
|
486
|
+
),
|
|
487
|
+
);
|
|
488
|
+
await Promise.all(
|
|
489
|
+
actorHandles.map((handle) => handle.triggerSleep()),
|
|
427
490
|
);
|
|
428
|
-
await Promise.all(actorHandles.map((handle) => handle.triggerSleep()));
|
|
429
491
|
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
430
492
|
await Promise.all(
|
|
431
|
-
actorHandles.map((handle, i) =>
|
|
493
|
+
actorHandles.map((handle, i) =>
|
|
494
|
+
handle.insertValue(`phase-2-${i}`),
|
|
495
|
+
),
|
|
432
496
|
);
|
|
433
497
|
|
|
434
498
|
const survivors = actorHandles.slice(0, 6);
|
|
435
499
|
const destroyed = actorHandles.slice(6);
|
|
436
500
|
|
|
437
|
-
await Promise.all(
|
|
438
|
-
|
|
501
|
+
await Promise.all(
|
|
502
|
+
destroyed.map((handle) => handle.triggerDestroy()),
|
|
503
|
+
);
|
|
504
|
+
await Promise.all(
|
|
505
|
+
survivors.map((handle) => handle.triggerSleep()),
|
|
506
|
+
);
|
|
439
507
|
await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
|
|
440
508
|
await Promise.all(survivors.map((handle) => handle.ping()));
|
|
441
509
|
|
|
@@ -468,7 +536,9 @@ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
|
|
|
468
536
|
}
|
|
469
537
|
|
|
470
538
|
for (const actorId of actorIds) {
|
|
471
|
-
expect(
|
|
539
|
+
expect(
|
|
540
|
+
lifecycleCleanup.get(actorId) ?? 0,
|
|
541
|
+
).toBeGreaterThanOrEqual(1);
|
|
472
542
|
}
|
|
473
543
|
},
|
|
474
544
|
lifecycleTestTimeout,
|