[igt-dev] [PATCH i-g-t v2 1/4] scripts/test_list.py: add support for ordering testlists

Kamil Konieczny kamil.konieczny at linux.intel.com
Wed Jun 21 16:44:55 UTC 2023


Hi Mauro,

On 2023-06-20 at 10:55:19 +0200, Mauro Carvalho Chehab wrote:
> From: Mauro Carvalho Chehab <mchehab at kernel.org>
> 
> Testlists usually require an special order, like:
> - an initial test which loads the driver;
> - normal tests;
> - dangerous tests (like KUnit ones).
> 
> Add support to handle order, by adding an "order" property at
> the config file.
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>

Acked-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>

> ---
>  scripts/test_list.py | 55 ++++++++++++++++++++++++++++++++++++++------
>  1 file changed, 48 insertions(+), 7 deletions(-)
> 
> diff --git a/scripts/test_list.py b/scripts/test_list.py
> index f676024c9571..76fdcf3dbb4f 100755
> --- a/scripts/test_list.py
> +++ b/scripts/test_list.py
> @@ -819,18 +819,25 @@ class TestList:
>      # Subtest list methods
>      #
>  
> -    def get_subtests(self, sort_field = None, expand = None):
> +    def get_subtests(self, sort_field = None, expand = None, with_order = False):
>  
>          """Return an array with all subtests"""
>  
>          subtests = {}
>          subtests[""] = []
>  
> +        order = None
> +
>          if sort_field:
>              if sort_field.lower() not in self.field_list:
>                  sys.exit(f"Field '{sort_field}' is not defined")
>              sort_field = self.field_list[sort_field.lower()]
>  
> +            if with_order:
> +                if "_properties_" in self.props[sort_field]:
> +                    if "order" in self.props[sort_field]["_properties_"]:
> +                        order = self.props[sort_field]["_properties_"]["order"]
> +
>          for test in sorted(self.doc.keys()):
>              fname = self.doc[test]["File"]
>  
> @@ -848,20 +855,54 @@ class TestList:
>                      if sort_field in subtest:
>                          if expand:
>                              test_list = subtest[sort_field].split(expand)
> +                            test_list = [s.strip() for s in test_list]
> +
>                              for test_elem in test_list:
> -                                test_elem = test_elem.strip()
>                                  if test_elem not in subtests:
>                                      subtests[test_elem] = []
> -                                subtests[test_elem].append(subtest["Summary"])
> +                                if order:
> +                                    subtests[test_elem].append((subtest["Summary"], test_list))
> +                                else:
> +                                    subtests[test_elem].append(subtest["Summary"])
>                          else:
>                              if subtest[sort_field] not in subtests:
>                                  subtests[subtest[sort_field]] = []
> -                            subtests[subtest[sort_field]].append(subtest["Summary"])
> +                                if order:
> +                                    subtests[test_elem].append((subtest["Summary"], [subtest[sort_field]]))
> +                                else:
> +                                    subtests[subtest[sort_field]].append(subtest["Summary"])
> +                    else:
> +                        if order:
> +                            subtests[test_elem].append((subtest["Summary"], [subtest[sort_field]]))
> +                        else:
> +                            subtests[""].append(subtest["Summary"])
> +
> +                else:
> +                    if order:
> +                        subtests[test_elem].append((subtest["Summary"], [subtest[sort_field]]))
>                      else:
>                          subtests[""].append(subtest["Summary"])
>  
> -                else:
> -                    subtests[""].append(subtest["Summary"])
> +        if order:
> +            for group, tests in subtests.items():
> +                prefix_tests = []
> +                suffix_tests = []
> +                middle_tests = []
> +                is_prefix = True
> +                for k in order:
> +                    if k == "__all__":
> +                        is_prefix = False
> +                        continue
> +                    for test in tests:
> +                        if k in test[1]:
> +                            if is_prefix:
> +                                prefix_tests.append(test[0])
> +                            else:
> +                                suffix_tests.append(test[0])
> +                for test in tests:
> +                    if test[0] not in prefix_tests and test[0] not in suffix_tests:
> +                        middle_tests.append(test[0])
> +                subtests[group] = prefix_tests + middle_tests + suffix_tests
>  
>          return subtests
>  
> @@ -1203,7 +1244,7 @@ class TestList:
>          test_prefix = re.sub(r'^igt@', '', test_prefix)
>  
>          # NOTE: currently, it uses a comma for multi-value delimitter
> -        test_subtests = self.get_subtests(sort_field, ",")
> +        test_subtests = self.get_subtests(sort_field, ",", with_order = True)
>  
>          if not os.path.exists(directory):
>              os.makedirs(directory)
> -- 
> 2.40.1
> 


More information about the igt-dev mailing list