- name: test slurping a non-existent file
  slurp:
    src: '{{ remote_tmp_dir }}/i_do_not_exist'
  register: slurp_missing
  ignore_errors: yes

- name: Create a directory to test with
  file:
    path: '{{ remote_tmp_dir }}/baz/'
    state: directory

- name: test slurping a directory
  slurp:
    src: '{{ remote_tmp_dir }}/baz'
  register: slurp_dir
  ignore_errors: yes

# Ensure unreadable file and directory handling and error messages
# https://github.com/ansible/ansible/issues/67340

- name: create unreadable file
  copy:
    content: "Hello, World!"
    dest: "{{ remote_tmp_dir }}/qux.txt"
    mode: '0600'
    owner: root

- name: test slurp unreadable file
  slurp:
    src: "{{ remote_tmp_dir }}/qux.txt"
  register: slurp_unreadable_file
  vars: &test_user_become
    ansible_become: yes
    ansible_become_user: "{{ test_user_name }}"
    ansible_become_password: "{{ test_user_plaintext_password }}"
  ignore_errors: yes

- name: create unreadable directory
  file:
    path: "{{ remote_tmp_dir }}/test_data"
    state: directory
    mode: '0700'
    owner: root

- name: test slurp unreadable directory
  slurp:
    src: "{{ remote_tmp_dir }}/test_data"
  register: slurp_unreadable_dir
  vars: *test_user_become
  ignore_errors: yes

- name: Try to access file as directory
  slurp:
    src: "{{ remote_tmp_dir }}/qux.txt/somefile"
  ignore_errors: yes
  register: slurp_path_file_as_dir

- name: check slurp failures
  assert:
    that:
      - slurp_missing is failed
      - slurp_missing.msg is search('file not found')
      - slurp_missing is not changed
      - slurp_unreadable_file is failed
      - slurp_unreadable_file.msg is regex('^file is not readable:')
      - slurp_unreadable_file is not changed
      - slurp_unreadable_dir is failed
      - slurp_unreadable_dir.msg is regex('^file is not readable:')
      - slurp_unreadable_dir is not changed
      - slurp_path_file_as_dir is failed
      - slurp_path_file_as_dir is search('unable to slurp file')
      - slurp_dir is failed
      - slurp_dir.msg is search('source is a directory and must be a file')
      - slurp_dir is not changed
