[kvm-unit-tests] scripts: Fix the check whether testname is in the only_tests list
diff mbox series

Message ID 20200701094635.19491-1-pbonzini@redhat.com
State New
Headers show
Series
  • [kvm-unit-tests] scripts: Fix the check whether testname is in the only_tests list
Related show

Commit Message

Paolo Bonzini July 1, 2020, 9:46 a.m. UTC
When you currently run

  ./run_tests.sh ioapic-split

the kvm-unit-tests run scripts do not only execute the "ioapic-split"
test, but also the "ioapic" test, which is quite surprising. This
happens because we use "grep -w" for checking whether a test should
be run or not.  Because "grep -w" does not consider the "-" character as
part of a word, "ioapic" successfully matches against "ioapic-split".

To fix the issue, use spaces as the only delimiter when running "grep",
removing the problematic "-w" flag from the invocation.

Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 scripts/runtime.bash | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Comments

Thomas Huth July 1, 2020, 9:52 a.m. UTC | #1
On 01/07/2020 11.46, Paolo Bonzini wrote:
> When you currently run
> 
>    ./run_tests.sh ioapic-split
> 
> the kvm-unit-tests run scripts do not only execute the "ioapic-split"
> test, but also the "ioapic" test, which is quite surprising. This
> happens because we use "grep -w" for checking whether a test should
> be run or not.  Because "grep -w" does not consider the "-" character as
> part of a word, "ioapic" successfully matches against "ioapic-split".
> 
> To fix the issue, use spaces as the only delimiter when running "grep",
> removing the problematic "-w" flag from the invocation.
> 
> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>   scripts/runtime.bash | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> index 8bfe31c..6158e37 100644
> --- a/scripts/runtime.bash
> +++ b/scripts/runtime.bash
> @@ -68,6 +68,11 @@ function print_result()
>       fi
>   }
>   
> +function find_word()
> +{
> +    grep -q " $1 " <<< " $2 "
> +}

Ah, clever idea with the surrounding spaces here!

Works great for me, so:
Tested-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Paolo Bonzini July 1, 2020, 10:05 a.m. UTC | #2
On 01/07/20 11:52, Thomas Huth wrote:
>>   +function find_word()
>> +{
>> +    grep -q " $1 " <<< " $2 "
>> +}
> 
> Ah, clever idea with the surrounding spaces here!

That's what you gain from learning to program in GW-BASIC, who wants
regular expression when you have INSTR.

But seriously: what do you think about adding "-F"?  The use of regex in
only_tests/only_group is not documented and might have surprising
effects.  If we want to keep it, we could replace spaces with newlines
and use ^$ in the regex.

Paolo

> Works great for me, so:
> Tested-by: Thomas Huth <thuth@redhat.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
>
Thomas Huth July 1, 2020, 10:11 a.m. UTC | #3
On 01/07/2020 12.05, Paolo Bonzini wrote:
> On 01/07/20 11:52, Thomas Huth wrote:
>>>    +function find_word()
>>> +{
>>> +    grep -q " $1 " <<< " $2 "
>>> +}
>>
>> Ah, clever idea with the surrounding spaces here!
> 
> That's what you gain from learning to program in GW-BASIC, who wants
> regular expression when you have INSTR.
> 
> But seriously: what do you think about adding "-F"?  The use of regex in
> only_tests/only_group is not documented and might have surprising
> effects.  If we want to keep it, we could replace spaces with newlines
> and use ^$ in the regex.

-F sounds fine to me. I'm not aware of anybody trying to use regular 
expressions in the list of tests, so that should be fine, I think.

  Thomas

Patch
diff mbox series

diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index 8bfe31c..6158e37 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -68,6 +68,11 @@  function print_result()
     fi
 }
 
+function find_word()
+{
+    grep -q " $1 " <<< " $2 "
+}
+
 function run()
 {
     local testname="$1"
@@ -84,15 +89,15 @@  function run()
         return
     fi
 
-    if [ -n "$only_tests" ] && ! grep -qw "$testname" <<<$only_tests; then
+    if [ -n "$only_tests" ] && ! find_word "$testname" "$only_tests"; then
         return
     fi
 
-    if [ -n "$only_group" ] && ! grep -qw "$only_group" <<<$groups; then
+    if [ -n "$only_group" ] && ! find_word "$only_group" "$groups"; then
         return
     fi
 
-    if [ -z "$only_group" ] && grep -qw "nodefault" <<<$groups &&
+    if [ -z "$only_group" ] && find_word nodefault "$groups" &&
             skip_nodefault; then
         print_result "SKIP" $testname "" "test marked as manual run only"
         return;