summaryrefslogtreecommitdiffstats
path: root/ansible_collections/dellemc/os6/tests
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 16:03:42 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 16:03:42 +0000
commit66cec45960ce1d9c794e9399de15c138acb18aed (patch)
tree59cd19d69e9d56b7989b080da7c20ef1a3fe2a5a /ansible_collections/dellemc/os6/tests
parentInitial commit. (diff)
downloadansible-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')
-rw-r--r--ansible_collections/dellemc/os6/tests/.gitignore1
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/defaults/main.yaml2
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/cli.yaml13
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tasks/main.yaml2
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/bad_operator.yaml20
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/contains.yaml20
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/invalid.yaml28
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/output.yaml29
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_command/os6_command/tests/cli/timeout.yaml19
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/defaults/main.yaml2
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/cli.yaml13
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tasks/main.yaml2
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/backup.yaml53
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/basic.yaml38
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/defaults.yaml43
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/force.yaml41
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel.yaml42
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_block.yaml62
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_exact.yaml66
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/sublevel_strict.yaml63
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel.yaml37
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_after.yaml44
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_before.yaml44
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_config/os6_config/tests/cli/toplevel_nonidempotent.yaml39
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/defaults/main.yaml2
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/cli.yaml14
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tasks/main.yaml2
-rw-r--r--ansible_collections/dellemc/os6/tests/integration/targets/os6_facts/os6_facts/tests/cli/facts.yaml42
-rw-r--r--ansible_collections/dellemc/os6/tests/sanity/ignore-2.10.txt4
-rw-r--r--ansible_collections/dellemc/os6/tests/sanity/ignore-2.11.txt4
-rw-r--r--ansible_collections/dellemc/os6/tests/sanity/ignore-2.9.txt1
-rw-r--r--ansible_collections/dellemc/os6/tests/sanity/requirements.txt4
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/__init__.py0
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_config.cfg16
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/os6_config_src.cfg7
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces41
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_status48
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_interfaces_transceiver_properties6
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_ip_int15
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp11
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_lldp_remote-device_all10
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_memory_cpu3
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config124
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_running-config__include_hostname3
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/fixtures/show_version17
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/os6_module.py88
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_command.py108
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_config.py146
-rw-r--r--ansible_collections/dellemc/os6/tests/unit/modules/network/os6/test_os6_facts.py105
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)