From d68be735d882bafcb672ebb27a66efbcabbeb02d Mon Sep 17 00:00:00 2001 From: Jan Gelety Date: Fri, 11 Sep 2020 11:08:39 +0200 Subject: [PATCH] Test: Add ramp-up phase to nat44ed-udir tests Change-Id: I3aa50ec1ef9b0445014daa31e767323060f4a03f Signed-off-by: Jan Gelety --- resources/libraries/python/NATUtil.py | 30 +++++++++++++++++-- resources/libraries/robot/ip/nat.robot | 34 +++++++++++++++++++++- ...4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.robot | 9 ++++-- ...p-nat44ed-h16384-p63-s1032192-udir-ndrpdr.robot | 9 ++++-- ...nat44ed-h262144-p63-s16515072-udir-ndrpdr.robot | 9 ++++-- ...udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.robot | 9 ++++-- ...p-nat44ed-h65536-p63-s4128768-udir-ndrpdr.robot | 9 ++++-- 7 files changed, 96 insertions(+), 13 deletions(-) diff --git a/resources/libraries/python/NATUtil.py b/resources/libraries/python/NATUtil.py index aabcd36cda..620e14aea1 100644 --- a/resources/libraries/python/NATUtil.py +++ b/resources/libraries/python/NATUtil.py @@ -13,6 +13,7 @@ """NAT utilities library.""" +from math import log2, modf from pprint import pformat from enum import IntEnum @@ -140,8 +141,10 @@ class NATUtil: :param node: Topology node. :type node: dict + :returns: NAT44 summary data. + :rtype: str """ - PapiSocketExecutor.run_cli_cmd(node, u"show nat44 summary") + return PapiSocketExecutor.run_cli_cmd(node, u"show nat44 summary") @staticmethod def show_nat_base_data(node): @@ -197,10 +200,33 @@ class NATUtil: :returns: Value of max_translations_per_thread NAT44 parameter. :rtype: int """ - from math import log2, modf rest, mult = modf(log2(sessions/(10*threads))) return 2 ** (int(mult) + (1 if rest else 0)) * 10 + @staticmethod + def get_nat44_sessions_number(node, proto): + """Get number of established NAT44 sessions from actual NAT44 mapping + data. + + :param node: DUT node. + :param proto: Required protocol - TCP/UDP/ICMP. + :type node: dict + :type proto: str + :returns: Number of established NAT44 sessions. + :rtype: int + :raises ValueError: If not supported protocol. + """ + nat44_data = dict() + if proto in [u"UDP", u"TCP", u"ICMP"]: + for line in NATUtil.show_nat44_summary(node).splitlines(): + sum_k, sum_v = line.split(u":") if u":" in line \ + else (line, None) + nat44_data[sum_k] = sum_v.strip() if isinstance(sum_v, str) \ + else sum_v + else: + raise ValueError(f"Unsupported protocol: {proto}!") + return nat44_data.get(f"total {proto.lower()} sessions", 0) + # DET44 PAPI calls # DET44 means deterministic mode of NAT44 @staticmethod diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot index b78575a960..e80e1e1c85 100644 --- a/resources/libraries/robot/ip/nat.robot +++ b/resources/libraries/robot/ip/nat.robot @@ -108,6 +108,38 @@ | | ... | ${dut2} | ${out_net} | ${out_mask} | gateway=${dut1_if2_ip4} | | ... | interface=${DUT2_${int}1}[0] +| Verify NAT44 TCP sessions number on DUT1 node +| | [Documentation] | Verify that all required NAT44 TCP sessions are +| | ... | established on DUT1 node. +| | +| | Verify NAT44 sessions number | ${nodes['DUT1']} | ${n_sessions} | TCP + +| Verify NAT44 UDP sessions number on DUT1 node +| | [Documentation] | Verify that all required NAT44 UDP sessions are +| | ... | established on DUT1 node. +| | +| | Verify NAT44 sessions number | ${nodes['DUT1']} | ${n_sessions} | UDP + +| Verify NAT44 sessions number +| | [Documentation] | Verify that all required NAT44 sessions of required +| | ... | protocol are established. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node. Type: dictionary +| | ... | - exp_n_sessions - Expected number of NAT44 sessions. Type: integer +| | ... | - proto - Required protocol. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Verify NAT44 sessions number \| ${nodes['DUT1']} \| ${64512} \ +| | ... | \| UDP \| +| | +| | [Arguments] | ${node} | ${exp_n_sessions} | ${proto} +| | +| | ${nat44_sessions}= | Get NAT44 Sessions Number | ${node} | ${proto} +| | Should Be Equal As Integers | ${nat44_sessions} | ${exp_n_sessions} +| | ... | Not all NAT44 ${proto} sessions have been established + # DET44 - NAT44 deterministic | Enable DET44 plugin on DUT | | [Documentation] | Enable DET44 plugin on DUT. @@ -169,7 +201,7 @@ | Initialize NAT44 deterministic mode in circular topology | | [Documentation] | Initialization of NAT44 deterministic mode (DET44) -| | ... | on DUT1. +| | ... | on DUT1 node. | | | | Enable DET44 plugin on DUT | ${dut1} | | Configure DET44 interfaces diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.robot index c0f974e54d..89ba6e4c9d 100644 --- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.robot +++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.robot @@ -83,8 +83,11 @@ | ${n_hosts}= | ${1024} | ${n_ports}= | ${63} | ${n_sessions}= | ${${n_hosts} * ${n_ports}} +# Ramp-up settings +| ${ramp_up_rate}= | ${500000} +| ${ramp_up_duration}= | ${1} # Traffic profile: -| ${traffic_profile}= | trex-stl-ethip4udp-1024u63p-udir +| ${traffic_profile}= | trex-stl-ethip4udp-${n_hosts}u${n_ports}p-udir *** Keywords *** | Local Template @@ -117,7 +120,9 @@ | | And Initialize layer interface | | And Initialize IPv4 forwarding for NAT44 in circular topology | | And Initialize NAT44 endpoint-dependent mode in circular topology -| | Then Find NDR and PDR intervals using optimized search +| | Then Send ramp-up traffic +| | And Verify NAT44 UDP sessions number on DUT1 node +| | And Find NDR and PDR intervals using optimized search | | ... | traffic_directions=${1} *** Test Cases *** diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.robot index ea33f8cd00..0f421e3687 100644 --- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.robot +++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.robot @@ -83,8 +83,11 @@ | ${n_hosts}= | ${16384} | ${n_ports}= | ${63} | ${n_sessions}= | ${${n_hosts} * ${n_ports}} +# Ramp-up settings +| ${ramp_up_rate}= | ${500000} +| ${ramp_up_duration}= | ${4.5} # Traffic profile: -| ${traffic_profile}= | trex-stl-ethip4udp-16384u63p-udir +| ${traffic_profile}= | trex-stl-ethip4udp-${n_hosts}u${n_ports}p-udir *** Keywords *** | Local Template @@ -117,7 +120,9 @@ | | And Initialize layer interface | | And Initialize IPv4 forwarding for NAT44 in circular topology | | And Initialize NAT44 endpoint-dependent mode in circular topology -| | Then Find NDR and PDR intervals using optimized search +| | Then Send ramp-up traffic +| | And Verify NAT44 UDP sessions number on DUT1 node +| | And Find NDR and PDR intervals using optimized search | | ... | traffic_directions=${1} *** Test Cases *** diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.robot index dd940f641b..9f17649ce0 100644 --- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.robot +++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.robot @@ -83,8 +83,11 @@ | ${n_hosts}= | ${262144} | ${n_ports}= | ${63} | ${n_sessions}= | ${${n_hosts} * ${n_ports}} +# Ramp-up settings +| ${ramp_up_rate}= | ${500000} +| ${ramp_up_duration}= | ${72.7} # Traffic profile: -| ${traffic_profile}= | trex-stl-ethip4udp-262144u63p-udir +| ${traffic_profile}= | trex-stl-ethip4udp-${n_hosts}u${n_ports}p-udir # Main heap size multiplicator | ${heap_size_mult}= | ${3} @@ -119,7 +122,9 @@ | | And Initialize layer interface | | And Initialize IPv4 forwarding for NAT44 in circular topology | | And Initialize NAT44 endpoint-dependent mode in circular topology -| | Then Find NDR and PDR intervals using optimized search +| | Then Send ramp-up traffic +| | And Verify NAT44 UDP sessions number on DUT1 node +| | And Find NDR and PDR intervals using optimized search | | ... | traffic_directions=${1} *** Test Cases *** diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.robot index a0d19bbee0..b201e36cfe 100644 --- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.robot +++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.robot @@ -83,8 +83,11 @@ | ${n_hosts}= | ${4096} | ${n_ports}= | ${63} | ${n_sessions}= | ${${n_hosts} * ${n_ports}} +# Ramp-up settings +| ${ramp_up_rate}= | ${500000} +| ${ramp_up_duration}= | ${1.1} # Traffic profile: -| ${traffic_profile}= | trex-stl-ethip4udp-4096u63p-udir +| ${traffic_profile}= | trex-stl-ethip4udp-${n_hosts}u${n_ports}p-udir *** Keywords *** | Local Template @@ -117,7 +120,9 @@ | | And Initialize layer interface | | And Initialize IPv4 forwarding for NAT44 in circular topology | | And Initialize NAT44 endpoint-dependent mode in circular topology -| | Then Find NDR and PDR intervals using optimized search +| | Then Send ramp-up traffic +| | And Verify NAT44 UDP sessions number on DUT1 node +| | And Find NDR and PDR intervals using optimized search | | ... | traffic_directions=${1} *** Test Cases *** diff --git a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.robot b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.robot index f6e6503454..dfc88b375b 100644 --- a/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.robot +++ b/tests/vpp/perf/ip4/2n1l-10ge2p1x710-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.robot @@ -83,8 +83,11 @@ | ${n_hosts}= | ${65536} | ${n_ports}= | ${63} | ${n_sessions}= | ${${n_hosts} * ${n_ports}} +# Ramp-up settings +| ${ramp_up_rate}= | ${500000} +| ${ramp_up_duration}= | ${18.2} # Traffic profile: -| ${traffic_profile}= | trex-stl-ethip4udp-65536u63p-udir +| ${traffic_profile}= | trex-stl-ethip4udp-${n_hosts}u${n_ports}p-udir # Main heap size multiplicator | ${heap_size_mult}= | ${2} @@ -119,7 +122,9 @@ | | And Initialize layer interface | | And Initialize IPv4 forwarding for NAT44 in circular topology | | And Initialize NAT44 endpoint-dependent mode in circular topology -| | Then Find NDR and PDR intervals using optimized search +| | Then Send ramp-up traffic +| | And Verify NAT44 UDP sessions number on DUT1 node +| | And Find NDR and PDR intervals using optimized search | | ... | traffic_directions=${1} *** Test Cases *** -- 2.16.6