- name: Test the fetch-zuul-cloner role
  hosts: all
  vars:
    destination: "/usr/zuul-env/bin/zuul-cloner"
    repo_src_dir: "/home/zuul/src/git.openstack.org"
  roles:
    - role: fetch-zuul-cloner
  post_tasks:
    - name: Check that the directory exists
      file:
        path: "{{ destination | dirname }}"
        state: directory
      register: directory

    - name: Check that the zuul-cloner shim exists
      stat:
        path: "{{ destination }}"
      register: cloner

    - name: Validate that the shim was installed successfully
      assert:
        that:
          - not directory | changed
          - directory | succeeded
          - cloner.stat.exists
          - cloner.stat.mode == "0755"

    - name: Zuul clone something in required-projects
      shell:
        executable: /bin/bash
        cmd: |
          CLONEMAP=`mktemp`
          function cleanup {
              rm -f $CLONEMAP
          }
          trap cleanup EXIT
          cat > $CLONEMAP << EOF
          clonemap:
            - name: openstack-infra/project-config
              dest: {{ ansible_user_dir }}
          EOF
          /usr/zuul-env/bin/zuul-cloner -m $CLONEMAP \
              --cache-dir /opt/git git://git.openstack.org \
              openstack-infra/project-config
      register: clone_with_required

    - name: Check if repository was cloned
      stat:
        path: "{{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/project-config"
      register: with_required_stat

    - name: Zuul clone something not in required-projects
      shell:
        executable: /bin/bash
        cmd: |
          CLONEMAP=`mktemp`
          function cleanup {
              rm -f $CLONEMAP
          }
          trap cleanup EXIT
          cat > $CLONEMAP << EOF
          clonemap:
            - name: openstack-infra/jenkins-job-builder
              dest: {{ ansible_user_dir }}
          EOF
          /usr/zuul-env/bin/zuul-cloner -m $CLONEMAP \
              --cache-dir /opt/git git://git.openstack.org \
              openstack-infra/jenkins-job-builder
      ignore_errors: yes
      register: clone_without_required

    - name: Check if repository was cloned
      stat:
        path: "{{ ansible_user_dir }}/src/git.openstack.org/opentack-infra/jenkins-job-builder"
      register: without_required_stat

    - name: Validate zuul-cloner shim results
      assert:
        that:
          - clone_with_required | succeeded
          - clone_with_required | changed
          - with_required_stat.stat.exists
          - clone_without_required | failed
          - not without_required_stat.stat.exists