aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python/autogen/Testcase.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries/python/autogen/Testcase.py')
-rw-r--r--resources/libraries/python/autogen/Testcase.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/resources/libraries/python/autogen/Testcase.py b/resources/libraries/python/autogen/Testcase.py
new file mode 100644
index 0000000000..4f92e6c2e1
--- /dev/null
+++ b/resources/libraries/python/autogen/Testcase.py
@@ -0,0 +1,70 @@
+# Copyright (c) 2018 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining utilities for testcase autogeneration."""
+
+from string import Template
+
+
+class Testcase(object):
+ """Class containing a template string and a substitution method."""
+
+ def __init__(self, template_string):
+ """Construct instance by storing template given by string.
+
+ :param template_string: Template string to generate test case code with.
+ See string.Template documentation for template string syntax.
+ Only the following placeholders are supported:
+ - cores_num - Number of cores as robot number, example: "${2}".
+ - cores_str - Number of physical cores to use, example: "2".
+ - frame_num - Framesize as a number, example: "${74}".
+ - frame_str - Framesize in upper case, example: "74B".
+ - tc_num - Start of testcase name, example: "tc04".
+ :type template_string: str
+ """
+ self.template = Template(template_string)
+
+ def generate(self, num, framesize, phy_cores):
+ """Return string of test case code with placeholders filled.
+
+ Fail if there are placeholders left unfilled.
+
+ :param num: Test case number. Example value: 4.
+ :param framesize: Imix string or numeric frame size. Example: 74.
+ :param phy_cores: Number of physical cores to use. Example: 2.
+ :type num: int
+ :type framesize: str or int
+ :type phy_cores: int or str
+ :returns: Filled template, usable as test case code.
+ :rtype: str
+ """
+ try:
+ fs = int(framesize)
+ subst_dict = {
+ "frame_num": "${%d}" % fs,
+ "frame_str": "%dB" % fs
+ }
+ except ValueError: # Assuming an IMIX string.
+ subst_dict = {
+ "frame_num": str(framesize),
+ "frame_str": "IMIX"
+ }
+ cores_str = str(phy_cores)
+ cores_num = int(cores_str)
+ subst_dict.update(
+ {
+ "cores_num": "${%d}" % cores_num,
+ "cores_str": phy_cores,
+ "tc_num": "tc{num:02d}".format(num=num)
+ })
+ return self.template.substitute(subst_dict)