|
| 1 | +import http.server |
1 | 2 | import os
|
| 3 | +import threading |
2 | 4 | import unittest
|
3 |
| -import httpretty |
4 | 5 |
|
5 | 6 | from unittest.mock import patch
|
6 | 7 |
|
|
11 | 12 | )
|
12 | 13 |
|
13 | 14 |
|
14 |
| -def exceptionCallback(request, uri, headers): |
15 |
| - raise Exception("oopsy!") |
| 15 | +class MockServer(threading.Thread): |
| 16 | + def __init__(self): |
| 17 | + super().__init__() |
| 18 | + self.daemon = True |
| 19 | + self.raises = False |
| 20 | + self.called = False |
| 21 | + |
| 22 | + class handler(http.server.BaseHTTPRequestHandler): |
| 23 | + def do_POST(sf): |
| 24 | + self.called = True |
| 25 | + sf.send_response(500 if self.raises else 200) |
| 26 | + sf.end_headers() |
| 27 | + |
| 28 | + do_GET = do_POST |
| 29 | + |
| 30 | + self.server = http.server.HTTPServer(("127.0.0.1", 8124), handler) |
| 31 | + |
| 32 | + def run(self): |
| 33 | + self.server.serve_forever() |
| 34 | + |
| 35 | + def stop(self): |
| 36 | + self.server.shutdown() |
| 37 | + self.server.server_close() |
| 38 | + self.join(timeout=0) |
16 | 39 |
|
17 | 40 |
|
18 | 41 | class TestLambdaExtension(unittest.TestCase):
|
| 42 | + def setUp(self): |
| 43 | + self.server = MockServer() |
| 44 | + self.server.start() |
| 45 | + |
| 46 | + def tearDown(self): |
| 47 | + self.server.stop() |
| 48 | + |
19 | 49 | @patch("datadog_lambda.extension.EXTENSION_PATH", os.path.abspath(__file__))
|
20 | 50 | def test_is_extension_running_true(self):
|
21 |
| - httpretty.enable() |
22 |
| - last_request = httpretty.last_request() |
23 |
| - httpretty.register_uri(httpretty.GET, "http://127.0.0.1:8124/lambda/hello") |
24 |
| - assert is_extension_running() == True |
25 |
| - assert httpretty.last_request() != last_request |
26 |
| - httpretty.disable() |
| 51 | + assert is_extension_running() |
| 52 | + assert self.server.called |
27 | 53 |
|
28 | 54 | def test_is_extension_running_file_not_found(self):
|
29 |
| - httpretty.enable() |
30 |
| - last_request = httpretty.last_request() |
31 |
| - httpretty.register_uri(httpretty.GET, "http://127.0.0.1:8124/lambda/hello") |
32 |
| - assert is_extension_running() == False |
33 |
| - assert httpretty.last_request() == last_request |
34 |
| - httpretty.disable() |
| 55 | + assert not is_extension_running() |
| 56 | + assert not self.server.called |
35 | 57 |
|
36 | 58 | @patch("datadog_lambda.extension.EXTENSION_PATH", os.path.abspath(__file__))
|
37 | 59 | def test_is_extension_running_http_failure(self):
|
38 |
| - httpretty.enable() |
39 |
| - last_request = httpretty.last_request() |
40 |
| - httpretty.register_uri( |
41 |
| - httpretty.GET, |
42 |
| - "http://127.0.0.1:8124/lambda/hello", |
43 |
| - status=503, |
44 |
| - body=exceptionCallback, |
45 |
| - ) |
46 |
| - assert is_extension_running() == False |
47 |
| - assert httpretty.last_request() != last_request |
48 |
| - httpretty.disable() |
| 60 | + self.server.raises = True |
| 61 | + assert not is_extension_running() |
| 62 | + assert self.server.called |
49 | 63 |
|
50 | 64 | @patch("datadog_lambda.extension.EXTENSION_PATH", os.path.abspath(__file__))
|
51 | 65 | def test_flush_ok(self):
|
52 |
| - httpretty.enable() |
53 |
| - last_request = httpretty.last_request() |
54 |
| - httpretty.register_uri(httpretty.POST, "http://127.0.0.1:8124/lambda/flush") |
55 |
| - assert flush_extension() == True |
56 |
| - assert httpretty.last_request() != last_request |
57 |
| - httpretty.disable() |
| 66 | + assert flush_extension() |
| 67 | + assert self.server.called |
58 | 68 |
|
59 | 69 | @patch("datadog_lambda.extension.EXTENSION_PATH", os.path.abspath(__file__))
|
60 | 70 | def test_flush_not_ok(self):
|
61 |
| - httpretty.enable() |
62 |
| - last_request = httpretty.last_request() |
63 |
| - httpretty.register_uri( |
64 |
| - httpretty.POST, |
65 |
| - "http://127.0.0.1:8124/lambda/flush", |
66 |
| - status=503, |
67 |
| - body=exceptionCallback, |
68 |
| - ) |
69 |
| - assert flush_extension() == False |
70 |
| - assert httpretty.last_request() != last_request |
71 |
| - httpretty.disable() |
| 71 | + self.server.raises = True |
| 72 | + assert not flush_extension() |
| 73 | + assert self.server.called |
0 commit comments