~didrocks/unity/altf10

« back to all changes in this revision

Viewing changes to grackle/tests/test_client.py

  • Committer: Aaron Bentley
  • Date: 2012-01-11 11:36:08 UTC
  • Revision ID: aaron@canonical.com-20120111113608-fgygml5scw5orr0j
Use pipe to ensure we only use HTTP once it's running.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
    )
16
16
 
17
17
 
18
 
class Forked:
 
18
class ForkedFake:
19
19
 
20
 
    def __init__(self, func_or_method, *args):
21
 
        self.func_or_method = func_or_method
 
20
    def __init__(self, port, messages=None):
22
21
        self.pid = None
23
 
        self.args = args
 
22
        self.port = port
 
23
        self.messages = messages
 
24
        self.read_end, self.write_end = os.pipe()
 
25
 
 
26
    def is_ready(self):
 
27
        os.write(self.write_end, 'asdf')
24
28
 
25
29
    def __enter__(self):
26
30
        pid = os.fork()
27
 
        if pid != 0:
28
 
            self.pid = pid
29
 
            return
30
 
        self.func_or_method(*self.args)
 
31
        if pid == 0:
 
32
            self.start_server()
 
33
        self.pid = pid
 
34
        os.read(self.read_end, 1)
 
35
        return
31
36
 
 
37
    def start_server(self):
 
38
        service = HTTPServer(('', self.port), FakeGrackleRequestHandler)
 
39
        service.messages = self.messages
 
40
        self.is_ready()
 
41
        service.serve_forever()
32
42
 
33
43
    def __exit__(self, exc_type, exc_val, traceback):
34
44
        os.kill(self.pid, SIGKILL)
46
56
            self.send_error(httplib.BAD_REQUEST)
47
57
 
48
58
 
49
 
def run_service(port, messages):
50
 
    service = HTTPServer(('', port), FakeGrackleRequestHandler)
51
 
    service.messages = messages
52
 
    service.serve_forever()
53
 
 
54
 
 
55
59
def fake_grackle_service(client, messages=None):
56
60
    if messages is None:
57
61
        messages = {}
58
 
    return Forked(run_service, client.port, messages)
 
62
    return ForkedFake(client.port, messages)
59
63
 
60
64
 
61
65
class TestPutMessage(TestCase):
62
66
 
63
67
    def test_put_message(self):
64
 
        client = GrackleClient('localhost', 8435)
 
68
        client = GrackleClient('localhost', 8436)
65
69
        with fake_grackle_service(client):
66
 
            import time; time.sleep(0.5)
67
70
            client.put_message('arch1', 'asdf', StringIO('This is a message'))
68
71
            with ExpectedException(Exception, 'wtf'):
69
72
                client.put_message('arch1', 'asdf',