aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/testing/ktest/ktest.pl64
-rw-r--r--tools/testing/ktest/sample.conf38
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
364sub 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
364sub read_config { 379sub 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#