test_part_01.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
  4. ERR_CODE=0
  5. format_backing_file()
  6. {
  7. local backing_file=$1
  8. # Create ublk device to write partition table
  9. local tmp_dev=$(_add_ublk_dev -t loop "${backing_file}")
  10. [ $? -ne 0 ] && return 1
  11. # Write partition table with sfdisk
  12. sfdisk /dev/ublkb"${tmp_dev}" > /dev/null 2>&1 <<EOF
  13. label: dos
  14. start=2048, size=100MiB, type=83
  15. start=206848, size=100MiB, type=83
  16. EOF
  17. local ret=$?
  18. "${UBLK_PROG}" del -n "${tmp_dev}"
  19. return $ret
  20. }
  21. test_auto_part_scan()
  22. {
  23. local backing_file=$1
  24. # Create device WITHOUT --no_auto_part_scan
  25. local dev_id=$(_add_ublk_dev -t loop "${backing_file}")
  26. [ $? -ne 0 ] && return 1
  27. udevadm settle
  28. # Partitions should be auto-detected
  29. if [ ! -e /dev/ublkb"${dev_id}"p1 ] || [ ! -e /dev/ublkb"${dev_id}"p2 ]; then
  30. "${UBLK_PROG}" del -n "${dev_id}"
  31. return 1
  32. fi
  33. "${UBLK_PROG}" del -n "${dev_id}"
  34. return 0
  35. }
  36. test_no_auto_part_scan()
  37. {
  38. local backing_file=$1
  39. # Create device WITH --no_auto_part_scan
  40. local dev_id=$(_add_ublk_dev -t loop --no_auto_part_scan "${backing_file}")
  41. [ $? -ne 0 ] && return 1
  42. udevadm settle
  43. # Partitions should NOT be auto-detected
  44. if [ -e /dev/ublkb"${dev_id}"p1 ]; then
  45. "${UBLK_PROG}" del -n "${dev_id}"
  46. return 1
  47. fi
  48. # Manual scan should work
  49. blockdev --rereadpt /dev/ublkb"${dev_id}" > /dev/null 2>&1
  50. udevadm settle
  51. if [ ! -e /dev/ublkb"${dev_id}"p1 ] || [ ! -e /dev/ublkb"${dev_id}"p2 ]; then
  52. "${UBLK_PROG}" del -n "${dev_id}"
  53. return 1
  54. fi
  55. "${UBLK_PROG}" del -n "${dev_id}"
  56. return 0
  57. }
  58. if ! _have_program sfdisk || ! _have_program blockdev; then
  59. exit "$UBLK_SKIP_CODE"
  60. fi
  61. _prep_test "generic" "test UBLK_F_NO_AUTO_PART_SCAN"
  62. if ! _have_feature "UBLK_F_NO_AUTO_PART_SCAN"; then
  63. _cleanup_test "generic"
  64. exit "$UBLK_SKIP_CODE"
  65. fi
  66. # Create and format backing file with partition table
  67. _create_backfile 0 256M
  68. format_backing_file "${UBLK_BACKFILES[0]}"
  69. [ $? -ne 0 ] && ERR_CODE=255
  70. # Test normal auto partition scan
  71. [ "$ERR_CODE" -eq 0 ] && test_auto_part_scan "${UBLK_BACKFILES[0]}"
  72. [ $? -ne 0 ] && ERR_CODE=255
  73. # Test no auto partition scan with manual scan
  74. [ "$ERR_CODE" -eq 0 ] && test_no_auto_part_scan "${UBLK_BACKFILES[0]}"
  75. [ $? -ne 0 ] && ERR_CODE=255
  76. _cleanup_test "generic"
  77. _show_result $TID $ERR_CODE