GRM-19: add molecule tests for template content, deregister, and update workflows
- template-content: Verifies rendered systemd template contains correct directives for docker mode (Type=oneshot, RemainAfterExit=yes) and prune service/timer content. - deregister: Installs runner, creates fake .runner file, runs deregister tasks, verifies .runner file is removed. - update: Installs docker and binary runners, runs update tasks, verifies image/binary and data directories remain intact after update. These scenarios bridge gaps where the deregister task file and update workflows were not covered by existing molecule tests.
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
gitea_url: "http://localhost:3000"
|
||||
registration_token: "fake-token-for-testing"
|
||||
runner_name: "deregister-test-runner"
|
||||
skip_runner_registration: true
|
||||
roles:
|
||||
- role: gitea-runner
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
|
||||
platforms:
|
||||
- name: ${MOLECULE_PLATFORM_NAME:-ubuntu-2204}
|
||||
image: ${MOLECULE_PLATFORM_IMAGE:-geerlingguy/docker-ubuntu2204-ansible:latest}
|
||||
command: ${MOLECULE_PLATFORM_COMMAND:-sleep infinity}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||
cgroupns_mode: host
|
||||
privileged: true
|
||||
pre_build_image: true
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
playbooks:
|
||||
converge: converge.yml
|
||||
prepare: ../common/prepare.yml
|
||||
side_effect: side_effect.yml
|
||||
env:
|
||||
ANSIBLE_ROLES_PATH: "../../.."
|
||||
|
||||
scenario:
|
||||
test_sequence:
|
||||
- dependency
|
||||
- cleanup
|
||||
- destroy
|
||||
- syntax
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
|
||||
verifier:
|
||||
name: ansible
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
- name: Create fake runner registration file
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
runner_name: "deregister-test-runner"
|
||||
tasks:
|
||||
- name: Ensure fake .runner file exists
|
||||
ansible.builtin.copy:
|
||||
dest: "/var/lib/gitea-runner/{{ runner_name }}/.runner"
|
||||
content: |
|
||||
{"id": 1, "uuid": "test-uuid-1234", "name": "{{ runner_name }}", "address": "http://localhost:3000"}
|
||||
mode: "0644"
|
||||
|
||||
- name: Deregister runner
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
runner_name: "deregister-test-runner"
|
||||
registration_token: "fake-token-for-testing"
|
||||
gitea_url: "http://localhost:3000"
|
||||
runner_mode: "docker"
|
||||
skip_runner_registration: false
|
||||
tasks:
|
||||
- name: Include deregistration tasks
|
||||
ansible.builtin.include_role:
|
||||
name: gitea-runner
|
||||
tasks_from: deregister.yml
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
become: true
|
||||
pre_tasks:
|
||||
- name: Load role defaults
|
||||
ansible.builtin.include_vars:
|
||||
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
|
||||
tasks:
|
||||
- name: Check registration file was removed
|
||||
ansible.builtin.stat:
|
||||
path: "/var/lib/gitea-runner/deregister-test-runner/.runner"
|
||||
register: runner_file_stat
|
||||
|
||||
- name: Assert registration file no longer exists
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- not runner_file_stat.stat.exists
|
||||
fail_msg: "Registration file (.runner) was not removed by deregistration"
|
||||
|
||||
- name: Check systemd template still exists
|
||||
ansible.builtin.stat:
|
||||
path: "/etc/systemd/system/gitea-runner@.service"
|
||||
register: service_stat
|
||||
|
||||
- name: Assert systemd template still exists after deregister
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- service_stat.stat.exists
|
||||
fail_msg: "Systemd template unit was incorrectly removed"
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Converge Docker mode
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
gitea_url: "http://localhost:3000"
|
||||
registration_token: "fake-token-for-testing"
|
||||
runner_name: "template-docker-runner"
|
||||
skip_runner_registration: true
|
||||
roles:
|
||||
- role: gitea-runner
|
||||
|
||||
- name: Converge Binary mode
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
gitea_url: "http://localhost:3000"
|
||||
registration_token: "fake-token-for-testing"
|
||||
runner_name: "template-binary-runner"
|
||||
runner_mode: "binary"
|
||||
skip_runner_registration: true
|
||||
roles:
|
||||
- role: gitea-runner
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
|
||||
platforms:
|
||||
- name: ${MOLECULE_PLATFORM_NAME:-ubuntu-2204}
|
||||
image: ${MOLECULE_PLATFORM_IMAGE:-geerlingguy/docker-ubuntu2204-ansible:latest}
|
||||
command: ${MOLECULE_PLATFORM_COMMAND:-sleep infinity}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||
cgroupns_mode: host
|
||||
privileged: true
|
||||
pre_build_image: true
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
playbooks:
|
||||
converge: converge.yml
|
||||
prepare: ../common/prepare.yml
|
||||
env:
|
||||
ANSIBLE_ROLES_PATH: "../../.."
|
||||
|
||||
scenario:
|
||||
test_sequence:
|
||||
- dependency
|
||||
- cleanup
|
||||
- destroy
|
||||
- syntax
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
|
||||
verifier:
|
||||
name: ansible
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
become: true
|
||||
pre_tasks:
|
||||
- name: Load role defaults
|
||||
ansible.builtin.include_vars:
|
||||
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
|
||||
tasks:
|
||||
- name: Read rendered Docker systemd template
|
||||
ansible.builtin.slurp:
|
||||
src: "/etc/systemd/system/gitea-runner@.service"
|
||||
register: docker_template
|
||||
|
||||
- name: Assert Docker mode template contains expected directives
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- "'Type=oneshot' in docker_template.content | b64decode"
|
||||
- "'RemainAfterExit=yes' in docker_template.content | b64decode"
|
||||
- "'Requires=docker.service' in docker_template.content | b64decode"
|
||||
- "'docker run -d' in docker_template.content | b64decode"
|
||||
- "'ExecStop=/usr/bin/docker stop' in docker_template.content | b64decode"
|
||||
- "'Restart=on-failure' in docker_template.content | b64decode"
|
||||
fail_msg: "Docker systemd template is missing expected directives"
|
||||
|
||||
- name: Read rendered prune service template
|
||||
ansible.builtin.slurp:
|
||||
src: "/etc/systemd/system/docker-prune.service"
|
||||
register: prune_service
|
||||
|
||||
- name: Assert prune service contains expected directives
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- "'Type=oneshot' in prune_service.content | b64decode"
|
||||
- "'docker system prune' in prune_service.content | b64decode"
|
||||
- "'docker volume prune' in prune_service.content | b64decode"
|
||||
- "'label=gitea-runner=true' in prune_service.content | b64decode"
|
||||
fail_msg: "Prune service template is missing expected directives"
|
||||
|
||||
- name: Read rendered prune timer template
|
||||
ansible.builtin.slurp:
|
||||
src: "/etc/systemd/system/docker-prune.timer"
|
||||
register: prune_timer
|
||||
|
||||
- name: Assert prune timer contains expected directives
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- "'OnCalendar=daily' in prune_timer.content | b64decode"
|
||||
- "'Persistent=true' in prune_timer.content | b64decode"
|
||||
fail_msg: "Prune timer template is missing expected directives"
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Converge Docker mode
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
gitea_url: "http://localhost:3000"
|
||||
registration_token: "fake-token-for-testing"
|
||||
runner_name: "update-docker-runner"
|
||||
skip_runner_registration: true
|
||||
roles:
|
||||
- role: gitea-runner
|
||||
|
||||
- name: Converge Binary mode
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
gitea_url: "http://localhost:3000"
|
||||
registration_token: "fake-token-for-testing"
|
||||
runner_name: "update-binary-runner"
|
||||
runner_mode: "binary"
|
||||
skip_runner_registration: true
|
||||
roles:
|
||||
- role: gitea-runner
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
|
||||
platforms:
|
||||
- name: ${MOLECULE_PLATFORM_NAME:-ubuntu-2204}
|
||||
image: ${MOLECULE_PLATFORM_IMAGE:-geerlingguy/docker-ubuntu2204-ansible:latest}
|
||||
command: ${MOLECULE_PLATFORM_COMMAND:-sleep infinity}
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||
cgroupns_mode: host
|
||||
privileged: true
|
||||
pre_build_image: true
|
||||
|
||||
provisioner:
|
||||
name: ansible
|
||||
playbooks:
|
||||
converge: converge.yml
|
||||
prepare: ../common/prepare.yml
|
||||
side_effect: side_effect.yml
|
||||
env:
|
||||
ANSIBLE_ROLES_PATH: "../../.."
|
||||
|
||||
scenario:
|
||||
test_sequence:
|
||||
- dependency
|
||||
- cleanup
|
||||
- destroy
|
||||
- syntax
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
|
||||
verifier:
|
||||
name: ansible
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
- name: Update Docker mode runner
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
runner_name: "update-docker-runner"
|
||||
runner_mode: "docker"
|
||||
tasks:
|
||||
- name: Include Docker update tasks
|
||||
ansible.builtin.include_role:
|
||||
name: gitea-runner
|
||||
tasks_from: docker_update.yml
|
||||
|
||||
- name: Update Binary mode runner
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
runner_name: "update-binary-runner"
|
||||
runner_mode: "binary"
|
||||
tasks:
|
||||
- name: Include binary update tasks
|
||||
ansible.builtin.include_role:
|
||||
name: gitea-runner
|
||||
tasks_from: binary_update.yml
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
become: true
|
||||
pre_tasks:
|
||||
- name: Load role defaults
|
||||
ansible.builtin.include_vars:
|
||||
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
|
||||
tasks:
|
||||
- name: Check Docker runner image still exists after update
|
||||
ansible.builtin.command: docker images gitea/runner --format '{{ '{{' }} .Repository {{ '}}' }}:{{ '{{' }} .Tag {{ '}}' }}'
|
||||
register: image_list
|
||||
changed_when: false
|
||||
|
||||
- name: Assert runner image exists after update
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- "'gitea/runner' in image_list.stdout"
|
||||
fail_msg: "Runner Docker image missing after update"
|
||||
|
||||
- name: Check binary runner executable still exists after update
|
||||
ansible.builtin.stat:
|
||||
path: "{{ gitea_runner_binary_path }}"
|
||||
register: binary_stat
|
||||
|
||||
- name: Assert binary executable exists after update
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- binary_stat.stat.exists
|
||||
fail_msg: "Binary runner executable missing after update"
|
||||
|
||||
- name: Check systemd template still exists
|
||||
ansible.builtin.stat:
|
||||
path: "/etc/systemd/system/gitea-runner@.service"
|
||||
register: service_stat
|
||||
|
||||
- name: Assert systemd template still exists after update
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- service_stat.stat.exists
|
||||
fail_msg: "Systemd template unit missing after update"
|
||||
|
||||
- name: Check Docker mode data directory still exists
|
||||
ansible.builtin.stat:
|
||||
path: "/var/lib/gitea-runner/update-docker-runner"
|
||||
register: docker_data_stat
|
||||
|
||||
- name: Assert Docker mode data directory exists after update
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- docker_data_stat.stat.exists
|
||||
fail_msg: "Docker runner data directory missing after update"
|
||||
|
||||
- name: Check Binary mode data directory still exists
|
||||
ansible.builtin.stat:
|
||||
path: "/var/lib/gitea-runner/update-binary-runner"
|
||||
register: binary_data_stat
|
||||
|
||||
- name: Assert Binary mode data directory exists after update
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- binary_data_stat.stat.exists
|
||||
fail_msg: "Binary runner data directory missing after update"
|
||||
Reference in New Issue
Block a user