>
>
>-----Original Message-----
>From: Ville Syrjälä [mailto:[email protected]] 
>Sent: Wednesday, January 27, 2016 2:31 PM
>To: Morton, Derek J
>Cc: [email protected]
>Subject: Re: [Intel-gfx] [PATCH i-g-t] lib/igt_core.c: Expand --run-subtest 
>functionality.
>
>On Wed, Jan 27, 2016 at 01:30:01PM +0000, Morton, Derek J wrote:
>> >
>> >
>> >-----Original Message-----
>> >From: Ville Syrjälä [mailto:[email protected]]
>> >Sent: Wednesday, January 27, 2016 12:33 PM
>> >To: Morton, Derek J
>> >Cc: [email protected]
>> >Subject: Re: [Intel-gfx] [PATCH i-g-t] lib/igt_core.c: Expand --run-subtest 
>> >functionality.
>> >
>> >On Wed, Jan 27, 2016 at 10:05:56AM +0000, Derek Morton wrote:
>> >> Added support for specifying arbitary lists of subtests to run or 
>> >> to exclude from being run by using : or ^ as a seperator.
>> >> 
>> >> :subtest1:subtest2: Will run subtest1 and subtest2 
>> >> ^subtest1^subtest2^ will run all subtests except subtest1 and 
>> >> subtest2
>> >
>> >Hmm. Getting a bit complicated perhaps. Would it be simpler to just allow 
>> >specifying the --r option multiple times? So we'd start with the full list 
>> >of subtests, and each --r option would filter the list in some way?
>> 
>> By -r I assume you mean --run-subtest? Running a test with -r <subtest> just 
>> prints the usage options at the moment.
>
>--r not -r ;)
>
>> Allowing it to be added multiple times could be a way of building up a list 
>> of subtests to run, but a completely new command line option would need to 
>> then be added (--skip-subtest?) to allow building up a list of subtests to 
>> be skipped.
>
>Or could be something like --r !subtest-name
>
>> With my change as is, it allows a string to be passed to the test which 
>> details which subtests should be run. If a new parameter such as 
>> --skip-subtest is added then it would require knowledge of whether the 
>> string contains subtests to run or not to run. That would complicate any 
>> scripts that use this to automate testing.
>> Allowing --run-subtest (and --skip-subtest) to be specified multiple times 
>> will also complicate the code in igt_core.c. Currently there is a simple 
>> call to strdup(). If --run-subtest can be specified multiple times the code 
>> will have to deal with concatenating strings and any memory reallocation 
>> that needs. Also how to deal with the possibility of multiple wildcard 
>> expressions?
>
>Hmm. I suppoose my original idea of start with full list and filter stuff out 
>doesn't work entirely well. Eg. --r foo --r bar would run nothing. So I guess 
>the option would have to be able to add to the list as well.
>
>So I guess we could make it so that '!' removes the specified test(s), no-'!' 
>adds them, and if this is the first --r option and there's no '!' we'd clear 
>the list entirely before adding the specified test(s) to it.
>
>> 
>> I think that will just end up more complicated than the simple separated 
>> list solution this patch introduces.
>
>I suppose. But it would avoid adding a new language which can look a bit like 
>a weird regexp but isn't.
>
>Maybe if you just use ',' to separate the subtests specifications, and '!' to 
>specify the not condition things would look a bit more standardish.

