diff mbox series

iotests: Allow running from different directory

Message ID 20200902110326.257115-1-kwolf@redhat.com
State New
Headers show
Series iotests: Allow running from different directory | expand

Commit Message

Kevin Wolf Sept. 2, 2020, 11:03 a.m. UTC
It is convenient to be able to edit the tests and run them without
changing the current working directory back and forth. Instead of
assuming that $PWD is the qemu-iotests build directory, derive the build
directory from the executed script.

This allows 'check' to find the required files even when called from
another directory. The scratch directory will still be in the current
working directory.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 tests/qemu-iotests/check | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Claudio Fontana Sept. 2, 2020, 11:07 a.m. UTC | #1
On 9/2/20 1:03 PM, Kevin Wolf wrote:
> It is convenient to be able to edit the tests and run them without
> changing the current working directory back and forth. Instead of
> assuming that $PWD is the qemu-iotests build directory, derive the build
> directory from the executed script.
> 
> This allows 'check' to find the required files even when called from
> another directory. The scratch directory will still be in the current
> working directory.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  tests/qemu-iotests/check | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
> index 3ab859ac1a..22ada6a549 100755
> --- a/tests/qemu-iotests/check
> +++ b/tests/qemu-iotests/check
> @@ -44,7 +44,7 @@ then
>          _init_error "failed to obtain source tree name from check symlink"
>      fi
>      source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
> -    build_iotests=$PWD
> +    build_iotests=$(dirname "$0")
>  else
>      # called from the source tree
>      source_iotests=$PWD
> 

Like it, thanks!

Reviewed-by: Claudio Fontana <cfontana@suse.de>
Max Reitz Sept. 3, 2020, 12:54 p.m. UTC | #2
On 02.09.20 13:03, Kevin Wolf wrote:
> It is convenient to be able to edit the tests and run them without
> changing the current working directory back and forth. Instead of
> assuming that $PWD is the qemu-iotests build directory, derive the build
> directory from the executed script.
> 
> This allows 'check' to find the required files even when called from
> another directory. The scratch directory will still be in the current
> working directory.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  tests/qemu-iotests/check | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
> index 3ab859ac1a..22ada6a549 100755
> --- a/tests/qemu-iotests/check
> +++ b/tests/qemu-iotests/check
> @@ -44,7 +44,7 @@ then
>          _init_error "failed to obtain source tree name from check symlink"
>      fi
>      source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
> -    build_iotests=$PWD
> +    build_iotests=$(dirname "$0")

This breaks running check from the build tree.
(i.e. cd $build/tests/qemu-iotests; ./check)

The problem is that to run the test, we do cd to the source directory
($source_iotests), and so $build_iotests then becomes invalid if it’s
just a relative path.  In my case, this leads to the following error:

-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
+./common.rc: line 139: $QEMU/tests/qemu-iotests/../../qemu-img: No such
file or directory

I think this could be resolved by wrapping the $(dirname) in
$(realpath), i.e.

build_iotests=$(realpath "$(dirname "$0")")

Max

>  else
>      # called from the source tree
>      source_iotests=$PWD
>
Kevin Wolf Sept. 3, 2020, 5:21 p.m. UTC | #3
Am 03.09.2020 um 14:54 hat Max Reitz geschrieben:
> On 02.09.20 13:03, Kevin Wolf wrote:
> > It is convenient to be able to edit the tests and run them without
> > changing the current working directory back and forth. Instead of
> > assuming that $PWD is the qemu-iotests build directory, derive the build
> > directory from the executed script.
> > 
> > This allows 'check' to find the required files even when called from
> > another directory. The scratch directory will still be in the current
> > working directory.
> > 
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> >  tests/qemu-iotests/check | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
> > index 3ab859ac1a..22ada6a549 100755
> > --- a/tests/qemu-iotests/check
> > +++ b/tests/qemu-iotests/check
> > @@ -44,7 +44,7 @@ then
> >          _init_error "failed to obtain source tree name from check symlink"
> >      fi
> >      source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
> > -    build_iotests=$PWD
> > +    build_iotests=$(dirname "$0")
> 
> This breaks running check from the build tree.
> (i.e. cd $build/tests/qemu-iotests; ./check)
> 
> The problem is that to run the test, we do cd to the source directory
> ($source_iotests), and so $build_iotests then becomes invalid if it’s
> just a relative path.  In my case, this leads to the following error:
> 
> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
> +./common.rc: line 139: $QEMU/tests/qemu-iotests/../../qemu-img: No such
> file or directory

