7
7
from signal import SIGKILL
9
8
from StringIO import StringIO
10
9
from unittest import TestCase
11
from urlparse import urlparse
13
11
from testtools import ExpectedException
22
def __init__(self, port, messages=None):
20
def __init__(self, func_or_method, *args):
21
self.func_or_method = func_or_method
25
self.messages = messages
26
self.read_end, self.write_end = os.pipe()
29
os.write(self.write_end, 'asdf')
31
25
def __enter__(self):
36
os.read(self.read_end, 1)
30
self.func_or_method(*self.args)
39
def start_server(self):
40
service = HTTPServer(('', self.port), FakeGrackleRequestHandler)
41
service.messages = self.messages
43
service.serve_forever()
45
33
def __exit__(self, exc_type, exc_val, traceback):
46
34
os.kill(self.pid, SIGKILL)
58
46
self.send_error(httplib.BAD_REQUEST)
61
scheme, netloc, path, params, query, fragments = urlparse(self.path)
62
archive = os.path.split(path)[1]
63
self.send_response(httplib.OK)
65
self.wfile.write(simplejson.dumps(self.server.messages[archive]))
68
def fake_grackle_service(client, messages=None):
71
return ForkedFake(client.port, messages)
49
def run_service(port):
50
service = HTTPServer(('', port), FakeGrackleRequestHandler)
51
service.serve_forever()
74
55
class TestPutMessage(TestCase):
76
57
def test_put_message(self):
77
client = GrackleClient('localhost', 8436)
78
with fake_grackle_service(client):
58
client = GrackleClient('localhost', 8435)
59
with Forked(run_service, client.port):
79
60
client.put_message('arch1', 'asdf', StringIO('This is a message'))
80
61
with ExpectedException(Exception, 'wtf'):
81
62
client.put_message('arch1', 'asdf',
82
63
StringIO('This is not a message'))
85
class TestGetMessages(TestCase):
87
def test_get_messages(self):
88
client = GrackleClient('localhost', 8435)
89
with fake_grackle_service(client,
91
[{'message-id': 'foo'},
92
{'message-id': 'bar'}]}):
93
response = client.get_messages('baz', message_ids=['a'])
94
self.assertEqual(['bar', 'foo'], sorted(m['message-id'] for m in