I can't use ! as the shell uses it for some command history substitution. That 
is why I chose ^. There are very few special character the shell does not mess 
up :-(.

How about the following:

Comma separated list of subtests to specify a list of subtests to run.
Prepend ^ to the list to specify a list of subtests to exclude.

I would then have to use strstr to look for a comma in what is specified to 
--run-subtests. Is there any risk of a comma in a wildcard expression? I found 
some code for fnmatch with google and it looks like it is simply ?*[]- which is 
treated as special characters.

//Derek 

>
>> 
>> //Derek
>> 
>> >
>> >> 
>> >> Any subtest string not starting : or ^ is treated as a normal 
>> >> wildcard expression.
>> >> 
>> >> This is required mainly on android to exclude subtests that test 
>> >> features that do not exist in the android driver while still being 
>> >> able to run other subtests in the binary when a wildcard expression 
>> >> is insufficient.
>> >> 
>> >> Signed-off-by: Derek Morton <[email protected]>
>> >> ---
>> >>  lib/igt_core.c | 42 ++++++++++++++++++++++++++++++++++++++++--
>> >>  1 file changed, 40 insertions(+), 2 deletions(-)
>> >> 
>> >> diff --git a/lib/igt_core.c b/lib/igt_core.c index 6b69bb7..b9e7470
>> >> 100644
>> >> --- a/lib/igt_core.c
>> >> +++ b/lib/igt_core.c
>> >> @@ -207,7 +207,15 @@
>> >>   * To do that obtain the lists of subtests with "--list-subtests", which 
>> >> can be
>> >>   * run as non-root and doesn't require the i915 driver to be loaded (or 
>> >> any
>> >>   * intel gpu to be present). Then individual subtests can be run 
>> >> with
>> >> - * "--run-subtest". Usage help for tests with subtests can be 
>> >> obtained with the
>> >> + * "--run-subtest". --run-subtest accepts wildcard characters. A 
>> >> + list of
>> >> + * subtests to run may be specified by using : as a seperator. A 
>> >> + list of
>> >> + * subtests to exclude may be specified using ^ as a seperator.
>> >> + *
>> >> + * - --run-subtest basic* will run all subtests starting basic.
>> >> + * - --run-subtest :subtest1:subtest2: will run only subtest1 and
>> >> + subtest2
>> >> + * - --run-subtest ^subtest1^subtest2^ will run all except 
>> >> + subtest1 and subtest2
>> >> + *
>> >> + * Usage help for tests with subtests can be obtained with the
>> >>   * "--help" command line option.
>> >>   */
>> >>  
>> >> @@ -786,6 +794,35 @@ void igt_simple_init_parse_opts(int *argc, char 
>> >> **argv,
>> >>               extra_opt_handler, handler_data);  }
>> >>  
>> >> +static bool check_testlist(const char *subtest_name) {
>> >> + char *p;
>> >> +
>> >> + /* Run subtests in list
>> >> +  * Look for subtest_name in list of form :subtest1:subtest2:subtest3:
>> >> +  * return true if found.
>> >> +  */
>> >> + if (run_single_subtest[0] == ':') {
>> >> +         p = strstr(run_single_subtest, subtest_name);
>> >> +         if ((p) && (*(p-1) == ':') && (*(p+strlen(subtest_name)) == ':' 
>> >> ))
>> >> +                 return true;
>> >> + }
>> >> + /* Run subtests not in list
>> >> +  * Look for subtest_name in list of form ^test1^subtest2^subtest3^
>> >> +  * return true if not found.
>> >> +  */
>> >> + else if (run_single_subtest[0] == '^') {
>> >> +         p = strstr(run_single_subtest, subtest_name);
>> >> +         if (!((p) && (*(p-1) == '^') && (*(p+strlen(subtest_name)) == 
>> >> '^' )))
>> >> +                 return true;
>> >> + }
>> >> + /* Run subtests that match shell wildcard */
>> >> + else if (fnmatch(run_single_subtest, subtest_name, 0) == 0)
>> >> +         return true;
>> >> +
>> >> + return false;
>> >> +}
>> >> +
>> >>  /*
>> >>   * Note: Testcases which use these helpers MUST NOT output anything to 
>> >> stdout
>> >>   * outside of places protected by igt_run_subtest checks - the 
>> >> piglit @@ -814,7 +851,8 @@ bool __igt_run_subtest(const char 
>> >> *subtest_name)
>> >>   }
>> >>  
>> >>   if (run_single_subtest) {
>> >> -         if (fnmatch(run_single_subtest, subtest_name, 0) != 0)
>> >> +
>> >> +         if (check_testlist(subtest_name) == false)
>> >>                   return false;
>> >>           else
>> >>                   run_single_subtest_found = true;
>> >> --
>> >> 1.9.1
>> >> 
>> >> _______________________________________________
>> >> Intel-gfx mailing list
>> >> [email protected]
>> >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>> >
>> >--
>> >Ville Syrjälä
>> >Intel OTC
>> >
>
>--
>Ville Syrjälä
>Intel OTC
>
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to