Merge lp:~raharper/curtin/trunk.vmtest-remove-bug-timers into lp:~curtin-dev/curtin/trunk
- trunk.vmtest-remove-bug-timers
- Merge into trunk
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | 532 | ||||||||
Proposed branch: | lp:~raharper/curtin/trunk.vmtest-remove-bug-timers | ||||||||
Merge into: | lp:~curtin-dev/curtin/trunk | ||||||||
Diff against target: |
544 lines (+128/-134) 13 files modified
curtin/commands/curthooks.py (+19/-5) examples/tests/network_alias.yaml (+0/-2) examples/tests/network_static_routes.yaml (+10/-15) tests/vmtests/__init__.py (+20/-1) tests/vmtests/test_network.py (+15/-11) tests/vmtests/test_network_bonding.py (+16/-17) tests/vmtests/test_network_bridging.py (+15/-9) tests/vmtests/test_network_enisource.py (+2/-4) tests/vmtests/test_network_ipv6.py (+0/-11) tests/vmtests/test_network_ipv6_enisource.py (+3/-17) tests/vmtests/test_network_ipv6_vlan.py (+0/-6) tests/vmtests/test_network_mtu.py (+26/-24) tests/vmtests/test_network_vlan.py (+2/-12) |
||||||||
To merge this branch: | bzr merge lp:~raharper/curtin/trunk.vmtest-remove-bug-timers | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Server Team CI bot | continuous-integration | Approve | |
Scott Moser (community) | Approve | ||
Chad Smith | Pending | ||
Review via email:
|
Commit message
Description of the change
vmtest: fix artful networking
- Remove skip_by_date calls in vmtests that are no longer valid
- ifenslave brings in ifupdown, so filter out ifenslave package if target
release is artful
- Adjust artful bonding test to skip checking for ifslave and instead check
that ifenslave is *not* installed
- Drop mtu settings in network-
- Move static routes under an interface subnet to be compatible with
netplan format which requires routes under an interface
- Refactor ip_route_show parsing, ignoring default route and fetching
variable settings like 'proto'.
- Skiptest bridging in artful, need a cloud-init fix for stp in netplan
- Skiptest for mtu in artful, need networkd to support mtu6 support

Server Team CI bot (server-team-bot) wrote : | # |

Ryan Harper (raharper) wrote : | # |
For testing, generally this affects the following path:
./tools/
Note, that while we're specifically looking for all of the ArtfulTest* tests to now pass (or skip)
we need to ensure that we don't regress non-artful releases.

Chad Smith (chad.smith) wrote : | # |
Looks pretty good, couple of nits and questions.

Ryan Harper (raharper) wrote : | # |
Thanks for the review, I'll fix up several things you've mentioned.
- 533. By Ryan Harper
-
Fix spelling of 'additional' in curthooks log message
- 534. By Ryan Harper
-
Remove unneeded .lower(), switch to an equality check
- 535. By Ryan Harper
-
Raise a ValueError in ip_route_show regex failure to match
- 536. By Ryan Harper
-
Just check for empty dpkg-query status in Artful Bonding tests

Server Team CI bot (server-team-bot) wrote : | # |
PASSED: Continuous integration, rev:536
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/

Scott Moser (smoser) : | # |

Ryan Harper (raharper) wrote : | # |
On Thu, Oct 5, 2017 at 11:21 AM, Scott Moser <email address hidden> wrote:
>
>
> Diff comments:
>
> > === modified file 'curtin/
> > --- curtin/
> > +++ curtin/
> > @@ -687,6 +689,19 @@
> > if pkg not in needed_packages:
> > needed_
> >
> > + # do not install ifenslave if target release is artful as it
> > + # triggers an install of ifupdown which will break network rendering
> > + if 'ifenslave' in needed_packages:
> > + codename, _ = util.subp(
> '--short'],
>
> util.lsb_
>
I didn't want the dict =); will fix.
>
> > + capture=True, target=target)
> > + # drop the newline
> > + codename = codename.strip()
> > + LOG.debug('Target release codename: %s', codename)
> > + if codename == 'artful':
> > + LOG.debug("Skipping install of package 'ifenslave' to
> prevent"
> > + " network configutation errors on release %s",
> codename)
> > + needed_
>
> what about bridge-utils and vlan ?
>
bridge-utils recommends ifupdown but does not install
vlan does not bring in ifupdown either.
>
> it looks like we will install those in some scenarios too.
> maybe they dont break stuff, but ... fix ?
>
> > +
> > if needed_packages:
> > state = util.load_
> > with events.
>
>
> --
> https:/
> remove-
> You are the owner of lp:~raharper/curtin/trunk.vmtest-remove-bug-timers.
>
- 537. By Ryan Harper
-
Use util.lsb_release()

