Merge ~bjornt/maas:bug-2066276-3.3 into maas:3.3

Proposed by Björn Tillenius
Status: Merged
Approved by: Björn Tillenius
Approved revision: 1fb5af66797f0a4b2ad516b9b781b48d6458f4c9
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~bjornt/maas:bug-2066276-3.3
Merge into: maas:3.3
Diff against target: 110 lines (+28/-6)
4 files modified
src/maasserver/forms/tests/test_bootresource.py (+1/-0)
src/provisioningserver/utils/network.py (+9/-1)
src/provisioningserver/utils/tests/test_network.py (+13/-3)
utilities/run-py-tests-ci (+5/-2)
Reviewer Review Type Date Requested Status
Björn Tillenius Approve
Review via email: mp+466424@code.launchpad.net

Commit message

Bug #2066276: ipv6 test failures: AttributeError: 'RRHeader' object has no attribute '_address'

fix: parse DNS results correctly

(cherry picked from commit 4f6ef7d4e2feab5445b39330949ed5a13d10d526)
(cherry picked from commit 557d3f62aa3399150b84cfc95949cd3416c6ce04)

Limit test processes in parallel to 4 by default.
It's possible to change the number of parallel processes by passing
in the MAAS_MAX_TEST_PROCESSES environment variable. For example:
MAAS_MAX_TEST_PROCESSES=8 utilities/run-py-tests-ci
This aims to reduce the number of intermittent failures in our CI.

(cherry picked from commit b2df4b603143d36e95b7e0d8e6b442fd2ac7c8ed)

Apply intermittent test failure fix from e4d49a5503.

(cherry picked from commit 1c07a56167bebc3292de6d5255374d05ed156e67)

To post a comment you must log in.
Revision history for this message
Björn Tillenius (bjornt) wrote :

Self-approve backport.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/forms/tests/test_bootresource.py b/src/maasserver/forms/tests/test_bootresource.py
2index 4a3c51e..1cb5d74 100644
3--- a/src/maasserver/forms/tests/test_bootresource.py
4+++ b/src/maasserver/forms/tests/test_bootresource.py
5@@ -134,6 +134,7 @@ class TestBootResourceForm(MAASServerTestCase):
6 def test_prevents_reversed_osystem_from_driver(self):
7 reserved_name = factory.make_name("name")
8 OperatingSystemRegistry.register_item(reserved_name, CustomOS())
9+ self.addCleanup(OperatingSystemRegistry.unregister_item, reserved_name)
10 upload_type, filetype = self.pick_filetype()
11 size = random.randint(1024, 2048)
12 content = factory.make_string(size).encode("utf-8")
13diff --git a/src/provisioningserver/utils/network.py b/src/provisioningserver/utils/network.py
14index 1ea4ec0..6124f68 100644
15--- a/src/provisioningserver/utils/network.py
16+++ b/src/provisioningserver/utils/network.py
17@@ -29,6 +29,7 @@ import netifaces
18 from twisted.internet.defer import Deferred, inlineCallbacks
19 from twisted.internet.interfaces import IResolver
20 from twisted.names.client import getResolver
21+from twisted.names.dns import AAAA
22 from twisted.names.error import (
23 AuthoritativeDomainError,
24 DNSQueryTimeoutError,
25@@ -772,8 +773,15 @@ def safe_getaddrinfo(
26 resolver = getResolver()
27 answers = yield resolver.lookupIPV6Address(hostname)
28 return [
29- (AF_INET6, sock_type, proto, "", (ans._address, port, 0, 0))
30+ (
31+ AF_INET6,
32+ sock_type,
33+ proto,
34+ "",
35+ (ans.payload._address, port, 0, 0),
36+ )
37 for ans in answers[0]
38+ if ans.type == AAAA
39 ]
40
41 try:
42diff --git a/src/provisioningserver/utils/tests/test_network.py b/src/provisioningserver/utils/tests/test_network.py
43index 751881b..e0635e3 100644
44--- a/src/provisioningserver/utils/tests/test_network.py
45+++ b/src/provisioningserver/utils/tests/test_network.py
46@@ -24,7 +24,7 @@ from testtools.matchers import (
47 StartsWith,
48 )
49 from twisted.internet.defer import inlineCallbacks, succeed
50-from twisted.names.dns import Record_AAAA
51+from twisted.names.dns import AAAA, Record_AAAA, RRHeader
52 from twisted.names.error import (
53 AuthoritativeDomainError,
54 DNSQueryTimeoutError,
55@@ -2569,7 +2569,11 @@ class TestSafeGetaddrinfo(MAASTestCase):
56 mock_resolver = Mock()
57 mock_resolver.lookupIPV6Address = lambda _: succeed(
58 (
59- [Record_AAAA(address="::")],
60+ [
61+ RRHeader(
62+ name="::", type=AAAA, payload=Record_AAAA(address="::")
63+ )
64+ ],
65 [],
66 [],
67 )
68@@ -2586,7 +2590,13 @@ class TestSafeGetaddrinfo(MAASTestCase):
69 mock_resolver = Mock()
70 mock_resolver.lookupIPV6Address = lambda _: succeed(
71 (
72- [Record_AAAA(address="::1")],
73+ [
74+ RRHeader(
75+ name="example.com",
76+ type=AAAA,
77+ payload=Record_AAAA(address="::1"),
78+ )
79+ ],
80 [],
81 [],
82 )
83diff --git a/utilities/run-py-tests-ci b/utilities/run-py-tests-ci
84index 5113d55..c8a8ff5 100755
85--- a/utilities/run-py-tests-ci
86+++ b/utilities/run-py-tests-ci
87@@ -7,18 +7,21 @@
88
89 set -o pipefail
90
91+MAX_PROCESSES=${MAAS_MAX_TEST_PROCESSES:-4}
92+
93 MAAS_RAND_SEED="$(od -vAn -N8 -tx8 < /dev/urandom | tr -d ' ')"
94 PYTHONHASHSEED="$(shuf -i 0-4294967295 -n 1)"
95 export MAAS_RAND_SEED PYTHONHASHSEED
96
97 echo "MAAS_RAND_SEED=${MAAS_RAND_SEED}"
98 echo "PYTHONHASHSEED=${PYTHONHASHSEED}"
99+echo "MAX_PROCESSES=${MAX_PROCESSES}"
100
101-bin/test.parallel --emit-subunit | \
102+bin/test.parallel --emit-subunit --subprocesses="${MAX_PROCESSES}" | \
103 bin/subunit-1to2 | \
104 bin/subunit2junitxml --no-passthrough -f -o junit.xml | \
105 bin/subunit2pyunit --no-passthrough
106 res1=$?
107-bin/pytest -n auto --maxprocesses=6 --dist=loadscope --junit-xml=junit-pytest.xml
108+bin/pytest -n auto --maxprocesses="${MAX_PROCESSES}" --dist=loadscope --junit-xml=junit-pytest.xml
109 res2=$?
110 exit $((res1 + res2))

Subscribers

People subscribed via source and target branches