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. -- Mailing list: https://launchpad.net/~curtin-dev Post to : curtin-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~curtin-dev More help : https://help.launchpad.net/ListHelp