Sobre o projeto
ChaosSQL é uma ferramenta de teste voltada para defeitos de concorrência em bancos de dados. De acordo com seu README, ele realiza testes determinísticos de concorrência e invariantes para PostgreSQL, MySQL e SQLite, com o objetivo de expor corrupção silenciosa de dados, write skew e lost updates em CI/CD antes que cheguem à produção.
Como funciona
O projeto agenda transações de workers concorrentes contra um esquema e conjunto de dados iniciais, verifica invariantes definidos pelo usuário após a execução e, quando surge uma violação, produz uma reprodução mínima. Ele relata um seed determinístico e um arquivo de teste de reprodução em Go sintetizado (repro_test.go) que pode ser adicionado a uma suíte de testes. O README afirma que as saídas incluem a classificação de anomalias, como lost update (P4) e write skew (A5B).
Interfaces
CLI: o binário independente é instalado com go install github.com/bregaldahq/chaossql/cmd/chaossql e não possui dependências CGO. Os subcomandos documentados incluem run, demo, ui, diff, mutate, swarm e proxy.
Demos: dez cenários empacotados cobrem lost updates bancários, oversell de inventário, write skew hospitalar, read skew, dirty write, fluxo de informação circular, dirty read, anti-dependência, ciclos de deadlock e deadlocks de cascata de chave estrangeira.
UI: um visualizador de trace local com uma linha do tempo de swimlane de worker, um grafo de dependência Adya interativo, uma comparação entre o trace completo e uma reprodução mínima reduzida, e um inspetor de instruções que mostra SQL, parâmetros e latências.
SDKs: um pacote Go (pkg/chaostest) integra-se ao go test; um pacote Python instalado via pip funciona com pytest e unittest e oferece uma fixture do pytest; um pacote TypeScript (at-chaossql-test no npm) visa Vitest, Jest e o executor de testes do Node.js.
Relatórios: exportação SARIF 2.1.0 para GitHub Code Scanning, com regras mapeadas para CWE-362.
CI: uma GitHub Action (bregaldahq/chaossql, referenciada como v1.5.0 no README) pode bloquear pull requests em caso de falha de invariante, postar comentários no PR e publicar um resumo da etapa contendo o trace de execução mínimo.
Recursos de multi-engine e mutação
O comando mutate gera variantes de um cenário perturbando atrasos, injetando savepoints aninhados, embaralhando etapas de transação causalmente válidas e invertendo a ordem de aquisição de locks; ele expõe flags de variantes, diretório de saída, seed e JSON.
O comando swarm executa suítes de cenários em vários drivers (sqlite, mock, postgres, mysql) com concorrência limitada, resumos opcionais em Markdown e saída JSON. Os DSNs dos drivers são resolvidos a partir das variáveis de ambiente POSTGRES_DSN e MYSQL_DSN.
Um harness de estresse WebAssembly e Web Worker headless é descrito através de um alvo make, com objetivos declarados em torno de memória linear limitada e layout de grafo não bloqueante durante execuções longas de estresse.
Proxy de Camada 7
O chaossql proxy situa-se entre uma aplicação e um banco de dados, falando o protocolo de rede PostgreSQL 3.0 ou MySQL, e injeta micro-jitter e barreiras de pré-commit enquanto constrói um grafo de serialização de dependência shadow ao vivo que classifica anomalias em tempo real. Ele pode exportar SARIF e servir uma UI web com telemetria JSON em uma porta configurável. O README afirma que o código da aplicação não precisa ser modificado para utilizá-lo.
Detalhes do projeto
Escrito em Go (1.22 ou mais recente, de acordo com os badges), licenciado sob MIT, com um portal de documentação, um playground WebAssembly baseado em navegador e um diretório de exemplos referenciado em todos os comandos. O README também menciona um serviço de nuvem hospedado com rastreamento de baseline e comentários em pull requests como acesso antecipado, além de auditorias de concorrência comerciais oferecidas pelo fornecedor; estes são serviços do fornecedor e não componentes do repositório aberto.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.