From 7840b1411369b925013711a421066a83310fe114 Mon Sep 17 00:00:00 2001 From: "Sridhar K. N. Rao" Date: Wed, 25 Jan 2017 15:36:25 +0530 Subject: pkt_gen: STC - RFC 2889 Address Learning and Caching Support This patch adds RFC-2889 address-learning-rate test and address-caching-capacity tests. The patch includes following changes 1. 01_testcases.conf: testcase definitions are added for new tests 2. results_constants.py: 3 new results constants are added, removed unsupported constants 3. testcenter-rfc2889-rest.py: Added support to these two new tests. Removed un-necessary synchronization of db-file. 5 new configuration parameters are added - which are explained in (4). 4. trafficgen.rst: Configuration description for rfc2889 tests are added. Stale information is removed. 5. testcenter.py: Support for two new tests are added. Separate functions for results analysis and parameter settings are added. 6. traffic_controller_rfc2889.py: Calls to functions in testcenter.py, based on the traffic_type, are added. Removed trailing whitespaces from trafficgen.rst JIRA: VSPERF-395 Change-Id: Ie6ca87519b7736e7410d7f0e60904579934af24a Signed-off-by: Sridhar K. N. Rao --- .../pkt_gen/testcenter/testcenter-rfc2889-rest.py | 120 +++++++++++++++------ 1 file changed, 88 insertions(+), 32 deletions(-) (limited to 'tools/pkt_gen/testcenter/testcenter-rfc2889-rest.py') diff --git a/tools/pkt_gen/testcenter/testcenter-rfc2889-rest.py b/tools/pkt_gen/testcenter/testcenter-rfc2889-rest.py index ddb64562..523d9d31 100644 --- a/tools/pkt_gen/testcenter/testcenter-rfc2889-rest.py +++ b/tools/pkt_gen/testcenter/testcenter-rfc2889-rest.py @@ -15,7 +15,7 @@ ''' @author Spirent Communications -This test automates the RFC2544 tests using the Spirent +This test automates the RFC2889 tests using the Spirent TestCenter REST APIs. This test supports Python 3.4 ''' @@ -92,9 +92,9 @@ def main(): optional_named.add_argument("--metric", required=False, help=("One among - Forwarding,\ - Address Caching and Congestion"), + Address Caching and Learning"), choices=["forwarding", "caching", - "congestion"], + "learning"], default="forwarding", dest="metric") optional_named.add_argument("--test_session_name", @@ -103,7 +103,6 @@ def main(): help=("The friendly name to identify " "the Spirent Lab Server test session"), dest="test_session_name") - optional_named.add_argument("--test_user_name", required=False, default="Rfc2889Usr", @@ -147,6 +146,42 @@ def main(): default=[256], help="A comma-delimited list of frame sizes", dest="frame_size_list") + optional_named.add_argument("--min_learning_rate", + type=positive_int, + required=False, + default=1488, + help="Lowest learning rate for test", + dest="min_learning_rate") + optional_named.add_argument("--max_learning_rate", + type=positive_int, + required=False, + default=14880, + help="Highest learning rate for test", + dest="max_learning_rate") + optional_named.add_argument("--min_num_addrs", + type=positive_int, + required=False, + default=1, + help="lowest number of addrs sent to DUT", + dest="min_num_addrs") + optional_named.add_argument("--max_num_addrs", + type=positive_int, + required=False, + default=1000, + help="Highest number of addrs sent to DUT", + dest="max_num_addrs") + optional_named.add_argument("--ac_learning_rate", + type=positive_int, + required=False, + default=1000, + help="Number of learning frames per sec", + dest="ac_learning_rate") + optional_named.add_argument("--frame_size", + type=positive_int, + required=False, + default=64, + help="Frame size for address test", + dest="frame_size") parser.add_argument("-v", "--verbose", required=False, @@ -187,7 +222,7 @@ def main(): if args.verbose: logger.debug("license_mgr = %s", license_mgr) stc.create("LicenseServer", under=license_mgr, attributes={ - "server": args.license_server_addr}) + "server": args.license_server_addr}) # Create the root project object if args.verbose: @@ -224,12 +259,27 @@ def main(): "GenParams": gen_params}) if args.verbose: - logger.debug("Set up the RFC2889 Forwarding test...") - stc.perform("Rfc2889SetupMaxForwardingRateTestCommand", - params={"Duration": args.trial_duration_sec, - "FrameSizeList": args.frame_size_list, - "NumOfTrials": args.num_trials, - "TrafficPattern": args.traffic_pattern}) + logger.debug("Set up the RFC2889 test...") + + if args.metric == "learning": + stc.perform("Rfc2889SetupAddressLearningRateTestCommand", + params={"FrameSize": args.frame_size, + "MinLearningRate": args.min_learning_rate, + "MaxLearningRate": args.max_learning_rate, + "NumOfTrials": args.num_trials}) + elif args.metric == "caching": + stc.perform("Rfc2889SetupAddressCachingCapacityTestCommand", + params={"FrameSize": args.frame_size, + "MinNumAddrs": args.min_num_addrs, + "MaxNumAddrs": args.max_num_addrs, + "LearningRate": args.ac_learning_rate, + "NumOfTrials": args.num_trials}) + else: + stc.perform("Rfc2889SetupMaxForwardingRateTestCommand", + params={"Duration": args.trial_duration_sec, + "FrameSizeList": args.frame_size_list, + "NumOfTrials": args.num_trials, + "TrafficPattern": args.traffic_pattern}) # Save the configuration stc.perform("SaveToTcc", params={"Filename": "2889.tcc"}) @@ -259,28 +309,34 @@ def main(): logger.debug("The lab server results database is %s", lab_server_resultsdb) - stc.perform("CSSynchronizeFiles", - params={"DefaultDownloadDir": args.results_dir}) - - resultsdb = args.results_dir + \ - lab_server_resultsdb.split("/Results")[1] - - if not os.path.exists(resultsdb): - resultsdb = lab_server_resultsdb - logger.info("Failed to create the local summary DB file, using" - " the remote DB file instead.") + if args.metric == "learning": + resultsdict = ( + stc.perform("QueryResult", + params={ + "DatabaseConnectionString": + lab_server_resultsdb, + "ResultPath": + ("RFC2889AddressLearningRateTestResultDetailed" + "SummaryView")})) + elif args.metric == "caching": + resultsdict = ( + stc.perform("QueryResult", + params={ + "DatabaseConnectionString": + lab_server_resultsdb, + "ResultPath": + ("RFC2889AddressCachingCapacityTestResult" + "DetailedSummaryView")})) else: - logger.info( - "The local summary DB file has been saved to %s", resultsdb) - - resultsdict = ( - stc.perform("QueryResult", - params={ - "DatabaseConnectionString": - resultsdb, - "ResultPath": - ("RFC2889MaxForwardingRateTestResultDetailed" - "SummaryView")})) + resultsdict = ( + stc.perform("QueryResult", + params={ + "DatabaseConnectionString": + lab_server_resultsdb, + "ResultPath": + ("RFC2889MaxForwardingRateTestResultDetailed" + "SummaryView")})) + if args.verbose: logger.debug("resultsdict[\"Columns\"]: %s", resultsdict["Columns"]) -- cgit 1.2.3-korg