Add a test for mapping expiration 56/4156/1
authorFilip Tehlar <ftehlar@cisco.com>
Wed, 7 Dec 2016 17:10:28 +0000 (18:10 +0100)
committerFilip Tehlar <ftehlar@cisco.com>
Wed, 7 Dec 2016 17:15:27 +0000 (18:15 +0100)
Change-Id: I94004c1cf7651aef2bcfa408aafac6a9bec20b0b
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
tests/data_plane/configs/odl/map_timers/map1.json [new file with mode: 0644]
tests/data_plane/configs/odl/map_timers/map2.json [new file with mode: 0644]
tests/data_plane/configs/odl/map_timers/map3.json [new file with mode: 0644]
tests/data_plane/configs/odl/map_timers/map4.json [new file with mode: 0644]
tests/data_plane/vat_templates/dump_remote_mappings.tpl [new file with mode: 0644]
tests/data_plane/vpp_lite_topo/scripts/vat/mapping_exists.py [new file with mode: 0755]
tests/data_plane/vpp_lite_topo/test_driver/src_dst.sh
tests/data_plane/vpp_lite_topo/tests/test_mapping_timers.sh [new file with mode: 0755]

diff --git a/tests/data_plane/configs/odl/map_timers/map1.json b/tests/data_plane/configs/odl/map_timers/map1.json
new file mode 100644 (file)
index 0000000..1c29da3
--- /dev/null
@@ -0,0 +1,32 @@
+{
+  "input": {
+    "mapping-record": {
+      "recordTtl": 1,
+      "action": "NoAction",
+      "authoritative": true,
+        "eid": {
+                "address-type": "ietf-lisp-address-types:source-dest-key-lcaf",
+                "source-dest-key": {
+                    "source": "6.0.1.0/24",
+                    "dest": "6.0.2.0/24"
+                }
+        },
+      "LocatorRecord": [
+        {
+          "locator-id": "ISP1",
+          "priority": 1,
+          "weight": 1,
+          "multicastPriority": 255,
+          "multicastWeight": 0,
+          "localLocator": true,
+          "rlocProbed": false,
+          "routed": false,
+          "rloc": {
+              "address-type": "ietf-lisp-address-types:ipv4-afi",
+              "ipv4": "6.0.3.2"
+          }
+        }
+      ]
+    }
+  }
+}
diff --git a/tests/data_plane/configs/odl/map_timers/map2.json b/tests/data_plane/configs/odl/map_timers/map2.json
new file mode 100644 (file)
index 0000000..1e1b92d
--- /dev/null
@@ -0,0 +1,33 @@
+{
+  "input": {
+    "mapping-record": {
+      "recordTtl": 1,
+      "action": "NoAction",
+      "authoritative": true,
+        "eid": {
+                "address-type": "ietf-lisp-address-types:source-dest-key-lcaf",
+                "source-dest-key": {
+                    "source": "6.0.5.0/24",
+                    "dest": "6.0.2.0/24"
+                }
+            },
+      "LocatorRecord": [
+        {
+          "locator-id": "ISP1",
+          "priority": 1,
+          "weight": 1,
+          "multicastPriority": 255,
+          "multicastWeight": 0,
+          "localLocator": true,
+          "rlocProbed": false,
+          "routed": true,
+          "rloc": {
+              "address-type": "ietf-lisp-address-types:ipv4-afi",
+              "ipv4":  "6.0.3.3"
+            }
+          }
+      ]
+    }
+  }
+}
+
diff --git a/tests/data_plane/configs/odl/map_timers/map3.json b/tests/data_plane/configs/odl/map_timers/map3.json
new file mode 100644 (file)
index 0000000..db88cbd
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "input": {
+        "mapping-record": {
+            "recordTtl": 1,
+            "action": "NoAction",
+            "authoritative": true,
+            "eid": {
+                "address-type": "ietf-lisp-address-types:ipv4-prefix-afi",
+                "ipv4-prefix": "6.0.1.0/24"
+            },
+            "LocatorRecord": [
+                {
+                    "locator-id": "ISP1",
+                    "priority": 1,
+                    "weight": 1,
+                    "multicastPriority": 255,
+                    "multicastWeight": 0,
+                    "localLocator": true,
+                    "rlocProbed": false,
+                    "routed": true,
+                    "rloc": {
+                        "address-type": "ietf-lisp-address-types:ipv4-afi",
+                        "ipv4": "6.0.3.1"
+                    }
+                }
+            ]
+        }
+    }
+}
diff --git a/tests/data_plane/configs/odl/map_timers/map4.json b/tests/data_plane/configs/odl/map_timers/map4.json
new file mode 100644 (file)
index 0000000..13d7c23
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "input": {
+        "mapping-record": {
+            "recordTtl": 1,
+            "action": "NoAction",
+            "authoritative": true,
+            "eid": {
+                "address-type": "ietf-lisp-address-types:ipv4-prefix-afi",
+                "ipv4-prefix": "6.0.5.0/24"
+            },
+            "LocatorRecord": [
+                {
+                    "locator-id": "ISP1",
+                    "priority": 1,
+                    "weight": 1,
+                    "multicastPriority": 255,
+                    "multicastWeight": 0,
+                    "localLocator": true,
+                    "rlocProbed": false,
+                    "routed": true,
+                    "rloc": {
+                        "address-type": "ietf-lisp-address-types:ipv4-afi",
+                        "ipv4": "6.0.3.1"
+                    }
+                }
+            ]
+        }
+    }
+}
diff --git a/tests/data_plane/vat_templates/dump_remote_mappings.tpl b/tests/data_plane/vat_templates/dump_remote_mappings.tpl
new file mode 100644 (file)
index 0000000..16176de
--- /dev/null
@@ -0,0 +1 @@
+lisp_eid_table_dump remote
diff --git a/tests/data_plane/vpp_lite_topo/scripts/vat/mapping_exists.py b/tests/data_plane/vpp_lite_topo/scripts/vat/mapping_exists.py
new file mode 100755 (executable)
index 0000000..2015b4a
--- /dev/null
@@ -0,0 +1,38 @@
+# Script for checking whether a mapping exists in the vpp's map-cache
+#
+# Params:
+#   vat_exec - VAT executable
+#   vpp_prefix - shared vpp memory prefix
+#   mapping - mapping to verify
+
+import sys
+import subprocess
+import json
+
+def has_mapping(json, mapping):
+  if len (json) == 0:
+    return False
+
+  for obj in json:
+    if obj['eid'] == mapping:
+      return True;
+
+  return False
+
+def verify_mapping(vat_exec, prefix, mapping, vat_path):
+  vat_file = vat_path + '/' + 'dump_remote_mappings.tpl'
+  out = subprocess.Popen([vat_exec, "chroot", "prefix", prefix, "json", "script",
+      "in", vat_file], stdout=subprocess.PIPE).communicate()[0]
+
+  o = json.loads(out)
+  return has_mapping(o, mapping)
+
+if __name__ == "__main__":
+  if len(sys.argv) < 4:
+    raise Exception('expecteds 4 parameters: VAT executable, shared prefix '
+        + ' name, mapping expected, path to vat templates!')
+
+  if verify_mapping(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]):
+    sys.exit(0)
+  else:
+    sys.exit(1)
index 14654ad..99c74bf 100644 (file)
@@ -21,6 +21,11 @@ function send_ping_from_ns
   assert_rc_ok $? 3_node_star_topo_clean "No ICMP Response!"
 }
 
