diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:03:42 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:03:42 +0000 |
commit | 66cec45960ce1d9c794e9399de15c138acb18aed (patch) | |
tree | 59cd19d69e9d56b7989b080da7c20ef1a3fe2a5a /ansible_collections/dellemc/os6/tests | |
parent | Initial commit. (diff) | |
download | ansible-66cec45960ce1d9c794e9399de15c138acb18aed.tar.xz ansible-66cec45960ce1d9c794e9399de15c138acb18aed.zip |
Adding upstream version 7.3.0+dfsg.upstream/7.3.0+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/dellemc/os6/tests')
49 files changed, 1544 insertions, 0 deletions
diff --git a/ansible_collections/dellemc/os6/tests/.gitignore b/ansible_collections/dellemc/os6/tests/.gitignore new file mode 100644 index 00000000..ea1472ec --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/.gitignore @@ -0,0 +1 @@ +output/ diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/defaults/main.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/defaults/main.yaml new file mode 100644 index 00000000..5f709c5a --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/cli.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/cli.yaml new file mode 100644 index 00000000..4cf68f17 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/cli.yaml @@ -0,0 +1,13 @@ +--- +- 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: "{{ item }}" + with_items: "{{ test_items }}"
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/main.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/main.yaml new file mode 100644 index 00000000..d4898c29 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: cli.yaml, tags: ['cli'] }
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/bad_operator.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/bad_operator.yaml new file mode 100644 index 00000000..95770c6a --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/bad_operator.yaml @@ -0,0 +1,20 @@ +--- +- debug: msg="START cli/bad_operator.yaml" + +- name: test bad operator + os6_command: + commands: + - show version + - show interfaces GigabitEthernet 1/0/1 + wait_for: + - "result[0] contains 'Description: Foo'" + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "result.failed == true" + - "result.msg is defined" + +- debug: msg="END cli/bad_operator.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/contains.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/contains.yaml new file mode 100644 index 00000000..dd0f7a78 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/contains.yaml @@ -0,0 +1,20 @@ +--- +- debug: msg="START cli/contains.yaml" + +- name: test contains operator + os6_command: + commands: + - show version + - show interfaces GigabitEthernet 1/0/1 + wait_for: + - "result[0] contains 5" + - "result[1] contains Access" + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + +- debug: msg="END cli/contains.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/invalid.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/invalid.yaml new file mode 100644 index 00000000..493196df --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/invalid.yaml @@ -0,0 +1,28 @@ +--- +- debug: msg="START cli/invalid.yaml" + +- name: run invalid command + os6_command: + commands: ['show foo'] + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "result.failed" + +- name: run commands that include invalid command + os6_command: + commands: + - show version + - show foo + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "result.failed" + +- debug: msg="END cli/invalid.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/output.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/output.yaml new file mode 100644 index 00000000..8a87d5da --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/output.yaml @@ -0,0 +1,29 @@ +--- +- debug: msg="START cli/output.yaml" + +- name: get output for single command + os6_command: + commands: ['show version'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + +- name: get output for multiple commands + os6_command: + commands: + - show version + - show interfaces + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + - "result.stdout | length == 2" + +- debug: msg="END cli/output.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/timeout.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/timeout.yaml new file mode 100644 index 00000000..f1ea515d --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/timeout.yaml @@ -0,0 +1,19 @@ +--- +- debug: msg="START cli/timeout.yaml" + +- name: test bad condition + os6_command: + commands: + - show version + wait_for: + - "result[0] contains bad_value_string" + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "result.failed == true" + - "result.msg is defined" + +- debug: msg="END cli/timeout.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/defaults/main.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/defaults/main.yaml new file mode 100644 index 00000000..5f709c5a --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/cli.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/cli.yaml new file mode 100644 index 00000000..4cf68f17 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/cli.yaml @@ -0,0 +1,13 @@ +--- +- 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: "{{ item }}" + with_items: "{{ test_items }}"
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/main.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/main.yaml new file mode 100644 index 00000000..d4898c29 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: cli.yaml, tags: ['cli'] }
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/backup.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/backup.yaml new file mode 100644 index 00000000..20d81a3d --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/backup.yaml @@ -0,0 +1,53 @@ +--- +- debug: msg="START cli/backup.yaml" + +- name: setup + os6_config: + commands: + - no interface loopback 62 + provider: "{{ cli }}" + ignore_errors: yes + +- name: collect any backup files + find: + paths: "{{ role_path }}/backup" + pattern: "{{ inventory_hostname }}_config*" + register: backup_files + delegate_to: localhost + +- name: delete backup files + file: + path: "{{ item.path }}" + state: absent + with_items: "{{ backup_files.files }}" + +- name: configure device with config + os6_config: + src: basic/config.j2 + backup: yes + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "result.updates is defined" + +- name: collect any backup files + find: + paths: "{{ role_path }}/backup" + pattern: "{{ inventory_hostname }}_config*" + register: backup_files + delegate_to: localhost + +- assert: + that: + - "backup_files.files is defined" + +- name: teardown + os6_config: + commands: + - no interface loopback 62 + provider: "{{ cli }}" + +- debug: msg="END cli/backup.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/basic.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/basic.yaml new file mode 100644 index 00000000..f4b1d0b6 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/basic.yaml @@ -0,0 +1,38 @@ +--- +- debug: msg="START cli/basic.yaml" + +- name: setup + os6_config: + commands: + - no interface loopback 62 + provider: "{{ cli }}" + ignore_errors: yes + +- name: configure device with config + os6_config: + src: basic/config.j2 + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "result.updates is defined" + +- name: check device with config + os6_config: + src: basic/config.j2 + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.updates is defined" + +- name: teardown + os6_config: + commands: + - no interface loopback 62 + provider: "{{ cli }}" +- debug: msg="END cli/basic.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/defaults.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/defaults.yaml new file mode 100644 index 00000000..9969a951 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/defaults.yaml @@ -0,0 +1,43 @@ +--- +- debug: msg="START cli/defaults.yaml" + +- name: setup + os6_config: + commands: + - no interface loopback 63 + provider: "{{ cli }}" + ignore_errors: yes + +- name: configure device with defaults included + os6_config: + src: defaults/config.j2 + provider: "{{ cli }}" + register: result + +- debug: var=result + +- assert: + that: + - "result.changed == true" + - "result.updates is defined" + +- name: check device with defaults included + os6_config: + src: defaults/config.j2 + provider: "{{ cli }}" + register: result + +- debug: var=result + +- assert: + that: + - "result.changed == false" + - "result.updates is defined" + +- name: teardown + os6_config: + commands: + - no interface loopback 63 + provider: "{{ cli }}" + +- debug: msg="END cli/defaults.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/force.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/force.yaml new file mode 100644 index 00000000..37c2c4b2 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/force.yaml @@ -0,0 +1,41 @@ +--- +- debug: msg="START cli/force.yaml" + +- name: setup + os6_config: + commands: + - interface loopback 62 + provider: "{{ cli }}" + ignore_errors: yes + +- name: configure device with config + os6_config: + src: basic/config.j2 + provider: "{{ cli }}" + match: none + register: result + +- assert: + that: + - "result.changed == true" + - "result.updates is defined" + +- name: check device with config + os6_config: + src: basic/config.j2 + provider: "{{ cli }}" + match: none + register: result + +- assert: + that: + - "result.changed == true" + - "result.updates is defined" + +- name: teardown + os6_config: + commands: + - no interface loopback 62 + provider: "{{ cli }}" + +- debug: msg="END cli/force.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel.yaml new file mode 100644 index 00000000..b978e8b3 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel.yaml @@ -0,0 +1,42 @@ +--- +- debug: msg="START cli/sublevel.yaml" + +- name: setup test + os6_config: + lines: + - 'no ip access-list test' + provider: "{{ cli }}" + match: none + +- name: configure sub level command + os6_config: + lines: ['1000 permit every log'] + parents: ['ip access-list test'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'1000 permit every log' in result.updates" + +- name: configure sub level command idempotent check + os6_config: + lines: ['1000 permit every log'] + parents: ['ip access-list test'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os6_config: + lines: + - 'no ip access-list test' + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/sublevel.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_block.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_block.yaml new file mode 100644 index 00000000..db47989f --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_block.yaml @@ -0,0 +1,62 @@ +--- +- debug: msg="START cli/sublevel_block.yaml" + +- name: setup + os6_config: + lines: + - permit ip 1.1.1.1 0.0.0.0 any log + - permit ip 2.2.2.2 0.0.0.0 any log + - permit ip 3.3.3.3 0.0.0.0 any log + parents: ['ip access-list test'] + before: ['no ip access-list test'] + after: ['exit'] + provider: "{{ cli }}" + match: none + +- name: configure sub level command using block resplace + os6_config: + lines: + - 1000 permit ip 1.1.1.1 0.0.0.0 any log + - 1010 permit ip 2.2.2.2 0.0.0.0 any log + - 1020 permit ip 3.3.3.3 0.0.0.0 any log + - 1030 permit ip 4.4.4.4 0.0.0.0 any log + parents: ['ip access-list test'] + replace: block + after: ['exit'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'1000 permit ip 1.1.1.1 0.0.0.0 any log' in result.updates" + - "'1010 permit ip 2.2.2.2 0.0.0.0 any log' in result.updates" + - "'1020 permit ip 3.3.3.3 0.0.0.0 any log' in result.updates" + - "'1030 permit ip 4.4.4.4 0.0.0.0 any log' in result.updates" + +- name: check sub level command using block replace + os6_config: + lines: + - 1000 permit ip 1.1.1.1 0.0.0.0 any log + - 1010 permit ip 2.2.2.2 0.0.0.0 any log + - 1020 permit ip 3.3.3.3 0.0.0.0 any log + - 1030 permit ip 4.4.4.4 0.0.0.0 any log + parents: ['ip access-list test'] + replace: block + after: ['exit'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os6_config: + lines: + - no ip access-list test + match: none + provider: "{{ cli }}" + +- debug: msg="END cli/sublevel_block.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_exact.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_exact.yaml new file mode 100644 index 00000000..bafe24c5 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_exact.yaml @@ -0,0 +1,66 @@ +--- +- debug: msg="START cli/sublevel_exact.yaml" + +- name: setup + os6_config: + lines: + - permit ip 1.1.1.1 0.0.0.0 any log + - permit ip 2.2.2.2 0.0.0.0 any log + - permit ip 3.3.3.3 0.0.0.0 any log + - permit ip 4.4.4.4 0.0.0.0 any log + - permit ip 5.5.5.5 0.0.0.0 any log + parents: ['ip access-list test'] + before: ['no ip access-list test'] + after: ['exit'] + provider: "{{ cli }}" + match: none + +- name: configure sub level command using exact match + os6_config: + lines: + - 1000 permit ip 1.1.1.1 0.0.0.0 any log + - 1010 permit ip 2.2.2.2 0.0.0.0 any log + - 1020 permit ip 3.3.3.3 0.0.0.0 any log + - 1030 permit ip 4.4.4.4 0.0.0.0 any log + parents: ['ip access-list test'] + after: ['exit'] + match: exact + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'1000 permit ip 1.1.1.1 0.0.0.0 any log' in result.updates" + - "'1010 permit ip 2.2.2.2 0.0.0.0 any log' in result.updates" + - "'1020 permit ip 3.3.3.3 0.0.0.0 any log' in result.updates" + - "'1030 permit ip 4.4.4.4 0.0.0.0 any log' in result.updates" + - "'1040 permit ip 5.5.5.5 0.0.0.0 any log' not in result.updates" + +- name: check sub level command using exact match + os6_config: + lines: + - 1000 permit ip 1.1.1.1 0.0.0.0 any log + - 1010 permit ip 2.2.2.2 0.0.0.0 any log + - 1020 permit ip 3.3.3.3 0.0.0.0 any log + - 1030 permit ip 4.4.4.4 0.0.0.0 any log + - 1040 permit ip 5.5.5.5 0.0.0.0 any log + parents: ['ip access-list test'] + after: ['exit'] + match: exact + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os6_config: + lines: + - no ip access-list test + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/sublevel_exact.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_strict.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_strict.yaml new file mode 100644 index 00000000..51049e5e --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_strict.yaml @@ -0,0 +1,63 @@ +--- +- debug: msg="START cli/sublevel_strict.yaml" + +- name: setup + os6_config: + lines: + - permit ip 1.1.1.1 0.0.0.0 any log + - permit ip 2.2.2.2 0.0.0.0 any log + - permit ip 3.3.3.3 0.0.0.0 any log + - permit ip 4.4.4.4 0.0.0.0 any log + - permit ip 5.5.5.5 0.0.0.0 any log + parents: ['ip access-list test'] + before: ['no ip access-list test'] + after: ['exit'] + provider: "{{ cli }}" + match: none + +- name: configure sub level command using strict match + os6_config: + lines: + - 1000 permit ip 1.1.1.1 0.0.0.0 any log + - 1010 permit ip 2.2.2.2 0.0.0.0 any log + - 1020 permit ip 3.3.3.3 0.0.0.0 any log + - 1030 permit ip 4.4.4.4 0.0.0.0 any log + parents: ['ip access-list test'] + match: strict + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: check sub level command using strict match + os6_config: + lines: + - 1000 permit ip 1.1.1.1 0.0.0.0 any log + - 1010 permit ip 3.3.3.3 0.0.0.0 any log + - 1020 permit ip 2.2.2.2 0.0.0.0 any log + parents: ['ip access-list test'] + after: ['exit'] + match: strict + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'1000 permit ip 1.1.1.1 0.0.0.0 any log' not in result.updates" + - "'1020 permit ip 2.2.2.2 0.0.0.0 any log' in result.updates" + - "'1010 permit ip 3.3.3.3 0.0.0.0 any log' in result.updates" + - "'1030 permit ip 4.4.4.4 0.0.0.0 any log' not in result.updates" + - "'1040 permit ip 5.5.5.5 0.0.0.0 any log' not in result.updates" + +- name: teardown + os6_config: + lines: + - no ip access-list test + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/sublevel_strict.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel.yaml new file mode 100644 index 00000000..36cdb9a4 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel.yaml @@ -0,0 +1,37 @@ +--- +- debug: msg="START cli/toplevel.yaml" + +- name: setup + os6_config: + lines: ['hostname {{ inventory_hostname }}'] + provider: "{{ cli }}" + match: none + +- name: configure top level command + os6_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + +- name: configure top level command idempotent check + os6_config: + lines: ['hostname "foo"'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os6_config: + lines: ['hostname {{ inventory_hostname }}'] + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_after.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_after.yaml new file mode 100644 index 00000000..287bdb9a --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_after.yaml @@ -0,0 +1,44 @@ +--- +- debug: msg="START cli/toplevel_after.yaml" + +- name: setup + os6_config: + lines: + - "snmp-server contact ansible" + - "hostname {{ inventory_hostname }}" + provider: "{{ cli }}" + match: none + +- name: configure top level command with before + os6_config: + lines: ['hostname foo'] + after: ['snmp-server contact bar'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + - "'snmp-server contact bar' in result.updates" + +- name: configure top level command with before idempotent check + os6_config: + lines: ['hostname "foo"'] + after: ['snmp-server contact foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os6_config: + lines: + - "no snmp-server contact" + - "hostname {{ inventory_hostname }}" + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel_after.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_before.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_before.yaml new file mode 100644 index 00000000..d058abfb --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_before.yaml @@ -0,0 +1,44 @@ +--- +- debug: msg="START cli/toplevel_before.yaml" + +- name: setup + os6_config: + lines: + - "snmp-server contact ansible" + - "hostname {{ inventory_hostname }}" + provider: "{{ cli }}" + match: none + +- name: configure top level command with before + os6_config: + lines: ['hostname foo'] + before: ['snmp-server contact bar'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + - "'snmp-server contact bar' in result.updates" + +- name: configure top level command with before idempotent check + os6_config: + lines: ['hostname "foo"'] + before: ['snmp-server contact foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os6_config: + lines: + - "no snmp-server contact" + - "hostname {{ inventory_hostname }}" + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel_before.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_nonidempotent.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_nonidempotent.yaml new file mode 100644 index 00000000..d529e8d1 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_nonidempotent.yaml @@ -0,0 +1,39 @@ +--- +- debug: msg="START cli/toplevel_nonidempotent.yaml" + +- name: setup + os6_config: + lines: ['hostname {{ inventory_hostname }}'] + provider: "{{ cli }}" + match: none + +- name: configure top level command + os6_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + match: strict + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + +- name: configure top level command idempotent check + os6_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + match: strict + register: result + +- assert: + that: + - "result.changed == true" + +- name: teardown + os6_config: + lines: ['hostname {{ inventory_hostname }}'] + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel_nonidempotent.yaml" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/defaults/main.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/defaults/main.yaml new file mode 100644 index 00000000..5f709c5a --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/cli.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/cli.yaml new file mode 100644 index 00000000..7152815d --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/cli.yaml @@ -0,0 +1,14 @@ +--- +- 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: "{{ item }}" + with_items: "{{ test_items }}"
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/main.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/main.yaml new file mode 100644 index 00000000..d4898c29 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: cli.yaml, tags: ['cli'] }
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tests/cli/facts.yaml b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tests/cli/facts.yaml new file mode 100644 index 00000000..1834f7b1 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tests/cli/facts.yaml @@ -0,0 +1,42 @@ +--- +- debug: msg="START cli/facts.yaml" + +- name: test all facts + os6_facts: + gather_subset: + - all + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.ansible_facts is defined" + +- name: test all facts except hardware + os6_facts: + gather_subset: + - "!hardware" + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.ansible_facts.ansible_net_memfree_mb is not defined" + +- name: test interface facts + os6_facts: + gather_subset: + - interfaces + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.ansible_facts.ansible_net_interfaces is defined" + - "result.ansible_facts.ansible_net_memfree_mb is not defined" + + +- debug: msg="END cli/facts.yaml" diff --git a/ansible_collections/dellemc/os6/tests/sanity/ignore-2.10.txt b/ansible_collections/dellemc/os6/tests/sanity/ignore-2.10.txt new file mode 100644 index 00000000..6945f1c2 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/sanity/ignore-2.10.txt @@ -0,0 +1,4 @@ +plugins/action/os6.py action-plugin-docs +plugins/modules/os6_config.py validate-modules:parameter-list-no-elements +plugins/modules/os6_facts.py validate-modules:parameter-list-no-elements +plugins/modules/os6_command.py validate-modules:parameter-list-no-elements diff --git a/ansible_collections/dellemc/os6/tests/sanity/ignore-2.11.txt b/ansible_collections/dellemc/os6/tests/sanity/ignore-2.11.txt new file mode 100644 index 00000000..91049edc --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/sanity/ignore-2.11.txt @@ -0,0 +1,4 @@ +plugins/action/os6.py action-plugin-docs +plugins/modules/os6_config.py validate-modules:parameter-list-no-elements +plugins/modules/os6_facts.py validate-modules:parameter-list-no-elements +plugins/modules/os6_command.py validate-modules:parameter-list-no-elements
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/sanity/ignore-2.9.txt b/ansible_collections/dellemc/os6/tests/sanity/ignore-2.9.txt new file mode 100644 index 00000000..99f52d2e --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/sanity/ignore-2.9.txt @@ -0,0 +1 @@ +plugins/action/os6.py action-plugin-docs
\ No newline at end of file diff --git a/ansible_collections/dellemc/os6/tests/sanity/requirements.txt b/ansible_collections/dellemc/os6/tests/sanity/requirements.txt new file mode 100644 index 00000000..3e3a9669 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/sanity/requirements.txt @@ -0,0 +1,4 @@ +packaging # needed for update-bundled and changelog +sphinx ; python_version >= '3.5' # docs build requires python 3+ +sphinx-notfound-page ; python_version >= '3.5' # docs build requires python 3+ +straight.plugin ; python_version >= '3.5' # needed for hacking/build-ansible.py which will host changelog generation and requires python 3+ diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/__init__.py b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/__init__.py diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_config.cfg b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_config.cfg new file mode 100644 index 00000000..a8ed721c --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_config.cfg @@ -0,0 +1,16 @@ +! +hostname router +exit +! +interface Te1/0/1 +description "test_string" +exit +! +interface Te1/0/2 +no shutdown +exit +! +interface Te1/0/9 +switchport access vlan 2 +exit + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_src.cfg b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_src.cfg new file mode 100644 index 00000000..70d5f665 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_src.cfg @@ -0,0 +1,7 @@ +! +hostname foo +exit +! +interface Te1/0/2 +shutdown +exit diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces new file mode 100644 index 00000000..f6aede90 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces @@ -0,0 +1,41 @@ +Interface Name................................. Te1/0/1 +SOC Hardware Info.............................. BCM56842_A1 +Link Status.................................... Up /None +Keepalive Enabled.............................. FALSE +Err-disable Cause.............................. None +VLAN Membership Mode........................... Trunk Mode +VLAN Membership................................ (1),2-4096 +MTU Size....................................... 1518 +Port Mode [Duplex]............................. Full +Port Speed..................................... 1000 +Link Debounce Flaps............................ 0 +Auto-Negotation Status......................... Auto +Burned MAC Address............................. F8B1.565B.615E +L3 MAC Address................................. F8B1.565B.615F +Sample Load Interval........................... 300 +Received Input Rate Bits/Sec................... 0 +Received Input Rate Packets/Sec................ 0 +Transmitted Input Rate Bits/Sec................ 440 +Transmitted Input Rate Packets/Sec : .......... 0 +Total Packets Received Without Errors.......... 0 +Unicast Packets Received....................... 0 +Multicast Packets Received..................... 0 +Broadcast Packets Received..................... 0 +Total Packets Received with MAC Errors......... 0 +Jabbers Received............................... 0 +Fragments/Undersize Received................... 0 +Alignment Errors............................... 0 +FCS Errors..................................... 0 +Overruns....................................... 0 +Total Received Packets Not Forwarded........... 0 +Total Packets Transmitted Successfully......... 381302 +Unicast Packets Transmitted.................... 1 +Multicast Packets Transmitted.................. 351645 +Broadcast Packets Transmitted.................. 29656 +Transmit Packets Discarded..................... 0 +Total Transmit Errors.......................... 0 +Total Transmit Packets Discarded............... 0 +Single Collision Frames........................ 0 +Multiple Collision Frames...................... 0 +Excessive Collision Frames..................... 0 + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_status b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_status new file mode 100644 index 00000000..28defda6 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_status @@ -0,0 +1,48 @@ +Port Description Duplex Speed Neg Link Flow M VLAN + State Ctrl +--------- --------------- ------ ------- ---- ------ ----- -- ------------------- +Te1/0/1 connected to sp Full 1000 Auto Up Off T (1),2-4096 +Te1/0/2 to_NIC_1 Full 1000 Auto Up Off A 99 +Te1/0/3 N/A Unknown Auto Down Off A 1 +Te1/0/4 N/A Unknown Auto Down Off A 1 +Te1/0/5 N/A Unknown Auto Down Off A 1 +Te1/0/6 N/A Unknown Auto Down Off A 1 +Te1/0/7 N/A Unknown Auto Down Off A 1 +Te1/0/8 N/A Unknown Auto Down Off A 1 +Te1/0/9 N/A Unknown Auto Down Off A 2 +Te1/0/10 N/A Unknown Auto Down Off A 1 +Te1/0/11 N/A Unknown Auto Down Off A 1 +Te1/0/12 N/A Unknown Auto Down Off A 1 +Te1/0/13 N/A Unknown Auto Down Off A 1 +Te1/0/14 N/A Unknown Auto Down Off A 1 +Te1/0/15 N/A Unknown Auto Down Off A 1 +Te1/0/16 N/A Unknown Auto Down Off A 1 +Te1/0/17 N/A Unknown Auto Down Off A 1 +Te1/0/18 N/A Unknown Auto Down Off A 1 +Te1/0/19 N/A Unknown Auto Down Off A 1 +Te1/0/20 N/A Unknown Auto Down Off A 1 +Te1/0/21 N/A Unknown Auto Down Off A 1 +Te1/0/22 N/A Unknown Auto Down Off A 100 +Te1/0/23 N/A Unknown Auto Down Off A 1 +Te1/0/24 N/A Unknown Auto Down Off A 1 +Fo1/1/1 N/A N/A N/A Detach N/A +Fo1/1/2 Full 40000 Off Down Off A 1 +Te1/1/1 N/A N/A N/A Detach N/A +Te1/1/2 N/A N/A N/A Detach N/A +Te1/1/3 N/A N/A N/A Detach N/A +Te1/1/4 N/A N/A N/A Detach N/A +Te1/1/5 N/A N/A N/A Detach N/A +Te1/1/6 N/A N/A N/A Detach N/A +Te1/1/7 N/A N/A N/A Detach N/A +Te1/1/8 N/A N/A N/A Detach N/A + +Oob Type Link + State +--- ------------------------------ ----- +oob Out-Of-Band Up + + +Port Description Link M VLAN +Channel State +------- ------------------------------ ------- -- ------------------- + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_transceiver_properties b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_transceiver_properties new file mode 100644 index 00000000..976f45a8 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_transceiver_properties @@ -0,0 +1,6 @@ +Yes: Dell Qualified No: Not Qualified +N/A : Not Applicable +Port Type Media Serial Number Dell Qualified +--------- ------- --------------------- --------------------- -------------- + + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_ip_int b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_ip_int new file mode 100644 index 00000000..043ee2cc --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_ip_int @@ -0,0 +1,15 @@ +Default Gateway................................ 0.0.0.0 +L3 MAC Address................................. F8B1.565B.615F + +Routing Interfaces: + +Interface State IP Address IP Mask Method +---------- ----- --------------- --------------- ------- +Vl1 Down 0.0.0.0 0.0.0.0 None +Vl2 Up 0.0.0.0 0.0.0.0 DHCP +Vl99 Up 10.99.1.2 255.255.0.0 Manual +Vl100 Up 3.3.3.3 255.255.255.0 Manual +Vl999 Up 10.250.1.2 255.255.255.0 Manual +Vl1010 Up 10.1.1.1 255.255.255.0 Manual +Vl1681 Up 192.168.100.1 255.255.255.0 Manual + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp new file mode 100644 index 00000000..be89c415 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp @@ -0,0 +1,11 @@ +LLDP Global Configuration + + +Transmit Interval............................ 30 seconds + +Transmit Hold Multiplier..................... 4 + +Reinit Delay................................. 2 seconds + +Notification Interval........................ 5 seconds + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp_remote-device_all b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp_remote-device_all new file mode 100644 index 00000000..2a22f444 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp_remote-device_all @@ -0,0 +1,10 @@ +LLDP Remote Device Summary + +Local +Interface RemID Chassis ID Port ID System Name +--------- ------- ------------------- ----------------- ----------------- +Te1/0/5 14 F8:B1:56:70:49:38 Gi1/0/5 MAA-N2048-6884 +Te1/0/6 15 F8:B1:56:70:49:38 Gi1/0/6 MAA-N2048-6884 + + + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_memory_cpu b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_memory_cpu new file mode 100644 index 00000000..42657693 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_memory_cpu @@ -0,0 +1,3 @@ +Total Memory................................... 1723232 KBytes +Available Memory Space......................... 638144 KBytes + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config new file mode 100644 index 00000000..b589c296 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config @@ -0,0 +1,124 @@ +!Current Configuration: +!System Description "Dell Networking N4064F, 6.3.3.10, Linux 3.7.10-e54850e7" +!System Software Version 6.3.3.10 +!Cut-through mode is configured as disabled +! +configure +hostname "os6" +slot 1/0 5 ! Dell Networking N4064F +slot 1/1 8 ! Dell 10GBase-T Card +stack +member 1 4 ! N4064F +exit +interface out-of-band +ip address 10.16.148.73 255.255.0.0 10.16.144.254 +exit +no logging console +interface vlan 1 +ip address dhcp +exit +no passwords min-length +username "admin" password 21232f297a57a5a743894a0e4a801fc3 privilege 1 encrypted +line telnet +exec-timeout 0 +exit +ip ssh server +application install SupportAssist auto-restart start-on-boot +! +interface Te1/0/1 +no switchport port-security violation protect +exit +! +interface Te1/0/2 +no switchport port-security violation protect +exit +! +interface Te1/0/3 +no switchport port-security violation protect +exit +! +interface Te1/0/4 +no switchport port-security violation protect +exit +! +interface Te1/0/5 +no switchport port-security violation protect +exit +! +interface Te1/0/6 +no switchport port-security violation protect +exit +! +interface Te1/0/7 +no switchport port-security violation protect +exit +! +interface Te1/0/8 +no switchport port-security violation protect +exit +! +interface Te1/0/9 +no switchport port-security violation protect +exit +! +interface Te1/0/10 +no switchport port-security violation protect +exit +! +interface Te1/0/11 +no switchport port-security violation protect +exit +! +interface port-channel 1 +no switchport port-security violation protect +exit +! +interface port-channel 2 +no switchport port-security violation protect +exit +! +interface port-channel 3 +no switchport port-security violation protect +exit +! +interface port-channel 4 +no switchport port-security violation protect +exit +! +interface port-channel 5 +no switchport port-security violation protect +exit +! +snmp-server enable traps dvmrp +snmp-server enable traps pim +no snmp-server enable traps vrrp +no snmp-server enable traps acl +snmp-server enable traps captive-portal +snmp-server enable traps captive-portal client-auth-failure +snmp-server enable traps captive-portal client-connect +snmp-server enable traps captive-portal client-db-full +snmp-server enable traps captive-portal client-disconnect +router bgp 11 +bgp router-id 1.1.1.1 +maximum-paths 2 +maximum-paths ibgp 2 +network 101.1.2.0 mask 255.255.255.0 +template peer MUX_HNV_ACCESS +remote-as 64918 +exit +neighbor 10.10.234.16 remote-as 64818 +neighbor 10.10.234.16 default-originate +neighbor 10.10.234.16 timers 2 5 +neighbor 2001:4898:5808:ffa2::1 remote-as 64818 +neighbor 2001:4898:5808:ffa2::1 default-originate +neighbor 2001:4898:5808:ffa2::1 timers 2 4 +address-family ipv6 +network 2001:4898:5808:ffa0::/126 +redistribute connected +exit +exit +enable password c4f25f005187e9a85ad6480d3507a541 encrypted +openflow +exit +eula-consent support-assist reject +exit diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config__include_hostname b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config__include_hostname new file mode 100644 index 00000000..2015aaf9 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config__include_hostname @@ -0,0 +1,3 @@ +hostname "os6_sw1" + + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_version b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_version new file mode 100644 index 00000000..37c58e8b --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_version @@ -0,0 +1,17 @@ +Machine Description............... Dell Networking Switch +System Model ID................... N4032 +Machine Type...................... Dell Networking N4032 +Serial Number..................... CN04G4FP282984AI0097A01 +Manufacturer...................... 0xbc00 +Burned In MAC Address............. F8B1.565B.615C +System Object ID.................. 1.3.6.1.4.1.674.10895.3042 +CPU Version....................... XLP308H-B2 +SOC Version....................... BCM56842_A1 +HW Version........................ 3 +CPLD Version...................... 17 + +unit active backup current-active next-active +---- ----------- ----------- -------------- -------------- +1 6.3.3.7 6.3.2.7 6.3.3.7 6.3.3.7 + + diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/os6_module.py b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/os6_module.py new file mode 100644 index 00000000..4f8cb8c9 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/os6_module.py @@ -0,0 +1,88 @@ +# (c) 2020 Red Hat Inc. +# +# 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/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import os +import json + +from units.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase + + +fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') +fixture_data = {} + + +def load_fixture(name): + path = os.path.join(fixture_path, name) + + if path in fixture_data: + return fixture_data[path] + + with open(path) as f: + data = f.read() + + try: + data = json.loads(data) + except Exception: + pass + + fixture_data[path] = data + return data + + +class TestDellos6Module(ModuleTestCase): + + def execute_module(self, failed=False, changed=False, commands=None, sort=True, defaults=False): + + self.load_fixtures(commands) + + if failed: + result = self.failed() + self.assertTrue(result['failed'], result) + else: + result = self.changed(changed) + self.assertEqual(result['changed'], changed, result) + + if commands is not None: + if sort: + self.assertEqual(sorted(commands), sorted(result['updates']), result['updates']) + else: + self.assertEqual(commands, result['updates'], result['updates']) + + return result + + def failed(self): + with self.assertRaises(AnsibleFailJson) as exc: + self.module.main() + + result = exc.exception.args[0] + self.assertTrue(result['failed'], result) + return result + + def changed(self, changed=False): + with self.assertRaises(AnsibleExitJson) as exc: + self.module.main() + + result = exc.exception.args[0] + self.assertEqual(result['changed'], changed, result) + return result + + def load_fixtures(self, commands=None): + pass diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_command.py b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_command.py new file mode 100644 index 00000000..b1f3f23f --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_command.py @@ -0,0 +1,108 @@ +# (c) 2020 Red Hat Inc. +# +# 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/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import json + +from ansible.compat.tests.mock import patch +from ansible_collections.dellemc.os6.plugins.modules import os6_command +from units.modules.utils import set_module_args +from .os6_module import TestDellos6Module, load_fixture + + +class TestDellos6CommandModule(TestDellos6Module): + + module = os6_command + + def setUp(self): + super(TestDellos6CommandModule, self).setUp() + + self.mock_run_commands = patch('ansible.modules.network.os6.os6_command.run_commands') + self.run_commands = self.mock_run_commands.start() + + def tearDown(self): + super(TestDellos6CommandModule, self).tearDown() + self.mock_run_commands.stop() + + def load_fixtures(self, commands=None): + + def load_from_file(*args, **kwargs): + module, commands = args + output = list() + + for item in commands: + try: + obj = json.loads(item['command']) + command = obj['command'] + except ValueError: + command = item['command'] + filename = str(command).replace(' ', '_') + output.append(load_fixture(filename)) + return output + + self.run_commands.side_effect = load_from_file + + def test_os6_command_simple(self): + set_module_args(dict(commands=['show version'])) + result = self.execute_module() + self.assertEqual(len(result['stdout']), 1) + self.assertTrue(result['stdout'][0].startswith('Machine Description')) + + def test_os6_command_multiple(self): + set_module_args(dict(commands=['show version', 'show version'])) + result = self.execute_module() + self.assertEqual(len(result['stdout']), 2) + self.assertTrue(result['stdout'][0].startswith('Machine Description')) + + def test_os6_command_wait_for(self): + wait_for = 'result[0] contains "Machine Description"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module() + + def test_os6_command_wait_for_fails(self): + wait_for = 'result[0] contains "test string"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module(failed=True) + self.assertEqual(self.run_commands.call_count, 10) + + def test_os6_command_retries(self): + wait_for = 'result[0] contains "test string"' + set_module_args(dict(commands=['show version'], wait_for=wait_for, retries=2)) + self.execute_module(failed=True) + self.assertEqual(self.run_commands.call_count, 2) + + def test_os6_command_match_any(self): + wait_for = ['result[0] contains "Machine Description"', + 'result[0] contains "test string"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any')) + self.execute_module() + + def test_os6_command_match_all(self): + wait_for = ['result[0] contains "Machine Description"', + 'result[0] contains "Dell Networking"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='all')) + self.execute_module() + + def test_os6_command_match_all_failure(self): + wait_for = ['result[0] contains "Machine Description"', + 'result[0] contains "test string"'] + commands = ['show version', 'show version'] + set_module_args(dict(commands=commands, wait_for=wait_for, match='all')) + self.execute_module(failed=True) diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_config.py b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_config.py new file mode 100644 index 00000000..1d2f60eb --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_config.py @@ -0,0 +1,146 @@ +# +# (c) 2020 Red Hat Inc. +# +# 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/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from ansible.compat.tests.mock import patch +from ansible_collections.dellemc.os6.plugins.modules import os6_config +from units.modules.utils import set_module_args +from .os6_module import TestDellos6Module, load_fixture + + +class TestDellos6ConfigModule(TestDellos6Module): + + module = os6_config + + def setUp(self): + super(TestDellos6ConfigModule, self).setUp() + + self.mock_get_config = patch('ansible.modules.network.os6.os6_config.get_config') + self.get_config = self.mock_get_config.start() + + self.mock_load_config = patch('ansible.modules.network.os6.os6_config.load_config') + self.load_config = self.mock_load_config.start() + + self.mock_run_commands = patch('ansible.modules.network.os6.os6_config.run_commands') + self.run_commands = self.mock_run_commands.start() + + def tearDown(self): + super(TestDellos6ConfigModule, self).tearDown() + self.mock_get_config.stop() + self.mock_load_config.stop() + self.mock_run_commands.stop() + + def load_fixtures(self, commands=None): + config_file = 'os6_config_config.cfg' + self.get_config.return_value = load_fixture(config_file) + self.load_config.return_value = None + + def test_os6_config_unchanged(self): + src = load_fixture('os6_config_config.cfg') + set_module_args(dict(src=src)) + self.execute_module() + + def test_os6_config_src(self): + src = load_fixture('os6_config_src.cfg') + set_module_args(dict(src=src)) + commands = ['hostname foo', 'exit', 'interface Te1/0/2', 'shutdown', 'exit'] + self.execute_module(changed=True, commands=commands) + + def test_os6_config_backup(self): + set_module_args(dict(backup=True)) + result = self.execute_module() + self.assertIn('__backup__', result) + + def test_os6_config_save(self): + set_module_args(dict(save=True)) + self.execute_module(changed=True) + self.assertEqual(self.run_commands.call_count, 1) + self.assertEqual(self.get_config.call_count, 0) + self.assertEqual(self.load_config.call_count, 0) + args = self.run_commands.call_args[0][1] + self.assertDictContainsSubset({'command': 'copy running-config startup-config'}, args[0]) +# self.assertIn('copy running-config startup-config\r', args) + + def test_os6_config_lines_wo_parents(self): + set_module_args(dict(lines=['hostname foo'])) + commands = ['hostname foo'] + self.execute_module(changed=True, commands=commands) + + def test_os6_config_lines_w_parents(self): + set_module_args(dict(lines=['description "teest"', 'exit'], parents=['interface Te1/0/2'])) + commands = ['interface Te1/0/2', 'description "teest"', 'exit'] + self.execute_module(changed=True, commands=commands) + + def test_os6_config_before(self): + set_module_args(dict(lines=['hostname foo'], before=['snmp-server contact bar'])) + commands = ['snmp-server contact bar', 'hostname foo'] + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os6_config_after(self): + set_module_args(dict(lines=['hostname foo'], after=['snmp-server contact bar'])) + commands = ['hostname foo', 'snmp-server contact bar'] + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os6_config_before_after_no_change(self): + set_module_args(dict(lines=['hostname router'], + before=['snmp-server contact bar'], + after=['snmp-server location chennai'])) + self.execute_module() + + def test_os6_config_config(self): + config = 'hostname localhost' + set_module_args(dict(lines=['hostname router'], config=config)) + commands = ['hostname router'] + self.execute_module(changed=True, commands=commands) + + def test_os6_config_replace_block(self): + lines = ['description test string', 'shutdown'] + parents = ['interface Te1/0/2'] + set_module_args(dict(lines=lines, replace='block', parents=parents)) + commands = parents + lines + self.execute_module(changed=True, commands=commands) + + def test_os6_config_match_none(self): + lines = ['hostname router'] + set_module_args(dict(lines=lines, match='none')) + self.execute_module(changed=True, commands=lines) + + def test_os6_config_match_none(self): + lines = ['description test string', 'shutdown'] + parents = ['interface Te1/0/2'] + set_module_args(dict(lines=lines, parents=parents, match='none')) + commands = parents + lines + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os6_config_match_strict(self): + lines = ['description "test_string"', + 'shutdown'] + parents = ['interface Te1/0/1'] + set_module_args(dict(lines=lines, parents=parents, match='strict')) + commands = parents + ['shutdown'] + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os6_config_match_exact(self): + lines = ['description test_string', 'shutdown'] + parents = ['interface Te1/0/1'] + set_module_args(dict(lines=lines, parents=parents, match='exact')) + commands = parents + lines + self.execute_module(changed=True, commands=commands, sort=False) diff --git a/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_facts.py b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_facts.py new file mode 100644 index 00000000..ace3a8a8 --- /dev/null +++ b/ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_facts.py @@ -0,0 +1,105 @@ +# (c) 2020 Red Hat Inc. +# +# 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/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import json + +from ansible.compat.tests.mock import patch +from units.modules.utils import set_module_args +from .os6_module import TestDellos6Module, load_fixture +from ansible_collections.dellemc.os6.plugins.modules import os6_facts + + +class TestDellos6Facts(TestDellos6Module): + + module = os6_facts + + def setUp(self): + super(TestDellos6Facts, self).setUp() + + self.mock_run_command = patch( + 'ansible.modules.network.os6.os6_facts.run_commands') + self.run_command = self.mock_run_command.start() + + def tearDown(self): + super(TestDellos6Facts, self).tearDown() + + self.mock_run_command.stop() + + def load_fixtures(self, commands=None): + + def load_from_file(*args, **kwargs): + module, commands = args + output = list() + + for item in commands: + try: + obj = json.loads(item) + command = obj['command'] + except ValueError: + command = item + if '|' in command: + command = str(command).replace('|', '') + filename = str(command).replace(' ', '_') + filename = filename.replace('/', '7') + output.append(load_fixture(filename)) + return output + + self.run_command.side_effect = load_from_file + + def test_os6_facts_gather_subset_default(self): + set_module_args(dict()) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('hardware', ansible_facts['ansible_net_gather_subset']) + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset']) + self.assertEquals('"os6_sw1"', ansible_facts['ansible_net_hostname']) + self.assertIn('Te1/0/1', ansible_facts['ansible_net_interfaces'].keys()) + self.assertEquals(1682, ansible_facts['ansible_net_memtotal_mb']) + self.assertEquals(623, ansible_facts['ansible_net_memfree_mb']) + + def test_os6_facts_gather_subset_config(self): + set_module_args({'gather_subset': 'config'}) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('config', ansible_facts['ansible_net_gather_subset']) + self.assertEquals('"os6_sw1"', ansible_facts['ansible_net_hostname']) + self.assertIn('ansible_net_config', ansible_facts) + + def test_os6_facts_gather_subset_hardware(self): + set_module_args({'gather_subset': 'hardware'}) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('hardware', ansible_facts['ansible_net_gather_subset']) + self.assertEquals(1682, ansible_facts['ansible_net_memtotal_mb']) + self.assertEquals(623, ansible_facts['ansible_net_memfree_mb']) + + def test_os6_facts_gather_subset_interfaces(self): + set_module_args({'gather_subset': 'interfaces'}) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset']) + self.assertIn('Te1/0/1', ansible_facts['ansible_net_interfaces'].keys()) + self.assertEquals(['Te1/0/5', 'Te1/0/6'], ansible_facts['ansible_net_neighbors'].keys()) + self.assertIn('ansible_net_interfaces', ansible_facts) |