diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/testing/ktest/ktest.pl | 62 | ||||
-rw-r--r-- | tools/testing/ktest/sample.conf | 59 |
2 files changed, 121 insertions, 0 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index 65003a196305..18ef66823aa6 100755 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
@@ -114,6 +114,7 @@ my $successes = 0; | |||
114 | 114 | ||
115 | my %entered_configs; | 115 | my %entered_configs; |
116 | my %config_help; | 116 | my %config_help; |
117 | my %variable; | ||
117 | 118 | ||
118 | $config_help{"MACHINE"} = << "EOF" | 119 | $config_help{"MACHINE"} = << "EOF" |
119 | The machine hostname that you will test. | 120 | The machine hostname that you will test. |
@@ -262,6 +263,39 @@ sub get_ktest_configs { | |||
262 | } | 263 | } |
263 | } | 264 | } |
264 | 265 | ||
266 | sub process_variables { | ||
267 | my ($value) = @_; | ||
268 | my $retval = ""; | ||
269 | |||
270 | # We want to check for '\', and it is just easier | ||
271 | # to check the previous characet of '$' and not need | ||
272 | # to worry if '$' is the first character. By adding | ||
273 | # a space to $value, we can just check [^\\]\$ and | ||
274 | # it will still work. | ||
275 | $value = " $value"; | ||
276 | |||
277 | while ($value =~ /(.*?[^\\])\$\{(.*?)\}(.*)/) { | ||
278 | my $begin = $1; | ||
279 | my $var = $2; | ||
280 | my $end = $3; | ||
281 | # append beginning of value to retval | ||
282 | $retval = "$retval$begin"; | ||
283 | if (defined($variable{$var})) { | ||
284 | $retval = "$retval$variable{$var}"; | ||
285 | } else { | ||
286 | # put back the origin piece. | ||
287 | $retval = "$retval\$\{$var\}"; | ||
288 | } | ||
289 | $value = $end; | ||
290 | } | ||
291 | $retval = "$retval$value"; | ||
292 | |||
293 | # remove the space added in the beginning | ||
294 | $retval =~ s/ //; | ||
295 | |||
296 | return "$retval" | ||
297 | } | ||
298 | |||
265 | sub set_value { | 299 | sub set_value { |
266 | my ($lvalue, $rvalue) = @_; | 300 | my ($lvalue, $rvalue) = @_; |
267 | 301 | ||
@@ -271,10 +305,22 @@ sub set_value { | |||
271 | if ($rvalue =~ /^\s*$/) { | 305 | if ($rvalue =~ /^\s*$/) { |
272 | delete $opt{$lvalue}; | 306 | delete $opt{$lvalue}; |
273 | } else { | 307 | } else { |
308 | $rvalue = process_variables($rvalue); | ||
274 | $opt{$lvalue} = $rvalue; | 309 | $opt{$lvalue} = $rvalue; |
275 | } | 310 | } |
276 | } | 311 | } |
277 | 312 | ||
313 | sub set_variable { | ||
314 | my ($lvalue, $rvalue) = @_; | ||
315 | |||
316 | if ($rvalue =~ /^\s*$/) { | ||
317 | delete $variable{$lvalue}; | ||
318 | } else { | ||
319 | $rvalue = process_variables($rvalue); | ||
320 | $variable{$lvalue} = $rvalue; | ||
321 | } | ||
322 | } | ||
323 | |||
278 | sub read_config { | 324 | sub read_config { |
279 | my ($config) = @_; | 325 | my ($config) = @_; |
280 | 326 | ||
@@ -387,6 +433,22 @@ sub read_config { | |||
387 | $repeats{$val} = $repeat; | 433 | $repeats{$val} = $repeat; |
388 | } | 434 | } |
389 | } | 435 | } |
436 | } elsif (/^\s*([A-Z_\[\]\d]+)\s*:=\s*(.*?)\s*$/) { | ||
437 | next if ($skip); | ||
438 | |||
439 | my $lvalue = $1; | ||
440 | my $rvalue = $2; | ||
441 | |||
442 | # process config variables. | ||
443 | # Config variables are only active while reading the | ||
444 | # config and can be defined anywhere. They also ignore | ||
445 | # TEST_START and DEFAULTS, but are skipped if they are in | ||
446 | # on of these sections that have SKIP defined. | ||
447 | # The save variable can be | ||
448 | # defined multiple times and the new one simply overrides | ||
449 | # the prevous one. | ||
450 | set_variable($lvalue, $rvalue); | ||
451 | |||
390 | } else { | 452 | } else { |
391 | die "$name: $.: Garbage found in config\n$_"; | 453 | die "$name: $.: Garbage found in config\n$_"; |
392 | } | 454 | } |
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf index 87bf92a2eb99..761079edde65 100644 --- a/tools/testing/ktest/sample.conf +++ b/tools/testing/ktest/sample.conf | |||
@@ -73,6 +73,65 @@ | |||
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 | 75 | ||
76 | #### Config variables #### | ||
77 | # | ||
78 | # This config file can also contain "config variables". | ||
79 | # These are assigned with ":=" instead of the ktest option | ||
80 | # assigment "=". | ||
81 | # | ||
82 | # The difference between ktest options and config variables | ||
83 | # is that config variables can be used multiple times, | ||
84 | # where each instance will override the previous instance. | ||
85 | # And that they only live at time of processing this config. | ||
86 | # | ||
87 | # The advantage to config variables are that they can be used | ||
88 | # by any option or any other config variables to define thing | ||
89 | # that you may use over and over again in the options. | ||
90 | # | ||
91 | # For example: | ||
92 | # | ||
93 | # USER := root | ||
94 | # TARGET := mybox | ||
95 | # TEST_CASE := ssh ${USER}@${TARGET} /path/to/my/test | ||
96 | # | ||
97 | # TEST_START | ||
98 | # MIN_CONFIG = config1 | ||
99 | # TEST = ${TEST_CASE} | ||
100 | # | ||
101 | # TEST_START | ||
102 | # MIN_CONFIG = config2 | ||
103 | # TEST = ${TEST_CASE} | ||
104 | # | ||
105 | # TEST_CASE := ssh ${USER}@${TARGET} /path/to/my/test2 | ||
106 | # | ||
107 | # TEST_START | ||
108 | # MIN_CONFIG = config1 | ||
109 | # TEST = ${TEST_CASE} | ||
110 | # | ||
111 | # TEST_START | ||
112 | # MIN_CONFIG = config2 | ||
113 | # TEST = ${TEST_CASE} | ||
114 | # | ||
115 | # TEST_DIR := /home/me/test | ||
116 | # | ||
117 | # BUILD_DIR = ${TEST_DIR}/linux.git | ||
118 | # OUTPUT_DIR = ${TEST_DIR}/test | ||
119 | # | ||
120 | # Note, the config variables are evaluated immediately, thus | ||
121 | # updating TARGET after TEST_CASE has been assigned does nothing | ||
122 | # to TEST_CASE. | ||
123 | # | ||
124 | # As shown in the example, to evaluate a config variable, you | ||
125 | # use the ${X} convention. Simple $X will not work. | ||
126 | # | ||
127 | # If the config variable does not exist, the ${X} will not | ||
128 | # be evaluated. Thus: | ||
129 | # | ||
130 | # MAKE_CMD = PATH=/mypath:${PATH} make | ||
131 | # | ||
132 | # If PATH is not a config variable, then the ${PATH} in | ||
133 | # the MAKE_CMD option will be evaluated by the shell when | ||
134 | # the MAKE_CMD option is passed into shell processing. | ||
76 | 135 | ||
77 | #### Mandatory Default Options #### | 136 | #### Mandatory Default Options #### |
78 | 137 | ||