diff --git a/setup.py b/setup.py index 4acbd14..07dcc02 100755 --- a/setup.py +++ b/setup.py @@ -51,7 +51,7 @@ except: setuptools.setup( name='warcprox', - version='2.1b1.dev68', + version='2.1b1.dev69', description='WARC writing MITM HTTP/S proxy', url='https://github.com/internetarchive/warcprox', author='Noah Levitt', diff --git a/tests/test_warcprox.py b/tests/test_warcprox.py index 547e579..546ab9b 100755 --- a/tests/test_warcprox.py +++ b/tests/test_warcprox.py @@ -1356,6 +1356,36 @@ def test_controller_with_defaults(): assert not controller.warc_writer_thread.writer_pool.default_warc_writer.record_builder.base32 assert controller.warc_writer_thread.writer_pool.default_warc_writer.record_builder.digest_algorithm == 'sha1' +def test_choose_a_port_for_me(service_registry): + options = warcprox.Options() + options.port = 0 + controller = warcprox.controller.WarcproxController( + service_registry=service_registry, options=options) + assert controller.proxy.server_port != 0 + assert controller.proxy.server_port != 8000 + assert controller.proxy.server_address == ( + '127.0.0.1', controller.proxy.server_port) + + th = threading.Thread(target=controller.run_until_shutdown) + th.start() + + # check that service registry entry lists the correct port + start = time.time() + ports = [] + while time.time() - start < 30: + svcs = service_registry.available_services('warcprox') + ports = [svc['port'] for svc in svcs] + if controller.proxy.server_port in ports: + break + assert controller.proxy.server_port in ports + + # check that the status api lists the correct port + url = 'http://localhost:%s/status' % controller.proxy.server_port + response = requests.get(url) + assert response.status_code == 200 + status = json.loads(response.content.decode('ascii')) + assert status['port'] == controller.proxy.server_port + if __name__ == '__main__': pytest.main() diff --git a/warcprox/controller.py b/warcprox/controller.py index 3ed2b8c..2492c02 100644 --- a/warcprox/controller.py +++ b/warcprox/controller.py @@ -143,7 +143,7 @@ class WarcproxController(object): 'role': 'warcprox', 'version': warcprox.__version__, 'heartbeat_interval': self.HEARTBEAT_INTERVAL, - 'port': self.options.port, + 'port': self.proxy.server_port, } status_info['load'] = 1.0 * self.proxy.recorded_url_q.qsize() / ( self.proxy.recorded_url_q.maxsize or 100)