From aae5e3f47fb4ac59c36b55b3d91da9bb5f747c22 Mon Sep 17 00:00:00 2001 From: Filip Tehlar Date: Wed, 7 Dec 2016 18:10:28 +0100 Subject: Add a test for mapping expiration Change-Id: I94004c1cf7651aef2bcfa408aafac6a9bec20b0b Signed-off-by: Filip Tehlar --- tests/data_plane/configs/odl/map_timers/map1.json | 32 +++++++++++++++ tests/data_plane/configs/odl/map_timers/map2.json | 33 ++++++++++++++++ tests/data_plane/configs/odl/map_timers/map3.json | 29 ++++++++++++++ tests/data_plane/configs/odl/map_timers/map4.json | 29 ++++++++++++++ .../vat_templates/dump_remote_mappings.tpl | 1 + .../vpp_lite_topo/scripts/vat/mapping_exists.py | 38 ++++++++++++++++++ .../vpp_lite_topo/test_driver/src_dst.sh | 45 ++++++++++++++++++++++ .../vpp_lite_topo/tests/test_mapping_timers.sh | 11 ++++++ 8 files changed, 218 insertions(+) create mode 100644 tests/data_plane/configs/odl/map_timers/map1.json create mode 100644 tests/data_plane/configs/odl/map_timers/map2.json create mode 100644 tests/data_plane/configs/odl/map_timers/map3.json create mode 100644 tests/data_plane/configs/odl/map_timers/map4.json create mode 100644 tests/data_plane/vat_templates/dump_remote_mappings.tpl create mode 100755 tests/data_plane/vpp_lite_topo/scripts/vat/mapping_exists.py create mode 100755 tests/data_plane/vpp_lite_topo/tests/test_mapping_timers.sh 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" -- cgit 1.2.3-korg