[RFC,v1,5/5] dts: add traffic generator node to dts runner

Message ID 20230420093109.594704-6-juraj.linkes@pantheon.tech (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series dts: add tg abstractions and scapy |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Functional success Functional PASS
ci/intel-Testing success Testing PASS

Commit Message

Juraj Linkeš April 20, 2023, 9:31 a.m. UTC
  Initialize the TG node and do basic verification.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 dts/framework/dts.py                    | 42 ++++++++++++++++---------
 dts/framework/testbed_model/__init__.py |  1 +
 2 files changed, 28 insertions(+), 15 deletions(-)
  

Comments

Jeremy Spewock May 3, 2023, 6:02 p.m. UTC | #1
Acked-by: Jeremy Spewock <jspewock@iol.unh.edu>

On Thu, Apr 20, 2023 at 5:51 AM Juraj Linkeš <juraj.linkes@pantheon.tech>
wrote:

> Initialize the TG node and do basic verification.
>
> Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> ---
>  dts/framework/dts.py                    | 42 ++++++++++++++++---------
>  dts/framework/testbed_model/__init__.py |  1 +
>  2 files changed, 28 insertions(+), 15 deletions(-)
>
> diff --git a/dts/framework/dts.py b/dts/framework/dts.py
> index 0502284580..9c82bfe1f4 100644
> --- a/dts/framework/dts.py
> +++ b/dts/framework/dts.py
> @@ -9,7 +9,7 @@
>  from .logger import DTSLOG, getLogger
>  from .test_result import BuildTargetResult, DTSResult, ExecutionResult,
> Result
>  from .test_suite import get_test_suites
> -from .testbed_model import SutNode
> +from .testbed_model import SutNode, TGNode, Node
>  from .utils import check_dts_python_version
>
>  dts_logger: DTSLOG = getLogger("DTSRunner")
> @@ -27,28 +27,40 @@ def run_all() -> None:
>      # check the python version of the server that run dts
>      check_dts_python_version()
>
> -    nodes: dict[str, SutNode] = {}
> +    nodes: dict[str, Node] = {}
>      try:
>          # for all Execution sections
>          for execution in CONFIGURATION.executions:
>              sut_node = None
> +            tg_node = None
>              if execution.system_under_test.name in nodes:
>                  # a Node with the same name already exists
>                  sut_node = nodes[execution.system_under_test.name]
> -            else:
> -                # the SUT has not been initialized yet
> -                try:
> +
> +            if execution.traffic_generator_system.name in nodes:
> +                # a Node with the same name already exists
> +                tg_node = nodes[execution.traffic_generator_system.name]
> +
> +            try:
> +                if not sut_node:
>                      sut_node = SutNode(execution.system_under_test)
> -                    result.update_setup(Result.PASS)
> -                except Exception as e:
> -                    dts_logger.exception(
> -                        f"Connection to node
> {execution.system_under_test} failed."
> -                    )
> -                    result.update_setup(Result.FAIL, e)
> -                else:
> -                    nodes[sut_node.name] = sut_node
> -
> -            if sut_node:
> +                if not tg_node:
> +                    tg_node = TGNode(execution.traffic_generator_system)
> +                    tg_node.verify()
> +                result.update_setup(Result.PASS)
> +            except Exception as e:
> +                failed_node = execution.system_under_test.name
> +                if sut_node:
> +                    failed_node = execution.traffic_generator_system.name
> +                dts_logger.exception(
> +                    f"Creation of node {failed_node} failed."
> +                )
> +                result.update_setup(Result.FAIL, e)
> +            else:
> +                nodes[sut_node.name] = sut_node
> +                nodes[tg_node.name] = tg_node
> +
> +            if sut_node and tg_node:
>                  _run_execution(sut_node, execution, result)
>
>      except Exception as e:
> diff --git a/dts/framework/testbed_model/__init__.py
> b/dts/framework/testbed_model/__init__.py
> index f54a947051..5cbb859e47 100644
> --- a/dts/framework/testbed_model/__init__.py
> +++ b/dts/framework/testbed_model/__init__.py
> @@ -20,3 +20,4 @@
>  )
>  from .node import Node
>  from .sut_node import SutNode
> +from .tg_node import TGNode
> --
> 2.30.2
>
>
  

Patch

diff --git a/dts/framework/dts.py b/dts/framework/dts.py
index 0502284580..9c82bfe1f4 100644
--- a/dts/framework/dts.py
+++ b/dts/framework/dts.py
@@ -9,7 +9,7 @@ 
 from .logger import DTSLOG, getLogger
 from .test_result import BuildTargetResult, DTSResult, ExecutionResult, Result
 from .test_suite import get_test_suites
-from .testbed_model import SutNode
+from .testbed_model import SutNode, TGNode, Node
 from .utils import check_dts_python_version
 
 dts_logger: DTSLOG = getLogger("DTSRunner")
@@ -27,28 +27,40 @@  def run_all() -> None:
     # check the python version of the server that run dts
     check_dts_python_version()
 
-    nodes: dict[str, SutNode] = {}
+    nodes: dict[str, Node] = {}
     try:
         # for all Execution sections
         for execution in CONFIGURATION.executions:
             sut_node = None
+            tg_node = None
             if execution.system_under_test.name in nodes:
                 # a Node with the same name already exists
                 sut_node = nodes[execution.system_under_test.name]
-            else:
-                # the SUT has not been initialized yet
-                try:
+
+            if execution.traffic_generator_system.name in nodes:
+                # a Node with the same name already exists
+                tg_node = nodes[execution.traffic_generator_system.name]
+
+            try:
+                if not sut_node:
                     sut_node = SutNode(execution.system_under_test)
-                    result.update_setup(Result.PASS)
-                except Exception as e:
-                    dts_logger.exception(
-                        f"Connection to node {execution.system_under_test} failed."
-                    )
-                    result.update_setup(Result.FAIL, e)
-                else:
-                    nodes[sut_node.name] = sut_node
-
-            if sut_node:
+                if not tg_node:
+                    tg_node = TGNode(execution.traffic_generator_system)
+                    tg_node.verify()
+                result.update_setup(Result.PASS)
+            except Exception as e:
+                failed_node = execution.system_under_test.name
+                if sut_node:
+                    failed_node = execution.traffic_generator_system.name
+                dts_logger.exception(
+                    f"Creation of node {failed_node} failed."
+                )
+                result.update_setup(Result.FAIL, e)
+            else:
+                nodes[sut_node.name] = sut_node
+                nodes[tg_node.name] = tg_node
+
+            if sut_node and tg_node:
                 _run_execution(sut_node, execution, result)
 
     except Exception as e:
diff --git a/dts/framework/testbed_model/__init__.py b/dts/framework/testbed_model/__init__.py
index f54a947051..5cbb859e47 100644
--- a/dts/framework/testbed_model/__init__.py
+++ b/dts/framework/testbed_model/__init__.py
@@ -20,3 +20,4 @@ 
 )
 from .node import Node
 from .sut_node import SutNode
+from .tg_node import TGNode