Merge lp:~ltrager/maas/fix_websocket_tests into lp:~maas-committers/maas/trunk

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: no longer in the source branch.
Merged at revision: 4672
Proposed branch: lp:~ltrager/maas/fix_websocket_tests
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 228 lines (+47/-35)
2 files modified
src/maasserver/tests/test_webapp.py (+3/-4)
src/maasserver/websockets/tests/test_websockets.py (+44/-31)
To merge this branch: bzr merge lp:~ltrager/maas/fix_websocket_tests
Reviewer Review Type Date Requested Status
Mike Pontillo (community) Approve
Review via email: mp+286851@code.launchpad.net

Commit message

Stop using deprecated features on the DummyRequest object for twisted 16.

Description of the change

MAAS was using deprecated features from the DummyRequest object during testing. These deprecated features have been removed from Twisted 16 which was just pushed into main on Xenial. I've updated our tests to use the new way which allows our unit tests to pass. I looked around the codebase and it appears that we did convert Requests to the new method awhile back so only the unit tests had to be fixed.

Upstream bugs on removing deprecated features
http://twistedmatrix.com/trac/ticket/8140
http://twistedmatrix.com/trac/ticket/8136

To post a comment you must log in.
Revision history for this message
Mike Pontillo (mpontillo) wrote :

Looks good; I can verify that this work with the latest Twisted.

Please note that after this branch lands, python3-twisted versions less than 16.0 will no longer work. (I tested it.) If you have Twisted 15.5, you'll get the following errors when running the tests in maasserver.websockets.tests:

