---
####################################################################
# WARNING: These are designed specifically for Ansible tests       #
# and should not be used as examples of how to write Ansible roles #
####################################################################

# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

# TODO: Our current implementation does not handle SMTP authentication

# NOTE: If the system does not support smtpd-tls (python 2.6 and older) we do basic tests
- name: Attempt to install smtpd-tls
  pip:
    name: smtpd-tls
    state: present
  ignore_errors: yes
  register: smtpd_tls

- name: Install test smtpserver
  copy:
    src: '{{ item }}'
    dest: '{{ remote_tmp_dir }}/{{ item }}'
  loop:
  - smtpserver.py
  - smtpserver.crt
  - smtpserver.key

# FIXME: Verify the mail after it was send would be nice
#        This would require either dumping the content, or registering async task output
- name: Start test smtpserver
  shell: '{{ ansible_python.executable }} {{ remote_tmp_dir }}/smtpserver.py 10025:10465'
  async: 45
  poll: 0
  register: smtpserver

- name: Send a basic test-mail
  mail:
    port: 10025
    subject: Test mail 1 (smtp)
    secure: never

- name: Send a test-mail with body and specific recipient
  mail:
    port: 10025
    from: ansible@localhost
    to: root@localhost
    subject: Test mail 2 (smtp + body)
    body: Test body 2
    secure: never

- name: Send a test-mail with attachment
  mail:
    port: 10025
    from: ansible@localhost
    to: root@localhost
    subject: Test mail 3 (smtp + body + attachment)
    body: Test body 3
    attach: /etc/group
    secure: never

# NOTE: This might fail if smtpd-tls is missing or python 2.7.8 or older is used
- name: Send a test-mail using starttls
  mail:
    port: 10025
    from: ansible@localhost
    to: root@localhost
    subject: Test mail 4 (smtp + starttls + body + attachment)
    body: Test body 4
    attach: /etc/group
    secure: starttls
  ignore_errors: yes
  register: starttls_support

# NOTE: This might fail if smtpd-tls is missing or python 2.7.8 or older is used
- name: Send a test-mail using TLS
  mail:
    port: 10465
    from: ansible@localhost
    to: root@localhost
    subject: Test mail 5 (smtp + tls + body + attachment)
    body: Test body 5
    attach: /etc/group
    secure: always
  ignore_errors: yes
  register: tls_support

- fail:
    msg: Sending mail using starttls failed.
  when: smtpd_tls is succeeded and starttls_support is failed and tls_support is succeeded

- fail:
    msg: Send mail using TLS failed.
  when: smtpd_tls is succeeded and tls_support is failed and starttls_support is succeeded

- name: Send a test-mail with body, specific recipient and specific ehlohost
  mail:
    port: 10025
    ehlohost: some.domain.tld
    from: ansible@localhost
    to: root@localhost
    subject: Test mail 6 (smtp + body + ehlohost)
    body: Test body 6
    secure: never
