Re: [PATCH v3 3/3] fstests: filter readonly mount error messages

Amir Goldstein
2017-11-23T13:34:55Z

On Thu, Nov 23, 2017 at 3:28 PM, Amir Goldstein <amir73il@gmail.com> wrote:
> On Thu, Nov 23, 2017 at 1:10 PM, Eryu Guan <eguan@redhat.com> wrote:
>> util-linux commit 6dede2f2f7c5 ("libmount: support MS_RDONLY on
>> write-protected devices") changed the error message on read-only
>> block device, and in the failure case printed one line message
>> instead of two (for details please see comments in common/filter),
>> and this change broke generic/050 and overlay/035.
>>
>> Fix it by adding more filter rules to _filter_ro_mount and updating
>> associated .out files to unify the output from both old and new
>> util-linux versions.
>>
>> Signed-off-by: Eryu Guan <eguan@redhat.com>
>> ---
>> v3:
>> - document the filtered format in comments
>> - remove legacy sed filter, the perl filter covers the legacy case well
>> - filter out $SCRATCH_DEV/MNT too and use a consistent output
>> - remove the new filter_mount helper in overlay/035
>>
>> common/filter | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
>> tests/generic/050 | 8 ++++----
>> tests/generic/050.out | 8 ++++----
>> tests/overlay/035 | 4 ++--
>> tests/overlay/035.out | 4 ++--
>> 5 files changed, 58 insertions(+), 14 deletions(-)
>>
>> diff --git a/common/filter b/common/filter
>> index a212c09aa138..6140b331017f 100644
>> --- a/common/filter
>> +++ b/common/filter
>> @@ -399,9 +399,53 @@ _filter_ending_dot()
>>
>> # Older mount output referred to "block device" when mounting RO devices
>> # It's gone in newer versions
>> +#
>> +# And util-linux v2.30 changed the output again, e.g.
>> +# for a successful ro mount:
>> +# prior to v2.30: mount: <device> is write-protected, mounting read-only
>> +# v2.30 and later: mount: <mountpoint>: WARNING: device write-protected, mounted read-only.
>> +#
>> +# a failed ro mount:
>> +# prior to v2.30:
>> +# mount: <device> is write-protected, mounting read-only
>> +# mount: cannot mount <device> read-only
>> +# v2.30 and later:
>> +# mount: <mountpoint>: cannot mount <device> read-only.
>> +#
>> +# a failed rw remount:
>> +# prior to v2.30: mount: cannot remount <device> read-write, is write-protected
>> +# v2.30 and later: mount: <mountpoint>: cannot remount <device> read-write, is write-protected.
>> +#
>> +# Now use _filter_ro_mount to unify all these differences across old & new
>> +# util-linux versions. So the filtered format would be:
>> +#
>> +# successful ro mount:
>> +# mount: device write-protected, mounting read-only
>> +#
>> +# failed ro mount:
>> +# mount: device write-protected, mounting read-only
>> +# mount: cannot mount read-only
>> +#
>> +# failed rw remount:
>> +# mount: cannot remount device read-write, is write-protected
>> _filter_ro_mount() {
>> - sed -e "s/mount: block device/mount:/g" \
>> - -e "s/mount: cannot mount block device/mount: cannot mount/g"
>> + perl -ne '
>> + if (/write-protected, mount.*read-only/) {
>> + # successful ro mount
>> + print "mount: device write-protected, mounting read-only\n";
>> + } elsif (/mount: .*: cannot mount.*read-only/) {
>> + # filter v2.30 format failed ro mount
>> + print "mount: device write-protected, mounting read-only\n";
>
> Leftover copy&paste line?
>
>> + print "mount: cannot mount read-only\n";
>> + } elsif (/(^mount: cannot mount) .* (read-only$)/) {
>> + # filter prior to v2.30 format failed ro mount
>> + print "$1 $2\n";
>
> Maybe I am missing something, but why are you printing arguments
> when you know what the expected output should be?
> Also, in what is that match expression different from the v2.30 format?
> Can't you merge both cases to use the more generic match expr
> (without .*:) and print the expected result?
>

Also, I suggest to change the expected format to:
"mount: cannot mount device read-only"

(i.e. referring to "device") to be consistent with the rest of the
_filter_ro_mount and _filter_busy_mount errors.

Thanks,
Amir.