Merge lp:~smoser/curtin/trunk.vmtest-remove-bug-timers into lp:~raharper/curtin/trunk.vmtest-remove-bug-timers

Proposed by Scott Moser
Status: Merged
Merged at revision: 538
Proposed branch: lp:~smoser/curtin/trunk.vmtest-remove-bug-timers
Merge into: lp:~raharper/curtin/trunk.vmtest-remove-bug-timers
Diff against target: 275 lines (+61/-56)
7 files modified
curtin/commands/curthooks.py (+16/-14)
tests/vmtests/__init__.py (+20/-1)
tests/vmtests/test_network.py (+1/-4)
tests/vmtests/test_network_bonding.py (+10/-22)
tests/vmtests/test_network_bridging.py (+11/-5)
tests/vmtests/test_network_enisource.py (+2/-4)
tests/vmtests/test_network_vlan.py (+1/-6)
To merge this branch: bzr merge lp:~smoser/curtin/trunk.vmtest-remove-bug-timers
Reviewer Review Type Date Requested Status
Ryan Harper Pending
Review via email: mp+331895@code.launchpad.net
To post a comment you must log in.
549. By Scott Moser

vertical space

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'curtin/commands/curthooks.py'
2--- curtin/commands/curthooks.py 2017-10-05 16:34:52 +0000
3+++ curtin/commands/curthooks.py 2017-10-05 20:10:19 +0000
4@@ -677,8 +677,8 @@
5 '''
6
7 installed_packages = util.get_installed_packages(target)
8- needed_packages = [pkg for pkg in detect_required_packages(cfg)
9- if pkg not in installed_packages]
10+ needed_packages = set([pkg for pkg in detect_required_packages(cfg)
11+ if pkg not in installed_packages])
12
13 arch_packages = {
14 's390x': [('s390-tools', 'zipl')],
15@@ -687,26 +687,28 @@
16 for pkg, cmd in arch_packages.get(platform.machine(), []):
17 if not util.which(cmd, target=target):
18 if pkg not in needed_packages:
19- needed_packages.append(pkg)
20+ needed_packages.add(pkg)
21
22- # do not install ifenslave if target release is artful as it
23- # triggers an install of ifupdown which will break network rendering
24- if 'ifenslave' in needed_packages:
25- codename = util.lsb_release(target=target).get('codename')
26- LOG.debug('Target release codename: %s', codename)
27- if codename == 'artful':
28- LOG.debug("Skipping install of package 'ifenslave' to prevent"
29- " network configutation errors on release %s", codename)
30- needed_packages.remove('ifenslave')
31+ # FIXME: This needs cleaning up.
32+ # do not install certain packages on artful as they are no longer needed.
33+ # ifenslave specifically causes issuse due to dependency on ifupdown.
34+ codename = util.lsb_release(target=target).get('codename')
35+ if codename == 'artful':
36+ drops = set(['bridge-utils', 'ifenslave', 'vlan'])
37+ if needed_packages.union(drops):
38+ LOG.debug("Skipping install of %s. Not needed on artful.",
39+ needed_packages.union(drops))
40+ needed_packages = needed_packages.difference(drops)
41
42 if needed_packages:
43+ to_add = list(sorted(needed_packages))
44 state = util.load_command_environment()
45 with events.ReportEventStack(
46 name=state.get('report_stack_prefix'),
47 reporting_enabled=True, level="INFO",
48 description="Installing packages on target system: " +
49- str(needed_packages)):
50- util.install_packages(needed_packages, target=target)
51+ str(to_add)):
52+ util.install_packages(to_add, target=target)
53
54
55 def system_upgrade(cfg, target):
56
57=== modified file 'tests/vmtests/__init__.py'
58--- tests/vmtests/__init__.py 2017-10-02 15:32:45 +0000
59+++ tests/vmtests/__init__.py 2017-10-05 20:10:19 +0000
60@@ -336,7 +336,12 @@
61 __test__ = False
62 arch_skip = []
63 boot_timeout = BOOT_TIMEOUT
64- collect_scripts = []
65+ collect_scripts = [textwrap.dedent("""
66+ cd OUTPUT_COLLECT_D
67+ dpkg-query --show \
68+ --showformat='${db:Status-Abbrev}\t${Package}\t${Version}\n' \
69+ > debian-packages.txt 2> debian-packages.txt.err
70+ """)]
71 conf_file = "examples/tests/basic.yaml"
72 nr_cpus = None
73 dirty_disks = False
74@@ -369,6 +374,8 @@
75 target_krel = None
76 target_ftype = "vmtest.root-tgz"
77
78+ _debian_packages = None
79+
80 def shortDescription(self):
81 return None
82
83@@ -1154,6 +1161,18 @@
84 fp.write(json.dumps(data, indent=2, sort_keys=True,
85 separators=(',', ': ')) + "\n")
86
87+ @property
88+ def debian_packages(self):
89+ if self._debian_packages is None:
90+ data = self.load_collect_file("debian-packages.txt")
91+ pkgs = {}
92+ for line in data.splitlines():
93+ # lines are <status>\t<
94+ status, pkg, ver = line.split('\t')
95+ pkgs[pkg] = {'status': status, 'version': ver}
96+ self._debian_packages = pkgs
97+ return self._debian_packages
98+
99
100 class PsuedoVMBaseClass(VMBaseClass):
101 # This mimics much of the VMBaseClass just with faster setUpClass
102
103=== modified file 'tests/vmtests/test_network.py'
104--- tests/vmtests/test_network.py 2017-10-04 20:44:57 +0000
105+++ tests/vmtests/test_network.py 2017-10-05 20:10:19 +0000
106@@ -19,7 +19,7 @@
107 extra_nics = []
108 # XXX: command | tee output is required for Centos under SELinux
109 # http://danwalsh.livejournal.com/22860.html
110- collect_scripts = [textwrap.dedent("""
111+ collect_scripts = VMBaseClass.collect_scripts + [textwrap.dedent("""
112 cd OUTPUT_COLLECT_D
113 echo "waiting for ipv6 to settle" && sleep 5
114 route -n | tee first_route_n
115@@ -39,9 +39,6 @@
116 cp -av /var/log/upstart ./upstart ||:
117 cp -av /etc/cloud ./etc_cloud
118 cp -av /var/log/cloud*.log ./
119- dpkg-query -W -f '${Version}' cloud-init |tee dpkg_cloud-init_version
120- dpkg-query -W -f '${Version}' nplan |tee dpkg_nplan_version
121- dpkg-query -W -f '${Version}' systemd |tee dpkg_systemd_version
122 rpm -q --queryformat '%{VERSION}\n' cloud-init |tee rpm_ci_version
123 V=/usr/lib/python*/*-packages/cloudinit/version.py;
124 grep -c NETWORK_CONFIG_V2 $V |tee cloudinit_passthrough_available
125
126=== modified file 'tests/vmtests/test_network_bonding.py'
127--- tests/vmtests/test_network_bonding.py 2017-10-04 20:46:23 +0000
128+++ tests/vmtests/test_network_bonding.py 2017-10-05 20:10:19 +0000
129@@ -9,19 +9,10 @@
130
131 class TestNetworkBondingAbs(TestNetworkBaseTestsAbs):
132 conf_file = "examples/tests/bonding_network.yaml"
133- collect_scripts = TestNetworkBaseTestsAbs.collect_scripts + [
134- textwrap.dedent("""
135- cd OUTPUT_COLLECT_D
136- dpkg-query -W -f '${Status}' ifenslave > ifenslave_installed
137- """)]
138-
139- def test_output_files_exist_ifenslave(self):
140- self.output_files_exist(["ifenslave_installed"])
141
142 def test_ifenslave_installed(self):
143- status = self.load_collect_file("ifenslave_installed")
144- logger.debug('ifenslave installed: {}'.format(status))
145- self.assertEqual('install ok installed', status)
146+ self.assertIn("ifenslave", self.debian_packages,
147+ "ifenslave deb not installed")
148
149
150 class CentosTestNetworkBondingAbs(TestNetworkBondingAbs):
151@@ -50,12 +41,10 @@
152
153 class PreciseHWETTestBonding(relbase.precise_hwe_t, TestNetworkBondingAbs):
154 __test__ = True
155- # package names on precise are different, need to check on ifenslave-2.6
156- collect_scripts = TestNetworkBondingAbs.collect_scripts + [
157- textwrap.dedent("""
158- cd OUTPUT_COLLECT_D
159- dpkg-query -W -f '${Status}' ifenslave-2.6 > ifenslave_installed
160- """)]
161+
162+ def test_ifenslave_installed(self):
163+ self.assertIn("ifenslave-2.6", self.debian_packages,
164+ "ifenslave deb not installed")
165
166
167 class TrustyTestBonding(relbase.trusty, TestNetworkBondingAbs):
168@@ -89,16 +78,15 @@
169 class ArtfulTestBonding(relbase.artful, TestNetworkBondingAbs):
170 __test__ = True
171
172- @unittest.skip("Artful does not install ifenslave")
173 def test_ifenslave_installed(self):
174+ """Artful should not have ifenslave installed."""
175 pass
176
177 def test_ifenslave_not_installed(self):
178 """Confirm that ifenslave is not installed on artful"""
179- status = self.load_collect_file("ifenslave_installed")
180- logger.debug('ifenslave installed: [{}]'.format(status))
181- self.assertEqual('', status,
182- "ifenslave installed on Artful when it shouldn't be")
183+ self.assertNotIn('ifenslave', self.debian_packages,
184+ "ifenslave is not expected in artful: %s" %
185+ self.debian_packages.get('ifenslave'))
186
187
188 class Centos66TestNetworkBonding(centos_relbase.centos66fromxenial,
189
190=== modified file 'tests/vmtests/test_network_bridging.py'
191--- tests/vmtests/test_network_bridging.py 2017-10-04 01:11:14 +0000
192+++ tests/vmtests/test_network_bridging.py 2017-10-05 20:10:19 +0000
193@@ -101,7 +101,6 @@
194 grep -r . /sys/class/net/br0 > sysfs_br0
195 grep -r . /sys/class/net/br0/brif/eth1 > sysfs_br0_eth1
196 grep -r . /sys/class/net/br0/brif/eth2 > sysfs_br0_eth2
197- dpkg-query -W -f '${Status}' bridge-utils 2>&1 > bridge-utils_installed
198 """)]
199
200 def test_output_files_exist_bridge(self):
201@@ -110,10 +109,8 @@
202 "sysfs_br0_eth2"])
203
204 def test_bridge_utils_installed(self):
205- self.output_files_exist(["bridge-utils_installed"])
206- status = self.load_collect_file("bridge-utils_installed").strip()
207- logger.debug('bridge-utils installed: {}'.format(status))
208- self.assertEqual('install ok installed', status)
209+ self.assertIn("bridge-utils", self.debian_packages,
210+ "bridge-utilsi deb not installed")
211
212 def test_bridge_params(self):
213
214@@ -234,3 +231,12 @@
215 cls.skip_by_date(cls.__name__, cls.release, "1721157",
216 fixby=(2017, 10, 16), removeby=(2017, 11, 16))
217 super().setUpClass()
218+
219+ def test_bridge_utils_installed(self):
220+ """bridge-utils not needed in artful."""
221+ pass
222+
223+ def test_bridge_utils_not_installed(self):
224+ self.assertNotIn("bridge-utils" self.debian_packages,
225+ "bridge-utils is not expected in artful: %s" %
226+ self.debian_packages.get('bridge-utils'))
227
228=== modified file 'tests/vmtests/test_network_enisource.py'
229--- tests/vmtests/test_network_enisource.py 2017-10-03 16:44:50 +0000
230+++ tests/vmtests/test_network_enisource.py 2017-10-05 20:10:19 +0000
231@@ -26,6 +26,8 @@
232 This testcase then uses curtin.net.deb_parse_config method to
233 extract information about what curtin wrote and compare that
234 with what was actually configured (which we capture via ifconfig)
235+
236+ Note: This test is *not* valid for Artful as it has no ENI.
237 """
238
239 conf_file = "examples/tests/network_source.yaml"
240@@ -98,7 +100,3 @@
241
242 class ZestyTestNetworkENISource(relbase.zesty, TestNetworkENISource):
243 __test__ = True
244-
245-
246-class ArtfulTestNetworkENISource(relbase.artful, TestNetworkENISource):
247- __test__ = False
248
249=== modified file 'tests/vmtests/test_network_vlan.py'
250--- tests/vmtests/test_network_vlan.py 2017-10-03 16:44:50 +0000
251+++ tests/vmtests/test_network_vlan.py 2017-10-05 20:10:19 +0000
252@@ -12,7 +12,6 @@
253 collect_scripts = TestNetworkBaseTestsAbs.collect_scripts + [
254 textwrap.dedent("""
255 cd OUTPUT_COLLECT_D
256- dpkg-query -W -f '${Status}' vlan > vlan_installed
257 ip -d link show interface1.2667 |tee ip_link_show_interface1.2667
258 ip -d link show interface1.2668 |tee ip_link_show_interface1.2668
259 ip -d link show interface1.2669 |tee ip_link_show_interface1.2669
260@@ -31,15 +30,11 @@
261 def test_output_files_exist_vlan(self):
262 link_files = ["ip_link_show_%s" % vlan['name']
263 for vlan in self.get_vlans()]
264- self.output_files_exist(["vlan_installed"] + link_files)
265
266 def test_vlan_installed(self):
267- status = self.load_collect_file("vlan_installed").strip()
268- logger.debug('vlan installed?: %s', status)
269- self.assertEqual('install ok installed', status)
270+ self.assertIn("vlan", self.debian_packages, "vlan deb not installed")
271
272 def test_vlan_enabled(self):
273-
274 # we must have at least one
275 self.assertGreaterEqual(len(self.get_vlans()), 1)
276

Subscribers

People subscribed via source and target branches

to all changes: