diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/testing/ktest/ktest.pl | 64 | ||||
-rw-r--r-- | tools/testing/ktest/sample.conf | 38 |
2 files changed, 98 insertions, 4 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index 057676a8e785..c76e18f00c44 100755 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
@@ -361,6 +361,21 @@ sub set_variable { | |||
361 | } | 361 | } |
362 | } | 362 | } |
363 | 363 | ||
364 | sub process_if { | ||
365 | my ($name, $value) = @_; | ||
366 | |||
367 | my $val = process_variables($value); | ||
368 | |||
369 | if ($val =~ /^\s*0\s*$/) { | ||
370 | return 0; | ||
371 | } elsif ($val =~ /^\s*\d+\s*$/) { | ||
372 | return 1; | ||
373 | } | ||
374 | |||
375 | die ("$name: $.: Undefined variable $val in if statement\n"); | ||
376 | return 1; | ||
377 | } | ||
378 | |||
364 | sub read_config { | 379 | sub read_config { |
365 | my ($config) = @_; | 380 | my ($config) = @_; |
366 | 381 | ||
@@ -376,6 +391,8 @@ sub read_config { | |||
376 | my $skip = 0; | 391 | my $skip = 0; |
377 | my $rest; | 392 | my $rest; |
378 | my $test_case = 0; | 393 | my $test_case = 0; |
394 | my $if = 0; | ||
395 | my $if_set = 0; | ||
379 | 396 | ||
380 | while (<IN>) { | 397 | while (<IN>) { |
381 | 398 | ||
@@ -397,7 +414,7 @@ sub read_config { | |||
397 | $default = 0; | 414 | $default = 0; |
398 | $repeat = 1; | 415 | $repeat = 1; |
399 | 416 | ||
400 | if ($rest =~ /\s+SKIP(.*)/) { | 417 | if ($rest =~ /\s+SKIP\b(.*)/) { |
401 | $rest = $1; | 418 | $rest = $1; |
402 | $skip = 1; | 419 | $skip = 1; |
403 | } else { | 420 | } else { |
@@ -411,9 +428,16 @@ sub read_config { | |||
411 | $repeat_tests{"$test_num"} = $repeat; | 428 | $repeat_tests{"$test_num"} = $repeat; |
412 | } | 429 | } |
413 | 430 | ||
414 | if ($rest =~ /\s+SKIP(.*)/) { | 431 | if ($rest =~ /\sIF\s+(\S*)(.*)/) { |
415 | $rest = $1; | 432 | $rest = $2; |
416 | $skip = 1; | 433 | if (process_if($name, $1)) { |
434 | $if_set = 1; | ||
435 | } else { | ||
436 | $skip = 1; | ||
437 | } | ||
438 | $if = 1; | ||
439 | } else { | ||
440 | $if = 0; | ||
417 | } | 441 | } |
418 | 442 | ||
419 | if ($rest !~ /^\s*$/) { | 443 | if ($rest !~ /^\s*$/) { |
@@ -437,10 +461,42 @@ sub read_config { | |||
437 | $skip = 0; | 461 | $skip = 0; |
438 | } | 462 | } |
439 | 463 | ||
464 | if ($rest =~ /\sIF\s+(\S*)(.*)/) { | ||
465 | $if = 1; | ||
466 | $rest = $2; | ||
467 | if (process_if($name, $1)) { | ||
468 | $if_set = 1; | ||
469 | } else { | ||
470 | $skip = 1; | ||
471 | } | ||
472 | } else { | ||
473 | $if = 0; | ||
474 | } | ||
475 | |||
440 | if ($rest !~ /^\s*$/) { | 476 | if ($rest !~ /^\s*$/) { |
441 | die "$name: $.: Gargbage found after DEFAULTS\n$_"; | 477 | die "$name: $.: Gargbage found after DEFAULTS\n$_"; |
442 | } | 478 | } |
443 | 479 | ||
480 | } elsif (/^\s*ELSE(.*)$/) { | ||
481 | if (!$if) { | ||
482 | die "$name: $.: ELSE found with out matching IF section\n$_"; | ||
483 | } | ||
484 | $rest = $1; | ||
485 | if ($if_set) { | ||
486 | $skip = 1; | ||
487 | } else { | ||
488 | $skip = 0; | ||
489 | |||
490 | if ($rest =~ /\sIF\s+(\S*)(.*)/) { | ||
491 | # May be a ELSE IF section. | ||
492 | if (!process_if($name, $1)) { | ||
493 | $skip = 1; | ||
494 | } | ||
495 | } else { | ||
496 | $if = 0; | ||
497 | } | ||
498 | } | ||
499 | |||
444 | } elsif (/^\s*([A-Z_\[\]\d]+)\s*=\s*(.*?)\s*$/) { | 500 | } elsif (/^\s*([A-Z_\[\]\d]+)\s*=\s*(.*?)\s*$/) { |
445 | 501 | ||
446 | next if ($skip); | 502 | next if ($skip); |
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf index 67bc4e06922c..6a0a0ba59975 100644 --- a/tools/testing/ktest/sample.conf +++ b/tools/testing/ktest/sample.conf | |||
@@ -72,6 +72,44 @@ | |||
72 | # the same option name under the same test or as default | 72 | # the same option name under the same test or as default |
73 | # ktest will fail to execute, and no tests will run. | 73 | # ktest will fail to execute, and no tests will run. |
74 | # | 74 | # |
75 | # Both TEST_START and DEFAULTS sections can also have the IF keyword | ||
76 | # The value after the IF must evaluate into a 0 or non 0 positive | ||
77 | # integer, and can use the config variables (explained below). | ||
78 | # | ||
79 | # DEFAULTS IF ${IS_X86_32} | ||
80 | # | ||
81 | # The above will process the DEFAULTS section if the config | ||
82 | # variable IS_X86_32 evaluates to a non zero positive integer | ||
83 | # otherwise if it evaluates to zero, it will act the same | ||
84 | # as if the SKIP keyword was used. | ||
85 | # | ||
86 | # The ELSE keyword can be used directly after a section with | ||
87 | # a IF statement. | ||
88 | # | ||
89 | # TEST_START IF ${RUN_NET_TESTS} | ||
90 | # BUILD_TYPE = useconfig:${CONFIG_DIR}/config-network | ||
91 | # | ||
92 | # ELSE | ||
93 | # | ||
94 | # BUILD_TYPE = useconfig:${CONFIG_DIR}/config-normal | ||
95 | # | ||
96 | # | ||
97 | # The ELSE keyword can also contain an IF statement to allow multiple | ||
98 | # if then else sections. But all the sections must be either | ||
99 | # DEFAULT or TEST_START, they can not be a mixture. | ||
100 | # | ||
101 | # TEST_START IF ${RUN_NET_TESTS} | ||
102 | # BUILD_TYPE = useconfig:${CONFIG_DIR}/config-network | ||
103 | # | ||
104 | # ELSE IF ${RUN_DISK_TESTS} | ||
105 | # BUILD_TYPE = useconfig:${CONFIG_DIR}/config-tests | ||
106 | # | ||
107 | # ELSE IF ${RUN_CPU_TESTS} | ||
108 | # BUILD_TYPE = useconfig:${CONFIG_DIR}/config-cpu | ||
109 | # | ||
110 | # ELSE | ||
111 | # BUILD_TYPE = useconfig:${CONFIG_DIR}/config-network | ||
112 | # | ||
75 | 113 | ||
76 | #### Config variables #### | 114 | #### Config variables #### |
77 | # | 115 | # |