https://paste.ubuntu.com/15175321/

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/maasserver/tests/test_webapp.py'
2--- src/maasserver/tests/test_webapp.py 2016-02-10 20:24:35 +0000
3+++ src/maasserver/tests/test_webapp.py 2016-02-23 00:07:20 +0000
4@@ -26,7 +26,6 @@
5 from maastesting.twisted import TwistedLoggerFixture
6 from mock import sentinel
7 from testtools.matchers import (
8- ContainsDict,
9 Equals,
10 Is,
11 IsInstance,
12@@ -130,9 +129,9 @@
13 self.expectThat(
14 page.find(".//p").text_content(),
15 Equals("Please try again in a few seconds."))
16- self.expectThat(
17- request.outgoingHeaders,
18- ContainsDict({b"retry-after": Equals(b"5")}))
19+ self.assertEqual(
20+ ['5'],
21+ request.responseHeaders.getRawHeaders("retry-after"))
22
23 def test__startService_starts_application(self):
24 service = self.make_webapp()
25
26=== modified file 'src/maasserver/websockets/tests/test_websockets.py'
27--- src/maasserver/websockets/tests/test_websockets.py 2015-11-29 23:59:47 +0000
28+++ src/maasserver/websockets/tests/test_websockets.py 2016-02-23 00:07:20 +0000
29@@ -551,10 +551,16 @@
30 """
31 result = self.resource.render(request)
32 self.assertEqual(b"", result)
33- self.assertEqual({}, request.outgoingHeaders)
34+ self.assertEqual(
35+ {}, {name: value for name, value in
36+ request.responseHeaders.getAllRawHeaders()})
37 self.assertEqual([], request.written)
38 self.assertEqual(400, request.responseCode)
39
40+ def update_headers(self, request, headers):
41+ for name, value in headers.items():
42+ request.requestHeaders.addRawHeader(name=name, value=value)
43+
44 def test_getChildWithDefault(self):
45 """
46 L{WebSocketsResource.getChildWithDefault} raises a C{RuntimeError} when
47@@ -589,7 +595,7 @@
48 transport = StringTransportWithDisconnection()
49 transport.protocol = Protocol()
50 request.transport = transport
51- request.headers.update({
52+ self.update_headers(request, headers={
53 b"upgrade": b"Websocket",
54 b"connection": b"Upgrade",
55 b"sec-websocket-key": b"secure",
56@@ -597,10 +603,11 @@
57 result = self.resource.render(request)
58 self.assertEqual(NOT_DONE_YET, result)
59 self.assertEqual(
60- {b"connection": b"Upgrade",
61- b"upgrade": b"WebSocket",
62- b"sec-websocket-accept": b"oYBv54i42V5dw6KnZqOFroecUTc="},
63- request.outgoingHeaders)
64+ {b"Connection": [b"Upgrade"],
65+ b"Upgrade": [b"WebSocket"],
66+ b"Sec-Websocket-Accept": [b"oYBv54i42V5dw6KnZqOFroecUTc="]},
67+ {name: value
68+ for name, value in request.responseHeaders.getAllRawHeaders()})
69 self.assertEqual([b""], request.written)
70 self.assertEqual(101, request.responseCode)
71 self.assertIdentical(None, request.transport)
72@@ -629,19 +636,20 @@
73 transport = StringTransportWithDisconnection()
74 transport.protocol = Protocol()
75 request.transport = transport
76- request.headers.update({
77+ self.update_headers(request, headers={
78 b"upgrade": b"Websocket",
79 b"connection": b"Upgrade",
80 b"sec-websocket-key": b"secure",
81 b"sec-websocket-version": b"13"})
82 result = self.resource.render(request)
83 self.assertEqual(NOT_DONE_YET, result)
84- self.assertEqual(
85- {b"connection": b"Upgrade",
86- b"upgrade": b"WebSocket",
87- b"sec-websocket-protocol": b"bar",
88- b"sec-websocket-accept": b"oYBv54i42V5dw6KnZqOFroecUTc="},
89- request.outgoingHeaders)
90+ self.assertEqual({
91+ b"Connection": [b"Upgrade"],
92+ b"Upgrade": [b"WebSocket"],
93+ b"Sec-Websocket-Protocol": [b"bar"],
94+ b"Sec-Websocket-Accept": [b"oYBv54i42V5dw6KnZqOFroecUTc="]},
95+ {name: value for name, value in
96+ request.responseHeaders.getAllRawHeaders()})
97 self.assertEqual([b""], request.written)
98 self.assertEqual(101, request.responseCode)
99
100@@ -651,7 +659,7 @@
101 L{WebSocketsResource} returns a failed request.
102 """
103 request = DummyRequest(b"/")
104- request.headers.update({
105+ self.update_headers(request, headers={
106 b"upgrade": b"wrong",
107 b"connection": b"Upgrade",
108 b"sec-websocket-key": b"secure",
109@@ -664,7 +672,7 @@
110 failed request.
111 """
112 request = DummyRequest(b"/")
113- request.headers.update({
114+ self.update_headers(request, headers={
115 b"connection": b"Upgrade",
116 b"sec-websocket-key": b"secure",
117 b"sec-websocket-version": b"13"})
118@@ -677,7 +685,7 @@
119 """
120 request = DummyRequest(b"/")
121 request.method = b"POST"
122- request.headers.update({
123+ self.update_headers(request, headers={
124 b"upgrade": b"Websocket",
125 b"connection": b"Upgrade",
126 b"sec-websocket-key": b"secure",
127@@ -690,7 +698,7 @@
128 L{WebSocketsResource} returns a failed request.
129 """
130 request = DummyRequest(b"/")
131- request.headers.update({
132+ self.update_headers(request, headers={
133 b"upgrade": b"Websocket",
134 b"connection": b"Wrong",
135 b"sec-websocket-key": b"secure",
136@@ -703,7 +711,7 @@
137 failed request.
138 """
139 request = DummyRequest(b"/")
140- request.headers.update({
141+ self.update_headers(request, headers={
142 b"upgrade": b"Websocket",
143 b"sec-websocket-key": b"secure",
144 b"sec-websocket-version": b"13"})
145@@ -715,7 +723,7 @@
146 returns a failed request.
147 """
148 request = DummyRequest(b"/")
149- request.headers.update({
150+ self.update_headers(request, headers={
151 b"upgrade": b"Websocket",
152 b"connection": b"Upgrade",
153 b"sec-websocket-version": b"13"})
154@@ -727,15 +735,17 @@
155 L{WebSocketsResource} returns a failed request.
156 """
157 request = DummyRequest(b"/")
158- request.headers.update({
159+
160+ self.update_headers(request, headers={
161 b"upgrade": b"Websocket",
162 b"connection": b"Upgrade",
163 b"sec-websocket-key": b"secure",
164 b"sec-websocket-version": b"11"})
165 result = self.resource.render(request)
166 self.assertEqual(b"", result)
167- self.assertEqual({b"sec-websocket-version": b"13"},
168- request.outgoingHeaders)
169+ self.assertEqual(
170+ ['13'],
171+ request.responseHeaders.getRawHeaders("sec-websocket-version"))
172 self.assertEqual([], request.written)
173 self.assertEqual(400, request.responseCode)
174
175@@ -748,14 +758,16 @@
176 request.requestHeaders = Headers()
177 request.transport = StringTransportWithDisconnection()
178 self.echoProtocol = None
179- request.headers.update({
180+ self.update_headers(request, headers={
181 b"upgrade": b"Websocket",
182 b"connection": b"Upgrade",
183 b"sec-websocket-key": b"secure",
184 b"sec-websocket-version": b"13"})
185 result = self.resource.render(request)
186 self.assertEqual(b"", result)
187- self.assertEqual({}, request.outgoingHeaders)
188+ self.assertEqual(
189+ {}, {name: value for name, value in
190+ request.responseHeaders.getAllRawHeaders()})
191 self.assertEqual([], request.written)
192 self.assertEqual(502, request.responseCode)
193
194@@ -770,18 +782,19 @@
195 secureProtocol = TLSMemoryBIOProtocol(Factory(), Protocol())
196 transport.protocol = secureProtocol
197 request.transport = transport
198- request.headers.update({
199+ self.update_headers(request, headers={
200 b"upgrade": b"Websocket",
201 b"connection": b"Upgrade",
202 b"sec-websocket-key": b"secure",
203 b"sec-websocket-version": b"13"})
204 result = self.resource.render(request)
205 self.assertEqual(NOT_DONE_YET, result)
206- self.assertEqual(
207- {b"connection": b"Upgrade",
208- b"upgrade": b"WebSocket",
209- b"sec-websocket-accept": b"oYBv54i42V5dw6KnZqOFroecUTc="},
210- request.outgoingHeaders)
211+ self.assertEqual({
212+ b"Connection": [b"Upgrade"],
213+ b"Upgrade": [b"WebSocket"],
214+ b"Sec-Websocket-Accept": [b"oYBv54i42V5dw6KnZqOFroecUTc="]},
215+ {name: value for name, value in
216+ request.responseHeaders.getAllRawHeaders()})
217 self.assertEqual([b""], request.written)
218 self.assertEqual(101, request.responseCode)
219 self.assertIdentical(None, request.transport)
220@@ -840,7 +853,7 @@
221 transport = StringTransportWithDisconnection()
222 transport.protocol = Protocol()
223 request.transport = transport
224- request.headers.update({
225+ self.update_headers(request, headers={
226 b"upgrade": b"Websocket",
227 b"connection": b"Upgrade",
228 b"sec-websocket-key": b"secure",