# test code for the win_service module
# (c) 2014, Chris Church <chris@ninemoreminutes.com>

# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.

- name: test win_service module with short name
  win_service: name="{{ test_win_service_name }}"
  register: win_service_name

- name: check win_service result with short name
  assert:
    that:
      - "not win_service_name|changed"
      - "win_service_name.name"
      - "win_service_name.display_name"
      - "win_service_name.start_mode"
      - "win_service_name.state"

- name: test win_service module with display name
  win_service: name="{{ test_win_service_display_name }}"
  register: win_service_display_name

- name: check win_service result with display name
  assert:
    that:
      - "not win_service_display_name|changed"
      - "win_service_display_name.name"
      - "win_service_display_name.display_name"
      - "win_service_display_name.start_mode"
      - "win_service_display_name.state"

- name: test win_service module with invalid name
  win_service: name="iamnotaservice"
  ignore_errors: true
  register: win_service_invalid

- name: check win_service result with invalid_name
  assert:
    that:
      - "win_service_invalid|failed"
      - "win_service_invalid.msg"

- name: make sure the service is stopped and disabled
  win_service: name="{{ test_win_service_name }}" state=stopped start_mode=disabled
  register: win_service_stopped_disabled

- name: check result of disabling and stopping the service
  assert:
    that:
      - "win_service_stopped_disabled.start_mode == 'disabled'"
      - "win_service_stopped_disabled.state == 'stopped'"

- name: try to start the disabled service
  win_service: name="{{ test_win_service_name }}" state=started
  register: win_service_start_disabled
  ignore_errors: true

- name: check that starting the disabled service fails
  assert:
    that:
      - "win_service_start_disabled|failed"
      - "win_service_start_disabled.msg"

- name: enable the service for manual startup
  win_service: name="{{ test_win_service_name }}" start_mode=manual
  register: win_service_manual_start_mode

- name: check that enabling the service succeeds for manual startup
  assert:
    that:
      - "win_service_manual_start_mode|changed"
      - "win_service_manual_start_mode.start_mode == 'manual'"
      - "win_service_manual_start_mode.state == 'stopped'"

- name: enable the service again for manual startup
  win_service: name="{{ test_win_service_name }}" start_mode=manual
  register: win_service_manual_start_mode_again

- name: check that enabling the service succeeds for manual startup
  assert:
    that:
      - "not win_service_manual_start_mode_again|changed"
      - "win_service_manual_start_mode_again.start_mode == 'manual'"
      - "win_service_manual_start_mode_again.state == 'stopped'"

- name: try to start the manual service
  win_service: name="{{ test_win_service_name }}" state=started
  register: win_service_start_manual

- name: check that starting the manual service succeeds
  assert:
    that:
      - "win_service_start_manual|changed"
      - "win_service_start_manual.start_mode == 'manual'"
      - "win_service_start_manual.state == 'running'"

- name: try to start the manual service again
  win_service: name="{{ test_win_service_name }}" state=started
  register: win_service_start_manual_again

- name: check that starting the manual service again succeeds without changes
  assert:
    that:
      - "not win_service_start_manual_again|changed"
      - "win_service_start_manual_again.start_mode == 'manual'"
      - "win_service_start_manual_again.state == 'running'"

- name: enable the service for automatic startup
  win_service: name="{{ test_win_service_name }}" start_mode=auto
  register: win_service_auto_start_mode

- name: check that enabling the service succeeds for automatic startup
  assert:
    that:
      - "win_service_auto_start_mode|changed"
      - "win_service_auto_start_mode.start_mode == 'auto'"
      - "win_service_auto_start_mode.state == 'running'"

- name: enable the service again for automatic startup
  win_service: name="{{ test_win_service_name }}" start_mode=auto
  register: win_service_auto_start_mode_again

- name: check that enabling the service succeeds for automatic startup without changes
  assert:
    that:
      - "not win_service_auto_start_mode_again|changed"
      - "win_service_auto_start_mode_again.start_mode == 'auto'"
      - "win_service_auto_start_mode_again.state == 'running'"

- name: restart the service
  win_service: name="{{ test_win_service_name }}" state=restarted
  register: win_service_restart_auto

- name: check that restarting the service succeeds with changes
  assert:
    that:
      - "win_service_restart_auto|changed"
      - "win_service_restart_auto.start_mode == 'auto'"
      - "win_service_restart_auto.state == 'running'"

- name: disable the service again
  win_service: name="{{ test_win_service_name }}" start_mode=disabled
  register: win_service_disabled_start_mode

- name: check that disabling the service succeeds, service is still running
  assert:
    that:
      - "win_service_disabled_start_mode|changed"
      - "win_service_disabled_start_mode.start_mode == 'disabled'"
      - "win_service_disabled_start_mode.state == 'running'"

- name: disable the service again
  win_service: name="{{ test_win_service_name }}" start_mode=disabled
  register: win_service_disabled_start_mode_again

- name: check that disabling the service succeeds again
  assert:
    that:
      - "not win_service_disabled_start_mode_again|changed"
      - "win_service_disabled_start_mode_again.start_mode == 'disabled'"
      - "win_service_disabled_start_mode_again.state == 'running'"

- name: stop the service
  win_service: name="{{ test_win_service_name }}" state=stopped
  register: win_service_stop_disabled

- name: check that stopping the service succeeds with changes
  assert:
    that:
      - "win_service_stop_disabled|changed"
      - "win_service_stop_disabled.start_mode == 'disabled'"
      - "win_service_stop_disabled.state == 'stopped'"

- name: stop the service again
  win_service: name="{{ test_win_service_name }}" state=stopped
  register: win_service_stop_disabled_again

- name: check that stopping the service again succeeds without changes
  assert:
    that:
      - "not win_service_stop_disabled_again|changed"
      - "win_service_stop_disabled_again.start_mode == 'disabled'"
      - "win_service_stop_disabled_again.state == 'stopped'"
