Add focused Scriptorium integration coverage

This commit is contained in:
2026-09-09 14:42:14 +00:00
parent 90d7f45eaa
commit 5944eac2ef
3 changed files with 85 additions and 8 deletions

View File

@@ -64,12 +64,15 @@ service.
## Validation
The repository-local integration suite installs its pinned collection, runs
syntax checking and production-profile lint, and applies the default role. It
uses an offline native profile inspection with the managed configuration, then
requires clean repeated convergence. It mutates only the managed source,
binary, configuration, and a private temporary directory, then restores the
default deployment during cleanup.
The repository-local integration suite installs its pinned collection and runs
syntax checking and production-profile lint. It applies the default role, uses
an offline native profile inspection with the managed configuration, and then
requires clean repeated convergence. It also combines missing-binary recovery
with a caller-supplied Go executable while dependency management is disabled,
and covers one representative configuration with null omission, intentional
zero and false values, backend pass-through, and offline native inspection. It
mutates only the managed source, binary, configuration, and a private temporary
directory, then restores the default deployment during cleanup.
```sh
tests/integration

View File

@@ -11,6 +11,7 @@ export ANSIBLE_ROLES_PATH="$(dirname "$repository_root")"
inventory="$repository_root/tests/inventory"
converge="$repository_root/tests/converge.yml"
verify_config="$repository_root/tests/verify-config.yml"
ansible_playbook="$workspace_venv/bin/ansible-playbook"
binary_path=/usr/local/bin/scriptorium
config_path=/usr/local/etc/scriptorium/config.yml
@@ -31,7 +32,8 @@ require_clean_recap() {
run_converge() {
output_file=$1
"$ansible_playbook" -i "$inventory" "$converge" | tee "$output_file"
shift
"$ansible_playbook" -i "$inventory" "$@" "$converge" | tee "$output_file"
}
mkdir -p "$profile_dir"
@@ -39,13 +41,17 @@ printf '%s\n' \
'id: endpoint-profile' \
'endpoint: http://127.0.0.1:8000/v1' \
'model: offline-fixture' > "$profile_dir/endpoint-profile.yml"
printf '%s\n' \
'id: backend-profile' \
'backend: fixture-backend' \
'model: offline-fixture' > "$profile_dir/backend-profile.yml"
cd "$repository_root"
"$workspace_venv/bin/ansible-galaxy" collection install \
-r collections/requirements.yml \
-p "$ANSIBLE_COLLECTIONS_PATH"
"$ansible_playbook" -i "$inventory" --syntax-check "$converge"
"$workspace_venv/bin/ansible-lint" "$converge"
"$workspace_venv/bin/ansible-lint" "$converge" "$verify_config"
baseline_log="$test_tmp/baseline.log"
run_converge "$baseline_log"
@@ -54,3 +60,40 @@ run_converge "$baseline_log"
baseline_repeat_log="$test_tmp/baseline-repeat.log"
run_converge "$baseline_repeat_log"
require_clean_recap "$baseline_repeat_log"
custom_go_binary="$test_tmp/go"
custom_go_invocations="$test_tmp/go-invocations.log"
printf '%s\n' \
'#!/usr/bin/env bash' \
'set -euo pipefail' \
"printf '%s\\n' \"\$*\" >> $custom_go_invocations" \
'exec /snap/bin/go "$@"' > "$custom_go_binary"
chmod 0755 "$custom_go_binary"
sudo rm -f -- "$binary_path"
recovery_log="$test_tmp/recovery.log"
run_converge "$recovery_log" \
-e '{"scriptorium_manage_build_dependencies": false}' \
-e "scriptorium_go_binary=$custom_go_binary"
grep -q . "$custom_go_invocations"
"$binary_path" inspect profile --config "$config_path" \
--profile-dir "$profile_dir" --profile endpoint-profile
recovery_repeat_log="$test_tmp/recovery-repeat.log"
run_converge "$recovery_repeat_log" \
-e '{"scriptorium_manage_build_dependencies": false}' \
-e "scriptorium_go_binary=$custom_go_binary"
require_clean_recap "$recovery_repeat_log"
representative_log="$test_tmp/representative.log"
run_converge "$representative_log" \
-e "scriptorium_profile_dir=$profile_dir" \
-e 'scriptorium_server_addr=127.0.0.1:18080' \
-e '{"scriptorium_server_max_request_bytes": 0, "scriptorium_server_artifact_root": null, "scriptorium_schema_dir": null, "scriptorium_defaults_render_format": "json", "scriptorium_backends": {"fixture-backend": {"endpoint": "http://127.0.0.1:8000/v1", "concurrency_limit": 1, "queue_capacity": 0, "extra_params": {"stream": false}}}}'
"$binary_path" inspect profile --config "$config_path" --profile backend-profile
"$ansible_playbook" -i "$inventory" \
-e "scriptorium_test_profile_dir=$profile_dir" "$verify_config"
representative_repeat_log="$test_tmp/representative-repeat.log"
run_converge "$representative_repeat_log" \
-e "scriptorium_profile_dir=$profile_dir" \
-e 'scriptorium_server_addr=127.0.0.1:18080' \
-e '{"scriptorium_server_max_request_bytes": 0, "scriptorium_server_artifact_root": null, "scriptorium_schema_dir": null, "scriptorium_defaults_render_format": "json", "scriptorium_backends": {"fixture-backend": {"endpoint": "http://127.0.0.1:8000/v1", "concurrency_limit": 1, "queue_capacity": 0, "extra_params": {"stream": false}}}}'
require_clean_recap "$representative_repeat_log"

31
tests/verify-config.yml Normal file
View File

@@ -0,0 +1,31 @@
---
- name: Verify representative Scriptorium configuration
hosts: localhost
gather_facts: false
vars:
scriptorium_config_path: /usr/local/etc/scriptorium/config.yml
tasks:
- name: Read the managed configuration
ansible.builtin.slurp:
src: "{{ scriptorium_config_path }}"
register: scriptorium_config_file
- name: Parse the managed configuration
ansible.builtin.set_fact:
scriptorium_config: "{{ scriptorium_config_file.content | b64decode | from_yaml }}"
- name: Verify representative configuration mappings
ansible.builtin.assert:
that:
- scriptorium_config.profile_dir == scriptorium_test_profile_dir
- scriptorium_config.server.addr == "127.0.0.1:18080"
- scriptorium_config.server.max_request_bytes == 0
- "'artifact_root' not in scriptorium_config.server"
- "'max_artifact_bytes' not in scriptorium_config.server"
- "'prompt_dir' not in scriptorium_config"
- "'schema_dir' not in scriptorium_config"
- scriptorium_config.defaults.render_format == "json"
- scriptorium_config.backends["fixture-backend"].endpoint == "http://127.0.0.1:8000/v1"
- scriptorium_config.backends["fixture-backend"].concurrency_limit == 1
- scriptorium_config.backends["fixture-backend"].queue_capacity == 0
- scriptorium_config.backends["fixture-backend"].extra_params.stream == false