summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDavid Lehman <dlehman@redhat.com>2010-12-06 12:09:55 -0600
committerDavid Lehman <dlehman@redhat.com>2010-12-07 11:06:31 -0600
commit45cdd4a254b10dec1b30c21961d0be719a5c4923 (patch)
treebb39f62cf6de36ee1f6dcc3d4104c3cc788b56f6 /tests
parent6b12bf1cf703c906dcb09bdeb470090a336dafac (diff)
downloadanaconda-45cdd4a254b10dec1b30c21961d0be719a5c4923.tar.gz
anaconda-45cdd4a254b10dec1b30c21961d0be719a5c4923.tar.xz
anaconda-45cdd4a254b10dec1b30c21961d0be719a5c4923.zip
Add unit tests for storage.partitioning.getNextPartitionType.
The file partitioning_tests.py is intended to eventually contain a variety of other partitioning-related unit tests for things like allocation, alignment, and growing of partitions.
Diffstat (limited to 'tests')
-rw-r--r--tests/storage_test/partitioning_test.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/storage_test/partitioning_test.py b/tests/storage_test/partitioning_test.py
new file mode 100644
index 000000000..0a8cc75a5
--- /dev/null
+++ b/tests/storage_test/partitioning_test.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+
+import unittest
+from mock import Mock
+
+import parted
+
+import pyanaconda.anaconda_log
+pyanaconda.anaconda_log.init()
+
+from pyanaconda.storage.partitioning import getNextPartitionType
+
+# disklabel-type-specific constants
+# keys: disklabel type string
+# values: 3-tuple of (max_primary_count, supports_extended, max_logical_count)
+disklabel_types = {'dos': (4, True, 11),
+ 'gpt': (128, False, 0),
+ 'mac': (62, False, 0)}
+
+class PartitioningTestCase(unittest.TestCase):
+ def getDisk(self, disk_type, primary_count=0,
+ has_extended=False, logical_count=0):
+ """ Return a mock representing a parted.Disk. """
+ disk = Mock()
+
+ disk.type = disk_type
+ label_type_info = disklabel_types[disk_type]
+ (max_primaries, supports_extended, max_logicals) = label_type_info
+
+ # primary partitions
+ disk.primaryPartitionCount = primary_count
+ disk.maxPrimaryPartitionCount = max_primaries
+
+ # extended partitions
+ disk.supportsFeature = Mock(return_value=supports_extended)
+ disk.getExtendedPartition = Mock(return_value=has_extended)
+
+ # logical partitions
+ disk.getMaxLogicalPartitions = Mock(return_value=max_logicals)
+ disk.getLogicalPartitions = Mock(return_value=[0]*logical_count)
+
+ return disk
+
+ def testNextPartitionType(self):
+ #
+ # DOS
+ #
+
+ # empty disk, any type
+ disk = self.getDisk(disk_type="dos")
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_NORMAL)
+
+ # three primaries and no extended -> extended
+ disk = self.getDisk(disk_type="dos", primary_count=3)
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_EXTENDED)
+
+ # three primaries and an extended -> primary
+ disk = self.getDisk(disk_type="dos", primary_count=3, has_extended=True)
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_NORMAL)
+
+ # three primaries and an extended w/ no_primary -> logical
+ disk = self.getDisk(disk_type="dos", primary_count=3, has_extended=True)
+ self.assertEqual(getNextPartitionType(disk, no_primary=True),
+ parted.PARTITION_LOGICAL)
+
+ # four primaries and an extended, available logical -> logical
+ disk = self.getDisk(disk_type="dos", primary_count=4, has_extended=True,
+ logical_count=9)
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_LOGICAL)
+
+ # four primaries and an extended, no available logical -> None
+ disk = self.getDisk(disk_type="dos", primary_count=4, has_extended=True,
+ logical_count=11)
+ self.assertEqual(getNextPartitionType(disk), None)
+
+ # four primaries and no extended -> None
+ disk = self.getDisk(disk_type="dos", primary_count=4,
+ has_extended=False)
+ self.assertEqual(getNextPartitionType(disk), None)
+
+ # free primary slot, extended, no free logical slot -> primary
+ disk = self.getDisk(disk_type="dos", primary_count=3, has_extended=True,
+ logical_count=11)
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_NORMAL)
+
+ # free primary slot, extended, no free logical slot w/ no_primary
+ # -> None
+ disk = self.getDisk(disk_type="dos", primary_count=3, has_extended=True,
+ logical_count=11)
+ self.assertEqual(getNextPartitionType(disk, no_primary=True), None)
+
+ #
+ # GPT
+ #
+
+ # empty disk, any partition type
+ disk = self.getDisk(disk_type="gpt")
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_NORMAL)
+
+ # no empty slots -> None
+ disk = self.getDisk(disk_type="gpt", primary_count=128)
+ self.assertEqual(getNextPartitionType(disk), None)
+
+ # no_primary -> None
+ disk = self.getDisk(disk_type="gpt")
+ self.assertEqual(getNextPartitionType(disk, no_primary=True), None)
+
+ #
+ # MAC
+ #
+
+ # empty disk, any partition type
+ disk = self.getDisk(disk_type="mac")
+ self.assertEqual(getNextPartitionType(disk), parted.PARTITION_NORMAL)
+
+ # no empty slots -> None
+ disk = self.getDisk(disk_type="mac", primary_count=62)
+ self.assertEqual(getNextPartitionType(disk), None)
+
+ # no_primary -> None
+ disk = self.getDisk(disk_type="mac")
+ self.assertEqual(getNextPartitionType(disk, no_primary=True), None)
+
+
+def suite():
+ return unittest.TestLoader().loadTestsFromTestCase(PartitioningTestCase)
+
+
+if __name__ == "__main__":
+ unittest.main()