curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #02400
Re: [Merge] ~dbungert/curtin:gpt-parttable-preservation into curtin:master
Review: Approve
Thanks for this.
I see there are two more gpt-specific fields that could get the same treatment first-lba does: last-lba and table-size. Should we preserve these too?
Should the disk action allow setting any of the label-id/first-lba/last-lba/table-size options? I guess that could be added if anyone asks for them...
Diff comments:
> diff --git a/tests/integration/test_block_meta.py b/tests/integration/test_block_meta.py
> index e542017..ee44bbf 100644
> --- a/tests/integration/test_block_meta.py
> +++ b/tests/integration/test_block_meta.py
> @@ -988,3 +988,134 @@ class TestBlockMeta(IntegrationTestCase):
> PartData(number=1, offset=1 << 20, size=18 << 20))
> with loop_dev(self.img) as dev:
> self.assertEqual(orig_label_id, _get_disk_label_id(dev))
> +
> + def test_gpt_uuid_persistent(self):
> + # A persistent partition with an unspecified uuid shall keep the uuid
> + self.img = self.tmp_path('image.img')
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + config.add_part(number=1, offset=1 << 20, size=18 << 20)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + expected_uuid = sfdisk_info['partitions'][0]['uuid']
> +
> + config.set_preserve()
> + self.run_bm(config.render())
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + actual_uuid = sfdisk_info['partitions'][0]['uuid']
> + self.assertEqual(expected_uuid, actual_uuid)
> +
> + def test_gpt_set_name(self):
> + self.img = self.tmp_path('image.img')
> + name = self.random_string() + ' ' + self.random_string()
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + config.add_part(number=1, offset=1 << 20, size=18 << 20,
> + partition_name=name)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + actual_name = sfdisk_info['partitions'][0]['name']
> + self.assertEqual(name, actual_name)
> +
> + def test_gpt_name_persistent(self):
> + self.img = self.tmp_path('image.img')
> + name = self.random_string()
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + p1 = config.add_part(number=1, offset=1 << 20, size=18 << 20,
> + partition_name=name)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + actual_name = sfdisk_info['partitions'][0]['name']
> + self.assertEqual(name, actual_name)
> +
> + del p1['partition_name']
> + config.set_preserve()
> + self.run_bm(config.render())
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + actual_name = sfdisk_info['partitions'][0]['name']
> + self.assertEqual(name, actual_name)
> +
> + def test_gpt_set_single_attr(self):
> + self.img = self.tmp_path('image.img')
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + attrs = ['GUID:63']
> + config.add_part(number=1, offset=1 << 20, size=18 << 20,
> + attrs=attrs)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + attrs_str = sfdisk_info['partitions'][0]['attrs']
> + actual_attrs = set(attrs_str.split(' '))
> + self.assertEqual(set(attrs), actual_attrs)
> +
> + def test_gpt_set_multi_attr(self):
> + self.img = self.tmp_path('image.img')
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + attrs = ['GUID:63', 'RequiredPartition']
> + config.add_part(number=1, offset=1 << 20, size=18 << 20,
> + attrs=attrs)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + attrs_str = sfdisk_info['partitions'][0]['attrs']
> + actual_attrs = set(attrs_str.split(' '))
> + self.assertEqual(set(attrs), actual_attrs)
> +
> + def test_gpt_attrs_persistent(self):
> + self.img = self.tmp_path('image.img')
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + attrs = ['GUID:63']
> + p1 = config.add_part(number=1, offset=1 << 20, size=18 << 20,
> + attrs=attrs)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + attrs_str = sfdisk_info['partitions'][0]['attrs']
> + actual_attrs = set(attrs_str.split(' '))
> + self.assertEqual(set(attrs), actual_attrs)
> +
> + del p1['attrs']
> + config.set_preserve()
> + self.run_bm(config.render())
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + attrs_str = sfdisk_info['partitions'][0]['attrs']
> + actual_attrs = set(attrs_str.split(' '))
> + self.assertEqual(set(attrs), actual_attrs)
> +
> + def test_gpt_first_lba_persistent(self):
> + self.img = self.tmp_path('image.img')
> + config = StorageConfigBuilder(version=2)
> + config.add_image(path=self.img, size='20M', ptable='gpt')
> + config.add_part(number=1, offset=1 << 20, size=18 << 20)
> + self.run_bm(config.render())
> + pd = PartData(number=1, offset=1 << 20, size=18 << 20)
> + self.assertPartitions(pd)
> + with loop_dev(self.img) as dev:
> + sfdisk_info = block.sfdisk_info(dev)
> + first_lba = sfdisk_info['firstlba']
> + self.assertEqual(2048, first_lba)
I'm not sure this is really testing anything?
--
https://code.launchpad.net/~dbungert/curtin/+git/curtin/+merge/426651
Your team curtin developers is subscribed to branch curtin:master.
References