This converts to using tmt style tests, and adds a test that actually uses the installed pyparted library to manipulate a temporary disk image. Resolves: rhbz#2383021
88 lines
2.4 KiB
Python
Executable file
88 lines
2.4 KiB
Python
Executable file
#!/usr/bin/python3
|
|
|
|
import parted
|
|
import sys
|
|
|
|
|
|
def init_disk(disk_img):
|
|
# Make a disklabel (failures here will raise an error)
|
|
dev = parted.getDevice(disk_img)
|
|
disk = parted.freshDisk(dev, "gpt")
|
|
|
|
# Make a partition
|
|
geom = parted.Geometry(device=dev,
|
|
start=2048,
|
|
end=50*2048)
|
|
fs = parted.FileSystem(type="ext4", geometry=geom)
|
|
part = parted.Partition(disk=disk,
|
|
type=parted.PARTITION_NORMAL,
|
|
fs=fs,
|
|
geometry=geom)
|
|
disk.addPartition(partition=part,
|
|
constraint=dev.optimalAlignedConstraint)
|
|
part.setFlag(parted.PARTITION_BOOT)
|
|
disk.commit()
|
|
|
|
def read_disk(disk_img):
|
|
# Read the disk and check the partitions
|
|
dev = parted.getDevice(disk_img)
|
|
disk = parted.newDisk(dev)
|
|
|
|
if dev.length == 0:
|
|
print("ERROR: Disk has no length", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
if len(disk.partitions) != 1:
|
|
print("ERROR: Wrong number of partitions", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
part = disk.partitions[0]
|
|
if part.geometry.end != 50*2048:
|
|
print("ERROR: Partition is wrong length", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
if part.geometry.start != 2048:
|
|
print("ERROR: Parition doesn't start at sector 2048", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
def remove_partition(disk_img):
|
|
# Remove partition and check disk
|
|
dev = parted.getDevice(disk_img)
|
|
disk = parted.newDisk(dev)
|
|
|
|
if len(disk.partitions) != 1:
|
|
print("ERROR: Wrong number of partitions", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
disk.removePartition(partition=disk.partitions[0])
|
|
disk.commit()
|
|
|
|
dev = parted.getDevice(disk_img)
|
|
disk = parted.newDisk(dev)
|
|
|
|
if len(disk.partitions) != 0:
|
|
print("ERROR: Failed to delete partition", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
def main(disk_img):
|
|
print(f"Running tests on {disk_img}")
|
|
|
|
try:
|
|
init_disk(disk_img)
|
|
read_disk(disk_img)
|
|
remove_partition(disk_img)
|
|
except Exception as e:
|
|
print(f"ERROR: {str(e)}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
print("PASS", file=sys.stderr)
|
|
sys.exit(0)
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) < 2:
|
|
print("Usage: %s <disk.img>" % sys.argv[0], file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
main(sys.argv[1])
|