这个项目能做什么

ChaosSQL 是一款旨在发现数据库并发缺陷的测试工具。根据其 README,它为 PostgreSQL、MySQL 和 SQLite 提供确定性并发和不变性测试,旨在 CI/CD 阶段(在进入生产环境之前)揭示静默数据损坏、写倾斜(write skew)和丢失更新(lost updates)。 工作原理 该项目针对模式(schema)和种子数据集调度并发的工作事务,在执行后检查用户定义的不变性。当出现违规时,它会生成一个最小复现。它会报告一个确定性的种子和一个合成的 Go 复现测试文件(repro_test.go),该文件可添加到测试套件中。README 指出,输出结果包含异常分类,例如丢失更新 (P4) 和写倾斜 (A5B)。 接口 CLI:独立二进制文件通过 go install github.com/bregaldahq/chaossql/cmd/chaossql 安装,且零 CGO 依赖。文档记录的子命令包括 run, demo, ui, diff, mutate, swarm 和 proxy。 演示(Demos):十个打包场景涵盖了银行丢失更新、库存超卖、医院写倾斜、读倾斜、脏写、循环信息流、脏读、反依赖、死锁循环和外键级联死锁。 UI:一个本地追踪可视化工具,包含工作线程泳道时间线、交互式 Adya 依赖图、完整追踪与缩减后最小复现的对比,以及显示 SQL、参数和延迟的语句检查器。 SDKs:Go 包 (pkg/chaostest) 可与 go test 集成;Python 包可通过 pip 安装,支持 pytest 和 unittest 并提供 pytest fixture;TypeScript 包 (npm 上的 at-chaossql-test) 针对 Vitest, Jest 和 Node.js 测试运行器。 报告:支持导出 SARIF 2.1.0 格式以用于 GitHub Code Scanning,规则映射至 CWE-362。 CI:GitHub Action (bregaldahq/chaossql,README 中引用版本为 v1.5.0) 可以在不变性失败时拦截拉取请求(PR),发布 PR 评论并发布包含最小执行追踪的步骤摘要。 多引擎与变异功能 mutate 通过扰动延迟、注入嵌套保存点、打乱因果有效的事务步骤以及反转锁获取顺序来生成场景变体;它提供了 variants, output directory, seed 和 JSON 标志。 swarm 在多个驱动程序(sqlite, mock, postgres, mysql)上运行场景套件,支持有界并发、可选的 Markdown 摘要和 JSON 输出。驱动程序的 DSN 从 POSTGRES_DSN 和 MYSQL_DSN 环境变量中解析。 通过 make 目标描述了一个无头 WebAssembly 和 Web Worker 压力测试框架,其目标是在长时间压力运行期间实现有界线性内存和非阻塞图布局。 第 7 层代理 chaossql proxy 位于应用程序和数据库之间,支持 PostgreSQL 3.0 或 MySQL 线缆协议,注入微抖动(micro-jitter)和预提交屏障,同时构建实时影子依赖序列化图以实时分类异常。它可以导出 SARIF 并在可配置端口上提供带有 JSON 遥测数据的 Web UI。README 指出,使用该代理无需修改应用程序代码。 项目详情 使用 Go 编写(根据徽章显示为 1.22 或更高版本),采用 MIT 许可证,拥有文档门户、基于浏览器的 WebAssembly 演练场以及命令中引用的示例目录。README 还提到了一项提供基线跟踪和 PR 评论的托管云服务(早期访问),以及供应商提供的商业并发审计;这些是供应商服务,而非开源仓库的组件。