---
- debug: msg="START netconf/changeport.yaml on connection={{ ansible_connection }}"

- name: Setup
  junos_netconf:
    state: present

###################################

- name: Change port
  junos_netconf:
    state: present
    netconf_port: 8022
  register: result

- assert:
    that:
      - "result.changed == true"

- name: idempotent tests
  junos_netconf:
    state: present
    netconf_port: 8022
  register: result

- assert:
    that:
      - "result.changed == false"

- name: wait for netconf port tcp/8022 to be open
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 8022
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can communicate over 8022
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=8022 is_ignore_errors=false"

- name: wait for netconf port tcp/830 to be closed
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 830
    state: stopped
  with_inventory_hostnames: junos

# This protects against the port override above not being honoured and a bug setting the port
- name: Ensure we can NOT communicate over default port
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=true"

- assert:
    that:
      - "result.failed == true"

- name: Set back netconf to default port
  junos_netconf:
    state: present

- name: wait for netconf port tcp/830 to be open
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 830
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can communicate over netconf
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=false"

- name: Change port (check mode)
  junos_netconf:
    state: present
    netconf_port: 12345
  register: result
  check_mode: true

- assert:
    that:
      - "result.changed == true"

- name: wait for netconf port tcp/12345 to be closed
  wait_for:
    host: "{{ hostvars[item].ansible_host }}"
    port: 12345
    state: stopped
  with_inventory_hostnames: junos

- name: Reset ansible connections
  meta: reset_connection

- name: Ensure we can NOT communicate over non-default port
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=12345 is_ignore_errors=true"

- assert:
    that:
      - "result.failed == true"

- name: Ensure we can communicate over default port
  include: "{{ role_path }}/tests/utils/junos_command.yaml ansible_connection=netconf ansible_port=830 is_ignore_errors=false"

- debug: msg="END netconf/changeport.yaml on connection={{ ansible_connection }}"