[PATCH] test: Have test_fs work with non-functional guestmount tools
Stephen Warren
swarren at wwwdotorg.org
Tue Jul 7 21:05:58 CEST 2020
On 7/7/20 12:46 PM, Tom Rini wrote:
> On Tue, Jul 07, 2020 at 12:34:19PM -0600, Stephen Warren wrote:
>> On 7/7/20 9:53 AM, Tom Rini wrote:
>>> Since 2011 Ubuntu has intentionally broken support for guestmount[1] by
>>> default and requires sysadmin intervention to re-enable support. This
>>> in turn exposed that in our tests if guestmount is available but fails
>>> we do not fall back to trying to use sudo. Restructure our code to try
>>> sudo if guestmount fails rather than only when it is not in our path.
>>> Further, only note that we are using fuse on success of the call.
>>>
>>> [1]: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
>>
>> That is ... an interesting bug!
>>
>> This change looks conceptually fine.
>>
>>> diff --git a/test/py/tests/test_fs/conftest.py b/test/py/tests/test_fs/conftest.py
>> ...
>>> @@ -206,10 +206,11 @@ def mount_fs(fs_type, device, mount_point):
>> ...
> + try:
>>> mount_opt = 'loop,rw'
>>> if re.match('fat', fs_type):
>>> mount_opt += ',umask=0000'
>> ...
>>>
>>> # may not be effective for some file systems
>>> check_call('sudo chmod a+rw %s' % mount_point, shell=True)
>>> + except CalledProcessError:
>>> + raise
>>
>> That last/inner try...except/raise clause doesn't seem useful. Perhaps
>> just remote try...except and keep the body?
>
> I don't quite follow, sorry. What we have today is if/else on
> guestmount, but since check_call() throws CalledProcessError when it
> fails to run we never try sudo'ing. That's why I put the inner
> try/except/raise in.
It's the outer try/except that switches between the two options, not the
inner one.
It makes sense to have one try/except to catch errors running guestmount
and switch to sudo mount. However, the second try/except block that
solely wraps the sudo mount call doesn't do anything; it simply catches
an exception and then immediately re-raises it. This same issue is
actually present in the original code, except that there is applies to a
larger region of code.
So, wherever the code does this:
try:
something
except CalledProcessError:
raise
Just replace that with this:
something
So...
fuse_mounted = False
try:
if tool_is_in_path('guestmount'):
check_call('guestmount -a %s -m /dev/sda %s'
% (device, mount_point), shell=True)
fuse_mounted = True
except CalledProcessError:
# TODO: Remove the try here
# TODO: Remove 1 indent level from the rest of this code
mount_opt = 'loop,rw'
if re.match('fat', fs_type):
mount_opt += ',umask=0000'
@@ -219,8 +220,8 @@ def mount_fs(fs_type, device, mount_point):
# may not be effective for some file systems
check_call('sudo chmod a+rw %s' % mount_point, shell=True)
# TODO: Remove the except/raise here
More information about the U-Boot
mailing list