Scott Moser (smoser) wrote : | # |
but vlan and bridge-utils are not needed or desired in artful, right?

Scott Moser (smoser) wrote : | # |
that means best case we install some stuff that odesnt get used and slow down the install.

Server Team CI bot (server-team-bot) wrote : | # |
PASSED: Continuous integration, rev:537
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/

Ryan Harper (raharper) wrote : | # |
vlan appears to be installed already,
bridge-utils while not needed directly to create bridges, is highly useful
for modifying/
it.
On Thu, Oct 5, 2017 at 11:44 AM, Scott Moser <email address hidden> wrote:
> but vlan and bridge-utils are not needed or desired in artful, right?
>
> --
> https:/
> remove-
> You are the owner of lp:~raharper/curtin/trunk.vmtest-remove-bug-timers.
>

Scott Moser (smoser) : | # |

Ryan Harper (raharper) wrote : | # |
On Thu, Oct 5, 2017 at 1:38 PM, Scott Moser <email address hidden> wrote:
>
>
> Diff comments:
>
> >
> > === modified file 'examples/
> > --- examples/
> > +++ examples/
> > @@ -9,11 +9,9 @@
> > subnets:
> > - type: static
> > address: 10.47.98.1/24
> > - mtu: 1501
> > - type: static
> > address: 2001:4800:
> > netmask: 'ffff:ffff:
> > - mtu: 1480
>
> you say "not needed" in your commit message, but why?
> and isnt it concerning that this diddnt have fallout in tests ?
>
It does have fallout for netplan which doesn;'t support ipv6 mtu;
however, the *scope* of this test is multiple ip address per interface
The mtu itself has no affect on assigning multiple addresses to a single
interface.
The failure to apply an ipv6 MTU in this test is not germane; we're
only testing if we can set multiple ips.
>
> > # multi_v4_alias: multiple v4 addrs on same interface
> > - type: physical
> > name: interface1
> >
> > === modified file 'tests/
> > --- tests/vmtests/
> > +++ tests/vmtests/
> > @@ -285,14 +285,19 @@
> > ip_route_show = self.load_
> > logger.debug("ip route show:\n{
> > for line in [line for line in ip_route_
> > - if 'src' in line]:
> > + if 'src' in line and not
> line.startswith
> > + print('
> > m = re.search(
> > r'(?P<devname>
> > - r'proto kernel\s+scope link' +
> > - r'\s+src\
> > + r'proto\
> > + r'scope\
> > + r'src\s(
> > line)
> > - route_info = m.groupdict('')
> > - logger.
> > + if m:
> > + route_info = m.groupdict('')
> > + logger.
> > + else:
> > + raise ValueError('Failed match ip_route_show line: %s'
> % line)
>
> bikeshed: this is probably more of a RuntimeException
> kind of "got stuff i didnt expect".
> doesnt matter. take input or not.
>
Sure
>
> >
> > routes = {
> > '4': route_n,
> > @@ -390,7 +395,8 @@
> > gateways.
> > for route in subnet.
> > gateways += __find_
> > - return gateways
> > + # drop duplicate gateways (static routes)
>
> this does have the side affect of sorting your list.
>
That's ok, we iterate ...
- 538. By Ryan Harper
-
Merge from smoser
- 539. By Ryan Harper
-
Fix up merge issues

Scott Moser (smoser) wrote : | # |
started vmtest run at https:/

Scott Moser (smoser) wrote : | # |
i'm good with this. lets see it pass the test run above and then pull.

Server Team CI bot (server-team-bot) wrote : | # |
PASSED: Continuous integration, rev:539
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/

Ryan Harper (raharper) wrote : | # |
Computer says yes!
Ran 2167 tests in 9300.984s
OK (SKIP=161)
Thu, 05 Oct 2017 23:51:46 +0000: vmtest end [0] in 9302s
+ RET=0
Preview Diff
1 | === modified file 'curtin/commands/curthooks.py' |
2 | --- curtin/commands/curthooks.py 2017-08-04 19:53:29 +0000 |
3 | +++ curtin/commands/curthooks.py 2017-10-05 21:13:20 +0000 |
4 | @@ -663,6 +663,8 @@ |
5 | found_reqs = mapped_config['handler'](cfg, mapped_config['mapping']) |
6 | needed_packages.extend(found_reqs) |
7 | |
8 | + LOG.debug('Curtin config dependencies requires additional packages: %s', |
9 | + needed_packages) |
10 | return needed_packages |
11 | |
12 | |
13 | @@ -675,8 +677,8 @@ |
14 | ''' |
15 | |
16 | installed_packages = util.get_installed_packages(target) |
17 | - needed_packages = [pkg for pkg in detect_required_packages(cfg) |
18 | - if pkg not in installed_packages] |
19 | + needed_packages = set([pkg for pkg in detect_required_packages(cfg) |
20 | + if pkg not in installed_packages]) |
21 | |
22 | arch_packages = { |
23 | 's390x': [('s390-tools', 'zipl')], |
24 | @@ -685,16 +687,28 @@ |
25 | for pkg, cmd in arch_packages.get(platform.machine(), []): |
26 | if not util.which(cmd, target=target): |
27 | if pkg not in needed_packages: |
28 | - needed_packages.append(pkg) |
29 | + needed_packages.add(pkg) |
30 | + |
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 'examples/tests/network_alias.yaml' |
58 | --- examples/tests/network_alias.yaml 2017-06-13 22:10:10 +0000 |
59 | +++ examples/tests/network_alias.yaml 2017-10-05 21:13:20 +0000 |
60 | @@ -9,11 +9,9 @@ |
61 | subnets: |
62 | - type: static |
63 | address: 10.47.98.1/24 |
64 | - mtu: 1501 |
65 | - type: static |
66 | address: 2001:4800:78ff:1b:be76:4eff:fe06:ffac |
67 | netmask: 'ffff:ffff:ffff:ffff::' |
68 | - mtu: 1480 |
69 | # multi_v4_alias: multiple v4 addrs on same interface |
70 | - type: physical |
71 | name: interface1 |
72 | |
73 | === modified file 'examples/tests/network_static_routes.yaml' |
74 | --- examples/tests/network_static_routes.yaml 2017-01-25 00:16:35 +0000 |
75 | +++ examples/tests/network_static_routes.yaml 2017-10-05 21:13:20 +0000 |
76 | @@ -10,18 +10,13 @@ |
77 | - address: 172.23.31.42/26 |
78 | gateway: 172.23.31.2 |
79 | type: static |
80 | - - type: route |
81 | - id: 4 |
82 | - metric: 0 |
83 | - destination: 10.0.0.0/12 |
84 | - gateway: 172.23.31.1 |
85 | - - type: route |
86 | - id: 5 |
87 | - metric: 0 |
88 | - destination: 192.168.0.0/16 |
89 | - gateway: 172.23.31.1 |
90 | - - type: route |
91 | - id: 6 |
92 | - metric: 1 |
93 | - destination: 10.200.0.0/16 |
94 | - gateway: 172.23.31.1 |
95 | + routes: |
96 | + - gateway: 172.23.31.1 |
97 | + network: 10.0.0.0/12 |
98 | + metric: 0 |
99 | + - gateway: 172.23.31.1 |
100 | + network: 192.168.0.0/16 |
101 | + metric: 0 |
102 | + - gateway: 172.23.31.1 |
103 | + network: 10.200.0.0/16 |
104 | + metric: 1 |
105 | |
106 | === modified file 'tests/vmtests/__init__.py' |
107 | --- tests/vmtests/__init__.py 2017-10-02 15:32:45 +0000 |
108 | +++ tests/vmtests/__init__.py 2017-10-05 21:13:20 +0000 |
109 | @@ -336,7 +336,12 @@ |
110 | __test__ = False |
111 | arch_skip = [] |
112 | boot_timeout = BOOT_TIMEOUT |
113 | - collect_scripts = [] |
114 | + collect_scripts = [textwrap.dedent(""" |
115 | + cd OUTPUT_COLLECT_D |
116 | + dpkg-query --show \ |
117 | + --showformat='${db:Status-Abbrev}\t${Package}\t${Version}\n' \ |
118 | + > debian-packages.txt 2> debian-packages.txt.err |
119 | + """)] |
120 | conf_file = "examples/tests/basic.yaml" |
121 | nr_cpus = None |
122 | dirty_disks = False |
123 | @@ -369,6 +374,8 @@ |
124 | target_krel = None |
125 | target_ftype = "vmtest.root-tgz" |
126 | |
127 | + _debian_packages = None |
128 | + |
129 | def shortDescription(self): |
130 | return None |
131 | |
132 | @@ -1154,6 +1161,18 @@ |
133 | fp.write(json.dumps(data, indent=2, sort_keys=True, |
134 | separators=(',', ': ')) + "\n") |
135 | |
136 | + @property |
137 | + def debian_packages(self): |
138 | + if self._debian_packages is None: |
139 | + data = self.load_collect_file("debian-packages.txt") |
140 | + pkgs = {} |
141 | + for line in data.splitlines(): |
142 | + # lines are <status>\t< |
143 | + status, pkg, ver = line.split('\t') |
144 | + pkgs[pkg] = {'status': status, 'version': ver} |
145 | + self._debian_packages = pkgs |
146 | + return self._debian_packages |
147 | + |
148 | |
149 | class PsuedoVMBaseClass(VMBaseClass): |
150 | # This mimics much of the VMBaseClass just with faster setUpClass |
151 | |
152 | === modified file 'tests/vmtests/test_network.py' |
153 | --- tests/vmtests/test_network.py 2017-08-02 15:46:35 +0000 |
154 | +++ tests/vmtests/test_network.py 2017-10-05 21:13:20 +0000 |
155 | @@ -19,7 +19,7 @@ |
156 | extra_nics = [] |
157 | # XXX: command | tee output is required for Centos under SELinux |
158 | # http://danwalsh.livejournal.com/22860.html |
159 | - collect_scripts = [textwrap.dedent(""" |
160 | + collect_scripts = VMBaseClass.collect_scripts + [textwrap.dedent(""" |
161 | cd OUTPUT_COLLECT_D |
162 | echo "waiting for ipv6 to settle" && sleep 5 |
163 | route -n | tee first_route_n |
164 | @@ -39,9 +39,6 @@ |
165 | cp -av /var/log/upstart ./upstart ||: |
166 | cp -av /etc/cloud ./etc_cloud |
167 | cp -av /var/log/cloud*.log ./ |
168 | - dpkg-query -W -f '${Version}' cloud-init |tee dpkg_cloud-init_version |
169 | - dpkg-query -W -f '${Version}' nplan |tee dpkg_nplan_version |
170 | - dpkg-query -W -f '${Version}' systemd |tee dpkg_systemd_version |
171 | rpm -q --queryformat '%{VERSION}\n' cloud-init |tee rpm_ci_version |
172 | V=/usr/lib/python*/*-packages/cloudinit/version.py; |
173 | grep -c NETWORK_CONFIG_V2 $V |tee cloudinit_passthrough_available |
174 | @@ -285,14 +282,19 @@ |
175 | ip_route_show = self.load_collect_file("ip_route_show") |
176 | logger.debug("ip route show:\n{}".format(ip_route_show)) |
177 | for line in [line for line in ip_route_show.split('\n') |
178 | - if 'src' in line]: |
179 | + if 'src' in line and not line.startswith('default')]: |
180 | + print('ip_route_show: line: %s' % line) |
181 | m = re.search(r'^(?P<network>\S+)\sdev\s' + |
182 | r'(?P<devname>\S+)\s+' + |
183 | - r'proto kernel\s+scope link' + |
184 | - r'\s+src\s(?P<src_ip>\S+)', |
185 | + r'proto\s(?P<proto>\S+)\s+' + |
186 | + r'scope\s(?P<scope>\S+)\s+' + |
187 | + r'src\s(?P<src_ip>\S+)', |
188 | line) |
189 | - route_info = m.groupdict('') |
190 | - logger.debug(route_info) |
191 | + if m: |
192 | + route_info = m.groupdict('') |
193 | + logger.debug(route_info) |
194 | + else: |
195 | + raise ValueError('Failed match ip_route_show line: %s' % line) |
196 | |
197 | routes = { |
198 | '4': route_n, |
199 | @@ -390,7 +392,8 @@ |
200 | gateways.append(subnet.get('gateway')) |
201 | for route in subnet.get('routes', []): |
202 | gateways += __find_gw_config(route) |
203 | - return gateways |
204 | + # drop duplicate gateways (static routes) |
205 | + return list(set(gateways)) |
206 | |
207 | # handle gateways by looking at routing table |
208 | configured_gws = __find_gw_config(subnet) |
209 | @@ -408,7 +411,8 @@ |
210 | |
211 | print('found_gws: %s\nexpected: %s' % (found_gws, |
212 | configured_gws)) |
213 | - self.assertEqual(len(found_gws), len(configured_gws)) |
214 | + # we only need to check that we found at least one as we walk |
215 | + self.assertGreater(len(found_gws), 0) |
216 | for fgw in found_gws: |
217 | if ":" in gw_ip: |
218 | (dest, gw, flags, metric, ref, use, iface) = \ |
219 | |
220 | === modified file 'tests/vmtests/test_network_bonding.py' |
221 | --- tests/vmtests/test_network_bonding.py 2017-08-02 15:46:35 +0000 |
222 | +++ tests/vmtests/test_network_bonding.py 2017-10-05 21:13:20 +0000 |
223 | @@ -8,19 +8,10 @@ |
224 | |
225 | class TestNetworkBondingAbs(TestNetworkBaseTestsAbs): |
226 | conf_file = "examples/tests/bonding_network.yaml" |
227 | - collect_scripts = TestNetworkBaseTestsAbs.collect_scripts + [ |
228 | - textwrap.dedent(""" |
229 | - cd OUTPUT_COLLECT_D |
230 | - dpkg-query -W -f '${Status}' ifenslave > ifenslave_installed |
231 | - """)] |
232 | - |
233 | - def test_output_files_exist_ifenslave(self): |
234 | - self.output_files_exist(["ifenslave_installed"]) |
235 | |
236 | def test_ifenslave_installed(self): |
237 | - status = self.load_collect_file("ifenslave_installed") |
238 | - logger.debug('ifenslave installed: {}'.format(status)) |
239 | - self.assertEqual('install ok installed', status) |
240 | + self.assertIn("ifenslave", self.debian_packages, |
241 | + "ifenslave deb not installed") |
242 | |
243 | |
244 | class CentosTestNetworkBondingAbs(TestNetworkBondingAbs): |
245 | @@ -49,12 +40,10 @@ |
246 | |
247 | class PreciseHWETTestBonding(relbase.precise_hwe_t, TestNetworkBondingAbs): |
248 | __test__ = True |
249 | - # package names on precise are different, need to check on ifenslave-2.6 |
250 | - collect_scripts = TestNetworkBondingAbs.collect_scripts + [ |
251 | - textwrap.dedent(""" |
252 | - cd OUTPUT_COLLECT_D |
253 | - dpkg-query -W -f '${Status}' ifenslave-2.6 > ifenslave_installed |
254 | - """)] |
255 | + |
256 | + def test_ifenslave_installed(self): |
257 | + self.assertIn("ifenslave-2.6", self.debian_packages, |
258 | + "ifenslave deb not installed") |
259 | |
260 | |
261 | class TrustyTestBonding(relbase.trusty, TestNetworkBondingAbs): |
262 | @@ -88,6 +77,16 @@ |
263 | class ArtfulTestBonding(relbase.artful, TestNetworkBondingAbs): |
264 | __test__ = True |
265 | |
266 | + def test_ifenslave_installed(self): |
267 | + """Artful should not have ifenslave installed.""" |
268 | + pass |
269 | + |
270 | + def test_ifenslave_not_installed(self): |
271 | + """Confirm that ifenslave is not installed on artful""" |
272 | + self.assertNotIn('ifenslave', self.debian_packages, |
273 | + "ifenslave is not expected in artful: %s" % |
274 | + self.debian_packages.get('ifenslave')) |
275 | + |
276 | |
277 | class Centos66TestNetworkBonding(centos_relbase.centos66fromxenial, |
278 | CentosTestNetworkBondingAbs): |
279 | |
280 | === modified file 'tests/vmtests/test_network_bridging.py' |
281 | --- tests/vmtests/test_network_bridging.py 2017-08-22 14:50:10 +0000 |
282 | +++ tests/vmtests/test_network_bridging.py 2017-10-05 21:13:20 +0000 |
283 | @@ -101,7 +101,6 @@ |
284 | grep -r . /sys/class/net/br0 > sysfs_br0 |
285 | grep -r . /sys/class/net/br0/brif/eth1 > sysfs_br0_eth1 |
286 | grep -r . /sys/class/net/br0/brif/eth2 > sysfs_br0_eth2 |
287 | - dpkg-query -W -f '${Status}' bridge-utils 2>&1 > bridge-utils_installed |
288 | """)] |
289 | |
290 | def test_output_files_exist_bridge(self): |
291 | @@ -110,10 +109,8 @@ |
292 | "sysfs_br0_eth2"]) |
293 | |
294 | def test_bridge_utils_installed(self): |
295 | - self.output_files_exist(["bridge-utils_installed"]) |
296 | - status = self.load_collect_file("bridge-utils_installed").strip() |
297 | - logger.debug('bridge-utils installed: {}'.format(status)) |
298 | - self.assertEqual('install ok installed', status) |
299 | + self.assertIn("bridge-utils", self.debian_packages, |
300 | + "bridge-utilsi deb not installed") |
301 | |
302 | def test_bridge_params(self): |
303 | |
304 | @@ -225,12 +222,21 @@ |
305 | class ZestyTestBridging(relbase.zesty, TestBridgeNetworkAbs): |
306 | __test__ = True |
307 | |
308 | + |
309 | +class ArtfulTestBridging(relbase.artful, TestBridgeNetworkAbs): |
310 | + __test__ = True |
311 | + |
312 | @classmethod |
313 | def setUpClass(cls): |
314 | - cls.skip_by_date(cls.__name__, cls.release, "1706752", |
315 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
316 | + cls.skip_by_date(cls.__name__, cls.release, "1721157", |
317 | + fixby=(2017, 10, 16), removeby=(2017, 11, 16)) |
318 | super().setUpClass() |
319 | |
320 | + def test_bridge_utils_installed(self): |
321 | + """bridge-utils not needed in artful.""" |
322 | + pass |
323 | |
324 | -class ArtfulTestBridging(relbase.artful, TestBridgeNetworkAbs): |
325 | - __test__ = True |
326 | + def test_bridge_utils_not_installed(self): |
327 | + self.assertNotIn("bridge-utils", self.debian_packages, |
328 | + "bridge-utils is not expected in artful: %s" % |
329 | + self.debian_packages.get('bridge-utils')) |
330 | |
331 | === modified file 'tests/vmtests/test_network_enisource.py' |
332 | --- tests/vmtests/test_network_enisource.py 2017-08-02 15:46:35 +0000 |
333 | +++ tests/vmtests/test_network_enisource.py 2017-10-05 21:13:20 +0000 |
334 | @@ -26,6 +26,8 @@ |
335 | This testcase then uses curtin.net.deb_parse_config method to |
336 | extract information about what curtin wrote and compare that |
337 | with what was actually configured (which we capture via ifconfig) |
338 | + |
339 | + Note: This test is *not* valid for Artful as it has no ENI. |
340 | """ |
341 | |
342 | conf_file = "examples/tests/network_source.yaml" |
343 | @@ -98,7 +100,3 @@ |
344 | |
345 | class ZestyTestNetworkENISource(relbase.zesty, TestNetworkENISource): |
346 | __test__ = True |
347 | - |
348 | - |
349 | -class ArtfulTestNetworkENISource(relbase.artful, TestNetworkENISource): |
350 | - __test__ = True |
351 | |
352 | === modified file 'tests/vmtests/test_network_ipv6.py' |
353 | --- tests/vmtests/test_network_ipv6.py 2017-08-22 14:50:10 +0000 |
354 | +++ tests/vmtests/test_network_ipv6.py 2017-10-05 21:13:20 +0000 |
355 | @@ -67,21 +67,10 @@ |
356 | class XenialTestNetworkIPV6(relbase.xenial, TestNetworkIPV6Abs): |
357 | __test__ = True |
358 | |
359 | - @classmethod |
360 | - def test_ip_output(cls): |
361 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1701097", |
362 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
363 | - |
364 | |
365 | class ZestyTestNetworkIPV6(relbase.zesty, TestNetworkIPV6Abs): |
366 | __test__ = True |
367 | |
368 | - @classmethod |
369 | - def setUpClass(cls): |
370 | - cls.skip_by_date(cls.__name__, cls.release, "ci-003c6678e", |
371 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
372 | - super().setUpClass() |
373 | - |
374 | |
375 | class ArtfulTestNetworkIPV6(relbase.artful, TestNetworkIPV6Abs): |
376 | __test__ = True |
377 | |
378 | === modified file 'tests/vmtests/test_network_ipv6_enisource.py' |
379 | --- tests/vmtests/test_network_ipv6_enisource.py 2017-08-22 14:50:10 +0000 |
380 | +++ tests/vmtests/test_network_ipv6_enisource.py 2017-10-05 21:13:20 +0000 |
381 | @@ -31,25 +31,11 @@ |
382 | class XenialTestNetworkIPV6ENISource(relbase.xenial, TestNetworkIPV6ENISource): |
383 | __test__ = True |
384 | |
385 | - @classmethod |
386 | - def test_ip_output(cls): |
387 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1701097", |
388 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
389 | - |
390 | |
391 | class ZestyTestNetworkIPV6ENISource(relbase.zesty, TestNetworkIPV6ENISource): |
392 | __test__ = True |
393 | |
394 | - @classmethod |
395 | - def test_ip_output(cls): |
396 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1701097", |
397 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
398 | - |
399 | - |
400 | + |
401 | +# Artful no longer has eni/ifupdown |
402 | class ArtfulTestNetworkIPV6ENISource(relbase.artful, TestNetworkIPV6ENISource): |
403 | - __test__ = True |
404 | - |
405 | - @classmethod |
406 | - def test_ip_output(cls): |
407 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1701097", |
408 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
409 | + __test__ = False |
410 | |
411 | === modified file 'tests/vmtests/test_network_ipv6_vlan.py' |
412 | --- tests/vmtests/test_network_ipv6_vlan.py 2017-08-22 14:50:10 +0000 |
413 | +++ tests/vmtests/test_network_ipv6_vlan.py 2017-10-05 21:13:20 +0000 |
414 | @@ -44,12 +44,6 @@ |
415 | class ZestyTestNetworkIPV6Vlan(relbase.zesty, TestNetworkIPV6VlanAbs): |
416 | __test__ = True |
417 | |
418 | - @classmethod |
419 | - def setUpClass(cls): |
420 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="ci-003c6678e", |
421 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
422 | - super().setUpClass() |
423 | - |
424 | |
425 | class ArtfulTestNetworkIPV6Vlan(relbase.artful, TestNetworkIPV6VlanAbs): |
426 | __test__ = True |
427 | |
428 | === modified file 'tests/vmtests/test_network_mtu.py' |
429 | --- tests/vmtests/test_network_mtu.py 2017-08-22 14:50:10 +0000 |
430 | +++ tests/vmtests/test_network_mtu.py 2017-10-05 21:13:20 +0000 |
431 | @@ -3,6 +3,7 @@ |
432 | from .test_network_ipv6 import TestNetworkIPV6Abs |
433 | |
434 | import textwrap |
435 | +import unittest |
436 | |
437 | |
438 | class TestNetworkMtuAbs(TestNetworkIPV6Abs): |
439 | @@ -133,30 +134,25 @@ |
440 | def test_etc_resolvconf(self): |
441 | pass |
442 | |
443 | - @classmethod |
444 | - def test_ip_output(cls): |
445 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1706973", |
446 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
447 | - |
448 | - @classmethod |
449 | - def test_ipv6_mtu_smaller_than_ipv4_v6_iface_first(cls): |
450 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1706973", |
451 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
452 | - |
453 | - @classmethod |
454 | - def test_ipv6_mtu_smaller_than_ipv4_non_default(cls): |
455 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1706973", |
456 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
457 | - |
458 | - @classmethod |
459 | - def test_ipv6_mtu_higher_than_default_no_ipv4_iface_up(cls): |
460 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1706973", |
461 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
462 | - |
463 | - @classmethod |
464 | - def test_ipv6_mtu_higher_than_default_no_ipv4_iface_v6_iface_first(cls): |
465 | - cls.skip_by_date(cls.__name__, cls.release, bugnum="1706973", |
466 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
467 | + @unittest.skip("Sysconfig does not support mixed v4/v6 MTU: LP:#1706973") |
468 | + def test_ip_output(self): |
469 | + pass |
470 | + |
471 | + @unittest.skip("Sysconfig does not support mixed v4/v6 MTU: LP:#1706973") |
472 | + def test_ipv6_mtu_smaller_than_ipv4_v6_iface_first(self): |
473 | + pass |
474 | + |
475 | + @unittest.skip("Sysconfig does not support mixed v4/v6 MTU: LP:#1706973") |
476 | + def test_ipv6_mtu_smaller_than_ipv4_non_default(self): |
477 | + pass |
478 | + |
479 | + @unittest.skip("Sysconfig does not support mixed v4/v6 MTU: LP:#1706973") |
480 | + def test_ipv6_mtu_higher_than_default_no_ipv4_iface_up(self): |
481 | + pass |
482 | + |
483 | + @unittest.skip("Sysconfig does not support mixed v4/v6 MTU: LP:#1706973") |
484 | + def test_ipv6_mtu_higher_than_default_no_ipv4_iface_v6_iface_first(self): |
485 | + pass |
486 | |
487 | |
488 | class PreciseHWETTestNetworkMtu(relbase.precise_hwe_t, TestNetworkMtuAbs): |
489 | @@ -204,6 +200,12 @@ |
490 | class ArtfulTestNetworkMtu(relbase.artful, TestNetworkMtuAbs): |
491 | __test__ = True |
492 | |
493 | + @classmethod |
494 | + def setUpClass(cls): |
495 | + cls.skip_by_date(cls.__name__, cls.release, "1671951", |
496 | + fixby=(2017, 10, 20), removeby=(2018, 1, 23)) |
497 | + super().setUpClass() |
498 | + |
499 | |
500 | class Centos66TestNetworkMtu(centos_relbase.centos66fromxenial, |
501 | CentosTestNetworkMtuAbs): |
502 | |
503 | === modified file 'tests/vmtests/test_network_vlan.py' |
504 | --- tests/vmtests/test_network_vlan.py 2017-08-22 14:50:10 +0000 |
505 | +++ tests/vmtests/test_network_vlan.py 2017-10-05 21:13:20 +0000 |
506 | @@ -12,7 +12,6 @@ |
507 | collect_scripts = TestNetworkBaseTestsAbs.collect_scripts + [ |
508 | textwrap.dedent(""" |
509 | cd OUTPUT_COLLECT_D |
510 | - dpkg-query -W -f '${Status}' vlan > vlan_installed |
511 | ip -d link show interface1.2667 |tee ip_link_show_interface1.2667 |
512 | ip -d link show interface1.2668 |tee ip_link_show_interface1.2668 |
513 | ip -d link show interface1.2669 |tee ip_link_show_interface1.2669 |
514 | @@ -31,15 +30,12 @@ |
515 | def test_output_files_exist_vlan(self): |
516 | link_files = ["ip_link_show_%s" % vlan['name'] |
517 | for vlan in self.get_vlans()] |
518 | - self.output_files_exist(["vlan_installed"] + link_files) |
519 | + self.output_files_exist(link_files) |
520 | |
521 | def test_vlan_installed(self): |
522 | - status = self.load_collect_file("vlan_installed").strip() |
523 | - logger.debug('vlan installed?: %s', status) |
524 | - self.assertEqual('install ok installed', status) |
525 | + self.assertIn("vlan", self.debian_packages, "vlan deb not installed") |
526 | |
527 | def test_vlan_enabled(self): |
528 | - |
529 | # we must have at least one |
530 | self.assertGreaterEqual(len(self.get_vlans()), 1) |
531 | |
532 | @@ -103,12 +99,6 @@ |
533 | class ZestyTestNetworkVlan(relbase.zesty, TestNetworkVlanAbs): |
534 | __test__ = True |
535 | |
536 | - @classmethod |
537 | - def setUpClass(cls): |
538 | - cls.skip_by_date(cls.__name__, cls.release, "ci-003c6678e", |
539 | - fixby=(2017, 9, 18), removeby=(2017, 9, 27)) |
540 | - super().setUpClass() |
541 | - |
542 | |
543 | class ArtfulTestNetworkVlan(relbase.artful, TestNetworkVlanAbs): |
544 | __test__ = True |
PASSED: Continuous integration, rev:532 /jenkins. ubuntu. com/server/ job/curtin- ci/644/ /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-amd64/ 644 /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-arm64/ 644 /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-ppc64el/ 644 /jenkins. ubuntu. com/server/ job/curtin- ci/nodes= metal-s390x/ 644
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild: /jenkins. ubuntu. com/server/ job/curtin- ci/644/ rebuild
https:/