You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2016/04/08 20:21:47 UTC
qpid-dispatch git commit: DISPATCH-179 - Patch from Ganesh Murthy.
Also fixed incorrect types reported from router_core agent.
Repository: qpid-dispatch
Updated Branches:
refs/heads/master b88814170 -> ee856b3b9
DISPATCH-179 - Patch from Ganesh Murthy. Also fixed incorrect types reported from router_core agent.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/ee856b3b
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/ee856b3b
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/ee856b3b
Branch: refs/heads/master
Commit: ee856b3b93c10d4d597531d94d64e3ddb7c6c50f
Parents: b888141
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Apr 8 14:20:57 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Fri Apr 8 14:20:57 2016 -0400
----------------------------------------------------------------------
src/router_core/agent_config_address.c | 2 +-
src/router_core/agent_config_auto_link.c | 2 +-
src/router_core/agent_config_link_route.c | 2 +-
tests/system_tests_link_routes.py | 126 ++++++++++++++++++++++++-
tools/qdmanage | 30 +++++-
5 files changed, 152 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ee856b3b/src/router_core/agent_config_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_config_address.c b/src/router_core/agent_config_address.c
index 3d46f40..c9436f8 100644
--- a/src/router_core/agent_config_address.c
+++ b/src/router_core/agent_config_address.c
@@ -67,7 +67,7 @@ static void qdr_config_address_insert_column_CT(qdr_address_config_t *addr, int
}
case QDR_CONFIG_ADDRESS_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.config.address");
+ qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.config.address");
break;
case QDR_CONFIG_ADDRESS_PREFIX:
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ee856b3b/src/router_core/agent_config_auto_link.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_config_auto_link.c b/src/router_core/agent_config_auto_link.c
index b4cacc3..b59d77c 100644
--- a/src/router_core/agent_config_auto_link.c
+++ b/src/router_core/agent_config_auto_link.c
@@ -73,7 +73,7 @@ static void qdr_config_auto_link_insert_column_CT(qdr_auto_link_t *al, int col,
break;
case QDR_CONFIG_AUTO_LINK_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.config.autoLink");
+ qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.config.autoLink");
break;
case QDR_CONFIG_AUTO_LINK_ADDR:
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ee856b3b/src/router_core/agent_config_link_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_config_link_route.c b/src/router_core/agent_config_link_route.c
index 25ab442..b07c916 100644
--- a/src/router_core/agent_config_link_route.c
+++ b/src/router_core/agent_config_link_route.c
@@ -68,7 +68,7 @@ static void qdr_config_link_route_insert_column_CT(qdr_link_route_t *lr, int col
}
case QDR_CONFIG_LINK_ROUTE_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.config.linkRoute");
+ qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.config.linkRoute");
break;
case QDR_CONFIG_LINK_ROUTE_PREFIX:
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ee856b3b/tests/system_tests_link_routes.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_link_routes.py b/tests/system_tests_link_routes.py
index 6f3ca61..d7f673a 100644
--- a/tests/system_tests_link_routes.py
+++ b/tests/system_tests_link_routes.py
@@ -19,9 +19,9 @@
import unittest
from time import sleep
-from subprocess import PIPE
+from subprocess import PIPE, STDOUT
-from system_test import TestCase, Qdrouterd, main_module, TIMEOUT
+from system_test import TestCase, Qdrouterd, main_module, TIMEOUT, Process
from proton import Message
from proton.reactor import AtMostOnce
@@ -119,6 +119,39 @@ class LinkRoutePatternTest(TestCase):
assert p.returncode == 0, "qdstat exit status %s, output:\n%s" % (p.returncode, out)
return out
+ def run_qdmanage(self, cmd, input=None, expect=Process.EXIT_OK, address=None):
+ p = self.popen(
+ ['qdmanage'] + cmd.split(' ') + ['--bus', address or self.address(), '--indent=-1', '--timeout', str(TIMEOUT)],
+ stdin=PIPE, stdout=PIPE, stderr=STDOUT, expect=expect)
+ out = p.communicate(input)[0]
+ try:
+ p.teardown()
+ except Exception, e:
+ raise Exception("%s\n%s" % (e, out))
+ return out
+
+ def test_aaa_qdmanage_query_link_route(self):
+ """
+ qdmanage converts short type to long type and this test specifically tests if qdmanage is actually doing
+ the type conversion correctly by querying with short type and long type.
+ """
+ cmd = 'QUERY --type=linkRoute'
+ out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0])
+
+ # Make sure there is a dir of in and out.
+ self.assertTrue('"dir": "in"' in out)
+ self.assertTrue('"dir": "out"' in out)
+ self.assertTrue('"connection": "broker"' in out)
+
+ # Use the long type and make sure that qdmanage does not mess up the long type
+ cmd = 'QUERY --type=org.apache.qpid.dispatch.router.config.linkRoute'
+ out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0])
+
+ # Make sure there is a dir of in and out.
+ self.assertTrue('"dir": "in"' in out)
+ self.assertTrue('"dir": "out"' in out)
+ self.assertTrue('"connection": "broker"' in out)
+
def test_bbb_qdstat_link_routes_routerB(self):
"""
Runs qdstat on router B to make sure that router B has two link routes, one 'in' and one 'out'
@@ -160,7 +193,7 @@ class LinkRoutePatternTest(TestCase):
apply_options = AtMostOnce()
- # Sender to to org.apache.dev
+ # Sender to org.apache.dev
blocking_sender = blocking_connection.create_sender(address="org.apache.dev", options=apply_options)
msg = Message(body=hello_world_1)
# Send a message
@@ -316,5 +349,92 @@ class LinkRoutePatternTest(TestCase):
#blocking_receiver.close()
blocking_connection.close()
+
+ def test_zzz_qdmanage_delete_link_route(self):
+ """
+ We are deleting the link route using qdmanage short name. This should be the last test to run
+ """
+
+ # First delete linkRoutes on QDR.B
+ local_node = Node.connect(self.routers[1].addresses[0], timeout=TIMEOUT)
+ result_list = local_node.query(type='org.apache.qpid.dispatch.router.config.linkRoute').results
+
+ identity_1 = result_list[0][1]
+ identity_2 = result_list[1][1]
+
+ cmd = 'DELETE --type=linkRoute --identity=' + identity_1
+ self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0])
+
+ cmd = 'DELETE --type=linkRoute --identity=' + identity_2
+ self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0])
+
+ cmd = 'QUERY --type=linkRoute'
+ out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0])
+ self.assertEquals(out.rstrip(), '[]')
+
+ sleep(1)
+
+ # linkRoutes now gone on QDR.B but remember that it still exist on QDR.C
+ # We will now try to create a receiver on address org.apache.dev on QDR.C.
+ # Since the linkRoute on QDR.B is gone, QDR.C
+ # will not allow a receiver to be created since there is no route to destination.
+ # Connects to listener #2 on QDR.C
+ addr = self.routers[2].addresses[1]
+
+ timeout_exception = False
+ blocking_connection = BlockingConnection(addr, timeout=3)
+
+ try:
+ blocking_connection.create_receiver(address="org.apache.dev")
+ except Exception as e:
+ self.assertTrue("timed out: Opening link" in e.message)
+ timeout_exception = True
+
+ self.assertTrue(timeout_exception)
+
+ # Now delete linkRoutes on QDR.C to eradicate linkRoutes completely
+ local_node = Node.connect(addr, timeout=TIMEOUT)
+ result_list = local_node.query(type='org.apache.qpid.dispatch.router.config.linkRoute').results
+
+ identity_1 = result_list[0][1]
+ identity_2 = result_list[1][1]
+
+ cmd = 'DELETE --type=linkRoute --identity=' + identity_1
+ self.run_qdmanage(cmd=cmd, address=addr)
+
+ cmd = 'DELETE --type=linkRoute --identity=' + identity_2
+ self.run_qdmanage(cmd=cmd, address=addr)
+
+ cmd = 'QUERY --type=linkRoute'
+ out = self.run_qdmanage(cmd=cmd, address=addr)
+ self.assertEquals(out.rstrip(), '[]')
+
+ blocking_connection = BlockingConnection(addr, timeout=3)
+
+ # Receive on org.apache.dev (this address used to be linkRouted but not anymore since we deleted linkRoutes
+ # on both QDR.C and QDR.B)
+ blocking_receiver = blocking_connection.create_receiver(address="org.apache.dev")
+
+ apply_options = AtMostOnce()
+ hello_world_1 = "Hello World_1!"
+ # Sender to org.apache.dev
+ blocking_sender = blocking_connection.create_sender(address="org.apache.dev", options=apply_options)
+ msg = Message(body=hello_world_1)
+
+ # Send a message
+ blocking_sender.send(msg)
+ received_message = blocking_receiver.receive(timeout=5)
+ self.assertEqual(hello_world_1, received_message.body)
+
+ # Connect to the router acting like the broker (QDR.A) and check the deliveriesIngress and deliveriesEgress
+ local_node = Node.connect(self.routers[2].addresses[1], timeout=TIMEOUT)
+
+ self.assertEqual(u'QDR.C', local_node.query(type='org.apache.qpid.dispatch.router',
+ attribute_names=['routerId']).results[0][0])
+
+ self.assertEqual(1, local_node.read(type='org.apache.qpid.dispatch.router.address',
+ name='M0org.apache.dev').deliveriesEgress,
+ "deliveriesEgress is wrong")
+
if __name__ == '__main__':
unittest.main(main_module())
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ee856b3b/tools/qdmanage
----------------------------------------------------------------------
diff --git a/tools/qdmanage b/tools/qdmanage
index 6954872..26f17b7 100755
--- a/tools/qdmanage
+++ b/tools/qdmanage
@@ -36,9 +36,8 @@ def attr_split(attrstr):
return nv
class QdManage():
-
def __init__(self):
-
+ self.prefix = 'org.apache.qpid.dispatch.'
self.operations = ['QUERY', 'CREATE', 'READ', 'UPDATE', 'DELETE',
'GET-TYPES', 'GET-OPERATIONS', 'GET-ATTRIBUTES', 'GET-ANNOTATIONS',
'GET-MGMT-NODES', 'GET-SCHEMA', 'GET-LOG']
@@ -60,10 +59,17 @@ class QdManage():
op.add_option_group(connection_options(op))
self.op = op
+ def clean_opts(self):
+ attr_type = self.opts.type
+ if attr_type:
+ self.opts.type = self.long_type(attr_type)
+
def run(self, argv):
# Make all args unicode to avoid encoding arg values as AMQP bytes.
self.opts, self.args = self.op.parse_args([unicode(x) for x in argv[1:]])
- if self.opts.indent == -1: self.opts.indent = None
+ self.clean_opts()
+ if self.opts.indent == -1:
+ self.opts.indent = None
if len(self.args) == 0: raise UsageError("No operation specified")
self.node = Node.connect(
opts_url(self.opts), self.opts.router, self.opts.timeout, opts_ssl_domain(self.opts))
@@ -92,12 +98,27 @@ class QdManage():
except ValueError:
print result
+ def long_type(self, type):
+ if not type or "." in type:
+ return type
+
+ if type in ('linkRoute', 'address', 'autoLink'):
+ return self.prefix + "router.config." + type
+
+ return self.prefix + type
+
def call_node(self, method, *argnames, **kwargs):
"""Call method on node, use opts named in argnames"""
names = set(argnames)
+
+ attributes = kwargs.get('attributes')
+ if attributes and attributes.get('type'):
+ attributes['type'] = self.long_type(attributes['type'])
+
for k in self.opts.__dict__:
if k in names and hasattr(self.opts, k):
kwargs[k] = getattr(self.opts, k)
+
return getattr(self.node, method)(**kwargs)
def call_bulk(self, func):
@@ -114,7 +135,8 @@ class QdManage():
def query(self):
"""query [ATTR...] Print attributes of entities."""
- if self.args: self.opts.attribute_names = self.args
+ if self.args:
+ self.opts.attribute_names = self.args
result = self.call_node('query', 'type', 'attribute_names')
self.print_json(result.get_dicts(clean=True))
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org