+function send_ping_from_ns_no_verify
+{
+  ip netns exec "${1}" "${2}" -c 1 "${3}"
+}
+
 function test_src_dst
 {
   3_node_star_topo_setup
@@ -94,3 +99,43 @@ function test_src_dst_l2
   print_status $rc "No ICM response!"
   exit $test_result
 }
+
+function mapping_exists
+{
+  python scripts/vat/mapping_exists.py ${VPP_API_TEST} "$1" "$2" ${VAT_TEMPLATES}
+}
+
+function test_mapping_timers
+{
+  3_node_star_topo_setup
+  post_curl "add-mapping" "map3.json"
+  post_curl "add-mapping" "map4.json"
+
+  maybe_pause
+
+  test_result=1
+
+  send_ping_from_ns vpp-ns1 ${1} ${2}
+  send_ping_from_ns vpp-ns3 ${1} ${2}
+
+  # wait for map-requests to resolve
+  sleep 2
+
+  mapping_exists "vpp1" "6.0.1.0/24|6.0.2.0/24"
+  assert_rc_ok $? 3_node_star_topo_clean "mapping not in map-cache!"
+  mapping_exists "vpp2" "6.0.1.0/24"
+  assert_rc_ok $? 3_node_star_topo_clean "mapping not in map-cache!"
+
+  # sleep enough so the mapping expires
+  sleep 65
+
+  mapping_exists "vpp1" "6.0.1.0/24|6.0.2.0/24"
+  assert_rc_not_ok $? 3_node_star_topo_clean "mapping still present in map-cache!"
+  mapping_exists "vpp2" "6.0.1.0/24"
+  assert_rc_not_ok $? 3_node_star_topo_clean "mapping still present in map-cache!"
+
+  maybe_pause
+  3_node_star_topo_clean
+  echo "Test passed."
+  exit 0
+}
diff --git a/tests/data_plane/vpp_lite_topo/tests/test_mapping_timers.sh b/tests/data_plane/vpp_lite_topo/tests/test_mapping_timers.sh
new file mode 100755 (executable)
index 0000000..af6a79f
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+# Test mapping timers expiration for dst-only and src/dst mappings
+
+VPP_LITE_CONF=`pwd`/../configs/vpp_lite_config/sd/4o4
+ODL_CONFIG_DIR=`pwd`/../configs/odl/map_timers
+VAT_TEMPLATES=`pwd`/../vat_templates
+
+source test_driver/src_dst.sh
+
+test_mapping_timers ping "6.0.2.2"