summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilip Tehlar <ftehlar@cisco.com>2016-12-07 18:10:28 +0100
committerFilip Tehlar <ftehlar@cisco.com>2016-12-07 18:15:27 +0100
commitaae5e3f47fb4ac59c36b55b3d91da9bb5f747c22 (patch)
treea42ebf9bfaff37ec22349068b07fef99e9f66b4f
parent4ff1fc154b4b7460beeda06612b907004b7838c8 (diff)
Add a test for mapping expiration
Change-Id: I94004c1cf7651aef2bcfa408aafac6a9bec20b0b Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
-rw-r--r--tests/data_plane/configs/odl/map_timers/map1.json32
-rw-r--r--tests/data_plane/configs/odl/map_timers/map2.json33
-rw-r--r--tests/data_plane/configs/odl/map_timers/map3.json29
-rw-r--r--tests/data_plane/configs/odl/map_timers/map4.json29
-rw-r--r--tests/data_plane/vat_templates/dump_remote_mappings.tpl1
-rwxr-xr-xtests/data_plane/vpp_lite_topo/scripts/vat/mapping_exists.py38
-rw-r--r--tests/data_plane/vpp_lite_topo/test_driver/src_dst.sh45
-rwxr-xr-xtests/data_plane/vpp_lite_topo/tests/test_mapping_timers.sh11
8 files changed, 218 insertions, 0 deletions
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
index 0000000..1c29da3
--- /dev/null
+++ b/tests/data_plane/configs/odl/map_timers/map1.json
@@ -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
index 0000000..1e1b92d
--- /dev/null
+++ b/tests/data_plane/configs/odl/map_timers/map2.json
@@ -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
index 0000000..db88cbd
--- /dev/null
+++ b/tests/data_plane/configs/odl/map_timers/map3.json
@@ -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
index 0000000..13d7c23
--- /dev/null
+++ b/tests/data_plane/configs/odl/map_timers/map4.json
@@ -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
index 0000000..16176de
--- /dev/null
+++ b/tests/data_plane/vat_templates/dump_remote_mappings.tpl
@@ -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
index 0000000..2015b4a
--- /dev/null
+++ b/tests/data_plane/vpp_lite_topo/scripts/vat/mapping_exists.py
@@ -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)
diff --git a/tests/data_plane/vpp_lite_topo/test_driver/src_dst.sh b/tests/data_plane/vpp_lite_topo/test_driver/src_dst.sh
index 14654ad..99c74bf 100644
--- a/tests/data_plane/vpp_lite_topo/test_driver/src_dst.sh
+++ b/tests/data_plane/vpp_lite_topo/test_driver/src_dst.sh
@@ -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
index 0000000..af6a79f
--- /dev/null
+++ b/tests/data_plane/vpp_lite_topo/tests/test_mapping_timers.sh
@@ -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"