Skip to content

Commit 1696bee

Browse files
committed
tools/psoc6/run_test_plan.py: WIP. FIXUP.
Signed-off-by: jaenrig-ifx <enriquezgarcia.external@infineon.com>
1 parent 0c6a7d8 commit 1696bee

1 file changed

Lines changed: 90 additions & 67 deletions

File tree

tools/psoc6/run_test_plan.py

Lines changed: 90 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import argparse
22
from dataclasses import dataclass, field
3+
from abc import ABC, abstractmethod
34
from typing import ClassVar
45
from enum import Enum
56
import logging
@@ -429,16 +430,17 @@ class TestPlanLogger:
429430

430431
decorator_line_len = 41
431432

432-
def __init__(self):
433-
pass
433+
# def __init__(self):
434+
# pass
434435

435-
def test_plan_info(self, board, test_plan_file, hil_devs_file):
436+
def test_plan_info(self, test_plan_file, hil_devs_file=None, board=None):
436437
print(
437438
f"{TestPlanLogger.blue_on}"
438439
+ "#" * TestPlanLogger.decorator_line_len
439440
+ f"{TestPlanLogger.color_off}"
440441
)
441-
print(f"{TestPlanLogger.blue_on}> board : {board}{TestPlanLogger.color_off}")
442+
if board:
443+
print(f"{TestPlanLogger.blue_on}> board : {board}{TestPlanLogger.color_off}")
442444
print(f"test plan file : {os.path.relpath(test_plan_file)}")
443445
if hil_devs_file:
444446
print(f"hil devs file : {os.path.relpath(hil_devs_file)}")
@@ -534,32 +536,21 @@ def test_summary_info(self, pass_test_name_list, fail_test_name_list, skip_test_
534536
)
535537

536538

537-
class TestPlanRunner:
538-
def __init__(
539-
self, test_plan_file, hil_devs_file, max_retries=0, dut_port=None, stub_port=None
540-
):
539+
class TestPlanRunner(ABC):
540+
def __init__(self, test_plan_file):
541541
self.test_plan_file = test_plan_file
542-
self.hil_devs_file = hil_devs_file
543-
self.max_retries = max_retries
544542
self.logger = TestPlanLogger()
545543

546-
self.dut_port = dut_port
547-
self.stub_port = stub_port
548-
self.direct_mode = True if (self.dut_port is not None) else False
549-
print("Direct mode:", self.direct_mode)
550-
551-
def run(self, board, test_name_list=[]):
544+
def run(self, test_name_list=[], max_retries=0):
552545
test_list = self.get_test_list(test_name_list)
553546

554-
self.logger.test_plan_info(board, self.test_plan_file, self.hil_devs_file)
555-
556547
pass_test_name_list = []
557548
skip_test_name_list = []
558549
fail_test_name_list = []
559550
pending_retries = True
560551
while pending_retries:
561552
for test in test_list:
562-
dut_port, stub_port = self.get_test_device_ports(test, board)
553+
dut_port, stub_port = self.get_test_device_ports(test)
563554

564555
if not test.are_required_devs_available(dut_port, stub_port):
565556
skip_test_name_list.append(test.name)
@@ -569,11 +560,10 @@ def run(self, board, test_name_list=[]):
569560
# TODO: Add device.switch management.
570561

571562
self.logger.test_info(test.name, dut_port, stub_port)
572-
573563
ret_code = test.run(dut_port, stub_port)
574564

575565
if ret_code != 0:
576-
TestRunnerRetries.update_upon_fail(test.name, self.max_retries)
566+
TestRunnerRetries.update_upon_fail(test.name, max_retries)
577567
self.logger.test_fail_info(test.name)
578568
else:
579569
TestRunnerRetries.update_upon_success(test.name)
@@ -594,34 +584,49 @@ def run(self, board, test_name_list=[]):
594584
if fail_test_name_list:
595585
sys.exit(1)
596586

597-
def get_test_device_ports(self, test, board):
598-
def get_ports_for_role(test, board, device_role):
599-
allowed_board_list = test.get_allowed_board_list(device_role, board)
587+
def get_test_list(self, test_name_list=[]):
588+
test_plan_list = TestRunner.load_list_from_yaml(self.test_plan_file)
600589

601-
logging.debug(
602-
f'ALLOWED {device_role} board list for test "{test.name}": {allowed_board_list}'
603-
)
590+
if test_name_list == []:
591+
return test_plan_list
604592

605-
port_list = []
606-
for device in allowed_board_list:
607-
available_ports = get_devices_port(
608-
device.get("board"), self.hil_devs_file, device.get("version", None)
609-
)
610-
port_list.extend(available_ports)
593+
test_list = []
594+
for test_name in test_name_list:
595+
for test in test_plan_list:
596+
if test.name == test_name:
597+
test_list.append(test)
598+
599+
logging.debug(f"Selected test list: {[test.name for test in test_list]}")
600+
601+
return test_list
602+
603+
@abstractmethod
604+
def get_test_device_ports(self, test):
605+
pass
606+
607+
608+
class TestPlanRunnerHIL(TestPlanRunner):
609+
def __init__(self, test_plan_file, hil_devs_file, board):
610+
super().__init__(test_plan_file)
611+
self.hil_devs_file = hil_devs_file
612+
self.board = board
611613

