141 lines
4.3 KiB
Python
141 lines
4.3 KiB
Python
import os
|
|
import unittest
|
|
|
|
from . import utils
|
|
|
|
import blkid
|
|
|
|
|
|
@unittest.skipUnless(os.geteuid() == 0, "requires root access")
|
|
class PartitionsTestCase(unittest.TestCase):
|
|
|
|
test_image = "gpt.img.xz"
|
|
loop_dev = None
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
test_dir = os.path.abspath(os.path.dirname(__file__))
|
|
cls.loop_dev = utils.loop_setup(os.path.join(test_dir, cls.test_image))
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
if cls.loop_dev:
|
|
utils.loop_teardown(cls.loop_dev)
|
|
|
|
def test_partlist(self):
|
|
pr = blkid.Probe()
|
|
pr.set_device(self.loop_dev)
|
|
|
|
pr.enable_partitions(True)
|
|
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
|
|
plist = pr.partitions
|
|
self.assertEqual(plist.numof_partitions, 5)
|
|
|
|
def test_partitions_filter(self):
|
|
pr = blkid.Probe()
|
|
pr.set_device(self.loop_dev)
|
|
|
|
pr.enable_partitions(True)
|
|
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
self.assertEqual(pr.partitions.numof_partitions, 5)
|
|
|
|
pr.filter_partitions_type(blkid.FLTR_ONLYIN, ["gpt"])
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
self.assertEqual(pr.partitions.numof_partitions, 5)
|
|
|
|
pr.filter_partitions_type(blkid.FLTR_ONLYIN, ["gpt", "dos"])
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
self.assertEqual(pr.partitions.numof_partitions, 5)
|
|
|
|
pr.filter_partitions_type(blkid.FLTR_NOTIN, ["gpt"])
|
|
ret = pr.do_safeprobe()
|
|
self.assertFalse(ret)
|
|
with self.assertRaises(RuntimeError):
|
|
pr.partitions
|
|
|
|
pr.invert_partitions_filter()
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
self.assertEqual(pr.partitions.numof_partitions, 5)
|
|
|
|
pr.filter_partitions_type(blkid.FLTR_NOTIN, ["gpt"])
|
|
ret = pr.do_safeprobe()
|
|
self.assertFalse(ret)
|
|
with self.assertRaises(RuntimeError):
|
|
pr.partitions
|
|
|
|
pr.reset_partitions_filter()
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
self.assertEqual(pr.partitions.numof_partitions, 5)
|
|
|
|
def test_partition_table(self):
|
|
pr = blkid.Probe()
|
|
pr.set_device(self.loop_dev)
|
|
|
|
pr.enable_partitions(True)
|
|
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
|
|
self.assertIsNotNone(pr.partitions)
|
|
self.assertIsNotNone(pr.partitions.table)
|
|
|
|
self.assertEqual(pr.partitions.table.type, "gpt")
|
|
self.assertEqual(pr.partitions.table.id, "dd27f98d-7519-4c9e-8041-f2bfa7b1ef61")
|
|
self.assertEqual(pr.partitions.table.offset, 512)
|
|
|
|
nested = pr.partitions.table.get_parent()
|
|
self.assertIsNone(nested)
|
|
|
|
def test_partition(self):
|
|
pr = blkid.Probe()
|
|
pr.set_device(self.loop_dev)
|
|
|
|
pr.enable_partitions(True)
|
|
|
|
ret = pr.do_safeprobe()
|
|
self.assertTrue(ret)
|
|
|
|
self.assertIsNotNone(pr.partitions)
|
|
|
|
part = pr.partitions.get_partition(0)
|
|
self.assertEqual(part.type, 0)
|
|
self.assertEqual(part.type_string, "ebd0a0a2-b9e5-4433-87c0-68b6b72699c7")
|
|
self.assertEqual(part.uuid, "1dcf10bc-637e-4c52-8203-087ae10a820b")
|
|
self.assertTrue(part.is_primary)
|
|
self.assertFalse(part.is_extended)
|
|
self.assertFalse(part.is_logical)
|
|
self.assertEqual(part.name, "ThisIsName")
|
|
self.assertEqual(part.flags, 0)
|
|
self.assertEqual(part.partno, 1)
|
|
self.assertEqual(part.start, 34)
|
|
self.assertEqual(part.size, 2014)
|
|
|
|
if not hasattr(pr.partitions, "get_partition_by_partno"):
|
|
return
|
|
|
|
part = pr.partitions.get_partition_by_partno(1)
|
|
self.assertEqual(part.uuid, "1dcf10bc-637e-4c52-8203-087ae10a820b")
|
|
|
|
# no nested partition table here, just the gpt
|
|
table = part.table
|
|
self.assertEqual(table.type, "gpt")
|
|
|
|
# devno_to_part
|
|
disk_name = os.path.basename(self.loop_dev)
|
|
sysfs_path = "/sys/block/%s/%s/dev" % (disk_name, disk_name + "p" + str(part.partno))
|
|
major_minor = utils.read_file(sysfs_path).strip()
|
|
major, minor = major_minor.split(":")
|
|
devno = os.makedev(int(major), int(minor))
|
|
|
|
part = pr.partitions.devno_to_partition(devno)
|
|
self.assertEqual(part.uuid, "1dcf10bc-637e-4c52-8203-087ae10a820b")
|