---
- include_tasks: inactive-rule-set-tests.yaml

# ============================================================
# There can only be a single active rule set, tests that
# relies on the active state of the rule cannot be run in
# parallel.
# To prevent failures due to parallel runs in the integration
# builds, the below block creates a lock to ensure that only
# one process will be running these tests in the same region
# and same AWS account.
# See obtain-lock.yaml for explanation of how the lock is
# constructed.
# ============================================================
- name: Active Rule Set Tests
  block:
    - name: Obtain Lock
      include_tasks: obtain-lock-wrapper.yaml
      # Use of loop here is a workaround for lack of support for
      # do-until loops on includes. See:
      # https://github.com/ansible/ansible/issues/17098
      loop: "{{ range(0, max_obtain_lock_attempts, 1)|list }}"
      loop_control:
        loop_var: obtain_lock_attempt

      # Because of the above workaround we have to explicitly check
      # that the lock was obtained
    - name: Check Obtained Lock
      assert:
        msg: "Could not obtain lock after {{ max_obtain_lock_attempts }} attempts."
        that: won_lock|bool

    - include_tasks: active-rule-set-tests.yaml

  always:
    - include_tasks: cleanup-lock.yaml