Ah, my symlinks in the source tree made it work for me.

> I think this could be resolved by wrapping the $(dirname) in
> $(realpath), i.e.
> 
> build_iotests=$(realpath "$(dirname "$0")")

Sounds good, I'll update it in my tree.

Kevin
Claudio Fontana Sept. 12, 2020, 10:28 p.m. UTC | #4
On 9/3/20 7:21 PM, Kevin Wolf wrote:
> Am 03.09.2020 um 14:54 hat Max Reitz geschrieben:
>> On 02.09.20 13:03, Kevin Wolf wrote:
>>> It is convenient to be able to edit the tests and run them without
>>> changing the current working directory back and forth. Instead of
>>> assuming that $PWD is the qemu-iotests build directory, derive the build
>>> directory from the executed script.
>>>
>>> This allows 'check' to find the required files even when called from
>>> another directory. The scratch directory will still be in the current
>>> working directory.
>>>
>>> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
>>> ---
>>>  tests/qemu-iotests/check | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
>>> index 3ab859ac1a..22ada6a549 100755
>>> --- a/tests/qemu-iotests/check
>>> +++ b/tests/qemu-iotests/check
>>> @@ -44,7 +44,7 @@ then
>>>          _init_error "failed to obtain source tree name from check symlink"
>>>      fi
>>>      source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
>>> -    build_iotests=$PWD
>>> +    build_iotests=$(dirname "$0")
>>
>> This breaks running check from the build tree.
>> (i.e. cd $build/tests/qemu-iotests; ./check)
>>
>> The problem is that to run the test, we do cd to the source directory
>> ($source_iotests), and so $build_iotests then becomes invalid if it’s
>> just a relative path.  In my case, this leads to the following error:
>>
>> -Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
>> +./common.rc: line 139: $QEMU/tests/qemu-iotests/../../qemu-img: No such
>> file or directory
> 
> Ah, my symlinks in the source tree made it work for me.
> 
>> I think this could be resolved by wrapping the $(dirname) in
>> $(realpath), i.e.
>>
>> build_iotests=$(realpath "$(dirname "$0")")
> 
> Sounds good, I'll update it in my tree.
> 
> Kevin
> 

Hello Kevin,

the committed patch in master is now (not sure where it changed):

diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
index 3ab859ac1a..e14a1f354d 100755
--- a/tests/qemu-iotests/check
+++ b/tests/qemu-iotests/check
@@ -44,7 +44,7 @@ then
         _init_error "failed to obtain source tree name from check symlink"
     fi
     source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
-    build_iotests=$PWD
+    build_iotests=$(readlink -f $(dirname "$0"))
 else
     # called from the source tree
     source_iotests=$PWD

-----

This seems to break the MacOS build (Cirrus-ci) though:

readlink: illegal option -- f
usage: readlink [-n] [file ...]
./check: line 60: /common.env: No such file or directory
check: failed to source common.env (make sure the qemu-iotests are run from tests/qemu-iotests in the build tree)
gmake: *** [/private/var/folders/3y/l0z1x3693dl_8n0qybp4dqwh0000gn/T/cirrus-ci-build/tests/Makefile.include:144: check-block] Error 1
Exit status: 2

Ciao,

Claudio
diff mbox series

Patch

diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
index 3ab859ac1a..22ada6a549 100755
--- a/tests/qemu-iotests/check
+++ b/tests/qemu-iotests/check
@@ -44,7 +44,7 @@  then
         _init_error "failed to obtain source tree name from check symlink"
     fi
     source_iotests=$(cd "$source_iotests"; pwd) || _init_error "failed to enter source tree"
-    build_iotests=$PWD
+    build_iotests=$(dirname "$0")
 else
     # called from the source tree
     source_iotests=$PWD