@sebastienrousseau/dotfiles 0.2.481 → 0.2.499
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/docs/ARCHITECTURE.md +29 -196
- package/docs/COMPLIANCE.md +10 -10
- package/docs/COPYRIGHT +3 -4
- package/docs/OPERATIONS.md +38 -65
- package/docs/PLAN.md +3 -3
- package/docs/PR_DESCRIPTION.md +85 -84
- package/docs/ROADMAP.md +11 -11
- package/docs/ROADMAP_legacy.md +556 -0
- package/docs/SECURITY_CHECKLIST.md +1 -1
- package/docs/TASK.md +4 -4
- package/docs/WALKTHROUGH.md +33 -152
- package/package.json +17 -5
- package/scripts/backup.sh +142 -0
- package/scripts/banner.sh +20 -0
- package/scripts/benchmark.sh +20 -0
- package/scripts/build.sh +41 -0
- package/scripts/clean.sh +31 -0
- package/scripts/compile.sh +54 -0
- package/scripts/copy.sh +108 -0
- package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
- package/scripts/doctor.sh +79 -0
- package/scripts/dotfiles.sh +63 -0
- package/scripts/download.sh +35 -0
- package/scripts/help.sh +57 -0
- package/scripts/lock-configs.sh +57 -0
- package/scripts/package.sh +46 -0
- package/scripts/ssh.sh +55 -0
- package/scripts/teleport.sh +23 -0
- package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
- package/scripts/test_smoke.sh +88 -0
- package/scripts/unpack.sh +28 -0
- package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
- package/templates/projects/go/README.md +0 -4
- package/templates/projects/node/README.md +0 -4
- package/templates/projects/python/README.md +0 -4
- package/templates/projects/python/pyproject.toml +0 -15
- package/CHANGELOG.md +0 -285
- package/LICENSE +0 -1283
- package/README.md +0 -315
- package/docs/ALIASES.md +0 -128
- package/docs/FEATURES.md +0 -166
- package/docs/FONTS.md +0 -147
- package/docs/INSTALL.md +0 -119
- package/docs/KEYS.md +0 -40
- package/docs/KEY_ROTATION.md +0 -219
- package/docs/LEGACY_ROADMAP.md +0 -142
- package/docs/NEOVIM_IDE_GUIDE.md +0 -52
- package/docs/README.md +0 -269
- package/docs/REPO_AUDIT.md +0 -23
- package/docs/SCREENSHOTS.md +0 -116
- package/docs/SECRETS.md +0 -76
- package/docs/SECURITY.md +0 -30
- package/docs/TESTING.md +0 -190
- package/docs/TOOLS.md +0 -146
- package/docs/TROUBLESHOOTING.md +0 -112
- package/docs/UTILS.md +0 -105
- package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
- package/docs/adr/ADR-002-shell-performance.md +0 -121
- package/docs/adr/ADR-003-security-first.md +0 -140
- package/docs/adr/ADR-004-cli-architecture.md +0 -157
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
- package/docs/adr/ADR-006-shell-selection.md +0 -115
- package/docs/adr/README.md +0 -33
- package/docs/themes/README.md +0 -20
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
- package/dot_config/ansible/ansible.cfg.tmpl +0 -11
- package/dot_config/atuin/config.toml +0 -23
- package/dot_config/bat/config +0 -8
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -49
- package/dot_config/clippy.toml +0 -55
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json.tmpl +0 -15
- package/dot_config/dotfiles/boot/README.md +0 -11
- package/dot_config/dotfiles/grub/README.md +0 -11
- package/dot_config/dotfiles/lock/README.md +0 -11
- package/dot_config/dotfiles/versions.env.tmpl +0 -19
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -661
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/config.tmpl +0 -77
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
- package/dot_config/go/aliases.sh +0 -61
- package/dot_config/go/env.sh +0 -24
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/ice/README.md +0 -13
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
- package/dot_config/just/justfile +0 -104
- package/dot_config/k9s/config.yaml.tmpl +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -517
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -23
- package/dot_config/lsd/config.yaml +0 -19
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -41
- package/dot_config/mongosh/mongoshrc.js +0 -67
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/nvim/init.lua +0 -4
- package/dot_config/nvim/lazy-lock.json +0 -27
- package/dot_config/nvim/lua/config/autocmds.lua +0 -63
- package/dot_config/nvim/lua/config/keymaps.lua +0 -87
- package/dot_config/nvim/lua/config/lazy.lua +0 -34
- package/dot_config/nvim/lua/config/options.lua +0 -48
- package/dot_config/nvim/lua/plugins/coding.lua +0 -234
- package/dot_config/nvim/lua/plugins/dap.lua +0 -201
- package/dot_config/nvim/lua/plugins/editor.lua +0 -59
- package/dot_config/nvim/lua/plugins/git.lua +0 -9
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
- package/dot_config/nvim/lua/plugins/rust.lua +0 -33
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
- package/dot_config/nvim/lua/plugins/ui.lua +0 -537
- package/dot_config/nvim/snippets/all.lua +0 -9
- package/dot_config/nvim/snippets/python.lua +0 -16
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/pypoetry/config.toml.tmpl +0 -6
- package/dot_config/pyrightconfig.json.tmpl +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/shell/00-container-detect.sh +0 -53
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
- package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
- package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -10
- package/dot_config/shell/90-theme-switch.sh +0 -70
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -119
- package/dot_config/shell/README.md +0 -267
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -124
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl.tmpl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -181
- package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -123
- package/dot_config/waybar/style.css +0 -8
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zellij/config.kdl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -13
- package/dot_config/zsh/dot_zshenv +0 -6
- package/dot_config/zsh/dot_zshrc.tmpl +0 -199
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
- package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
- package/dot_local/bin/executable_ai_core +0 -130
- package/dot_local/bin/executable_b64 +0 -59
- package/dot_local/bin/executable_dot +0 -178
- package/dot_local/bin/executable_dot_completion +0 -55
- package/dot_local/bin/executable_epoch +0 -62
- package/dot_local/bin/executable_extract +0 -108
- package/dot_local/bin/executable_git-ai-commit +0 -160
- package/dot_local/bin/executable_git-ai-diff +0 -154
- package/dot_local/bin/executable_hash +0 -123
- package/dot_local/bin/executable_hex +0 -79
- package/dot_local/bin/executable_ip +0 -37
- package/dot_local/bin/executable_jsonv +0 -54
- package/dot_local/bin/executable_jwt +0 -78
- package/dot_local/bin/executable_kill-port +0 -59
- package/dot_local/bin/executable_lorem +0 -103
- package/dot_local/bin/executable_regex +0 -96
- package/dot_local/bin/executable_tmux-sessionizer +0 -187
- package/dot_local/bin/executable_tour +0 -137
- package/dot_local/bin/executable_update +0 -108
- package/dot_local/bin/executable_uuid +0 -57
- package/dot_local/bin/executable_yamlv +0 -39
- package/dot_local/bin/executable_zig-install +0 -89
- package/dot_local/bin/voice_ops +0 -7
- package/dot_local/share/bash-completion/completions/dot +0 -54
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/install.sh +0 -255
- package/scripts/ci/validate-ci-config.sh +0 -222
- package/scripts/demo/record.sh +0 -41
- package/scripts/diagnostics/benchmark.sh +0 -201
- package/scripts/diagnostics/doctor.sh +0 -115
- package/scripts/diagnostics/drift-dashboard.sh +0 -26
- package/scripts/diagnostics/health.sh +0 -356
- package/scripts/diagnostics/history-analysis.sh +0 -77
- package/scripts/diagnostics/security-score.sh +0 -392
- package/scripts/dot/commands/appearance.sh +0 -63
- package/scripts/dot/commands/core.sh +0 -130
- package/scripts/dot/commands/diagnostics.sh +0 -100
- package/scripts/dot/commands/meta.sh +0 -117
- package/scripts/dot/commands/restore.sh +0 -209
- package/scripts/dot/commands/secrets.sh +0 -81
- package/scripts/dot/commands/security.sh +0 -73
- package/scripts/dot/commands/tools.sh +0 -228
- package/scripts/dot/lib/utils.sh +0 -72
- package/scripts/fonts/install-nerd-fonts.sh +0 -59
- package/scripts/fonts/patch-fonts.sh +0 -34
- package/scripts/ops/chezmoi-apply.sh +0 -42
- package/scripts/ops/chezmoi-diff.sh +0 -14
- package/scripts/ops/chezmoi-remove.sh +0 -43
- package/scripts/ops/chezmoi-update.sh +0 -16
- package/scripts/ops/heal.sh +0 -466
- package/scripts/ops/health-check.sh +0 -380
- package/scripts/ops/rollback.sh +0 -531
- package/scripts/ops/teleport.sh +0 -32
- package/scripts/secrets/age-init.sh +0 -69
- package/scripts/secrets/create-secrets-file.sh +0 -44
- package/scripts/secrets/encrypt-ssh-key.sh +0 -42
- package/scripts/security/backup.sh +0 -17
- package/scripts/security/dns-doh.sh +0 -29
- package/scripts/security/encryption-check.sh +0 -39
- package/scripts/security/enforce-policies.sh +0 -339
- package/scripts/security/firewall.sh +0 -34
- package/scripts/security/lock-configs.sh +0 -57
- package/scripts/security/lock-screen.sh +0 -33
- package/scripts/security/manage-secrets.sh +0 -415
- package/scripts/security/telemetry-kill.sh +0 -28
- package/scripts/security/usb-safety.sh +0 -29
- package/scripts/tests/README.md +0 -241
- package/scripts/tests/benchmark.sh +0 -91
- package/scripts/tests/framework/assertions.sh +0 -283
- package/scripts/tests/framework/mocks.sh +0 -201
- package/scripts/tests/framework/test_runner.sh +0 -189
- package/scripts/tests/integration/test_install.sh +0 -237
- package/scripts/tests/performance/benchmark_runner.sh +0 -156
- package/scripts/tests/performance/regression_check.sh +0 -73
- package/scripts/tests/performance/stress_test.sh +0 -65
- package/scripts/tests/test-docker.sh +0 -48
- package/scripts/tests/unit/test_ai_aliases.sh +0 -158
- package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
- package/scripts/tests/unit/test_backup.sh +0 -227
- package/scripts/tests/unit/test_case_functions.sh +0 -238
- package/scripts/tests/unit/test_cd_aliases.sh +0 -367
- package/scripts/tests/unit/test_dot_cli.sh +0 -217
- package/scripts/tests/unit/test_encode64.sh +0 -67
- package/scripts/tests/unit/test_environment.sh +0 -78
- package/scripts/tests/unit/test_extract.sh +0 -163
- package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
- package/scripts/tests/unit/test_genpass.sh +0 -298
- package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
- package/scripts/tests/unit/test_installers.sh +0 -172
- package/scripts/tests/unit/test_keygen.sh +0 -68
- package/scripts/tests/unit/test_logging.sh +0 -96
- package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
- package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
- package/scripts/tests/unit/test_prependpath.sh +0 -66
- package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
- package/scripts/tests/unit/test_rd.sh +0 -230
- package/scripts/tests/unit/test_security_fixes.sh +0 -130
- package/scripts/tests/unit/test_security_scripts.sh +0 -87
- package/scripts/tests/unit/test_template_validation.sh +0 -238
- package/scripts/tests/unit/test_utility_functions.sh +0 -144
- package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
- package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
- package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
- package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
- package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
- package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
- package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
- package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
- package/scripts/tests/unit/test_zipf.sh +0 -76
- package/scripts/theme/apply-gnome-theme.sh +0 -297
- package/scripts/theme/install-boot-logo.sh +0 -61
- package/scripts/theme/install-catppuccin-themes.sh +0 -346
- package/scripts/theme/install-cursors.sh +0 -24
- package/scripts/theme/install-file-icons.sh +0 -25
- package/scripts/theme/install-grub-theme.sh +0 -51
- package/scripts/theme/install-lock-icon.sh +0 -29
- package/scripts/theme/switch.sh +0 -250
- package/scripts/theme/wallpaper-rotate.sh +0 -82
- package/scripts/theme/wallpaper-sync.sh +0 -42
- package/scripts/tools/cmatrix.sh +0 -20
- package/scripts/tools/emoji-picker.sh +0 -45
- package/scripts/tools/figlet-banner.sh +0 -17
- package/scripts/tools/log-rotate.sh +0 -29
- package/scripts/tools/lolcat-wrap.sh +0 -18
- package/scripts/tools/pipes.sh +0 -47
- package/scripts/tuning/linux.sh +0 -175
- package/scripts/tuning/macos.sh +0 -46
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1091
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# Stress test for shell functions
|
|
6
|
-
# Tests behavior under repeated rapid invocation
|
|
7
|
-
|
|
8
|
-
ITERATIONS="${1:-100}"
|
|
9
|
-
|
|
10
|
-
# Portable millisecond timing function
|
|
11
|
-
get_time_ms() {
|
|
12
|
-
if command -v perl >/dev/null 2>&1; then
|
|
13
|
-
perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000'
|
|
14
|
-
else
|
|
15
|
-
# Fallback: seconds * 1000 (less precise)
|
|
16
|
-
echo $(($(date +%s) * 1000))
|
|
17
|
-
fi
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
# Note: This is test-only code. The eval below is necessary to execute
|
|
21
|
-
# dynamically constructed test commands. Do not use with untrusted input.
|
|
22
|
-
stress_test_function() {
|
|
23
|
-
local func_name="$1"
|
|
24
|
-
local test_cmd="$2"
|
|
25
|
-
local start end elapsed
|
|
26
|
-
|
|
27
|
-
# Validate test_cmd is not empty
|
|
28
|
-
if [[ -z "$test_cmd" ]]; then
|
|
29
|
-
echo " ERROR: empty test command for $func_name"
|
|
30
|
-
return 1
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
echo "Stress testing $func_name ($ITERATIONS iterations)..."
|
|
34
|
-
|
|
35
|
-
start=$(get_time_ms)
|
|
36
|
-
for ((i = 1; i <= ITERATIONS; i++)); do
|
|
37
|
-
# shellcheck disable=SC2086
|
|
38
|
-
eval "$test_cmd" >/dev/null 2>&1 || true
|
|
39
|
-
done
|
|
40
|
-
end=$(get_time_ms)
|
|
41
|
-
|
|
42
|
-
elapsed=$((end - start))
|
|
43
|
-
local per_call=$((elapsed / ITERATIONS))
|
|
44
|
-
|
|
45
|
-
echo " Total: ${elapsed}ms, Per call: ${per_call}ms"
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
main() {
|
|
49
|
-
echo "Starting stress tests..."
|
|
50
|
-
echo ""
|
|
51
|
-
|
|
52
|
-
# Test genpass under load
|
|
53
|
-
source "$HOME/.dotfiles/.chezmoitemplates/functions/genpass.sh" 2>/dev/null || true
|
|
54
|
-
if type genpass &>/dev/null; then
|
|
55
|
-
stress_test_function "genpass" "genpass 16"
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# Test extract help (no actual extraction)
|
|
59
|
-
source "$HOME/.dotfiles/.chezmoitemplates/functions/extract.sh" 2>/dev/null || true
|
|
60
|
-
if type extract &>/dev/null; then
|
|
61
|
-
stress_test_function "extract --help" "extract --help"
|
|
62
|
-
fi
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
main "$@"
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Test dotfiles README instructions across all environments using Docker
|
|
3
|
-
# Usage: ./scripts/tests/test-docker.sh [target...]
|
|
4
|
-
# Examples:
|
|
5
|
-
# ./scripts/tests/test-docker.sh # Run all tests
|
|
6
|
-
# ./scripts/tests/test-docker.sh ubuntu-test # Run only Ubuntu test
|
|
7
|
-
# ./scripts/tests/test-docker.sh arch-test # Run only Arch test
|
|
8
|
-
|
|
9
|
-
set -euo pipefail
|
|
10
|
-
|
|
11
|
-
RED='\033[0;31m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
BLUE='\033[0;34m'
|
|
14
|
-
BOLD='\033[1m'
|
|
15
|
-
NC='\033[0m'
|
|
16
|
-
|
|
17
|
-
TARGETS=(ubuntu-test debian-test arch-test ubuntu-eza-test)
|
|
18
|
-
PASSED=0
|
|
19
|
-
FAILED=0
|
|
20
|
-
FAILURES=()
|
|
21
|
-
|
|
22
|
-
# Use specified targets or all
|
|
23
|
-
if [ $# -gt 0 ]; then
|
|
24
|
-
TARGETS=("$@")
|
|
25
|
-
fi
|
|
26
|
-
|
|
27
|
-
echo -e "${BLUE}${BOLD}Testing dotfiles across ${#TARGETS[@]} environment(s)${NC}"
|
|
28
|
-
echo ""
|
|
29
|
-
|
|
30
|
-
for target in "${TARGETS[@]}"; do
|
|
31
|
-
echo -e "${BLUE}==> Building: ${BOLD}${target}${NC}"
|
|
32
|
-
if docker build --target "$target" -f Dockerfile.test -t "dotfiles-test:${target}" . 2>&1; then
|
|
33
|
-
echo -e "${GREEN}==> PASSED: ${target}${NC}"
|
|
34
|
-
PASSED=$((PASSED + 1))
|
|
35
|
-
else
|
|
36
|
-
echo -e "${RED}==> FAILED: ${target}${NC}"
|
|
37
|
-
FAILED=$((FAILED + 1))
|
|
38
|
-
FAILURES+=("$target")
|
|
39
|
-
fi
|
|
40
|
-
echo ""
|
|
41
|
-
done
|
|
42
|
-
|
|
43
|
-
echo -e "${BOLD}Results: ${GREEN}${PASSED} passed${NC}, ${RED}${FAILED} failed${NC} (${#TARGETS[@]} total)"
|
|
44
|
-
|
|
45
|
-
if [ ${FAILED} -gt 0 ]; then
|
|
46
|
-
echo -e "${RED}Failed targets: ${FAILURES[*]}${NC}"
|
|
47
|
-
exit 1
|
|
48
|
-
fi
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034,SC2030,SC2031
|
|
3
|
-
# Test AI aliases functionality
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
7
|
-
source "$SCRIPT_DIR/../framework/mocks.sh"
|
|
8
|
-
|
|
9
|
-
# Test setup
|
|
10
|
-
ALIASES_FILE="$REPO_ROOT/.chezmoitemplates/aliases/ai/ai.aliases.sh"
|
|
11
|
-
|
|
12
|
-
test_start "ai_aliases_file_exists"
|
|
13
|
-
assert_file_exists "$ALIASES_FILE" "AI aliases file should exist"
|
|
14
|
-
|
|
15
|
-
test_start "github_copilot_aliases_when_gh_available"
|
|
16
|
-
mock_init
|
|
17
|
-
# Mock gh command as available
|
|
18
|
-
mock_command "gh" "gh 2.42.0" 0
|
|
19
|
-
|
|
20
|
-
# Source aliases in a subshell with expand_aliases enabled
|
|
21
|
-
(
|
|
22
|
-
shopt -s expand_aliases
|
|
23
|
-
export PATH="$MOCK_BIN_DIR:$PATH"
|
|
24
|
-
source "$ALIASES_FILE"
|
|
25
|
-
|
|
26
|
-
# Check aliases are defined using alias command
|
|
27
|
-
alias ghcp >/dev/null 2>&1 && echo "ghcp_defined"
|
|
28
|
-
alias ghs >/dev/null 2>&1 && echo "ghs_defined"
|
|
29
|
-
alias ghe >/dev/null 2>&1 && echo "ghe_defined"
|
|
30
|
-
) >/tmp/test_output
|
|
31
|
-
|
|
32
|
-
assert_file_contains "/tmp/test_output" "ghcp_defined" "ghcp alias should be defined when gh available"
|
|
33
|
-
assert_file_contains "/tmp/test_output" "ghs_defined" "ghs alias should be defined when gh available"
|
|
34
|
-
assert_file_contains "/tmp/test_output" "ghe_defined" "ghe alias should be defined when gh available"
|
|
35
|
-
|
|
36
|
-
rm -f /tmp/test_output
|
|
37
|
-
mock_cleanup
|
|
38
|
-
|
|
39
|
-
test_start "github_copilot_aliases_when_gh_unavailable"
|
|
40
|
-
mock_init
|
|
41
|
-
# Use empty mock dir as PATH to ensure real gh isn't found
|
|
42
|
-
# (command -v, source, alias are builtins - don't need PATH)
|
|
43
|
-
|
|
44
|
-
(
|
|
45
|
-
shopt -s expand_aliases
|
|
46
|
-
export PATH="$MOCK_BIN_DIR"
|
|
47
|
-
source "$ALIASES_FILE"
|
|
48
|
-
|
|
49
|
-
# Check aliases are NOT defined
|
|
50
|
-
alias ghcp >/dev/null 2>&1 || echo "ghcp_not_defined"
|
|
51
|
-
alias ghs >/dev/null 2>&1 || echo "ghs_not_defined"
|
|
52
|
-
alias ghe >/dev/null 2>&1 || echo "ghe_not_defined"
|
|
53
|
-
) >/tmp/test_output
|
|
54
|
-
|
|
55
|
-
assert_file_contains "/tmp/test_output" "ghcp_not_defined" "ghcp alias should not be defined when gh unavailable"
|
|
56
|
-
assert_file_contains "/tmp/test_output" "ghs_not_defined" "ghs alias should not be defined when gh unavailable"
|
|
57
|
-
assert_file_contains "/tmp/test_output" "ghe_not_defined" "ghe alias should not be defined when gh unavailable"
|
|
58
|
-
|
|
59
|
-
rm -f /tmp/test_output
|
|
60
|
-
mock_cleanup
|
|
61
|
-
|
|
62
|
-
test_start "fabric_alias_when_fabric_available"
|
|
63
|
-
mock_init
|
|
64
|
-
mock_command "fabric" "fabric v1.0.0" 0
|
|
65
|
-
|
|
66
|
-
(
|
|
67
|
-
shopt -s expand_aliases
|
|
68
|
-
export PATH="$MOCK_BIN_DIR:$PATH"
|
|
69
|
-
source "$ALIASES_FILE"
|
|
70
|
-
|
|
71
|
-
alias fab >/dev/null 2>&1 && echo "fab_defined"
|
|
72
|
-
) >/tmp/test_output
|
|
73
|
-
|
|
74
|
-
assert_file_contains "/tmp/test_output" "fab_defined" "fab alias should be defined when fabric available"
|
|
75
|
-
|
|
76
|
-
rm -f /tmp/test_output
|
|
77
|
-
mock_cleanup
|
|
78
|
-
|
|
79
|
-
test_start "fabric_alias_when_fabric_unavailable"
|
|
80
|
-
mock_init
|
|
81
|
-
# Use empty mock dir as PATH to ensure real fabric isn't found
|
|
82
|
-
|
|
83
|
-
(
|
|
84
|
-
shopt -s expand_aliases
|
|
85
|
-
export PATH="$MOCK_BIN_DIR"
|
|
86
|
-
source "$ALIASES_FILE"
|
|
87
|
-
|
|
88
|
-
alias fab >/dev/null 2>&1 || echo "fab_not_defined"
|
|
89
|
-
) >/tmp/test_output
|
|
90
|
-
|
|
91
|
-
assert_file_contains "/tmp/test_output" "fab_not_defined" "fab alias should not be defined when fabric unavailable"
|
|
92
|
-
|
|
93
|
-
rm -f /tmp/test_output
|
|
94
|
-
mock_cleanup
|
|
95
|
-
|
|
96
|
-
test_start "ollama_aliases_when_ollama_available"
|
|
97
|
-
mock_init
|
|
98
|
-
mock_command "ollama" "ollama version 1.0.0" 0
|
|
99
|
-
|
|
100
|
-
(
|
|
101
|
-
shopt -s expand_aliases
|
|
102
|
-
export PATH="$MOCK_BIN_DIR:$PATH"
|
|
103
|
-
source "$ALIASES_FILE"
|
|
104
|
-
|
|
105
|
-
alias ol >/dev/null 2>&1 && echo "ol_defined"
|
|
106
|
-
alias olr >/dev/null 2>&1 && echo "olr_defined"
|
|
107
|
-
alias oll >/dev/null 2>&1 && echo "oll_defined"
|
|
108
|
-
alias olp >/dev/null 2>&1 && echo "olp_defined"
|
|
109
|
-
alias ollama-status >/dev/null 2>&1 && echo "ollama_status_defined"
|
|
110
|
-
alias ollama-show >/dev/null 2>&1 && echo "ollama_show_defined"
|
|
111
|
-
) >/tmp/test_output
|
|
112
|
-
|
|
113
|
-
assert_file_contains "/tmp/test_output" "ol_defined" "ol alias should be defined when ollama available"
|
|
114
|
-
assert_file_contains "/tmp/test_output" "olr_defined" "olr alias should be defined when ollama available"
|
|
115
|
-
assert_file_contains "/tmp/test_output" "oll_defined" "oll alias should be defined when ollama available"
|
|
116
|
-
assert_file_contains "/tmp/test_output" "olp_defined" "olp alias should be defined when ollama available"
|
|
117
|
-
assert_file_contains "/tmp/test_output" "ollama_status_defined" "ollama-status alias should be defined when ollama available"
|
|
118
|
-
assert_file_contains "/tmp/test_output" "ollama_show_defined" "ollama-show alias should be defined when ollama available"
|
|
119
|
-
|
|
120
|
-
rm -f /tmp/test_output
|
|
121
|
-
mock_cleanup
|
|
122
|
-
|
|
123
|
-
test_start "ollama_aliases_when_ollama_unavailable"
|
|
124
|
-
mock_init
|
|
125
|
-
# Use empty mock dir as PATH to ensure real ollama isn't found
|
|
126
|
-
|
|
127
|
-
(
|
|
128
|
-
shopt -s expand_aliases
|
|
129
|
-
export PATH="$MOCK_BIN_DIR"
|
|
130
|
-
source "$ALIASES_FILE"
|
|
131
|
-
|
|
132
|
-
alias ol >/dev/null 2>&1 || echo "ol_not_defined"
|
|
133
|
-
alias olr >/dev/null 2>&1 || echo "olr_not_defined"
|
|
134
|
-
alias oll >/dev/null 2>&1 || echo "oll_not_defined"
|
|
135
|
-
alias olp >/dev/null 2>&1 || echo "olp_not_defined"
|
|
136
|
-
alias ollama-status >/dev/null 2>&1 || echo "ollama_status_not_defined"
|
|
137
|
-
alias ollama-show >/dev/null 2>&1 || echo "ollama_show_not_defined"
|
|
138
|
-
) >/tmp/test_output
|
|
139
|
-
|
|
140
|
-
assert_file_contains "/tmp/test_output" "ol_not_defined" "ol alias should not be defined when ollama unavailable"
|
|
141
|
-
assert_file_contains "/tmp/test_output" "olr_not_defined" "olr alias should not be defined when ollama unavailable"
|
|
142
|
-
assert_file_contains "/tmp/test_output" "oll_not_defined" "oll alias should not be defined when ollama unavailable"
|
|
143
|
-
assert_file_contains "/tmp/test_output" "olp_not_defined" "olp alias should not be defined when ollama unavailable"
|
|
144
|
-
assert_file_contains "/tmp/test_output" "ollama_status_not_defined" "ollama-status alias should not be defined when ollama unavailable"
|
|
145
|
-
assert_file_contains "/tmp/test_output" "ollama_show_not_defined" "ollama-show alias should not be defined when ollama unavailable"
|
|
146
|
-
|
|
147
|
-
rm -f /tmp/test_output
|
|
148
|
-
mock_cleanup
|
|
149
|
-
|
|
150
|
-
test_start "aliases_syntax_check"
|
|
151
|
-
assert_exit_code 0 "bash -n '$ALIASES_FILE'"
|
|
152
|
-
|
|
153
|
-
test_start "aliases_shellcheck"
|
|
154
|
-
if command -v shellcheck >/dev/null 2>&1; then
|
|
155
|
-
assert_exit_code 0 "shellcheck '$ALIASES_FILE'"
|
|
156
|
-
else
|
|
157
|
-
echo "SKIP: shellcheck not available"
|
|
158
|
-
fi
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
|
5
|
-
|
|
6
|
-
fail() {
|
|
7
|
-
echo "FAIL: $1" >&2
|
|
8
|
-
exit 1
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
pass() {
|
|
12
|
-
echo "PASS: $1"
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
check_contains() {
|
|
16
|
-
local file="$1"
|
|
17
|
-
local pattern="$2"
|
|
18
|
-
if command -v rg >/dev/null 2>&1; then
|
|
19
|
-
rg -n --fixed-strings "$pattern" "$file" >/dev/null || fail "Missing pattern in $file: $pattern"
|
|
20
|
-
else
|
|
21
|
-
grep -nF "$pattern" "$file" >/dev/null || fail "Missing pattern in $file: $pattern"
|
|
22
|
-
fi
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
HC_FILE="$REPO_ROOT/scripts/ops/health-check.sh"
|
|
26
|
-
APPLY_FILE="$REPO_ROOT/scripts/ops/chezmoi-apply.sh"
|
|
27
|
-
DOC_FILE="$REPO_ROOT/docs/TOOLS.md"
|
|
28
|
-
PYTOOLS_FILE="$REPO_ROOT/install/provision/run_onchange_25-python-tools.sh.tmpl"
|
|
29
|
-
|
|
30
|
-
# Health check should include AI CLIs in optional deps
|
|
31
|
-
check_contains "$HC_FILE" "optional_deps=(ripgrep fd bat fzf eza jq claude gemini sgpt ollama opencode aider)"
|
|
32
|
-
|
|
33
|
-
# Chezmoi apply should emit AI CLI checks
|
|
34
|
-
check_contains "$APPLY_FILE" "AI provider CLI checks (optional):"
|
|
35
|
-
check_contains "$APPLY_FILE" "check_ai_cli \"sgpt\""
|
|
36
|
-
check_contains "$APPLY_FILE" "check_ai_cli \"ollama\""
|
|
37
|
-
|
|
38
|
-
# Tools catalog should list sgpt and ollama
|
|
39
|
-
check_contains "$DOC_FILE" "| sgpt | shell-gpt |"
|
|
40
|
-
check_contains "$DOC_FILE" "| ollama | ollama |"
|
|
41
|
-
|
|
42
|
-
# Python tools should include key dev tools
|
|
43
|
-
check_contains "$PYTOOLS_FILE" "install_python_tool \"pytest\""
|
|
44
|
-
check_contains "$PYTOOLS_FILE" "install_python_tool \"bandit\""
|
|
45
|
-
check_contains "$PYTOOLS_FILE" "install_python_tool \"mypy\""
|
|
46
|
-
|
|
47
|
-
pass "AI CLI dependency checks and docs are wired"
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2012,SC2034
|
|
3
|
-
# Unit tests for the backup function
|
|
4
|
-
# Tests backup creation with various options and edge cases
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
source "$SCRIPT_DIR/../framework/mocks.sh"
|
|
10
|
-
|
|
11
|
-
# Source the function being tested
|
|
12
|
-
FUNC_FILE="$REPO_ROOT/.chezmoitemplates/functions/backup.sh"
|
|
13
|
-
if [[ -f "$FUNC_FILE" ]]; then
|
|
14
|
-
source "$FUNC_FILE"
|
|
15
|
-
else
|
|
16
|
-
echo "Warning: backup.sh not found at $FUNC_FILE"
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
# Test: backup with no arguments shows error
|
|
20
|
-
test_start "backup_no_args"
|
|
21
|
-
output=$(backup 2>&1)
|
|
22
|
-
exit_code=$?
|
|
23
|
-
assert_equals "1" "$exit_code" "exit code should be 1 for no args"
|
|
24
|
-
|
|
25
|
-
# Test: backup with no arguments shows error message
|
|
26
|
-
test_start "backup_no_args_message"
|
|
27
|
-
output=$(backup 2>&1)
|
|
28
|
-
if [[ "$output" == *"ERROR"* && "$output" == *"provide"* ]]; then
|
|
29
|
-
((TESTS_PASSED++))
|
|
30
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: shows error message for no arguments"
|
|
31
|
-
else
|
|
32
|
-
((TESTS_FAILED++))
|
|
33
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show error message for no arguments"
|
|
34
|
-
echo -e " Output: $output"
|
|
35
|
-
fi
|
|
36
|
-
|
|
37
|
-
# Test: backup with nonexistent file
|
|
38
|
-
test_start "backup_nonexistent_file"
|
|
39
|
-
test_dir=$(mock_dir "backup_test")
|
|
40
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
41
|
-
output=$(backup "/nonexistent/file.txt" 2>&1)
|
|
42
|
-
exit_code=$?
|
|
43
|
-
assert_equals "1" "$exit_code" "exit code should be 1 for nonexistent file"
|
|
44
|
-
rm -rf "$test_dir"
|
|
45
|
-
|
|
46
|
-
# Test: backup with unknown option shows error
|
|
47
|
-
test_start "backup_unknown_option"
|
|
48
|
-
output=$(backup --unknown-option 2>&1)
|
|
49
|
-
exit_code=$?
|
|
50
|
-
assert_equals "1" "$exit_code" "exit code should be 1 for unknown option"
|
|
51
|
-
|
|
52
|
-
# Test: backup with unknown option shows error message
|
|
53
|
-
test_start "backup_unknown_option_message"
|
|
54
|
-
output=$(backup --unknown-option 2>&1)
|
|
55
|
-
if [[ "$output" == *"ERROR"* && "$output" == *"Unknown option"* ]]; then
|
|
56
|
-
((TESTS_PASSED++))
|
|
57
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: shows error for unknown option"
|
|
58
|
-
else
|
|
59
|
-
((TESTS_FAILED++))
|
|
60
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show error for unknown option"
|
|
61
|
-
echo -e " Output: $output"
|
|
62
|
-
fi
|
|
63
|
-
|
|
64
|
-
# Test: backup creates backup directory if not exists
|
|
65
|
-
test_start "backup_creates_directory"
|
|
66
|
-
test_dir=$(mock_dir "backup_test")
|
|
67
|
-
test_file="$test_dir/testfile.txt"
|
|
68
|
-
echo "test content" >"$test_file"
|
|
69
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
70
|
-
|
|
71
|
-
output=$(backup "$test_file" 2>&1)
|
|
72
|
-
|
|
73
|
-
if [[ -d "$BACKUP_DIR" ]]; then
|
|
74
|
-
((TESTS_PASSED++))
|
|
75
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup directory created"
|
|
76
|
-
else
|
|
77
|
-
((TESTS_FAILED++))
|
|
78
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: backup directory should be created"
|
|
79
|
-
fi
|
|
80
|
-
rm -rf "$test_dir"
|
|
81
|
-
|
|
82
|
-
# Test: backup creates tar archive
|
|
83
|
-
test_start "backup_creates_archive"
|
|
84
|
-
test_dir=$(mock_dir "backup_test")
|
|
85
|
-
test_file="$test_dir/testfile.txt"
|
|
86
|
-
echo "test content" >"$test_file"
|
|
87
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
88
|
-
|
|
89
|
-
output=$(backup "$test_file" 2>&1)
|
|
90
|
-
exit_code=$?
|
|
91
|
-
|
|
92
|
-
# Check if backup file was created
|
|
93
|
-
backup_files=$(ls "$BACKUP_DIR"/backup_*.tar* 2>/dev/null | wc -l | tr -d ' ')
|
|
94
|
-
if [[ "$backup_files" -gt 0 ]]; then
|
|
95
|
-
((TESTS_PASSED++))
|
|
96
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup archive created"
|
|
97
|
-
else
|
|
98
|
-
((TESTS_FAILED++))
|
|
99
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: backup archive should be created"
|
|
100
|
-
echo -e " Output: $output"
|
|
101
|
-
fi
|
|
102
|
-
rm -rf "$test_dir"
|
|
103
|
-
|
|
104
|
-
# Test: backup with --max-size option
|
|
105
|
-
test_start "backup_max_size_option"
|
|
106
|
-
test_dir=$(mock_dir "backup_test")
|
|
107
|
-
test_file="$test_dir/testfile.txt"
|
|
108
|
-
echo "test content" >"$test_file"
|
|
109
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
110
|
-
|
|
111
|
-
output=$(backup --max-size 1K "$test_file" 2>&1)
|
|
112
|
-
exit_code=$?
|
|
113
|
-
|
|
114
|
-
assert_equals "0" "$exit_code" "backup with --max-size should succeed"
|
|
115
|
-
rm -rf "$test_dir"
|
|
116
|
-
|
|
117
|
-
# Test: backup with --keep option
|
|
118
|
-
test_start "backup_keep_option"
|
|
119
|
-
test_dir=$(mock_dir "backup_test")
|
|
120
|
-
test_file="$test_dir/testfile.txt"
|
|
121
|
-
echo "test content" >"$test_file"
|
|
122
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
123
|
-
|
|
124
|
-
output=$(backup --keep 3 "$test_file" 2>&1)
|
|
125
|
-
exit_code=$?
|
|
126
|
-
|
|
127
|
-
assert_equals "0" "$exit_code" "backup with --keep should succeed"
|
|
128
|
-
rm -rf "$test_dir"
|
|
129
|
-
|
|
130
|
-
# Test: backup with invalid size unit
|
|
131
|
-
test_start "backup_invalid_size_unit"
|
|
132
|
-
test_dir=$(mock_dir "backup_test")
|
|
133
|
-
test_file="$test_dir/testfile.txt"
|
|
134
|
-
echo "test content" >"$test_file"
|
|
135
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
136
|
-
|
|
137
|
-
output=$(backup --max-size 100X "$test_file" 2>&1)
|
|
138
|
-
exit_code=$?
|
|
139
|
-
|
|
140
|
-
# Should fail or warn with invalid unit
|
|
141
|
-
if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"Invalid unit"* ]] || [[ "$output" == *"ERROR"* ]] || [[ "$output" == *"WARNING"* ]]; then
|
|
142
|
-
((TESTS_PASSED++))
|
|
143
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: invalid size unit handled"
|
|
144
|
-
else
|
|
145
|
-
((TESTS_FAILED++))
|
|
146
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should reject or warn about invalid size unit '100X'"
|
|
147
|
-
echo -e " Exit code: $exit_code"
|
|
148
|
-
echo -e " Output: $output"
|
|
149
|
-
fi
|
|
150
|
-
rm -rf "$test_dir"
|
|
151
|
-
|
|
152
|
-
# Test: backup multiple files
|
|
153
|
-
test_start "backup_multiple_files"
|
|
154
|
-
test_dir=$(mock_dir "backup_test")
|
|
155
|
-
test_file1="$test_dir/testfile1.txt"
|
|
156
|
-
test_file2="$test_dir/testfile2.txt"
|
|
157
|
-
echo "content 1" >"$test_file1"
|
|
158
|
-
echo "content 2" >"$test_file2"
|
|
159
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
160
|
-
|
|
161
|
-
output=$(backup "$test_file1" "$test_file2" 2>&1)
|
|
162
|
-
exit_code=$?
|
|
163
|
-
|
|
164
|
-
assert_equals "0" "$exit_code" "backup of multiple files should succeed"
|
|
165
|
-
rm -rf "$test_dir"
|
|
166
|
-
|
|
167
|
-
# Test: backup shows INFO messages
|
|
168
|
-
test_start "backup_info_messages"
|
|
169
|
-
test_dir=$(mock_dir "backup_test")
|
|
170
|
-
test_file="$test_dir/testfile.txt"
|
|
171
|
-
echo "test content" >"$test_file"
|
|
172
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
173
|
-
|
|
174
|
-
output=$(backup "$test_file" 2>&1)
|
|
175
|
-
|
|
176
|
-
if [[ "$output" == *"INFO"* ]]; then
|
|
177
|
-
((TESTS_PASSED++))
|
|
178
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: shows INFO messages"
|
|
179
|
-
else
|
|
180
|
-
((TESTS_FAILED++))
|
|
181
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show INFO messages"
|
|
182
|
-
echo -e " Output: $output"
|
|
183
|
-
fi
|
|
184
|
-
rm -rf "$test_dir"
|
|
185
|
-
|
|
186
|
-
# Test: backup retention (--keep)
|
|
187
|
-
test_start "backup_retention"
|
|
188
|
-
test_dir=$(mock_dir "backup_test")
|
|
189
|
-
test_file="$test_dir/testfile.txt"
|
|
190
|
-
echo "test content" >"$test_file"
|
|
191
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
192
|
-
|
|
193
|
-
# Create multiple backups
|
|
194
|
-
for i in {1..4}; do
|
|
195
|
-
backup --keep 2 "$test_file" >/dev/null 2>&1
|
|
196
|
-
done
|
|
197
|
-
|
|
198
|
-
# Count remaining backups
|
|
199
|
-
backup_count=$(ls "$BACKUP_DIR"/backup_*.tar* 2>/dev/null | wc -l | tr -d ' ')
|
|
200
|
-
|
|
201
|
-
if [[ "$backup_count" -le 2 ]]; then
|
|
202
|
-
((TESTS_PASSED++))
|
|
203
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: backup retention works (kept $backup_count)"
|
|
204
|
-
else
|
|
205
|
-
((TESTS_FAILED++))
|
|
206
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should keep only 2 backups, found $backup_count"
|
|
207
|
-
fi
|
|
208
|
-
rm -rf "$test_dir"
|
|
209
|
-
|
|
210
|
-
# Test: backup a directory
|
|
211
|
-
test_start "backup_directory"
|
|
212
|
-
test_dir=$(mock_dir "backup_test")
|
|
213
|
-
content_dir="$test_dir/content"
|
|
214
|
-
mkdir -p "$content_dir"
|
|
215
|
-
echo "file1" >"$content_dir/file1.txt"
|
|
216
|
-
echo "file2" >"$content_dir/file2.txt"
|
|
217
|
-
export BACKUP_DIR="$test_dir/backups"
|
|
218
|
-
|
|
219
|
-
output=$(backup "$content_dir" 2>&1)
|
|
220
|
-
exit_code=$?
|
|
221
|
-
|
|
222
|
-
assert_equals "0" "$exit_code" "backup of directory should succeed"
|
|
223
|
-
rm -rf "$test_dir"
|
|
224
|
-
|
|
225
|
-
echo ""
|
|
226
|
-
echo "Backup function tests completed."
|
|
227
|
-
echo "RESULTS:$TESTS_RUN:$TESTS_PASSED:$TESTS_FAILED"
|