# Test code for the vmware_dvswitch module.
# Copyright: (c) 2017, Abhijeet Kasurde <akasurde@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

- import_role:
    name: prepare_vmware_tests
  vars:
    setup_datacenter: true

- &dvs_data
  name: Add distributed vSwitch
  vmware_dvswitch:
    validate_certs: False
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    datacenter_name: "{{ dc1 }}"
    state: present
    switch_name: dvswitch_0001
    mtu: 9000
    uplink_quantity: 2
    discovery_proto: lldp
    discovery_operation: both
  register: dvs_result_0001

- name: Ensure distributed vswitch is present
  assert:
    that:
      - dvs_result_0001.changed

- name: Create a VM folder on given Datacenter
  vcenter_folder:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter: '{{ dc1 }}'
    folder_name: network_folder
    folder_type: network
    state: present
    validate_certs: no
  register:
    network_folder_result

- name: Add distributed vSwitch using folder
  vmware_dvswitch:
    validate_certs: False
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    folder: "{{ network_folder_result.result.path }}"
    state: present
    switch_name: dvswitch_0002
    mtu: 9000
    uplink_quantity: 2
    discovery_proto: lldp
    discovery_operation: both
  register: dvs_result_0002

- name: Ensure distributed vswitch is present
  assert:
    that:
      - dvs_result_0002.changed

# vcsim doesn't support ldp check (self.dvs.config.linkDiscoveryProtocolConfig.protocol)
- when: vcsim is not defined
  block:
  - <<: *dvs_data
    name: add distributed vSwitch again
    register: dvs_result_0002

  - name: ensure distributed vswitch is present
    assert:
      that:
        - not dvs_result_0002.changed

# FIXME: Remove this testcase from block once vcsim supports distributed vswitch delete method
# Currently, vcsim does not support distributed vswitch delete option,
# Once this feature is available we can move this out of this block

# Testcase 0003: Add Distributed vSwitch
  - name: delete the distributed vSwitch
    vmware_dvswitch:
      validate_certs: False
      hostname: "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      datacenter_name: "{{ dc1 }}"
      state: absent
      switch_name: '{{ item }}'
    loop:
      - dvswitch_0001
      - dvswitch_0002
    register: dvswitch_delete
  - debug: var=dvswitch_delete

  - name: Ensure the state has changed
    assert:
      that:
        - dvswitch_delete.results[0] is changed
        - dvswitch_delete.results[1] is changed
