126 (3752B)
1 #!/usr/bin/env bash 2 # group: rw auto backing 3 # 4 # Tests handling of colons in filenames (which may be confused with protocol 5 # prefixes) 6 # 7 # Copyright (C) 2017 Red Hat, Inc. 8 # 9 # This program is free software; you can redistribute it and/or modify 10 # it under the terms of the GNU General Public License as published by 11 # the Free Software Foundation; either version 2 of the License, or 12 # (at your option) any later version. 13 # 14 # This program is distributed in the hope that it will be useful, 15 # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 # GNU General Public License for more details. 18 # 19 # You should have received a copy of the GNU General Public License 20 # along with this program. If not, see <http://www.gnu.org/licenses/>. 21 # 22 23 # creator 24 owner=hreitz@redhat.com 25 26 seq="$(basename $0)" 27 echo "QA output created by $seq" 28 29 status=1 # failure is the default! 30 31 # get standard environment, filters and checks 32 . ./common.rc 33 . ./common.filter 34 35 # Needs backing file support 36 _supported_fmt qcow qcow2 qed vmdk 37 _unsupported_imgopts "subformat=monolithicFlat" \ 38 "subformat=twoGbMaxExtentFlat" 39 # This is the default protocol (and we want to test the difference between 40 # colons which separate a protocol prefix from the rest and colons which are 41 # just part of the filename, so we cannot test protocols which require a prefix) 42 _supported_proto file 43 44 echo 45 echo '=== Testing plain files ===' 46 echo 47 48 # A colon after a slash is not a protocol prefix separator 49 TEST_IMG="$TEST_DIR/a:b.$IMGFMT" _make_test_img 64M 50 _rm_test_img "$TEST_DIR/a:b.$IMGFMT" 51 52 # But if you want to be really sure, you can do this 53 TEST_IMG="file:$TEST_DIR/a:b.$IMGFMT" _make_test_img 64M 54 _rm_test_img "$TEST_DIR/a:b.$IMGFMT" 55 56 57 echo 58 echo '=== Testing relative backing filename resolution ===' 59 echo 60 61 BASE_IMG="$TEST_DIR/image:base.$IMGFMT" 62 TOP_IMG="$TEST_DIR/image:top.$IMGFMT" 63 64 TEST_IMG=$BASE_IMG _make_test_img 64M 65 TEST_IMG=$TOP_IMG _make_test_img -b ./image:base.$IMGFMT -F $IMGFMT 66 67 # (1) The default cluster size depends on the image format 68 # (2) vmdk only supports vmdk backing files, so it always reports the 69 # format of its backing file as such (but neither it nor qcow 70 # support the backing_fmt creation option, so we cannot use that to 71 # harmonize the output across all image formats this test supports) 72 TEST_IMG=$TOP_IMG _img_info | grep -ve 'cluster_size' -e 'backing file format' 73 74 _rm_test_img "$BASE_IMG" 75 _rm_test_img "$TOP_IMG" 76 77 78 # Do another test where we access both top and base without any slash in them 79 echo 80 pushd "$TEST_DIR" >/dev/null 81 82 BASE_IMG="base.$IMGFMT" 83 TOP_IMG="file:image:top.$IMGFMT" 84 85 TEST_IMG=$BASE_IMG _make_test_img 64M 86 TEST_IMG=$TOP_IMG _make_test_img -b "$BASE_IMG" -F $IMGFMT 87 88 TEST_IMG=$TOP_IMG _img_info | grep -ve 'cluster_size' -e 'backing file format' 89 90 _rm_test_img "$BASE_IMG" 91 _rm_test_img "image:top.$IMGFMT" 92 93 popd >/dev/null 94 95 # Note that we could also do the same test with BASE_IMG=file:image:base.$IMGFMT 96 # -- but behavior for that case is a bit strange. Protocol-prefixed paths are 97 # in a sense always absolute paths, so such paths will never be combined with 98 # the path of the overlay. But since "image:base.$IMGFMT" is actually a 99 # relative path, it will always be evaluated relative to qemu's CWD (but not 100 # relative to the overlay!). While this is more or less intended, it is still 101 # pretty strange and thus not something that is tested here. 102 # (The root of the issue is the use of a relative path with a protocol prefix. 103 # This may always give you weird results because in one sense, qemu considers 104 # such paths absolute, whereas in another, they are still relative.) 105 106 107 # success, all done 108 echo '*** done' 109 rm -f $seq.full 110 status=0