Merge pull request #1787 from dbungert/lp-2034270-guided-small-disk-crash

storage: fix crash when guided and a small disk
This commit is contained in:
Dan Bungert 2023-09-05 15:41:45 -06:00 committed by GitHub
commit 4d6fb69b73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 2 deletions

View File

@ -162,7 +162,11 @@ class VariationInfo:
) -> CapabilityInfo: ) -> CapabilityInfo:
r = CapabilityInfo() r = CapabilityInfo()
r.disallowed = list(self.capability_info.disallowed) r.disallowed = list(self.capability_info.disallowed)
if self.capability_info.allowed and gap.size < install_min: if gap is None:
gap_size = 0
else:
gap_size = gap.size
if self.capability_info.allowed and gap_size < install_min:
for capability in self.capability_info.allowed: for capability in self.capability_info.allowed:
r.disallowed.append( r.disallowed.append(
GuidedDisallowedCapability( GuidedDisallowedCapability(

View File

@ -695,7 +695,7 @@ class TestGuidedV2(IsolatedAsyncioTestCase):
self.assertEqual([reformat, manual], guided_get_resp.targets) self.assertEqual([reformat, manual], guided_get_resp.targets)
@parameterized.expand(bootloaders_and_ptables) @parameterized.expand(bootloaders_and_ptables)
async def test_small_blank_disk(self, bootloader, ptable): async def test_small_blank_disk_1GiB(self, bootloader, ptable):
await self._setup(bootloader, ptable, size=1 << 30) await self._setup(bootloader, ptable, size=1 << 30)
resp = await self.fsc.v2_guided_GET() resp = await self.fsc.v2_guided_GET()
expected = [ expected = [
@ -708,6 +708,28 @@ class TestGuidedV2(IsolatedAsyncioTestCase):
] ]
self.assertEqual(expected, resp.targets) self.assertEqual(expected, resp.targets)
@parameterized.expand(bootloaders_and_ptables)
async def test_small_blank_disk_1MiB(self, bootloader, ptable):
await self._setup(bootloader, ptable, size=1 << 20)
resp = await self.fsc.v2_guided_GET()
reformat = GuidedStorageTargetReformat(
disk_id=self.disk.id,
allowed=[],
disallowed=default_capabilities_disallowed_too_small,
)
manual = GuidedStorageTargetManual()
# depending on bootloader/ptable combo, GuidedStorageTargetReformat may
# show up but it will all be disallowed.
for target in resp.targets:
if isinstance(target, GuidedStorageTargetManual):
self.assertEqual(target, manual)
elif isinstance(target, GuidedStorageTargetReformat):
self.assertEqual(target, reformat)
else:
raise Exception(f"unexpected target {target}")
@parameterized.expand(bootloaders_and_ptables) @parameterized.expand(bootloaders_and_ptables)
async def test_used_half_disk(self, bootloader, ptable): async def test_used_half_disk(self, bootloader, ptable):
await self._setup(bootloader, ptable, size=100 << 30) await self._setup(bootloader, ptable, size=100 << 30)