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