Autogen: Create NICs for TCP suites.
[csit.git] / resources / libraries / python / autogen / Testcase.py
index 4f92e6c..70c2122 100644 (file)
@@ -34,29 +34,30 @@ class Testcase(object):
         """
         self.template = Template(template_string)
 
-    def generate(self, num, framesize, phy_cores):
+    def generate(self, num, frame_size, phy_cores):
         """Return string of test case code with placeholders filled.
 
         Fail if there are placeholders left unfilled.
+        It is not required for all placeholders to be present in template.
 
         :param num: Test case number. Example value: 4.
-        :param framesize: Imix string or numeric frame size. Example: 74.
+        :param frame_size: 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 frame_size: str or int
         :type phy_cores: int or str
         :returns: Filled template, usable as test case code.
         :rtype: str
         """
         try:
-            fs = int(framesize)
+            fsize = int(frame_size)
             subst_dict = {
-                "frame_num": "${%d}" % fs,
-                "frame_str": "%dB" % fs
+                "frame_num": "${%d}" % fsize,
+                "frame_str": "%dB" % fsize
             }
         except ValueError:  # Assuming an IMIX string.
             subst_dict = {
-                "frame_num": str(framesize),
+                "frame_num": str(frame_size),
                 "frame_str": "IMIX"
             }
         cores_str = str(phy_cores)
@@ -68,3 +69,42 @@ class Testcase(object):
                 "tc_num": "tc{num:02d}".format(num=num)
             })
         return self.template.substitute(subst_dict)
+
+    @classmethod
+    def default(cls, suite_id):
+        """Factory method for creating "default" testcase objects.
+
+        Testcase name will contain both frame size and core count.
+        Used for most performance tests, except TCP ones.
+
+        :param suite_id: Part of suite name to distinguish from other suites.
+        :type suite_id: str
+        :returns: Instance for generating testcase text of this type.
+        :rtype: Testcase
+        """
+        template_string = r'''
+| ${tc_num}-${frame_str}-${cores_str}c-''' + suite_id + r'''
+| | [Tags] | ${frame_str} | ${cores_str}C
+| | frame_size=${frame_num} | phy_cores=${cores_num}
+'''
+        return cls(template_string)
+
+    @classmethod
+    def tcp(cls, suite_id):
+        """Factory method for creating "tcp" testcase objects.
+
+        Testcase name will contain core count, but not frame size.
+
+        :param suite_id: Part of suite name to distinguish from other suites.
+        :type suite_id: str
+        :returns: Instance for generating testcase text of this type.
+        :rtype: Testcase
+        """
+        # TODO: Choose a better frame size identifier for streamed protocols
+        # (TCP, QUIC, SCTP, ...) where DUT (not TG) decides frame size.
+        template_string = r'''
+| ${tc_num}-IMIX-${cores_str}c-''' + suite_id + r'''
+| | [Tags] | ${cores_str}C
+| | phy_cores=${cores_num}
+'''
+        return cls(template_string)