612-
logging.debug(f'AVAILABLE {device_role} ports for test "{test.name}": {port_list}')
614+
def set_board(self, board):
615+
self.board = board
613616

614-
return port_list
617+
def run(self, test_name_list=[], max_retries=0):
618+
self.logger.test_plan_info(self.test_plan_file, self.hil_devs_file, self.board)
619+
return super().run(test_name_list, max_retries)
615620

621+
"""
622+
Private methods
623+
"""
624+
625+
def get_test_device_ports(self, test):
616626
dut_port = None
617627
stub_port = None
618628

619-
if self.direct_mode:
620-
dut_port = self.dut_port
621-
stub_port = self.stub_port
622-
return dut_port, stub_port
623-
624-
dut_port_list = get_ports_for_role(test, board, TestRunner.DeviceRole.DUT)
629+
dut_port_list = self.get_ports_for_role(test, self.board, TestRunner.DeviceRole.DUT)
625630

626631
if not dut_port_list:
627632
return dut_port, stub_port
@@ -630,37 +635,52 @@ def get_ports_for_role(test, board, device_role):
630635
dut_port = dut_port_list[0]
631636

632637
if test.requires_multiple_devs():
633-
stub_port_list = get_ports_for_role(test, board, TestRunner.DeviceRole.STUB)
638+
stub_port_list = self.get_ports_for_role(test, self.board, TestRunner.DeviceRole.STUB)
634639

635640
# Take any element from stub_port_list that is not dut_port
636641
for port in stub_port_list:
637642
if port != dut_port:
638643
stub_port = port
639644
break
640645

641-
if not stub_port:
642-
return dut_port, stub_port
643-
644646
return dut_port, stub_port
645647

646-
def get_test_list(self, test_name_list=[]):
647-
test_plan_list = TestRunner.load_list_from_yaml(self.test_plan_file)
648+
def get_ports_for_role(self, test, board, device_role):
649+
allowed_board_list = test.get_allowed_board_list(device_role, board)
648650

649-
if test_name_list == []:
650-
return test_plan_list
651+
port_list = []
652+
for device in allowed_board_list:
653+
available_ports = get_devices_port(
654+
device.get("board"), self.hil_devs_file, device.get("version", None)
655+
)
656+
port_list.extend(available_ports)
651657

652-
test_list = []
653-
for test_name in test_name_list:
654-
for test in test_plan_list:
655-
if test.name == test_name:
656-
test_list.append(test)
658+
return port_list
657659

658-
logging.debug(f"Selected test list: {[test.name for test in test_list]}")
659660

660-
return test_list
661+
class TestPlanRunnerPorts(TestPlanRunner):
662+
def __init__(self, test_plan_file, dut_port, stub_port):
663+
super().__init__(test_plan_file)
664+
self.dut_port = dut_port
665+
self.stub_port = stub_port
666+
667+
def set_ports(self, dut_port, stub_port):
668+
self.dut_port = dut_port
669+
self.stub_port = stub_port
661670

671+
def run(self, test_name_list=[], max_retries=0):
672+
self.logger.test_plan_info(self.test_plan_file)
673+
return super().run(test_name_list, max_retries)
662674

663-
class TestPlanCLI:
675+
"""
676+
Private methods
677+
"""
678+
679+
def get_test_device_ports(self, test):
680+
return self.dut_port, self.stub_port
681+
682+
683+
class TestPlanRunnerCLI:
664684
def __init__(self):
665685
self.parser = argparse.ArgumentParser(description="MicroPython test suites runner.")
666686
self.parser.add_argument("test_suite", nargs="*", type=str, help="Test suite to run.")
@@ -747,13 +767,16 @@ def set_validate_args(self, args):
747767

748768

749769
if __name__ == "__main__":
750-
test_plan_cli = TestPlanCLI()
751-
cli_args = test_plan_cli.parse()
752-
test_plan_runner = TestPlanRunner(
753-
cli_args.test_plan,
754-
cli_args.hil_devs,
755-
cli_args.max_retries,
756-
cli_args.dut_port,
757-
cli_args.stub_port,
758-
)
759-
test_plan_runner.run(cli_args.board, cli_args.test_suite)
770+
test_plan_runner_cli = TestPlanRunnerCLI()
771+
tpr_args = test_plan_runner_cli.parse()
772+
773+
# HIL device file based mode
774+
if tpr_args.hil_devs:
775+
test_plan_runner = TestPlanRunnerHIL(tpr_args.test_plan, tpr_args.hil_devs, tpr_args.board)
776+
# Direct port passing mode
777+
elif tpr_args.dut_port:
778+
test_plan_runner = TestPlanRunnerPorts(
779+
tpr_args.test_plan, tpr_args.dut_port, tpr_args.stub_port
780+
)
781+
782+
test_plan_runner.run(tpr_args.test_suite, tpr_args.max_retries)

0 commit comments

Comments
 (0)