diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2011-09-30 19:44:53 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2011-10-17 11:54:11 -0400 |
| commit | 45d73a5d8a98dbabcdf37e2da5ef5b0412244643 (patch) | |
| tree | 171cebe896512759e763a9d7bb36efe43455d1d1 /tools/testing | |
| parent | 4ab1cce5bdd87948b75ed4fe4a8629c0f76267ae (diff) | |
ktest: Add IF and ELSE to config sections
Add IF keyword to sections within the config. Also added an ELSE
keyword that allows different config options to be set for a given
section.
For example:
TYPE := 1
STATUS := 0
DEFAULTS IF ${TYPE}
[...]
ELSE IF ${STATUS}
[...]
ELSE
[...]
The above will process the first section as $TYPE is true. If it
was false, it would process the last section as $STATUS is false.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'tools/testing')
| -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 | # |
