Skip to content

Commit f284ab9

Browse files
committed
beat into shape - python 2 compat and cleaner test abstractions
1 parent d082d9d commit f284ab9

File tree

3 files changed

+52
-17
lines changed

3 files changed

+52
-17
lines changed

mig/lib/coreapi/__init__.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
import codecs
22
import json
3-
from urllib.request import Request, urlopen
4-
from urllib.error import HTTPError
3+
4+
from tests.support._env import PY2
5+
6+
if PY2:
7+
from urllib2 import HTTPError, Request, urlopen
8+
from urllib import urlencode
9+
else:
10+
from urllib.error import HTTPError
11+
from urllib.parse import urlencode
12+
from urllib.request import urlopen, Request
513

614
from mig.lib.coresvc.payloads import PAYLOAD_POST_USER
715

@@ -78,7 +86,7 @@ def _issue_POST(self, request_path, request_data=None, request_json=None, respon
7886
data = response.read()
7987
except HTTPError as httpexc:
8088
status = httpexc.code
81-
data = httpexc.file.read()
89+
data = httpexc.fp.read()
8290

8391
content = attempt_to_decode_response_data(data, response_encoding)
8492
return (status, content)

tests/support/serversupp.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ def __init__(self, ServerClass, *args, **kwargs):
4747
self._thread = None
4848
self._wrapped = None
4949

50+
def __getattr__(self, attr):
51+
assert self._wrapped, "wrapped instance was not created"
52+
return getattr(self._wrapped, attr)
53+
5054
def run(self):
5155
"""Mimic the same method from the standard thread API"""
5256
server_args, server_kwargs = self._arguments
@@ -76,14 +80,16 @@ def start_wait_until_ready(self):
7680
def stop(self):
7781
"""Mimic the same method from the standard thread API"""
7882
self.stop_server()
79-
self._wrapped = None
80-
self._thread.join()
81-
self._thread = None
83+
if self._thread:
84+
self._thread.join()
85+
self._thread = None
8286

8387
def stop_server(self):
8488
"""Stop server thread"""
85-
self._wrapped.shutdown()
86-
self._wrapped.server_close()
89+
if self._wrapped:
90+
self._wrapped.shutdown()
91+
self._wrapped.server_close()
92+
self._wrapped = None
8793

8894

8995
def make_wrapped_server(ServerClass, *args, **kwargs):

tests/test_mig_lib_coreapi.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,50 @@
88

99
class TestRequestHandler(BaseHTTPRequestHandler):
1010
def do_POST(self):
11-
self.send_response(418)
12-
self.end_headers()
13-
self.wfile.write(b'')
11+
test_server = self.server
12+
13+
programmed_error = test_server._programmed_error
14+
if programmed_error:
15+
status, content = programmed_error
16+
self.send_response(status)
17+
self.end_headers()
18+
self.wfile.write(content)
1419

1520

1621
class TestHTTPServer(HTTPServer):
1722
def __init__(self, addr, **kwargs):
23+
self._programmed_error = None
1824
self._on_start = kwargs.pop('on_start', lambda _: None)
1925

2026
HTTPServer.__init__(self, addr, TestRequestHandler, **kwargs)
2127

28+
def clear_programmed(self):
29+
self._programmed_error = None
30+
31+
def set_programmed_error(self, status, content):
32+
assert isinstance(content, bytes)
33+
self._programmed_error = (status, content)
34+
2235
def server_activate(self):
2336
HTTPServer.server_activate(self)
2437
self._on_start(self)
2538

2639

27-
class TestBooleans(MigTestCase):
28-
def test_true(self):
29-
server_addr = ('localhost', 4567)
30-
server = make_wrapped_server(TestHTTPServer, server_addr)
31-
server.start_wait_until_ready()
40+
class TestMigLibCoreapi(MigTestCase):
41+
def before_each(self):
42+
self.server_addr = ('localhost', 4567)
43+
self.server = make_wrapped_server(TestHTTPServer, self.server_addr)
44+
45+
def after_each(self):
46+
server = getattr(self, 'server', None)
47+
setattr(self, 'server', None)
48+
if server:
49+
server.stop()
3250

33-
instance = CoreApiClient("http://%s:%s/" % server_addr)
51+
def test_true(self):
52+
self.server.start_wait_until_ready()
53+
self.server.set_programmed_error(418, b'tea; earl grey; hot')
54+
instance = CoreApiClient("http://%s:%s/" % self.server_addr)
3455

3556
status, content = instance.createUser({
3657
'full_name': "Test User",

0 commit comments

Comments
 (0)