| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
- ERR_CODE=0
- format_backing_file()
- {
- local backing_file=$1
- # Create ublk device to write partition table
- local tmp_dev=$(_add_ublk_dev -t loop "${backing_file}")
- [ $? -ne 0 ] && return 1
- # Write partition table with sfdisk
- sfdisk /dev/ublkb"${tmp_dev}" > /dev/null 2>&1 <<EOF
- label: dos
- start=2048, size=100MiB, type=83
- start=206848, size=100MiB, type=83
- EOF
- local ret=$?
- "${UBLK_PROG}" del -n "${tmp_dev}"
- return $ret
- }
- test_auto_part_scan()
- {
- local backing_file=$1
- # Create device WITHOUT --no_auto_part_scan
- local dev_id=$(_add_ublk_dev -t loop "${backing_file}")
- [ $? -ne 0 ] && return 1
- udevadm settle
- # Partitions should be auto-detected
- if [ ! -e /dev/ublkb"${dev_id}"p1 ] || [ ! -e /dev/ublkb"${dev_id}"p2 ]; then
- "${UBLK_PROG}" del -n "${dev_id}"
- return 1
- fi
- "${UBLK_PROG}" del -n "${dev_id}"
- return 0
- }
- test_no_auto_part_scan()
- {
- local backing_file=$1
- # Create device WITH --no_auto_part_scan
- local dev_id=$(_add_ublk_dev -t loop --no_auto_part_scan "${backing_file}")
- [ $? -ne 0 ] && return 1
- udevadm settle
- # Partitions should NOT be auto-detected
- if [ -e /dev/ublkb"${dev_id}"p1 ]; then
- "${UBLK_PROG}" del -n "${dev_id}"
- return 1
- fi
- # Manual scan should work
- blockdev --rereadpt /dev/ublkb"${dev_id}" > /dev/null 2>&1
- udevadm settle
- if [ ! -e /dev/ublkb"${dev_id}"p1 ] || [ ! -e /dev/ublkb"${dev_id}"p2 ]; then
- "${UBLK_PROG}" del -n "${dev_id}"
- return 1
- fi
- "${UBLK_PROG}" del -n "${dev_id}"
- return 0
- }
- if ! _have_program sfdisk || ! _have_program blockdev; then
- exit "$UBLK_SKIP_CODE"
- fi
- _prep_test "generic" "test UBLK_F_NO_AUTO_PART_SCAN"
- if ! _have_feature "UBLK_F_NO_AUTO_PART_SCAN"; then
- _cleanup_test "generic"
- exit "$UBLK_SKIP_CODE"
- fi
- # Create and format backing file with partition table
- _create_backfile 0 256M
- format_backing_file "${UBLK_BACKFILES[0]}"
- [ $? -ne 0 ] && ERR_CODE=255
- # Test normal auto partition scan
- [ "$ERR_CODE" -eq 0 ] && test_auto_part_scan "${UBLK_BACKFILES[0]}"
- [ $? -ne 0 ] && ERR_CODE=255
- # Test no auto partition scan with manual scan
- [ "$ERR_CODE" -eq 0 ] && test_no_auto_part_scan "${UBLK_BACKFILES[0]}"
- [ $? -ne 0 ] && ERR_CODE=255
- _cleanup_test "generic"
- _show_result $TID $ERR_CODE
|