oggit/packages/pyblkid/opengnsys-pyblkid-0.3/tests/test_partitions.py

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")