From ea0ef3b2e1f9a3d678cb768a84342edb8fd02f45 Mon Sep 17 00:00:00 2001
From: Chris Van Heuveln <cvanheuv@cisco.com>
Date: Fri, 8 Mar 2019 04:59:34 -0500
Subject: [PATCH] nxos_pim_rp_address: update sanity test to work with legacy
 N3K (#53471)

Test yaml fixes for n3048:

* 3048 does not support bidir option
* 3048 cannot remove rp-address if prefix-list/route-map is present
  * yes: no ip pim rp-address x.x.x.x
  *  no: no ip pim rp-address x.x.x.x prefix-list foo
  *  no: no ip pim rp-address x.x.x.x route-map bar

This test now passes on N9k/N7k/N6k/N3k.
---
 .../tests/common/configure.yaml               | 277 ++++++++----------
 .../targets/prepare_nxos_tests/tasks/main.yml |   2 +-
 2 files changed, 130 insertions(+), 149 deletions(-)

diff --git a/test/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml b/test/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml
index 894a3b4ac9..665aba592a 100644
--- a/test/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml
+++ b/test/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml
@@ -3,9 +3,14 @@
 - debug: msg="Using provider={{ connection.transport }}"
   when: ansible_connection == "local"
 
-- set_fact: bidir="true"
-- set_fact: bidir="false"
-  when: platform is match("N3L")
+- block:
+  # N3L does not support bidir
+  - set_fact: bidir_true="true"
+  - set_fact: bidir_false="false"
+  # N3L can only remove rpa, cannot remove rpa+prefixlist or rpa+routemap
+  - set_fact: pim_prefix_list="pim_prefix_list"
+  - set_fact: pim_route_map="pim_route_map"
+  when: platform is not match("N3L")
 
 - block:
   - name: "Disable feature PIM"
@@ -20,11 +25,12 @@
       provider: "{{ connection }}"
       state: enabled
 
-  - name: Configure rp_address + group_list 
+  - name: 1.0 Configure rp_address + group_list
+    # This test should always run regardless of bidir support
     nxos_pim_rp_address: &configgl
-      rp_address: "10.1.1.20"
+      rp_address: "10.1.1.1"
       group_list: "224.0.0.0/8"
-      bidir: "{{ bidir }}"
+      bidir: "{{ bidir_true|default(omit) }}"
       provider: "{{ connection }}"
       state: present
     register: result
@@ -33,7 +39,7 @@
       that:
         - "result.changed == true"
 
-  - name: Check idempotence rp_address + group_list
+  - name: 1.0 Idempotence rp_address + group_list
     nxos_pim_rp_address: *configgl
     register: result
 
@@ -41,66 +47,60 @@
       that:
         - "result.changed == false"
 
-  - name: Configure rp_address + group_list remove bidir
-    nxos_pim_rp_address: &configglnb
-      rp_address: "10.1.1.20"
-      group_list: "224.0.0.0/8"
-      bidir: False
-      provider: "{{ connection }}"
-      state: present
-    register: result
-    when: platform is not match("N3L")
+  - block: # bidir test
+    - name: 1.1 Configure rp_address + group_list (bidir_false)
+      nxos_pim_rp_address: &config11
+        rp_address: "10.1.1.1"
+        group_list: "224.0.0.0/8"
+        bidir: false
+        provider: "{{ connection }}"
+        state: present
+      register: result
 
-  - assert: *true
-    when: platform is not match("N3L")
+    - assert: *true
 
-  - name: Check idempotence rp_address + group_list remove bidir
-    nxos_pim_rp_address: *configglnb
-    register: result
-    when: platform is not match("N3L")
+    - name: 1.1 Idempotence rp_address + group_list (bidir_false)
+      nxos_pim_rp_address: *config11
+      register: result
 
-  - assert: *false
-    when: platform is not match("N3L")
+    - assert: *false
 
-  - name: Configure rp_address + bidir 
-    nxos_pim_rp_address: &configbi
-      rp_address: "10.1.1.20"
-      bidir: "{{ bidir }}"
-      provider: "{{ connection }}"
-      state: present
-    register: result
+    - name: 1.2 Configure rp_address (bidir_true)
+      nxos_pim_rp_address: &config12
+        rp_address: "10.1.1.1"
+        bidir: true
+        provider: "{{ connection }}"
+        state: present
+      register: result
 
-  - assert: *true
+    - assert: *true
 
-  - name: Check idempotence rp_address + bidir
-    nxos_pim_rp_address: *configbi
-    register: result
+    - name: 1.2 Idempotence rp_address (bidir_true)
+      nxos_pim_rp_address: *config12
+      register: result
 
-  - assert: *false
+    - assert: *false
 
-  - name: Configure rp_address remove bidir 
-    nxos_pim_rp_address: &confignbi
-      rp_address: "10.1.1.20"
-      bidir: False
-      provider: "{{ connection }}"
-      state: present
-    register: result
-    when: platform is not match("N3L")
+    - name: 1.3 Configure rp_address (bidir_false)
+      nxos_pim_rp_address: &config13
+        rp_address: "10.1.1.1"
+        bidir: false
+        provider: "{{ connection }}"
+        state: present
+      register: result
 
-  - assert: *true
-    when: platform is not match("N3L")
+    - assert: *true
 
-  - name: Check idempotence rp_address remove bidir
-    nxos_pim_rp_address: *confignbi
-    register: result
-    when: platform is not match("N3L")
+    - name: 1.3 Idempotence rp_address (bidir_false)
+      nxos_pim_rp_address: *config13
+      register: result
 
-  - assert: *false
-    when: platform is not match("N3L")
+    - assert: *false
+    when: bidir_true is defined
 
-  - name: Remove rp_address + group_list 
-    nxos_pim_rp_address: &configglr
-      rp_address: "10.1.1.20"
+  - name: 1.4 Remove rp_address + group_list
+    nxos_pim_rp_address: &config14
+      rp_address: "10.1.1.1"
       group_list: "224.0.0.0/8"
       provider: "{{ connection }}"
       state: absent
@@ -108,133 +108,114 @@
 
   - assert: *true
 
-  - name: Check remove idempotence rp_address + group_list
-    nxos_pim_rp_address: *configglr
+  - name: 1.4 Idempotence remove rp_address + group_list
+    nxos_pim_rp_address: *config14
     register: result
 
   - assert: *false
 
-  - name: Remove rp_address
-    nxos_pim_rp_address: &configbir
-      rp_address: "10.1.1.20"
+  - name: 2.0 Configure rp_address + prefix_list (bidir_true)
+    nxos_pim_rp_address: &config20
+      rp_address: "10.1.1.2"
+      prefix_list: "{{ pim_prefix_list|default(omit) }}"
+      bidir: "{{ bidir_true|default(omit) }}"
+      provider: "{{ connection }}"
+      state: present
+    register: result
+
+  - assert: *true
+
+  - name: 2.0 Idempotence rp_address + prefix_list (bidir_true)
+    nxos_pim_rp_address: *config20
+    register: result
+
+  - assert: *false
+
+  - block: # bidir test
+    - name: 2.1 Configure rp_address + prefix_list (bidir_false)
+      nxos_pim_rp_address: &config21
+        rp_address: "10.1.1.2"
+        prefix_list: "{{ pim_prefix_list|default(omit) }}"
+        bidir: "{{ bidir_false|default(omit) }}"
+        provider: "{{ connection }}"
+        state: present
+      register: result
+
+    - assert: *true
+
+    - name: 2.1 Idempotence rp_address + prefix_list (bidir_false)
+      nxos_pim_rp_address: *config21
+      register: result
+
+    - assert: *false
+    when: bidir_false is defined
+
+  - name: 2.2 Remove rp_address + prefix_list (bidir_false)
+    nxos_pim_rp_address: &config22
+      rp_address: "10.1.1.2"
+      prefix_list: "{{ pim_prefix_list|default(omit)}}"
+      bidir: "{{ bidir_false|default(omit)}}"
       provider: "{{ connection }}"
       state: absent
     register: result
 
   - assert: *true
 
-  - name: Check remove idempotence rp_address
-    nxos_pim_rp_address: *configbir
+  - name: 2.2 Idempotence remove rp_address + prefix_list (bidir_false)
+    nxos_pim_rp_address: *config22
     register: result
 
   - assert: *false
 
-  - name: Configure rp_address + prefix_list + bidir
-    nxos_pim_rp_address: &configpl
-      rp_address: "10.1.1.20"
-      prefix_list: "pim_prefix_list"
-      bidir: "{{ bidir }}"
+  - name: 3.0 Configure rp_address + route_map + (bidir_true)
+    nxos_pim_rp_address: &config30
+      rp_address: "10.1.1.3"
+      route_map: "{{ pim_route_map|default(omit)}}"
+      bidir: "{{ bidir_true|default(omit) }}"
       provider: "{{ connection }}"
       state: present
     register: result
 
   - assert: *true
 
-  - name: Check idempotence rp_address + prefix_list + bidir
-    nxos_pim_rp_address: *configpl
+  - name: 3.0 Idempotence rp_address + route_map + (bidir_true)
+    nxos_pim_rp_address: *config30
     register: result
 
   - assert: *false
 
-  - name: Configure rp_address + prefix_list
-    nxos_pim_rp_address: &configplnbi
-      rp_address: "10.1.1.20"
-      prefix_list: "pim_prefix_list"
-      bidir: False
-      provider: "{{ connection }}"
-      state: present
-    register: result
-    when: platform is not match("N3L")
+  - block: # bidir test
+    - name: 3.1 Configure rp_address + route_map (bidir_false)
+      nxos_pim_rp_address: &config31
+        rp_address: "10.1.1.3"
+        route_map: "{{ pim_route_map|default(omit)}}"
+        bidir: "{{ bidir_false|default(omit)}}"
+        provider: "{{ connection }}"
+        state: present
+      register: result
 
-  - assert: *true
-    when: platform is not match("N3L")
+    - assert: *true
 
-  - name: Check idempotence rp_address + prefix_list
-    nxos_pim_rp_address: *configplnbi
-    register: result
-    when: platform is not match("N3L")
+    - name: 3.1 Idempotence rp_address + route_map
+      nxos_pim_rp_address: *config31
+      register: result
 
-  - assert: *false
-    when: platform is not match("N3L")
+    - assert: *false
+    when: bidir_false is defined
 
-  - name: Remove rp_address + prefix_list 
-    nxos_pim_rp_address: &configplr
-      rp_address: "10.1.1.20"
-      prefix_list: "pim_prefix_list"
-      bidir: False
+  - name: 3.2 Remove rp_address + route_map (bidir_false)
+    nxos_pim_rp_address: &config32
+      rp_address: "10.1.1.3"
+      route_map: "{{ pim_route_map|default(omit)}}"
+      bidir: "{{ bidir_false|default(omit)}}"
       provider: "{{ connection }}"
       state: absent
     register: result
 
   - assert: *true
 
-  - name: Check remove idempotence rp_address + prefix_list
-    nxos_pim_rp_address: *configplr
-    register: result
-
-  - assert: *false
-
-  - name: Configure rp_address + route_map + bidir
-    nxos_pim_rp_address: &configrm
-      rp_address: "10.1.1.20"
-      route_map: "pim_routemap"
-      bidir: "{{ bidir }}"
-      provider: "{{ connection }}"
-      state: present
-    register: result
-
-  - assert: *true
-
-  - name: Check idempotence rp_address + route_map + bidir
-    nxos_pim_rp_address: *configrm
-    register: result
-
-  - assert: *false
-
-  - name: Configure rp_address + route_map 
-    nxos_pim_rp_address: &configrmnbi
-      rp_address: "10.1.1.20"
-      route_map: "pim_routemap"
-      bidir: False
-      provider: "{{ connection }}"
-      state: present
-    register: result
-    when: platform is not match("N3L")
-
-  - assert: *true
-    when: platform is not match("N3L")
-
-  - name: Check idempotence rp_address + route_map
-    nxos_pim_rp_address: *configrmnbi
-    register: result
-    when: platform is not match("N3L")
-
-  - assert: *false
-    when: platform is not match("N3L")
-
-  - name: Remove rp_address + route_map 
-    nxos_pim_rp_address: &configrmr
-      rp_address: "10.1.1.20"
-      route_map: "pim_routemap"
-      bidir: False
-      provider: "{{ connection }}"
-      state: absent
-    register: result
-
-  - assert: *true
-
-  - name: Check remove idempotence rp_address + route_map
-    nxos_pim_rp_address: *configrmr
+  - name: 3.2 Idempotence remove rp_address + route_map (bidir_false)
+    nxos_pim_rp_address: *config32
     register: result
 
   - assert: *false
diff --git a/test/integration/targets/prepare_nxos_tests/tasks/main.yml b/test/integration/targets/prepare_nxos_tests/tasks/main.yml
index f89a1bad2e..5d7ab5ed8d 100644
--- a/test/integration/targets/prepare_nxos_tests/tasks/main.yml
+++ b/test/integration/targets/prepare_nxos_tests/tasks/main.yml
@@ -1,5 +1,5 @@
 ---
-- name: Enable Feature Privilage
+- name: Enable Feature Privilege
   nxos_config:
     lines:
       - feature privilege