[ https://issues.apache.org/jira/browse/DISPATCH-2323?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17490233#comment-17490233 ]
ASF subversion and git services commented on DISPATCH-2323: ----------------------------------------------------------- Commit d1ae8b218d3cdd7a346d7a5dd0a3afa8ae82d926 in qpid-dispatch's branch refs/heads/main from Jiri Daněk [ https://gitbox.apache.org/repos/asf?p=qpid-dispatch.git;h=d1ae8b2 ] DISPATCH-2323 Simplify test HTTPServer shutdown and fix its leaks > [http1] system_tests_http1_adaptor failure due to Address already in use > issue (second round) > --------------------------------------------------------------------------------------------- > > Key: DISPATCH-2323 > URL: https://issues.apache.org/jira/browse/DISPATCH-2323 > Project: Qpid Dispatch > Issue Type: Bug > Components: Protocol Adaptors > Affects Versions: 1.15.0 > Reporter: Jiri Daněk > Assignee: Jiri Daněk > Priority: Major > Fix For: 1.17.0 > > > https://github.com/apache/qpid-dispatch/runs/4993651356?check_suite_focus=true#step:27:1904 > {noformat} > 36/37 Test #70: system_tests_http1_adaptor ........................***Failed > 351.39 sec > ============================= test session starts > ============================== > platform linux -- Python 3.6.8, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- > /usr/bin/python3 > cachedir: .pytest_cache > rootdir: /__w/qpid-dispatch/qpid-dispatch/qpid-dispatch/build/tests, > configfile: tox.ini > collecting ... collected 28 items > ::Http1AdaptorManagementTest::test_01_create_delete FAILED > ::Http1AdaptorManagementTest::test_01_delete_active_connector FAILED > ::Http1AdaptorOneRouterTest::test_000_stats PASSED > ::Http1AdaptorOneRouterTest::test_001_get PASSED > ::Http1AdaptorOneRouterTest::test_002_head PASSED > ::Http1AdaptorOneRouterTest::test_003_post PASSED > ::Http1AdaptorOneRouterTest::test_004_put PASSED > ::Http1AdaptorOneRouterTest::test_005_get_10 PASSED > ::Http1AdaptorOneRouterTest::test_006_head_10 PASSED > ::Http1AdaptorOneRouterTest::test_007_post_10 PASSED > ::Http1AdaptorOneRouterTest::test_008_put_10 PASSED > ::Http1AdaptorEdge2EdgeTest::test_01_concurrent_requests ERROR > ::Http1AdaptorEdge2EdgeTest::test_02_credit_replenish ERROR > ::Http1AdaptorEdge2EdgeTest::test_03_server_reconnect ERROR > ::Http1AdaptorEdge2EdgeTest::test_04_server_pining_for_the_fjords ERROR > ::Http1AdaptorEdge2EdgeTest::test_05_large_streaming_msg ERROR > ::Http1AdaptorEdge2EdgeTest::test_1001_client_request_close ERROR > ::Http1AdaptorEdge2EdgeTest::test_1002_client_response_close ERROR > ::Http1AdaptorEdge2EdgeTest::test_2000_curl_get ERROR > ::Http1AdaptorEdge2EdgeTest::test_2001_curl_put ERROR > ::Http1AdaptorEdge2EdgeTest::test_2002_curl_post ERROR > ::Http1AdaptorBadEndpointsTest::test_01_unsolicited_response PASSED > ::Http1AdaptorBadEndpointsTest::test_02_bad_request_message PASSED > ::Http1AdaptorBadEndpointsTest::test_03_bad_response_message PASSED > ::Http1AdaptorBadEndpointsTest::test_04_client_request_close PASSED > ::Http1AdaptorBadEndpointsTest::test_05_client_response_close PASSED > ::Http1AdaptorQ2Standalone::test_01_backpressure_client PASSED > ::Http1AdaptorQ2Standalone::test_02_backpressure_server PASSED > ==================================== ERRORS > ==================================== > ___ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_01_concurrent_requests > ____ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > name = 'EA2', mode = 'edge' > extra = [('connector', {'host': '127.0.0.1', 'idleTimeoutSeconds': '120', > 'name': 'uplink', 'port': 25519, ...}), ('httpConnec...protocolVersion': > 'HTTP1'}), ('httpConnector', {'address': 'testServer10', 'port': 25522, > 'protocolVersion': 'HTTP1'})] > @classmethod > def router(cls, name, mode, extra): > config = [ > ('router', {'mode': mode, > 'id': name, > 'allowUnsettledMulticast': 'yes'}), > ('listener', {'role': 'normal', > 'port': cls.tester.get_port()}), > ('address', {'prefix': 'closest', 'distribution': 'closest'}), > ('address', {'prefix': 'multicast', 'distribution': 'multicast'}), > ] > > if extra: > config.extend(extra) > config = Qdrouterd.Config(config) > > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > _____ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_02_credit_replenish > _____ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > name = 'EA2', mode = 'edge' > extra = [('connector', {'host': '127.0.0.1', 'idleTimeoutSeconds': '120', > 'name': 'uplink', 'port': 25519, ...}), ('httpConnec...protocolVersion': > 'HTTP1'}), ('httpConnector', {'address': 'testServer10', 'port': 25522, > 'protocolVersion': 'HTTP1'})] > @classmethod > def router(cls, name, mode, extra): > config = [ > ('router', {'mode': mode, > 'id': name, > 'allowUnsettledMulticast': 'yes'}), > ('listener', {'role': 'normal', > 'port': cls.tester.get_port()}), > ('address', {'prefix': 'closest', 'distribution': 'closest'}), > ('address', {'prefix': 'multicast', 'distribution': 'multicast'}), > ] > > if extra: > config.extend(extra) > config = Qdrouterd.Config(config) > > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > _____ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_03_server_reconnect > _____ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > name = 'EA2', mode = 'edge' > extra = [('connector', {'host': '127.0.0.1', 'idleTimeoutSeconds': '120', > 'name': 'uplink', 'port': 25519, ...}), ('httpConnec...protocolVersion': > 'HTTP1'}), ('httpConnector', {'address': 'testServer10', 'port': 25522, > 'protocolVersion': 'HTTP1'})] > @classmethod > def router(cls, name, mode, extra): > config = [ > ('router', {'mode': mode, > 'id': name, > 'allowUnsettledMulticast': 'yes'}), > ('listener', {'role': 'normal', > 'port': cls.tester.get_port()}), > ('address', {'prefix': 'closest', 'distribution': 'closest'}), > ('address', {'prefix': 'multicast', 'distribution': 'multicast'}), > ] > > if extra: > config.extend(extra) > config = Qdrouterd.Config(config) > > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > _ ERROR at setup of > Http1AdaptorEdge2EdgeTest.test_04_server_pining_for_the_fjords _ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > name = 'EA2', mode = 'edge' > extra = [('connector', {'host': '127.0.0.1', 'idleTimeoutSeconds': '120', > 'name': 'uplink', 'port': 25519, ...}), ('httpConnec...protocolVersion': > 'HTTP1'}), ('httpConnector', {'address': 'testServer10', 'port': 25522, > 'protocolVersion': 'HTTP1'})] > @classmethod > def router(cls, name, mode, extra): > config = [ > ('router', {'mode': mode, > 'id': name, > 'allowUnsettledMulticast': 'yes'}), > ('listener', {'role': 'normal', > 'port': cls.tester.get_port()}), > ('address', {'prefix': 'closest', 'distribution': 'closest'}), > ('address', {'prefix': 'multicast', 'distribution': 'multicast'}), > ] > > if extra: > config.extend(extra) > config = Qdrouterd.Config(config) > > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > ___ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_05_large_streaming_msg > ____ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > name = 'EA2', mode = 'edge' > extra = [('connector', {'host': '127.0.0.1', 'idleTimeoutSeconds': '120', > 'name': 'uplink', 'port': 25519, ...}), ('httpConnec...protocolVersion': > 'HTTP1'}), ('httpConnector', {'address': 'testServer10', 'port': 25522, > 'protocolVersion': 'HTTP1'})] > @classmethod > def router(cls, name, mode, extra): > config = [ > ('router', {'mode': mode, > 'id': name, > 'allowUnsettledMulticast': 'yes'}), > ('listener', {'role': 'normal', > 'port': cls.tester.get_port()}), > ('address', {'prefix': 'closest', 'distribution': 'closest'}), > ('address', {'prefix': 'multicast', 'distribution': 'multicast'}), > ] > > if extra: > config.extend(extra) > config = Qdrouterd.Config(config) > > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > __ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_1001_client_request_close > __ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > @classmethod > def setUpClass(cls): > """Start a router""" > super(Http1AdaptorEdge2EdgeTest, cls).setUpClass() > > # configuration: > # one edge, one interior > # > # +-------+ +---------+ +-------+ > # | EA1 |<==>| INT.A |<==>| EA2 | > # +-------+ +---------+ +-------+ > # ^ ^ > # | | > # V V > # <clients> <servers> > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('INT.A', 'interior', [('listener', {'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('listener', {'role': 'edge', > 'port': cls.INTA_edge2_port}), > ]) > cls.INT_A = cls.routers[0] > cls.INT_A.listener = cls.INT_A.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA1', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('httpListener', {'port': cls.http_listener11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpListener', {'port': cls.http_listener10_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer10'}) > ]) > cls.EA1 = cls.routers[1] > cls.EA1.listener = cls.EA1.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA2', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge2_port}), > ('httpConnector', {'port': cls.http_server11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpConnector', {'port': cls.http_server10_port, > 'protocolVersion': 'HTTP1', > > 'address': 'testServer10'}) > ]) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_tests_http1_adaptor.py:391: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > in router > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > _ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_1002_client_response_close > __ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > @classmethod > def setUpClass(cls): > """Start a router""" > super(Http1AdaptorEdge2EdgeTest, cls).setUpClass() > > # configuration: > # one edge, one interior > # > # +-------+ +---------+ +-------+ > # | EA1 |<==>| INT.A |<==>| EA2 | > # +-------+ +---------+ +-------+ > # ^ ^ > # | | > # V V > # <clients> <servers> > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('INT.A', 'interior', [('listener', {'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('listener', {'role': 'edge', > 'port': cls.INTA_edge2_port}), > ]) > cls.INT_A = cls.routers[0] > cls.INT_A.listener = cls.INT_A.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA1', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('httpListener', {'port': cls.http_listener11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpListener', {'port': cls.http_listener10_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer10'}) > ]) > cls.EA1 = cls.routers[1] > cls.EA1.listener = cls.EA1.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA2', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge2_port}), > ('httpConnector', {'port': cls.http_server11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpConnector', {'port': cls.http_server10_port, > 'protocolVersion': 'HTTP1', > > 'address': 'testServer10'}) > ]) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_tests_http1_adaptor.py:391: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > in router > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > ________ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_2000_curl_get > ________ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > @classmethod > def setUpClass(cls): > """Start a router""" > super(Http1AdaptorEdge2EdgeTest, cls).setUpClass() > > # configuration: > # one edge, one interior > # > # +-------+ +---------+ +-------+ > # | EA1 |<==>| INT.A |<==>| EA2 | > # +-------+ +---------+ +-------+ > # ^ ^ > # | | > # V V > # <clients> <servers> > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('INT.A', 'interior', [('listener', {'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('listener', {'role': 'edge', > 'port': cls.INTA_edge2_port}), > ]) > cls.INT_A = cls.routers[0] > cls.INT_A.listener = cls.INT_A.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA1', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('httpListener', {'port': cls.http_listener11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpListener', {'port': cls.http_listener10_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer10'}) > ]) > cls.EA1 = cls.routers[1] > cls.EA1.listener = cls.EA1.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA2', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge2_port}), > ('httpConnector', {'port': cls.http_server11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpConnector', {'port': cls.http_server10_port, > 'protocolVersion': 'HTTP1', > > 'address': 'testServer10'}) > ]) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_tests_http1_adaptor.py:391: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > in router > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > ________ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_2001_curl_put > ________ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > @classmethod > def setUpClass(cls): > """Start a router""" > super(Http1AdaptorEdge2EdgeTest, cls).setUpClass() > > # configuration: > # one edge, one interior > # > # +-------+ +---------+ +-------+ > # | EA1 |<==>| INT.A |<==>| EA2 | > # +-------+ +---------+ +-------+ > # ^ ^ > # | | > # V V > # <clients> <servers> > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('INT.A', 'interior', [('listener', {'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('listener', {'role': 'edge', > 'port': cls.INTA_edge2_port}), > ]) > cls.INT_A = cls.routers[0] > cls.INT_A.listener = cls.INT_A.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA1', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('httpListener', {'port': cls.http_listener11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpListener', {'port': cls.http_listener10_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer10'}) > ]) > cls.EA1 = cls.routers[1] > cls.EA1.listener = cls.EA1.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA2', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge2_port}), > ('httpConnector', {'port': cls.http_server11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpConnector', {'port': cls.http_server10_port, > 'protocolVersion': 'HTTP1', > > 'address': 'testServer10'}) > ]) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_tests_http1_adaptor.py:391: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > in router > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > _______ ERROR at setup of Http1AdaptorEdge2EdgeTest.test_2002_curl_post > ________ > cls = <class 'system_tests_http1_adaptor.Http1AdaptorEdge2EdgeTest'> > @classmethod > def setUpClass(cls): > """Start a router""" > super(Http1AdaptorEdge2EdgeTest, cls).setUpClass() > > # configuration: > # one edge, one interior > # > # +-------+ +---------+ +-------+ > # | EA1 |<==>| INT.A |<==>| EA2 | > # +-------+ +---------+ +-------+ > # ^ ^ > # | | > # V V > # <clients> <servers> > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('INT.A', 'interior', [('listener', {'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('listener', {'role': 'edge', > 'port': cls.INTA_edge2_port}), > ]) > cls.INT_A = cls.routers[0] > cls.INT_A.listener = cls.INT_A.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA1', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge1_port}), > ('httpListener', {'port': cls.http_listener11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpListener', {'port': cls.http_listener10_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer10'}) > ]) > cls.EA1 = cls.routers[1] > cls.EA1.listener = cls.EA1.addresses[0] > > super(Http1AdaptorEdge2EdgeTest, cls).\ > router('EA2', 'edge', > [('connector', {'name': 'uplink', 'role': 'edge', > 'port': cls.INTA_edge2_port}), > ('httpConnector', {'port': cls.http_server11_port, > 'protocolVersion': 'HTTP1', > 'address': 'testServer11'}), > ('httpConnector', {'port': cls.http_server10_port, > 'protocolVersion': 'HTTP1', > > 'address': 'testServer10'}) > ]) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_tests_http1_adaptor.py:391: > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/http1_tests.py:1198: > in router > cls.routers.append(cls.tester.qdrouterd(name, config, wait=True)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:795: > in qdrouterd > return self.cleanup(Qdrouterd(*args, **kwargs)) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:481: > in __init__ > self.wait_ready() > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:705: > in wait_ready > self.wait_connectors(**retry_kwargs) > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > self = <system_test.Qdrouterd object at 0x7fed8feb5390>, retry_kwargs = {} > @py_assert1 = <function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8> > @py_assert4 = None > @py_format6 = 'Port not connected 25519\n>assert None\n{None = > retry(<function Qdrouterd.wait_connectors.<locals>.<lambda> at > 0x7fed8fe2e9d8>, **{})\n}' > def wait_connectors(self, **retry_kwargs): > """ > Wait for all connectors to be connected > @param retry_kwargs: keyword args for L{retry} > """ > for c in self.config.sections('connector'): > > assert retry(lambda: self.is_connected(port=c['port'], > > host=self.get_host(c.get('protocolFamily'))), > **retry_kwargs), "Port not connected %s" % c['port'] > E AssertionError: Port not connected 25519 > E assert None > E + where None = retry(<function > Qdrouterd.wait_connectors.<locals>.<lambda> at 0x7fed8fe2e9d8>, **{}) > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_test.py:697: > AssertionError > =================================== FAILURES > =================================== > _______________ Http1AdaptorManagementTest.test_01_create_delete > _______________ > self = <system_tests_http1_adaptor.Http1AdaptorManagementTest > testMethod=test_01_create_delete> > def test_01_create_delete(self): > """ Create and delete HTTP1 connectors and listeners. The > connectors/listeners are created on the edge router. Verify that the > adaptor properly notifies the interior of the subscribers/producers. > """ > e_mgmt = self.e_router.management > self.assertEqual(0, > len(e_mgmt.query(type=self.LISTENER_TYPE).results)) > self.assertEqual(0, > len(e_mgmt.query(type=self.CONNECTOR_TYPE).results)) > > e_mgmt.create(type=self.CONNECTOR_TYPE, > name="ServerConnector", > attributes={'address': 'closest/http1Service', > 'port': self.http_server_port, > 'protocolVersion': 'HTTP1'}) > > e_mgmt.create(type=self.LISTENER_TYPE, > name="ClientListener", > attributes={'address': 'closest/http1Service', > 'port': self.http_listener_port, > 'protocolVersion': 'HTTP1'}) > > # verify the entities have been created and http traffic works > > self.assertEqual(1, > len(e_mgmt.query(type=self.LISTENER_TYPE).results)) > self.assertEqual(1, > len(e_mgmt.query(type=self.CONNECTOR_TYPE).results)) > > count, error = http1_ping(sport=self.http_server_port, > cport=self.http_listener_port) > self.assertIsNone(error) > self.assertEqual(1, count) > > # now check the interior router for the closest/http1Service address > self.i_router.wait_address("closest/http1Service", subscribers=1) > > # > # delete the connector and listener; wait for the associated > connection > # to be removed > # > e_mgmt.delete(type=self.CONNECTOR_TYPE, name="ServerConnector") > self.assertEqual(0, > len(e_mgmt.query(type=self.CONNECTOR_TYPE).results)) > e_mgmt.delete(type=self.LISTENER_TYPE, name="ClientListener") > self.assertEqual(0, > len(e_mgmt.query(type=self.LISTENER_TYPE).results)) > > # will hit test timeout on failure: > while True: > hconns = 0 > obj = e_mgmt.query(type=self.CONNECTION_TYPE, > attribute_names=["protocol"]) > for item in obj.get_dicts(): > if "http/1.x" in item["protocol"]: > hconns += 1 > if hconns == 0: > break > sleep(0.25) > > # When a connector is configured the router will periodically attempt > # to connect to the server address. To prove that the connector has > # been completely removed listen for connection attempts on the server > # port. > s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) > s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) > s.bind(("", self.http_server_port)) > s.setblocking(True) > s.settimeout(3) # reconnect attempts every 2.5 seconds > s.listen(1) > with self.assertRaises(socket.timeout): > > conn, addr = s.accept() > E AssertionError: timeout not raised > /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/tests/system_tests_http1_adaptor.py:158: > AssertionError > __________ Http1AdaptorManagementTest.test_01_delete_active_connector > __________ > self = <system_tests_http1_adaptor.Http1AdaptorManagementTest > testMethod=test_01_delete_active_connector> > def test_01_delete_active_connector(self): > """Delete an HTTP1 connector that is currently connected to a server. > Verify the connection is dropped. > """ > e_mgmt = self.e_router.management > self.assertEqual(0, > len(e_mgmt.query(type=self.CONNECTOR_TYPE).results)) > > e_mgmt.create(type=self.CONNECTOR_TYPE, > name="ServerConnector", > attributes={'address': 'closest/http1Service', > 'port': self.http_server_port, > 'protocolVersion': 'HTTP1'}) > > # verify the connector has been created and attach a dummy server > self.assertEqual(1, > len(e_mgmt.query(type=self.CONNECTOR_TYPE).results)) > > server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) > server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) > > server.bind(("", self.http_server_port)) > E OSError: [Errno 98] Address already in use > {noformat} > One scenario against which the tests are not protecting is that something > without SO_REUSEADDR was listening on the socket before. In that case, > attempt to connect will fail (nothing is there listening now) but a new bind > will fail too (we are lingering after use). The port range dispatch is using > is chosen not to fall into > {code} > $ cat /proc/sys/net/ipv4/ip_local_port_range > 32768 60999 > {code} > so we should be safe in that respect (local randomly assigned ports don't > clash). Still, it seems sensible to me to try checking a bind() before we > hand over the port. -- This message was sent by Atlassian Jira (v8.20.1#820001) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org