def run(self, host=None, port=None, pf=None): if port: if pf and pf.lower() == 'ipv6': addr = "amqp://[%s]:%s" % (host, port) else: addr = "amqp://%s:%s" % (host, port) else: addr = self._router.connector_addresses[0] super(OpenPropertiesBroker, self).__init__(url=addr) retry(lambda: self.open_properties is not None, delay=0.1) self.join()
def test_http_listener_delete(self): name = 'delete_listener' name_1 = 'delete_listener_1' normal_listen_port = self.get_port() # # Open listeners on two HTTP enabled ports. Delete one of the # HTTP listeners and make sure that it is really gone and also # make sure that the other HTTP listener is still working. # http_delete_listen_port_1 = self.get_port() http_delete_listen_port_2 = self.get_port() config = Qdrouterd.Config([ ('router', {'mode': 'standalone', 'id': 'A'}), ('listener', {'port': normal_listen_port}), ('listener', {'httpRootDir': os.path.dirname(__file__), 'name': name, 'port': http_delete_listen_port_1, 'http': True}), ('listener', {'httpRootDir': os.path.dirname(__file__), 'name': name_1, 'port': http_delete_listen_port_2, 'http': True})]) router = self.qdrouterd(name="expect_fail_1", config=config, wait=True) def address(): return router.addresses[0] # Perform a GET request on the http_delete_listen_port_1 just to make # sure that it is up and running. url_1 = "%s/system_tests_http.txt" % "http://localhost:%d" % http_delete_listen_port_1 out = self.get(url_1, use_ca=False) # Perform a GET request on the http_delete_listen_port_2 just to make # sure that it is up and running. url_2 = "%s/system_tests_http.txt" % "http://localhost:%d" % http_delete_listen_port_2 out = self.get(url_2, use_ca=False) # Now both http_delete_listen_port_1 and http_delete_listen_port_2 # are working. # Delete the listener on port http_delete_listen_port_1 long_type = 'org.apache.qpid.dispatch.listener' mgmt = QdManager(self, address=address()) if self.skip_delete_http_listener_test: # You are not allowed to delete a http:yes listener # Try deleting it and make sure you get an exception. try: mgmt.delete(long_type, name=name) except Exception as e: if "BadRequestStatus: HTTP listeners cannot be deleted" in str(e): exception_raised = True self.assertTrue(exception_raised) else: mgmt.delete(long_type, name=name) # Once again try to perform a GET request. Now since the listener # is gone, the GET will fail. ret_val = retry(lambda: self.is_get_request_failing(url_1, use_ca=False), timeout=10, delay=2) self.assertTrue(ret_val) # HTTP listener on port http_delete_listen_port_1 has been # deleted successfully. Make sure that the listener on port # http_delete_listen_port_2 is still working. out = self.get(url_2, use_ca=False)
def test_create_connector_waypoint(self): """Test creating waypoint, connector and fixedAddress Create a waypoint that leads out and back from a second router. """ conf = Qdrouterd.Config([ ('router', {'mode': 'standalone', 'routerId': 'wp-router'}), ('listener', {'port':self.get_port(), 'role':'normal'}), ('fixedAddress', {'prefix':'foo'}) ]) wp_router = self.qdrouterd('wp-router', conf) wp_router.wait_ready() # Configure the router for c in [ (FIXED_ADDRESS, 'a1', {'prefix':'foo', 'phase':0, 'fanout':'single', 'bias':'spread'}), (FIXED_ADDRESS, 'a2', {'prefix':'foo', 'phase':1, 'fanout':'single', 'bias':'spread'}), (CONNECTOR, 'wp_connector', {'addr': '127.0.0.1', 'port':str(wp_router.ports[0]), 'saslMechanisms': 'ANONYMOUS', 'role': 'on-demand'}), (WAYPOINT, 'wp', {'address': 'foo', 'inPhase': 0, 'outPhase': 1, 'connector': 'wp_connector'}) ]: self.assert_create_ok(*c) assert retry(lambda: self.router.is_connected, wp_router.ports[0]) # Verify the entities id = 'connector/127.0.0.1:%s' % wp_router.ports[0] connector = self.node.read(identity=id) self.assertEqual( [connector.name, connector.addr, connector.port, connector.role], ['wp_connector', '127.0.0.1', str(wp_router.ports[0]), 'on-demand']) # Pause to allow the waypoint to settle down sleep(1) # Send a message through self.router, verify it goes via wp_router address=self.router.addresses[0]+"/foo" mr = self.messenger() mr.subscribe(address) messages = ['a', 'b', 'c'] for m in messages: mr.put(message(address=address, body=m)); mr.send() # Check messages arrived self.assertEqual(messages, [mr.fetch().body for i in messages]) # Check log files to verify that the messages went via wp_router # TODO aconway 2014-07-07: should be able to check this via management # stats instead. try: f = open('wp-router.log') self.assertEqual(6, len(re.findall(r'MESSAGE.*to=.*/foo', f.read()))) finally: f.close()
def test_https_get(self): def http_listener(**kwargs): args = dict(kwargs) args.update({'port': self.get_port(), 'http': 'yes', 'httpRootDir': os.path.dirname(__file__)}) return ('listener', args) def listener(**kwargs): args = dict(kwargs) args.update({'port': self.get_port()}) return ('listener', args) name = 'delete-me' config = Qdrouterd.Config([ ('router', {'id': 'QDR.HTTPS'}), ('sslProfile', {'name': 'simple-ssl', 'caCertFile': self.ssl_file('ca-certificate.pem'), 'certFile': self.ssl_file('server-certificate.pem'), 'privateKeyFile': self.ssl_file('server-private-key.pem'), 'ciphers': 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS', 'password': '******' }), http_listener(sslProfile='simple-ssl', requireSsl=False, authenticatePeer=False), http_listener(sslProfile='simple-ssl', requireSsl=True, authenticatePeer=False), http_listener(sslProfile='simple-ssl', requireSsl=True, authenticatePeer=True), http_listener(name=name, sslProfile='simple-ssl', requireSsl=True, authenticatePeer=True), listener(name='mgmt_listener', authenticatePeer=False)]) # saslMechanisms='EXTERNAL' r = self.qdrouterd('https-test-router', config) r.wait_ready() def address(): return r.addresses[4] self.assert_get("https://localhost:%s" % r.ports[0]) # requireSsl=false Allows simple-ssl HTTP # DISPATCH-1513: libwebsockets versions 3.2.0 introduces a new flag called # LWS_SERVER_OPTION_ALLOW_HTTP_ON_HTTPS_LISTENER # The new flag allows (as the flag says) HTTP over HTTPS listeners. # Since this flag is not available before lws 3.2.0 we need # to selectively disable this check if qpid_dispatch_site.LIBWEBSOCKETS_VERSION >= (3, 2, 0): self.assert_get("http://localhost:%s" % r.ports[0]) self.assert_get("https://localhost:%s" % r.ports[1]) # requireSsl=True does not allow simple-ssl HTTP self.assertRaises(Exception, self.assert_get, "http://localhost:%s" % r.ports[1]) # authenticatePeer=True requires a client cert self.assertRaises((URLError, ssl.SSLError), self.assert_get, "https://localhost:%s" % r.ports[2]) # Provide client cert self.assert_get_cert("https://localhost:%d" % r.ports[2]) # Try a get on the HTTP listener we are going to delete self.assert_get_cert("https://localhost:%d" % r.ports[3]) if not self.skip_delete_http_listener_test: # Delete the listener with name 'delete-me' long_type = 'org.apache.qpid.dispatch.listener' mgmt = QdManager(self, address=address()) mgmt.delete(long_type, name=name) # Make sure that the listener got deleted. ret_val = retry(lambda: self.is_get_request_failing("https://localhost:%s/system_tests_http.txt" % r.ports[3], use_get_cert=True), timeout=10, delay=2) self.assertTrue(ret_val) # Make sure other ports are working normally after the above delete. self.assert_get_cert("https://localhost:%d" % r.ports[2])
def test_create_connector_waypoint(self): """Test creating waypoint, connector and fixedAddress Create a waypoint that leads out and back from a second router. """ conf = Qdrouterd.Config([('router', { 'mode': 'standalone', 'routerId': 'wp-router' }), ('listener', { 'port': self.get_port(), 'role': 'normal' }), ('fixedAddress', { 'prefix': 'foo' })]) wp_router = self.qdrouterd('wp-router', conf) wp_router.wait_ready() # Configure the router for c in [(FIXED_ADDRESS, 'a1', { 'prefix': 'foo', 'phase': 0, 'fanout': 'single', 'bias': 'spread' }), (FIXED_ADDRESS, 'a2', { 'prefix': 'foo', 'phase': 1, 'fanout': 'single', 'bias': 'spread' }), (CONNECTOR, 'wp_connector', { 'addr': '127.0.0.1', 'port': str(wp_router.ports[0]), 'saslMechanisms': 'ANONYMOUS', 'role': 'on-demand' }), (WAYPOINT, 'wp', { 'address': 'foo', 'inPhase': 0, 'outPhase': 1, 'connector': 'wp_connector' })]: self.assert_create_ok(*c) assert retry(lambda: self.router.is_connected, wp_router.ports[0]) # Verify the entities id = 'connector/127.0.0.1:%s' % wp_router.ports[0] connector = self.node.read(identity=id) self.assertEqual([ connector.name, connector.addr, connector.port, connector.role ], ['wp_connector', '127.0.0.1', str(wp_router.ports[0]), 'on-demand']) # Pause to allow the waypoint to settle down sleep(1) # Send a message through self.router, verify it goes via wp_router address = self.router.addresses[0] + "/foo" mr = self.messenger() mr.subscribe(address) messages = ['a', 'b', 'c'] for m in messages: mr.put(message(address=address, body=m)) mr.send() # Check messages arrived self.assertEqual(messages, [mr.fetch().body for i in messages]) # Check log files to verify that the messages went via wp_router # TODO aconway 2014-07-07: should be able to check this via management # stats instead. try: f = open('wp-router.log') self.assertEqual(6, len(re.findall(r'MESSAGE.*to=.*/foo', f.read()))) finally: f.close()