diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-08-19 09:33:09 +0200 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2022-08-22 17:00:38 +0200 |
commit | 5996f1167931d9b5760c368665104fc23f47de0f (patch) | |
tree | 566b98921ede34855fb88bc52effbd5eb17c2735 /test/units/testsuite-58.sh | |
parent | gpt: fix alignment (diff) | |
download | systemd-5996f1167931d9b5760c368665104fc23f47de0f.tar.xz systemd-5996f1167931d9b5760c368665104fc23f47de0f.zip |
test: modernize TEST-58-REPART
Diffstat (limited to '')
-rwxr-xr-x | test/units/testsuite-58.sh | 267 |
1 files changed, 157 insertions, 110 deletions
diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh index 8dadcc0a95..bf6c77ef98 100755 --- a/test/units/testsuite-58.sh +++ b/test/units/testsuite-58.sh @@ -8,76 +8,86 @@ if ! command -v systemd-repart &>/dev/null; then exit 0 fi +# shellcheck source=test/units/assert.sh +. "$(dirname "$0")"/assert.sh + export SYSTEMD_LOG_LEVEL=debug export PAGER=cat +seed=750b6cd5c4ae4012a15e7be3c29e6a47 + machine="$(uname -m)" if [ "${machine}" = "x86_64" ]; then - root_guid=4f68bce3-e8cd-4db1-96e7-fbcaf984b709 + root_guid=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 root_uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0 - usr_guid=8484680c-9521-48c6-9c11-b0720656f69e + usr_guid=8484680C-9521-48C6-9C11-B0720656F69E usr_uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16 architecture="x86-64" elif [ "${machine}" = "i386" ] || [ "${machine}" = "i686" ] || [ "${machine}" = "x86" ]; then - root_guid=44479540-f297-41b2-9af7-d131d5f0458a - root_uuid=02b4253f-29a4-404e-8972-1669d3b03c87 - usr_guid=75250d76-8cc6-458e-bd66-bd47cc81a812 - usr_uuid=7b42ffb0-b0e1-4395-b20b-c78f4a571648 + root_guid=44479540-F297-41B2-9AF7-D131D5F0458A + root_uuid=02B4253F-29A4-404E-8972-1669D3B03C87 + usr_guid=75250D76-8CC6-458E-BD66-BD47CC81A812 + usr_uuid=7B42FFB0-B0E1-4395-B20B-C78F4A571648 architecture="x86" elif [ "${machine}" = "aarch64" ] || [ "${machine}" = "aarch64_be" ] || [ "${machine}" = "armv8b" ] || [ "${machine}" = "armv8l" ]; then - root_guid=b921b045-1df0-41c3-af44-4c6f280d3fae - root_uuid=055d0227-53a6-4033-85c3-9a5973eff483 - usr_guid=b0e01050-ee5f-4390-949a-9101b17104e9 - usr_uuid=fce3c75e-d6a4-44c0-87f0-4c105183fb1f + root_guid=B921B045-1DF0-41C3-AF44-4C6F280D3FAE + root_uuid=055D0227-53A6-4033-85C3-9A5973EFF483 + usr_guid=B0E01050-EE5F-4390-949A-9101B17104E9 + usr_uuid=FCE3C75E-D6A4-44C0-87F0-4C105183FB1F architecture="arm64" elif [ "${machine}" = "arm" ]; then - root_guid=69dad710-2ce4-4e3c-b16c-21a1d49abed3 - root_uuid=567da89e-8de2-4499-8d10-18f212dff034 - usr_guid=7d0359a3-02b3-4f0a-865c-654403e70625 - usr_uuid=71e93dc2-5073-42cb-8a84-a354e64d8966 + root_guid=69DAD710-2CE4-4E3C-B16C-21A1D49ABED3 + root_uuid=567DA89E-8DE2-4499-8D10-18F212DFF034 + usr_guid=7D0359A3-02B3-4F0A-865C-654403E70625 + usr_uuid=71E93DC2-5073-42CB-8A84-A354E64D8966 architecture="arm" elif [ "${machine}" = "loongarch64" ]; then - root_guid=77055800-792c-4f94-b39a-98c91b762bb6 - root_uuid=d8efc2d2-0133-41e4-bdcb-3b9f4cfddde8 - usr_guid=e611c702-575c-4cbe-9a46-434fa0bf7e3f - usr_uuid=031ffa75-00bb-49b6-a70d-911d2d82a5b7 + root_guid=77055800-792C-4F94-B39A-98C91B762BB6 + root_uuid=D8EFC2D2-0133-41E4-BDCB-3B9F4CFDDDE8 + usr_guid=E611C702-575C-4CBE-9A46-434FA0BF7E3F + usr_uuid=031FFA75-00BB-49B6-A70D-911D2D82A5B7 architecture="loongarch64" elif [ "${machine}" = "ia64" ]; then - root_guid=993d8d3d-f80e-4225-855a-9daf8ed7ea97 - root_uuid=dcf33449-0896-4ea9-bc24-7d58aeef522d - usr_guid=4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea - usr_uuid=bc2bcce7-80d6-449a-85cc-637424ce5241 + root_guid=993D8D3D-F80E-4225-855A-9DAF8ED7EA97 + root_uuid=DCF33449-0896-4EA9-BC24-7D58AEEF522D + usr_guid=4301D2A6-4E3B-4B2A-BB94-9E0B2C4225EA + usr_uuid=BC2BCCE7-80D6-449A-85CC-637424CE5241 architecture="ia64" elif [ "${machine}" = "s390x" ]; then - root_guid=5eead9a9-fe09-4a1e-a1d7-520d00531306 - root_uuid=7ebe0c85-e27e-48ec-b164-f4807606232e - usr_guid=8a4f5770-50aa-4ed3-874a-99b710db6fea - usr_uuid=51171d30-35cf-4a49-b8b5-9478b9b796a5 + root_guid=5EEAD9A9-FE09-4A1E-A1D7-520D00531306 + root_uuid=7EBE0C85-E27E-48EC-B164-F4807606232E + usr_guid=8A4F5770-50AA-4ED3-874A-99B710DB6FEA + usr_uuid=51171D30-35CF-4A49-B8B5-9478B9B796A5 architecture="s390x" elif [ "${machine}" = "ppc64le" ]; then - root_guid=c31c45e6-3f39-412e-80fb-4809c4980599 - root_uuid=061e67a1-092f-482f-8150-b525d50d6654 - usr_guid=15bb03af-77e7-4d4a-b12b-c0d084f7491c - usr_uuid=c0d0823b-8040-4c7c-a629-026248e297fb + root_guid=C31C45E6-3F39-412E-80FB-4809C4980599 + root_uuid=061E67A1-092F-482F-8150-B525D50D6654 + usr_guid=15BB03AF-77E7-4D4A-B12B-C0D084F7491C + usr_uuid=C0D0823B-8040-4C7C-A629-026248E297FB architecture="ppc64-le" else echo "Unexpected uname -m: ${machine} in testsuite-58.sh, please fix me" exit 1 fi -rm -f /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump -mkdir -p /tmp/testsuite-58-defs/ +test_copy_blocks() { + local defs imgs output + + defs="$(mktemp --directory "/tmp/test-repart.XXXXXXXXXX")" + imgs="$(mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")" + # shellcheck disable=SC2064 + trap "rm -rf '$defs' '$imgs'" RETURN -# First part: create a disk image and verify its in order + # First, create a disk image and verify its in order -cat >/tmp/testsuite-58-defs/esp.conf <<EOF + cat >"$defs/esp.conf" <<EOF [Partition] Type=esp SizeMinBytes=10M Format=vfat EOF -cat >/tmp/testsuite-58-defs/usr.conf <<EOF + cat >"$defs/usr.conf" <<EOF [Partition] Type=usr-${architecture} SizeMinBytes=10M @@ -85,7 +95,7 @@ Format=ext4 ReadOnly=yes EOF -cat >/tmp/testsuite-58-defs/root.conf <<EOF + cat >"$defs/root.conf" <<EOF [Partition] Type=root-${architecture} SizeMinBytes=10M @@ -93,148 +103,185 @@ Format=ext4 MakeDirectories=/usr /efi EOF -systemd-repart --definitions=/tmp/testsuite-58-defs/ \ - --empty=create \ - --size=auto \ - --seed=750b6cd5c4ae4012a15e7be3c29e6a47 \ - /var/tmp/testsuite-58.img + systemd-repart --definitions="$defs" \ + --empty=create \ + --size=auto \ + --seed="$seed" \ + "$imgs/zzz" -sfdisk --dump /var/tmp/testsuite-58.img | tee /tmp/testsuite-58.dump + output=$(sfdisk --dump "$imgs/zzz") -grep -qixF "/var/tmp/testsuite-58.img1 : start= 2048, size= 20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name=\"esp\"" /tmp/testsuite-58.dump -grep -qixF "/var/tmp/testsuite-58.img2 : start= 22528, size= 20480, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" /tmp/testsuite-58.dump -grep -qixF "/var/tmp/testsuite-58.img3 : start= 43008, size= 20480, type=${usr_guid}, uuid=${usr_uuid}, name=\"usr-${architecture}\", attrs=\"GUID:60\"" /tmp/testsuite-58.dump + assert_in "$imgs/zzz1 : start= 2048, size= 20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name=\"esp\"" "$output" + assert_in "$imgs/zzz2 : start= 22528, size= 20480, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" "$output" + assert_in "$imgs/zzz3 : start= 43008, size= 20480, type=${usr_guid}, uuid=${usr_uuid}, name=\"usr-${architecture}\", attrs=\"GUID:60\"" "$output" -# Second part, duplicate it with CopyBlocks=auto + # Then, create another image with CopyBlocks=auto -cat >/tmp/testsuite-58-defs/esp.conf <<EOF + cat >"$defs/esp.conf" <<EOF [Partition] Type=esp CopyBlocks=auto EOF -cat >/tmp/testsuite-58-defs/usr.conf <<EOF + cat >"$defs/usr.conf" <<EOF [Partition] Type=usr-${architecture} ReadOnly=yes CopyBlocks=auto EOF -cat >/tmp/testsuite-58-defs/root.conf <<EOF + cat >"$defs/root.conf" <<EOF [Partition] Type=root-${architecture} CopyBlocks=auto EOF -systemd-repart --definitions=/tmp/testsuite-58-defs/ \ - --empty=create \ - --size=auto \ - --seed=750b6cd5c4ae4012a15e7be3c29e6a47 \ - --image=/var/tmp/testsuite-58.img \ - /var/tmp/testsuite-58.2.img + systemd-repart --definitions="$defs" \ + --empty=create \ + --size=auto \ + --seed="$seed" \ + --image="$imgs/zzz" \ + "$imgs/yyy" -cmp /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img + cmp "$imgs/zzz" "$imgs/yyy" +} -rm /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump -rm -r /tmp/testsuite-58-defs/ +test_unaligned_partition() { + local defs imgs output -# Third part: operate on an an image with unaligned partition, to see if that works. + defs="$(mktemp --directory "/tmp/test-repart.XXXXXXXXXX")" + imgs="$(mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")" + # shellcheck disable=SC2064 + trap "rm -rf '$defs' '$imgs'" RETURN -rm -f /var/tmp/testsuite-58.3.img /tmp/testsuite-58-3.dump -mkdir -p /tmp/testsuite-58.3-defs/ + # Operate on an image with unaligned partition. -cat >/tmp/testsuite-58.3-defs/root.conf <<EOF + cat >"$defs/root.conf" <<EOF [Partition] Type=root-${architecture} EOF -truncate -s 10g /var/tmp/testsuite-58.3.img -sfdisk /var/tmp/testsuite-58.3.img <<EOF + truncate -s 10g "$imgs/unaligned" + sfdisk "$imgs/unaligned" <<EOF label: gpt start=2048, size=69044 start=71092, size=3591848 EOF -systemd-repart --definitions=/tmp/testsuite-58.3-defs/ \ - --seed=750b6cd5c4ae4012a15e7be3c29e6a47 \ - --dry-run=no \ - /var/tmp/testsuite-58.3.img + systemd-repart --definitions="$defs" \ + --seed="$seed" \ + --dry-run=no \ + "$imgs/unaligned" + + output=$(sfdisk --dump "$imgs/unaligned") -sfdisk --dump /var/tmp/testsuite-58.3.img | tee /tmp/testsuite-58.3.dump + assert_in "$imgs/unaligned1 : start= 2048, size= 69044," "$output" + assert_in "$imgs/unaligned2 : start= 71092, size= 3591848," "$output" + assert_in "$imgs/unaligned3 : start= 3662944, size= 17308536, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" "$output" +} + +test_issue_21817() { + local defs imgs output -grep -qF '/var/tmp/testsuite-58.3.img1 : start= 2048, size= 69044,' /tmp/testsuite-58.3.dump -grep -qF '/var/tmp/testsuite-58.3.img2 : start= 71092, size= 3591848,' /tmp/testsuite-58.3.dump -grep -qixF "/var/tmp/testsuite-58.3.img3 : start= 3662944, size= 17308536, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" /tmp/testsuite-58.3.dump + # testcase for #21817 -rm /var/tmp/testsuite-58.3.img /tmp/testsuite-58.3.dump -rm -r /tmp/testsuite-58.3-defs/ + defs="$(mktemp --directory "/tmp/test-repart.XXXXXXXXXX")" + imgs="$(mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")" + # shellcheck disable=SC2064 + trap "rm -rf '$defs' '$imgs'" RETURN -# testcase for #21817 -mkdir -p /tmp/testsuite-58-issue-21817-defs/ -truncate -s 100m /var/tmp/testsuite-58-issue-21817.img -sfdisk /var/tmp/testsuite-58-issue-21817.img <<EOF + cat >"$defs/test.conf" <<EOF +[Partition] +Type=root +EOF + + truncate -s 100m "$imgs/21817.img" + sfdisk "$imgs/21817.img" <<EOF label: gpt size=50M, type=${root_guid} , EOF -cat >/tmp/testsuite-58-issue-21817-defs/test.conf <<EOF -[Partition] -Type=root -EOF -systemd-repart --pretty=yes --definitions /tmp/testsuite-58-issue-21817-defs/ --dry-run=no /var/tmp/testsuite-58-issue-21817.img -sfdisk --dump /var/tmp/testsuite-58-issue-21817.img | tee /tmp/testsuite-58-issue-21817.dump -grep -qiF "/var/tmp/testsuite-58-issue-21817.img1 : start= 2048, size= 102400, type=${root_guid}," /tmp/testsuite-58-issue-21817.dump -# Accept both unpadded (pre-v2.38 util-linux) and padded (v2.38+ util-linux) sizes -grep -qE "/var/tmp/testsuite-58-issue-21817.img2 : start= 104448, size= (100319| 98304)," /tmp/testsuite-58-issue-21817.dump + systemd-repart --pretty=yes \ + --definitions "$imgs" \ + --seed="$seed" \ + --dry-run=no \ + "$imgs/21817.img" -rm /var/tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump -rm -r /tmp/testsuite-58-issue-21817-defs/ + output=$(sfdisk --dump "$imgs/21817.img") -testsector() -{ - echo "Running sector test with sector size $1..." + assert_in "$imgs/21817.img1 : start= 2048, size= 102400, type=${root_guid}," "$output" + # Accept both unpadded (pre-v2.38 util-linux) and padded (v2.38+ util-linux) sizes + assert_in "$imgs/21817.img2 : start= 104448, size= (100319| 98304)," "$output" +} - mkdir -p /tmp/testsuite-58-sector - cat > /tmp/testsuite-58-sector/a.conf <<EOF +test_sector() { + local defs imgs output loop + local start size ratio + local sector="${1?}" + + defs="$(mktemp --directory "/tmp/test-repart.XXXXXXXXXX")" + imgs="$(mktemp --directory "/var/tmp/test-repart.XXXXXXXXXX")" + # shellcheck disable=SC2064 + trap "rm -rf '$defs' '$imgs'" RETURN + + cat > "$defs/a.conf" <<EOF [Partition] Type=root SizeMaxBytes=15M SizeMinBytes=15M EOF - cat > /tmp/testsuite-58-sector/b.conf <<EOF + cat > "$defs/b.conf" <<EOF [Partition] Type=linux-generic Weight=250 EOF - cat > /tmp/testsuite-58-sector/c.conf <<EOF + cat > "$defs/c.conf" <<EOF [Partition] Type=linux-generic Weight=750 EOF - truncate -s 100m "/tmp/testsuite-58-sector-$1.img" - LOOP=$(losetup -b "$1" -P --show -f "/tmp/testsuite-58-sector-$1.img" ) - udevadm wait --timeout 60 --settle "${LOOP:?}" - systemd-repart --pretty=yes --definitions=/tmp/testsuite-58-sector/ --seed=750b6cd5c4ae4012a15e7be3c29e6a47 --empty=require --dry-run=no "$LOOP" - rm -rf /tmp/testsuite-58-sector - sfdisk --verify "$LOOP" - sfdisk --dump "$LOOP" - losetup -d "$LOOP" - - rm "/tmp/testsuite-58-sector-$1.img" + truncate -s 100m "$imgs/$sector.img" + loop=$(losetup -b "$sector" -P --show -f "$imgs/$sector.img" ) + udevadm wait --timeout 60 --settle "${loop:?}" + systemd-repart --pretty=yes \ + --definitions="$defs" \ + --seed="$seed" \ + --empty=require \ + --dry-run=no \ + "$loop" + + sfdisk --verify "$loop" + output=$(sfdisk --dump "$loop") + losetup -d "$loop" + + ratio=$(( sector / 512 )) + start=$(( 2048 / ratio )) + size=$(( 30720 / ratio )) + assert_in "${loop}p1 : start= *${start}, size= *${size}, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" "$output" + start=$(( start + size )) + size=$(( 42992 / ratio )) + assert_in "${loop}p2 : start= *${start}, size= *${size}, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=DF71F5E3-080A-4D16-824B-18591B881380, name=\"linux-generic\"" "$output" + start=$(( start + size )) + size=$(( 129000 / ratio )) + assert_in "${loop}p3 : start= *${start}, size= *${size}, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=DB081670-07AE-48CA-9F5E-813D5E40B976, name=\"linux-generic-2\"" "$output" } +test_copy_blocks +test_unaligned_partition +test_issue_21817 + # Valid block sizes on the Linux block layer are >= 512 and <= PAGE_SIZE, and # must be powers of 2. Which leaves exactly four different ones to test on # typical hardware -testsector 512 -testsector 1024 -testsector 2048 -testsector 4096 +test_sector 512 +test_sector 1024 +test_sector 2048 +test_sector 4096 echo OK >/testok |