From eae37ecf2187e3c7e3e05d966aa8864538fda4d8 Mon Sep 17 00:00:00 2001 From: Mike Wiebe Date: Wed, 12 Jul 2017 13:09:27 -0400 Subject: [PATCH] Add integration tests for nxos_acl_interface (#26616) * Add integration tests for nxos_acl_interface --- test/integration/nxos.yaml | 8 +- .../nxos_acl_interface/defaults/main.yaml | 2 + .../targets/nxos_acl_interface/meta/main.yml | 2 + .../targets/nxos_acl_interface/tasks/cli.yaml | 15 +++ .../nxos_acl_interface/tasks/main.yaml | 3 + .../nxos_acl_interface/tasks/nxapi.yaml | 28 +++++ .../nxos_acl_interface/tests/cli/sanity.yaml | 118 ++++++++++++++++++ .../tests/nxapi/sanity.yaml | 118 ++++++++++++++++++ .../targets/prepare_nxos_tests/tasks/main.yml | 49 +++++++- 9 files changed, 340 insertions(+), 3 deletions(-) create mode 100644 test/integration/targets/nxos_acl_interface/defaults/main.yaml create mode 100644 test/integration/targets/nxos_acl_interface/meta/main.yml create mode 100644 test/integration/targets/nxos_acl_interface/tasks/cli.yaml create mode 100644 test/integration/targets/nxos_acl_interface/tasks/main.yaml create mode 100644 test/integration/targets/nxos_acl_interface/tasks/nxapi.yaml create mode 100644 test/integration/targets/nxos_acl_interface/tests/cli/sanity.yaml create mode 100644 test/integration/targets/nxos_acl_interface/tests/nxapi/sanity.yaml diff --git a/test/integration/nxos.yaml b/test/integration/nxos.yaml index e15004f4225..50b7e938d19 100644 --- a/test/integration/nxos.yaml +++ b/test/integration/nxos.yaml @@ -105,9 +105,15 @@ rescue: - set_fact: test_failed=true + - block: + - include_role: + name: nxos_acl_interface + when: "limit_to in ['*', 'nxos_acl_interface']" + rescue: + - set_fact: test_failed=true ########### - name: Has any previous test failed? fail: msg: "One or more tests failed, check log for details" - when: test_failed \ No newline at end of file + when: test_failed diff --git a/test/integration/targets/nxos_acl_interface/defaults/main.yaml b/test/integration/targets/nxos_acl_interface/defaults/main.yaml new file mode 100644 index 00000000000..5f709c5aac1 --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/test/integration/targets/nxos_acl_interface/meta/main.yml b/test/integration/targets/nxos_acl_interface/meta/main.yml new file mode 100644 index 00000000000..ae741cbdc71 --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - prepare_nxos_tests diff --git a/test/integration/targets/nxos_acl_interface/tasks/cli.yaml b/test/integration/targets/nxos_acl_interface/tasks/cli.yaml new file mode 100644 index 00000000000..d675462dd02 --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/tasks/cli.yaml @@ -0,0 +1,15 @@ +--- +- name: collect all cli test cases + find: + paths: "{{ role_path }}/tests/cli" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/test/integration/targets/nxos_acl_interface/tasks/main.yaml b/test/integration/targets/nxos_acl_interface/tasks/main.yaml new file mode 100644 index 00000000000..4b0f8c64d90 --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/tasks/main.yaml @@ -0,0 +1,3 @@ +--- +- { include: cli.yaml, tags: ['cli'] } +- { include: nxapi.yaml, tags: ['nxapi'] } diff --git a/test/integration/targets/nxos_acl_interface/tasks/nxapi.yaml b/test/integration/targets/nxos_acl_interface/tasks/nxapi.yaml new file mode 100644 index 00000000000..ea525379f7f --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/tasks/nxapi.yaml @@ -0,0 +1,28 @@ +--- +- name: collect all nxapi test cases + find: + paths: "{{ role_path }}/tests/nxapi" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" + +- name: enable nxapi + nxos_config: + lines: + - feature nxapi + - nxapi http port 80 + provider: "{{ cli }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run + +- name: disable nxapi + nxos_config: + lines: + - no feature nxapi + provider: "{{ cli }}" diff --git a/test/integration/targets/nxos_acl_interface/tests/cli/sanity.yaml b/test/integration/targets/nxos_acl_interface/tests/cli/sanity.yaml new file mode 100644 index 00000000000..72e72917981 --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/tests/cli/sanity.yaml @@ -0,0 +1,118 @@ +--- +- debug: msg="START TRANSPORT:CLI nxos_acl_interface sanity test" + +# Select interface for test +- set_fact: intname="{{ nxos_int1 }}" + +- name: "Interface selected for this test" + debug: msg="{{ intname }}" + +- name: "Setup: Put interface into a default state" + nxos_config: &default + lines: + - "default interface {{ intname }}" + provider: "{{ cli }}" + ignore_errors: yes + +- name: "Setup: Cleanup possibly existing acl" + nxos_acl: &remove + name: ANSIBLE_ACL + seq: 10 + state: absent + provider: "{{ cli }}" + ignore_errors: yes + +- name: Configure Supporting ACL + nxos_acl: + name: ANSIBLE_ACL + seq: 10 + action: permit + proto: tcp + src: 1.1.1.1/24 + dest: any + provider: "{{ cli }}" + +- block: + - name: Configure acl interface egress + nxos_acl_interface: &configure_egr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: egress + state: present + provider: "{{ cli }}" + register: result + + - assert: &true + that: + - "result.changed == true" + + - name: "Check Idempotence egress" + nxos_acl_interface: *configure_egr + register: result + + - assert: &false + that: + - "result.changed == false" + + - name: Configure acl interface ingress + nxos_acl_interface: &configure_ingr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: ingress + state: present + provider: "{{ cli }}" + register: result + + - assert: *true + + - name: "Check Idempotence ingress" + nxos_acl_interface: *configure_ingr + register: result + + - assert: *false + + - name: Cleanup acl interface egress + nxos_acl_interface: &cleanup_egr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: egress + state: absent + provider: "{{ cli }}" + register: result + + - assert: *true + + - name: "Check Idempotence egress cleanup" + nxos_acl_interface: *cleanup_egr + register: result + + - assert: *false + + - name: Cleanup acl interface ingress + nxos_acl_interface: &cleanup_ingr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: ingress + state: absent + provider: "{{ cli }}" + register: result + + - assert: *true + + - name: "Check Idempotence ingress cleanup" + nxos_acl_interface: *cleanup_ingr + register: result + + - assert: *false + + rescue: + - name: Put test interface into default state. + nxos_config: *default + ignore_errors: yes + + - name: Remove possible configured ACL + nxos_acl: *remove + ignore_errors: yes + + always: + - debug: msg="END TRANSPORT:CLI nxos_acl_interface sanity test" diff --git a/test/integration/targets/nxos_acl_interface/tests/nxapi/sanity.yaml b/test/integration/targets/nxos_acl_interface/tests/nxapi/sanity.yaml new file mode 100644 index 00000000000..c57dab5d164 --- /dev/null +++ b/test/integration/targets/nxos_acl_interface/tests/nxapi/sanity.yaml @@ -0,0 +1,118 @@ +--- +- debug: msg="START TRANSPORT:NXAPI nxos_acl_interface sanity test" + +# Select interface for test +- set_fact: intname="{{ nxos_int1 }}" + +- name: "Interface selected for this test" + debug: msg="{{ intname }}" + +- name: "Setup: Put interface into a default state" + nxos_config: &default + lines: + - "default interface {{ intname }}" + provider: "{{ nxapi }}" + ignore_errors: yes + +- name: "Setup: Cleanup possibly existing acl" + nxos_acl: &remove + name: ANSIBLE_ACL + seq: 10 + state: absent + provider: "{{ nxapi }}" + ignore_errors: yes + +- name: Configure Supporting ACL + nxos_acl: + name: ANSIBLE_ACL + seq: 10 + action: permit + proto: tcp + src: 1.1.1.1/24 + dest: any + provider: "{{ nxapi }}" + +- block: + - name: Configure acl interface egress + nxos_acl_interface: &configure_egr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: egress + state: present + provider: "{{ nxapi }}" + register: result + + - assert: &true + that: + - "result.changed == true" + + - name: "Check Idempotence egress" + nxos_acl_interface: *configure_egr + register: result + + - assert: &false + that: + - "result.changed == false" + + - name: Configure acl interface ingress + nxos_acl_interface: &configure_ingr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: ingress + state: present + provider: "{{ nxapi }}" + register: result + + - assert: *true + + - name: "Check Idempotence ingress" + nxos_acl_interface: *configure_ingr + register: result + + - assert: *false + + - name: Cleanup acl interface egress + nxos_acl_interface: &cleanup_egr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: egress + state: absent + provider: "{{ nxapi }}" + register: result + + - assert: *true + + - name: "Check Idempotence egress cleanup" + nxos_acl_interface: *cleanup_egr + register: result + + - assert: *false + + - name: Cleanup acl interface ingress + nxos_acl_interface: &cleanup_ingr + name: ANSIBLE_ACL + interface: "{{ intname }}" + direction: ingress + state: absent + provider: "{{ nxapi }}" + register: result + + - assert: *true + + - name: "Check Idempotence ingress cleanup" + nxos_acl_interface: *cleanup_ingr + register: result + + - assert: *false + + rescue: + - name: Put test interface into default state. + nxos_config: *default + ignore_errors: yes + + - name: Remove possible configured ACL + nxos_acl: *remove + ignore_errors: yes + + always: + - debug: msg="END TRANSPORT:NXAPI nxos_acl_interface sanity test" diff --git a/test/integration/targets/prepare_nxos_tests/tasks/main.yml b/test/integration/targets/prepare_nxos_tests/tasks/main.yml index 80b60240e0f..b0f67b5a9a6 100644 --- a/test/integration/targets/prepare_nxos_tests/tasks/main.yml +++ b/test/integration/targets/prepare_nxos_tests/tasks/main.yml @@ -1,9 +1,54 @@ +--- # NXAPI is enabled differently on NX-OS platforms. # Try both commands to enable NXAPI and ignore any errors. - name: enable nxapi on remote device nxos_config: lines: - - feature cli - - feature cli sandbox + - feature nxapi provider: "{{ cli }}" ignore_errors: yes + +# Gather the list of interfaces on this device and make the list +# available for integration tests that need them. +# +# Usage in integration test playbook: +# +# - set_fact: testint="{{ nxos_int1 }}" +# +# - name: "Interface selected for this test" +# debug: msg="{{ testint }}" +# +- name: "Collect interface list" + nxos_command: + commands: ['show interface brief | json'] + provider: "{{ nxapi }}" + timeout: 60 + register: intout + +- set_fact: intdataraw="{{ intout.stdout_lines[0]['TABLE_interface']['ROW_interface'] }}" +- set_fact: nxos_int1="{{ intdataraw[1].interface }}" +- set_fact: nxos_int2="{{ intdataraw[2].interface }}" +- set_fact: nxos_int3="{{ intdataraw[3].interface }}" + +# Get platform information for this device +# +# Usage in integration test playbook: +# +# - name: "nxos platform " +# debug: msg="{{ platform }}" +# +- name: "Gather platform info" + nxos_command: + commands: ['sh inventory | json'] + provider: "{{ cli }}" + register: nxos_inventory_output + +- set_fact: platform="{{ nxos_inventory_output.stdout_lines[0]['TABLE_inv']['ROW_inv'][0]['productid'].split('-')[0] }}" + +# Check if platform is fretta +- set_fact: fretta={% for row in nxos_inventory_output.stdout_lines[0]['TABLE_inv']['ROW_inv'] if 'FM-R' in row['productid'] %}"true"{% endfor %} + when: platform | match("N9K") + +# Set platform to N9K-F for fretta +- set_fact: platform="N9K-F" + when: (platform | match("N9K")) and (fretta | search("true"))