version: "1.0"
name: sync-models-tests
description: Unit tests for model synchronization script
script: sync-models.sh
setup:
- name: Create test directory
run: mkdir -p /tmp/bashrs-test-sync
- name: Create mock source file
run: echo "mock gguf" > /tmp/bashrs-test-sync/mock.gguf
teardown:
- name: Cleanup test directory
run: rm -rf /tmp/bashrs-test-sync
tests:
- name: script_exists
description: Script file exists and is executable
assert:
- file_exists: scripts/sync-models.sh
- file_executable: scripts/sync-models.sh
- name: has_shebang
description: Script has bash shebang
run: head -1 scripts/sync-models.sh
assert:
- stdout_contains: "#!/bin/bash"
- name: has_strict_mode
description: Script uses strict mode
run: grep "set -euo pipefail" scripts/sync-models.sh
assert:
- exit_code: 0
- name: has_path_validation
description: SEC010 - Path traversal validation exists
run: grep "validate_path" scripts/sync-models.sh
assert:
- exit_code: 0
- name: checks_dotdot
description: SEC010 - Checks for '..' in paths
run: grep '"\.\."' scripts/sync-models.sh
assert:
- exit_code: 0
- name: validates_artifacts_dir
description: Validates ARTIFACTS_DIR is within PROJECT_ROOT
run: grep 'ARTIFACTS_DIR.*PROJECT_ROOT' scripts/sync-models.sh
assert:
- exit_code: 0
- name: uses_readonly
description: Uses readonly for constants
run: grep "^readonly" scripts/sync-models.sh | wc -l
assert:
- stdout_gte: 3
- name: defines_qwen2_model
description: Qwen2 model is defined
run: grep "qwen2-0.5b" scripts/sync-models.sh
assert:
- exit_code: 0
- name: defines_tinyllama_model
description: TinyLlama model is defined
run: grep "tinyllama" scripts/sync-models.sh
assert:
- exit_code: 0
- name: uses_symlinks
description: Uses ln -sf for symlinks
run: grep "ln -sf" scripts/sync-models.sh
assert:
- exit_code: 0
- name: idempotent_symlink
description: Symlink creation is idempotent
run: |
ln -sf /tmp/bashrs-test-sync/mock.gguf /tmp/bashrs-test-sync/test.gguf
ln -sf /tmp/bashrs-test-sync/mock.gguf /tmp/bashrs-test-sync/test.gguf
test -L /tmp/bashrs-test-sync/test.gguf
assert:
- exit_code: 0
- name: checks_source_readable
description: Checks source file readability
run: grep '\! -r "\$source_file"' scripts/sync-models.sh
assert:
- exit_code: 0