Merge ~dbungert/curtin:integration-sysfs into curtin:master

Proposed by Dan Bungert
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: 0024975d14a1fc05a2951e7e33ccb1ea8d82a9e5
Merge reported by: Server Team CI bot
Merged at revision: not available
Proposed branch: ~dbungert/curtin:integration-sysfs
Merge into: curtin:master
Diff against target: 192 lines (+38/-52)
1 file modified
tests/integration/test_block_meta.py (+38/-52)
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle Approve
Server Team CI bot continuous-integration Approve
Review via email: mp+436927@code.launchpad.net

Commit message

integration: use sfdisk as the source of info

sysfs size of extended partitions is known to provide a strange
number, and we're using a mix of sysfs and sfdisk, so primarily get
info from sfdisk and compare what we can to sysfs.

To post a comment you must log in.
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Server Team CI bot (server-team-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

thanks, this fixes the tests for me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/tests/integration/test_block_meta.py b/tests/integration/test_block_meta.py
2index 38b188a..e281f3e 100644
3--- a/tests/integration/test_block_meta.py
4+++ b/tests/integration/test_block_meta.py
5@@ -106,18 +106,6 @@ def _get_filesystem_size(dev, part_action, fstype='ext4'):
6 return _get_fs_sizers[fstype](dev, part_action)
7
8
9-def _get_extended_partition_size(dev, num):
10- # sysfs reports extended partitions as having 1K size
11- # sfdisk seems to have a better idea
12- ptable_json = util.subp(['sfdisk', '-J', dev], capture=True)[0]
13- ptable = json.loads(ptable_json)
14-
15- nodename = f'{dev}p{num}'
16- partitions = ptable['partitiontable']['partitions']
17- partition = [part for part in partitions if part['node'] == nodename][0]
18- return partition['size'] * 512
19-
20-
21 def _get_disk_label_id(dev):
22 ptable_json = util.subp(['sfdisk', '-J', dev], capture=True)[0]
23 ptable = json.loads(ptable_json)
24@@ -128,16 +116,28 @@ def _get_disk_label_id(dev):
25 def summarize_partitions(dev):
26 parts = []
27 ptable_json = util.subp(['sfdisk', '-J', dev], capture=True)[0]
28- ptable = json.loads(ptable_json)
29- partitions = ptable['partitiontable']['partitions']
30- for d in block.sysfs_partition_data(dev):
31- nodename = f'/dev/{d[0]}'
32- partition = [part for part in partitions
33- if part['node'] == nodename][0]
34- ptype = partition['type']
35- boot = partition.get('bootable', False)
36- # We don't care about the kname
37- pd = PartData(*d[1:], partition_type=ptype, boot=boot)
38+ ptable = json.loads(ptable_json)['partitiontable']
39+ sectorsize = ptable['sectorsize']
40+ assert dev == ptable['device']
41+ sysfs_data = block.sysfs_partition_data(dev)
42+ for part in ptable['partitions']:
43+ node = part['node']
44+ (unused, s_number, s_offset, s_size) = [
45+ entry for entry in sysfs_data
46+ if '/dev/' + entry[0] == node][0]
47+ assert node.startswith(f'{dev}p')
48+ number = int(node[len(dev) + 1:])
49+ ptype = part['type']
50+ offset = part['start'] * sectorsize
51+ size = part['size'] * sectorsize
52+ boot = part.get('bootable', False)
53+ assert s_number == number
54+ assert s_offset == offset
55+ if ptype not in ('5', 'f'): # extended sizes known to be bad in sysfs
56+ assert s_size == size
57+ pd = PartData(
58+ number=number, offset=offset, size=size,
59+ boot=boot, partition_type=ptype)
60 pd.assertFieldsAreNotNone()
61 parts.append(pd)
62 return sorted(parts)
63@@ -418,14 +418,11 @@ class TestBlockMeta(IntegrationTestCase):
64 with loop_dev(img) as dev:
65 self.assertEqual(
66 summarize_partitions(dev), [
67- # extended partitions get a strange size in sysfs
68- PartData(number=1, offset=1 << 20, size=1 << 10),
69+ PartData(number=1, offset=1 << 20, size=99 << 20),
70 PartData(number=5, offset=2 << 20, size=10 << 20),
71- # part 5 takes us to 12 MiB offset, curtin leaves a 1 MiB
72- # gap.
73+ # part 5 goes to 12 MiB offset, curtin leaves a 1 MiB gap.
74 PartData(number=6, offset=13 << 20, size=10 << 20),
75 ])
76- self.assertEqual(99 << 20, _get_extended_partition_size(dev, 1))
77
78 p1kname = block.partition_kname(block.path_to_kname(dev), 1)
79 self.assertTrue(block.is_extended_partition('/dev/' + p1kname))
80@@ -487,11 +484,10 @@ class TestBlockMeta(IntegrationTestCase):
81 with loop_dev(img) as dev:
82 self.assertEqual(
83 summarize_partitions(dev), [
84- PartData(number=1, offset=1 << 20, size=1 << 10),
85- PartData(number=5, offset=(2 << 20), size=psize),
86+ PartData(number=1, offset=1 << 20, size=90 << 20),
87+ PartData(number=5, offset=(2 << 20), size=psize),
88 PartData(number=6, offset=(3 << 20) + psize, size=psize),
89 ])
90- self.assertEqual(90 << 20, _get_extended_partition_size(dev, 1))
91
92 config = StorageConfigBuilder(version=2)
93 config.add_image(path=img, size='100M', ptable='msdos', preserve=True)
94@@ -504,10 +500,9 @@ class TestBlockMeta(IntegrationTestCase):
95 with loop_dev(img) as dev:
96 self.assertEqual(
97 summarize_partitions(dev), [
98- PartData(number=1, offset=1 << 20, size=1 << 10),
99+ PartData(number=1, offset=1 << 20, size=90 << 20),
100 PartData(number=5, offset=(3 << 20) + psize, size=psize),
101 ])
102- self.assertEqual(90 << 20, _get_extended_partition_size(dev, 1))
103
104 def _test_wiping(self, ptable):
105 # Test wiping behaviour.
106@@ -674,14 +669,11 @@ class TestBlockMeta(IntegrationTestCase):
107 self.create_data(dev, p6)
108 self.assertEqual(
109 summarize_partitions(dev), [
110- # extended partitions get a strange size in sysfs
111- PartData(number=1, offset=1 << 20, size=1 << 10),
112+ PartData(number=1, offset=1 << 20, size=50 << 20),
113 PartData(number=5, offset=2 << 20, size=10 << 20),
114- # part 5 takes us to 12 MiB offset, curtin leaves a 1 MiB
115- # gap.
116+ # part 5 goes to 12 MiB offset, curtin leaves a 1 MiB gap.
117 PartData(number=6, offset=13 << 20, size=10 << 20),
118 ])
119- self.assertEqual(50 << 20, _get_extended_partition_size(dev, 1))
120
121 config.set_preserve()
122 p6['resize'] = True
123@@ -692,11 +684,10 @@ class TestBlockMeta(IntegrationTestCase):
124 self.check_data(dev, p6)
125 self.assertEqual(
126 summarize_partitions(dev), [
127- PartData(number=1, offset=1 << 20, size=1 << 10),
128+ PartData(number=1, offset=1 << 20, size=50 << 20),
129 PartData(number=5, offset=2 << 20, size=10 << 20),
130 PartData(number=6, offset=13 << 20, size=20 << 20),
131 ])
132- self.assertEqual(50 << 20, _get_extended_partition_size(dev, 1))
133
134 def test_resize_extended(self):
135 img = self.tmp_path('image.img')
136@@ -711,11 +702,9 @@ class TestBlockMeta(IntegrationTestCase):
137 with loop_dev(img) as dev:
138 self.assertEqual(
139 summarize_partitions(dev), [
140- # extended partitions get a strange size in sysfs
141- PartData(number=1, offset=1 << 20, size=1 << 10),
142- PartData(number=5, offset=2 << 20, size=49 << 20),
143+ PartData(number=1, offset=1 << 20, size=50 << 20),
144+ PartData(number=5, offset=2 << 20, size=49 << 20),
145 ])
146- self.assertEqual(50 << 20, _get_extended_partition_size(dev, 1))
147
148 config.set_preserve()
149 p1['resize'] = True
150@@ -727,10 +716,9 @@ class TestBlockMeta(IntegrationTestCase):
151 with loop_dev(img) as dev:
152 self.assertEqual(
153 summarize_partitions(dev), [
154- PartData(number=1, offset=1 << 20, size=1 << 10),
155+ PartData(number=1, offset=1 << 20, size=99 << 20),
156 PartData(number=5, offset=2 << 20, size=98 << 20),
157 ])
158- self.assertEqual(99 << 20, _get_extended_partition_size(dev, 1))
159
160 def test_split(self):
161 img = self.tmp_path('image.img')
162@@ -876,12 +864,11 @@ class TestBlockMeta(IntegrationTestCase):
163 self.create_data(dev, p5)
164 self.assertEqual(
165 summarize_partitions(dev), [
166- PartData(number=1, offset=1 << 20, size=9 << 20),
167- PartData(number=2, offset=10 << 20, size=1 << 10),
168+ PartData(number=1, offset=1 << 20, size=9 << 20),
169+ PartData(number=2, offset=10 << 20, size=89 << 20),
170 PartData(number=5, offset=11 << 20, size=36 << 20),
171 PartData(number=6, offset=49 << 20, size=50 << 20),
172 ])
173- self.assertEqual(89 << 20, _get_extended_partition_size(dev, 2))
174 self.assertEqual(9 << 20, _get_filesystem_size(dev, p1))
175 self.assertEqual(36 << 20, _get_filesystem_size(dev, p5))
176 self.assertEqual(50 << 20, _get_filesystem_size(dev, p6))
177@@ -904,12 +891,11 @@ class TestBlockMeta(IntegrationTestCase):
178 self.check_data(dev, p5)
179 self.assertEqual(
180 summarize_partitions(dev), [
181- PartData(number=1, offset=1 << 20, size=9 << 20),
182- PartData(number=2, offset=10 << 20, size=1 << 10),
183- PartData(number=5, offset=11 << 20, size=136 << 20),
184+ PartData(number=1, offset=1 << 20, size=9 << 20),
185+ PartData(number=2, offset=10 << 20, size=189 << 20),
186+ PartData(number=5, offset=11 << 20, size=136 << 20),
187 PartData(number=6, offset=149 << 20, size=50 << 20),
188 ])
189- self.assertEqual(189 << 20, _get_extended_partition_size(dev, 2))
190 self.assertEqual(9 << 20, _get_filesystem_size(dev, p1))
191 self.assertEqual(136 << 20, _get_filesystem_size(dev, p5))
192 self.assertEqual(50 << 20, _get_filesystem_size(dev, p6))

Subscribers

People subscribed via source and target branches