← Back to team overview

curtin-dev team mailing list archive

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