Scripts de Teste
O projeto inclui vários scripts de teste para ajudar no desenvolvimento e testes:
Note
Auxiliares legados no raiz do repositório pnpm para depuração de atrasos, testes de matriz SMTP e verificações de porta cron foram removidos. Use a interface do aplicativo (Configurações → Monitoramento de Backup), APIs HTTP autenticadas e curl contra o serviço cron conforme documentado abaixo.
Gerar Dados de Teste
pnpm generate-test-data --servers=N
Este script gera dados de backup de teste para múltiplos servidores e backups.
O parâmetro --servers=N é obrigatório e especifica o número de servidores a gerar (1-30).
Use a opção --upload para enviar os dados gerados para /api/upload
pnpm generate-test-data --servers=N --upload
pnpm generate-test-data --servers=N --upload --api-key=YOUR_UPLOAD_KEY
--api-key é obrigatório quando Configurações → Chaves de API está configurado para exigir chaves. O script tenta novamente uma vez em HTTP 429 para que uma execução grande de --upload permaneça dentro dos limites de taxa padrão.
Exemplos:
# Generate data for 5 servers
pnpm generate-test-data --servers=5
# Generate data for 1 server with upload mode
pnpm generate-test-data --upload --servers=1
# Generate data for all 30 servers
pnpm generate-test-data --servers=30
O script atribui versões do Duplicati por servidor (a mesma string de relatório é escrita para cada backup desse servidor):
- 70–80% atual: usa a versão estável em cache mais recente de
configurations.duplicati_versionsquando disponível, caso contrário um fallback fixo (2.1.0.5_stable). - Restante mais antigo: uma versão estável estritamente anterior para que o badge do painel se compare como desatualizado (amarelo).
- O modo Direct-DB limpa
configurationsprimeiro, depois restaura ou semeia o cache de versão para que a comparação atual/desatualizado funcione imediatamente. - Contagens pequenas nem sempre conseguem chegar a 70–80%:
--servers=1é 100% atual;--servers=2ou3mantém pelo menos um servidor mais antigo;--servers=6é 5 atual (83%).--servers=12(usado porpnpm take-screenshots) é 9 atual / 3 mais antigo. - Quando
pnpm take-screenshotsreduz posteriormente o conjunto de dados para três servidores, mantém o servidor atrasado protegido e pelo menos um servidor com versão mais antiga.
Caution
Este script deleta todos os dados anteriores no banco de dados e os substitui por dados de teste. Faça backup do seu banco de dados antes de executar este script.
Verificações de atraso e conectividade cron (desenvolvimento)
Executar uma verificação de backup atrasado
Enquanto o aplicativo está em execução:
- Interface (recomendado): abra Configurações → Monitoramento de Backup e use Testar backups atrasados. Isso executa a mesma lógica que o trabalho agendado via
POST /api/notifications/check-overdueautenticado.
Saúde do serviço Cron
curl http://localhost:8667/health
curl http://localhost:8666/api/cron/health
Simulando uma data ou hora específica
Não há CLI agrupado para injetar um tempo "atual" simulado. Para o algoritmo e ideias de teste manual, consulte o arquivo do repositório dev/OVERDUE_DETECTION_ALGORITHM.md e a implementação em src/lib/overdue-backup-checker.ts.
Validar exportação CSV
pnpm validate-csv-export
Este script valida a funcionalidade de exportação CSV. Ele:
- Testa a geração de exportação CSV
- Verifica o formato e a estrutura dos dados
- Verifica a integridade dos dados nos arquivos exportados
Útil para garantir que as exportações CSV funcionem corretamente antes dos lançamentos.
Bloquear temporariamente o servidor NTFY (para testes)
sudo ./scripts/temporary_ntfy.sh_block.sh
Este script bloqueia temporariamente o acesso de rede de saída para o Servidor NTFY (ntfy.sh) para testar o mecanismo de repetição de notificações. Ele:
- Resolve o Endereço IP do Servidor NTFY
- Adiciona uma regra de iptables para bloquear o tráfego de saída
- Bloqueia por 10 segundos (configurável)
- Remove automaticamente a regra de bloqueio ao sair
- Requer privilégios de root (sudo)
Caution
Este script modifica regras iptables e requer privilégios de root. Use apenas para testar mecanismos de repetição de notificações.
Testes de Migração de Banco de Dados
O projeto inclui scripts para testar migrações de banco de dados de versões antigas para a versão atual. Esses scripts garantem que as migrações de banco de dados funcionem corretamente e preservem a integridade dos dados.
Gerar Dados de Teste de Migração
./scripts/generate-migration-test-data.sh
Este script gera bancos de dados de teste para múltiplas versões históricas da aplicação. Ele:
- Interrompe e remove qualquer contêiner Docker existente
- Para cada versão (v0.4.0, v0.5.0, v0.6.1, 0.7.27, 0.8.21):
- Remove arquivos de banco de dados existentes
- Cria um arquivo de etiqueta de versão
- Inicia um contêiner Docker com a versão específica
- Aguarda o contêiner estar pronto
- Gera dados de teste usando
pnpm generate-test-data - Faz uma captura de tela da interface com os dados de teste
- Interrompe e remove o contêiner
- Descarrega arquivos WAL e salva o esquema do banco de dados
- Copia o arquivo do banco de dados para
scripts/migration_test_data/
Requisitos:
- Docker deve estar instalado e configurado
- Chromium (via Playwright) deve estar instalado
- Acesso root/sudo para operações do Docker
- O volume do Docker
duplistatus_datadeve existir
Saída:
- Arquivos de banco de dados:
scripts/migration_test_data/backups_<VERSION>.db - Arquivos de esquema:
scripts/migration_test_data/backups_<VERSION>.schema - Capturas de tela:
scripts/migration_test_data/duplistatus_test_data_<VERSION>.png
Configuração:
- Número de servidores: Definido via variável
SERVERS(padrão: 3) - Diretório de dados:
/var/lib/docker/volumes/duplistatus_data/_data - Porta: 9666 (porta do contêiner Docker)
Caution
Este script requer Docker e irá parar/remover contêineres existentes. Também requer acesso sudo para operações do Docker e acesso ao sistema de arquivos. Execute pnpm take-screenshots:install primeiro para instalar o navegador Chromium do Playwright se você ainda não o fez.
Important
Este script deveria ser executado apenas uma vez, pois para novas versões o desenvolvedor pode copiar o arquivo de banco de dados e as capturas de tela diretamente para o diretório scripts/migration_test_data/. Durante o desenvolvimento, apenas execute o script ./scripts/test-migrations.sh para testar as migrações.
Testar Migrações de Banco de Dados
./scripts/test-migrations.sh
Este script testa migrações de banco de dados de versões antigas para a versão atual (4.0). Ele:
- Para cada versão (v0.4.0, v0.5.0, v0.6.1, 0.7.27, 0.8.21):
- Cria uma cópia temporária do banco de dados de teste
- Executa o processo de migração usando
test-migration.ts - Valida a estrutura do banco de dados migrado
- Verifica se as tabelas e colunas necessárias estão presentes
- Confirma que a versão do banco de dados é 4.0
- Limpa arquivos temporários
Requisitos:
- Os bancos de dados de teste devem existir em
scripts/migration_test_data/ - Gerados executando
generate-migration-test-data.shprimeiro
Saída:
- Resultados de teste com código de cores (verde para sucesso, vermelho para falha)
- Resumo de versões bem-sucedidas e com falha
- Mensagens de erro detalhadas para migrações com falha
- Código de saída 0 se todos os testes passarem, 1 se algum falhar
O que valida:
- A versão do banco de dados é 4.0 após a migração
- Todas as tabelas obrigatórias existem:
servers,backups,configurations,users,sessions,audit_log,db_version - As colunas obrigatórias existem em cada tabela
- A estrutura do banco de dados está correta
Exemplo de saída:
==========================================
Database Migration Test Suite
==========================================
Testing migrations from old versions to version 4.0
Test data directory: /path/to/migration_test_data
Temporary directory: /path/to/migration_test_data/.tmp
----------------------------------------
Testing version: v0.4.0
----------------------------------------
Copying database file to temporary location...
Running migration test...
✅ Version v0.4.0: Migration test PASSED
==========================================
Test Summary
==========================================
✅ Passed versions (5):
✓ v0.4.0
✓ v0.5.0
✓ v0.6.1
✓ 0.7.27
✓ 0.8.21
All migration tests passed!
Uso:
# Run all migration tests
./scripts/test-migrations.sh
# Check exit code
echo $? # 0 = all passed, 1 = some failed
Note
Este script usa o script de teste de migração TypeScript (test-migration.ts) internamente. O script de teste valida a estrutura do banco de dados após a migração e garante a integridade dos dados.
SMTP e e-mail (desenvolvimento)
Configure SMTP em Configurações → E-mail e use o teste de e-mail no aplicativo e fluxos de notificação. Os scripts auxiliares anteriores pnpm set-smtp-test-config e pnpm test-smtp-connections foram removidos do repositório.
Testar Script de Ponto de Entrada Docker
pnpm test-entrypoint
Este script fornece um wrapper de teste para docker-entrypoint.sh no desenvolvimento local. Ele configura o ambiente para testar a funcionalidade de registro do ponto de entrada e garante que os logs sejam gravados em data/logs/ para que o aplicativo possa acessá-los.
O que faz:
- Sempre cria uma versão nova: Executa automaticamente
pnpm build-localpara criar uma compilação nova antes de testar (sem necessidade de compilar manualmente primeiro) - Compila o serviço cron: Garante que o serviço cron seja compilado (
dist/cron-service.cjs) - Configura estrutura semelhante ao Docker: Cria symlinks e estrutura de diretório necessários para imitar o ambiente Docker
- Executa script de ponto de entrada: Executa
docker-entrypoint.shcom variáveis de ambiente apropriadas - Remove temporários: Remove automaticamente arquivos temporários ao sair
Uso:
# Run the test (builds fresh version automatically)
pnpm test-entrypoint
Variáveis de Ambiente:
PORT=8666- Porta para o servidor Next.js (corresponde astart-local)CRON_PORT=8667- Porta para o serviço cronVERSION- Definido automaticamente para o formatotest-YYYYMMDD-HHMMSS
Saída:
- Os logs são gravados em
data/logs/application.log(acessível pela aplicação) - A saída do console mostra a execução do script de ponto de entrada
- Pressione Ctrl+C para parar e testar o despejo de logs
Requisitos:
- O script deve ser executado a partir do diretório raiz do repositório (pnpm faz isso automaticamente)
- O script trata automaticamente todos os pré-requisitos (build, serviço cron, etc.)
Casos de Uso:
- Testar alterações no script de ponto de entrada localmente antes da implantação Docker
- Verificar a rotação de logs e a funcionalidade de logging
- Testar encerramento gracioso e tratamento de sinais
- Depurar o comportamento do script de ponto de entrada em um ambiente local
Validação de Resumo Diário
pnpm validate-daily-summary
Executa verificações determinísticas para agendamento de Resumo Diário (incluindo DST), agregação de snapshot (apenas trabalhos de backup mais recentes), limpeza de configurações de notificação restantes, linhas órfãs de backup/servidor, sanitização de Markdown, reivindicações de ledger de entrega e migração de schema 4.1 → 4.2 com modelos personalizados. Não envia e-mail ou NTFY.