diff --git a/test/integration/targets/junos_smoke/defaults/main.yaml b/test/integration/targets/junos_smoke/defaults/main.yaml new file mode 100644 index 0000000000..9ef5ba5165 --- /dev/null +++ b/test/integration/targets/junos_smoke/defaults/main.yaml @@ -0,0 +1,3 @@ +--- +testcase: "*" +test_items: [] diff --git a/test/integration/targets/junos_smoke/meta/main.yml b/test/integration/targets/junos_smoke/meta/main.yml new file mode 100644 index 0000000000..191a0f2ea1 --- /dev/null +++ b/test/integration/targets/junos_smoke/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - prepare_junos_tests diff --git a/test/integration/targets/junos_smoke/tasks/main.yaml b/test/integration/targets/junos_smoke/tasks/main.yaml new file mode 100644 index 0000000000..cc27f174fd --- /dev/null +++ b/test/integration/targets/junos_smoke/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: netconf.yaml, tags: ['netconf'] } diff --git a/test/integration/targets/junos_smoke/tasks/netconf.yaml b/test/integration/targets/junos_smoke/tasks/netconf.yaml new file mode 100644 index 0000000000..9550210102 --- /dev/null +++ b/test/integration/targets/junos_smoke/tasks/netconf.yaml @@ -0,0 +1,21 @@ +- name: collect netconf test cases + find: + paths: "{{ role_path }}/tests/netconf" + patterns: "{{ testcase }}.yaml" + connection: local + register: test_cases + +- name: set test_items + set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" + +- name: run test case (connection=netconf) + include: "{{ test_case_to_run }} ansible_connection=netconf" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run + +- name: run test case (connection=local) + include: "{{ test_case_to_run }} ansible_connection=local" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/test/integration/targets/junos_smoke/tests/netconf/common_utils.yaml b/test/integration/targets/junos_smoke/tests/netconf/common_utils.yaml new file mode 100644 index 0000000000..51c4bbc994 --- /dev/null +++ b/test/integration/targets/junos_smoke/tests/netconf/common_utils.yaml @@ -0,0 +1,56 @@ +--- + # junos interface -> remove_default_spec() conditional() + - debug: msg="START junos_interface netconf/common_utils.yaml on connection={{ ansible_connection }}" + + - name: get facts + junos_facts: + provider: "{{ netconf }}" + register: result + + + - name: Define interface name for vSRX + set_fact: + intf_name: pp0 + when: result['ansible_facts']['ansible_net_model'] is search("vSRX*") + + - name: Define interface name for vsrx + set_fact: + intf_name: pp0 + when: result['ansible_facts']['ansible_net_model'] is search("vsrx") + + - name: Define interface name for vQFX + set_fact: + intf_name: gr-0/0/0 + when: result['ansible_facts']['ansible_net_model'] is search("vqfx*") + + - name: Check intent arguments + junos_interface: + name: "{{ intf_name }}" + state: up + tx_rate: ge(0) + rx_rate: le(0) + provider: "{{ netconf }}" + register: result + + - assert: + that: + - "result.failed == false" + + - name: Check intent arguments (failed condition) + junos_interface: + name: "{{ intf_name }}" + state: down + tx_rate: gt(0) + rx_rate: lt(0) + provider: "{{ netconf }}" + ignore_errors: yes + register: result + + - assert: + that: + - "result.failed == true" + - "'state eq(down)' in result.failed_conditions" + - "'tx_rate gt(0)' in result.failed_conditions" + - "'rx_rate lt(0)' in result.failed_conditions" + + - debug: msg="END junos_interface netconf/common_utils.yaml on connection={{ ansible_connection }}" diff --git a/test/integration/targets/junos_smoke/tests/netconf/module_utils_junos.yaml b/test/integration/targets/junos_smoke/tests/netconf/module_utils_junos.yaml new file mode 100644 index 0000000000..9376968584 --- /dev/null +++ b/test/integration/targets/junos_smoke/tests/netconf/module_utils_junos.yaml @@ -0,0 +1,99 @@ +--- +- debug: msg="START netconf/module_utils_junos.yaml on connection={{ ansible_connection }}" + +# hit get_capabilities() + +- name: get output for single command + junos_command: + commands: ['show version'] + format: json + provider: "{{ netconf }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + - "result.stdout_lines is defined" + +# hit commit_configuration() +- name: setup - remove login banner + junos_banner: + banner: login + state: absent + provider: "{{ netconf }}" + +- name: Create login banner + junos_banner: + banner: login + text: this is my login banner + state: present + provider: "{{ netconf }}" + register: result + +- name: Get running configuration + junos_rpc: + rpc: get-configuration + provider: "{{ netconf }}" + register: config + +- assert: + that: + - "result.changed == true" + - "'this is my login banner' in config.xml" + +# hit discard_changes() +- name: check mode + junos_banner: + banner: login + text: this is not the banner you're looking for + state: present + provider: "{{ netconf }}" + register: result + check_mode: yes + +- assert: + that: + - "result.changed == true" + - "result.failed == false" + + +# hit field_top in map_obj_to_ele +- name: setup - remove interface address + net_l3_interface: + name: ge-0/0/1 + ipv4: 1.1.1.1 + ipv6: fd5d:12c9:2201:1::1 + state: absent + provider: "{{ netconf }}" + +- name: Configure interface address using platform agnostic module + net_l3_interface: + name: ge-0/0/1 + ipv4: 1.1.1.1 + ipv6: fd5d:12c9:2201:1::1 + state: present + provider: "{{ netconf }}" + register: result + +- name: Get running configuration + junos_rpc: + rpc: get-configuration + provider: "{{ netconf }}" + register: config + +- assert: + that: + - "result.changed == true" + - "'1.1.1.1/32' in config.xml" + - "'fd5d:12c9:2201:1::1/128' in config.xml" + - result.diff.prepared is search("\+ *address 1.1.1.1/32") + - result.diff.prepared is search("\+ *address fd5d:12c9:2201:1::1/128") + +- name: teardown - remove interface address + net_l3_interface: + name: ge-0/0/1 + ipv4: 1.1.1.1 + ipv6: fd5d:12c9:2201:1::1 + state: absent + provider: "{{ netconf }}"