Repository: qpid-dispatch Updated Branches: refs/heads/master c953fb3b2 -> 778b0ba23
DISPATCH-370 - Added read operation for linkRoute, autoLink, address Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/778b0ba2 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/778b0ba2 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/778b0ba2 Branch: refs/heads/master Commit: 778b0ba23fccc0540a2bc59819dfb0e052302410 Parents: c953fb3 Author: Ganesh Murthy <gmur...@redhat.com> Authored: Wed Jun 8 17:07:41 2016 -0400 Committer: Ganesh Murthy <gmur...@redhat.com> Committed: Wed Jun 8 17:07:41 2016 -0400 ---------------------------------------------------------------------- src/router_core/agent.c | 6 +-- src/router_core/agent_config_address.c | 53 ++++++++++++++++++++++++++ src/router_core/agent_config_address.h | 5 +++ src/router_core/agent_config_auto_link.c | 53 ++++++++++++++++++++++++++ src/router_core/agent_config_auto_link.h | 6 ++- src/router_core/agent_config_link_route.c | 53 ++++++++++++++++++++++++++ src/router_core/agent_config_link_route.h | 5 +++ src/router_core/management_agent.c | 6 +++ tests/system_tests_link_routes.py | 41 +++++++++++++++++++- 9 files changed, 223 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/src/router_core/agent.c ---------------------------------------------------------------------- diff --git a/src/router_core/agent.c b/src/router_core/agent.c index 401d4ae..272b75c 100644 --- a/src/router_core/agent.c +++ b/src/router_core/agent.c @@ -335,9 +335,9 @@ static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool disc qdr_query_t *query = action->args.agent.query; switch (query->entity_type) { - case QD_ROUTER_CONFIG_ADDRESS: break; - case QD_ROUTER_CONFIG_LINK_ROUTE: break; - case QD_ROUTER_CONFIG_AUTO_LINK: break; + case QD_ROUTER_CONFIG_ADDRESS: qdra_config_address_get_CT(core, name, identity, query, qdr_config_address_columns); break; + case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_get_CT(core, name, identity, query, qdr_config_link_route_columns); break; + case QD_ROUTER_CONFIG_AUTO_LINK: qdra_config_auto_link_get_CT(core, name, identity, query, qdr_config_auto_link_columns); break; case QD_ROUTER_CONNECTION: break; case QD_ROUTER_LINK: break; case QD_ROUTER_ADDRESS: qdra_address_get_CT(core, name, identity, query, qdr_address_columns); break; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/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 c9436f8..edb9ba5 100644 --- a/src/router_core/agent_config_address.c +++ b/src/router_core/agent_config_address.c @@ -414,3 +414,56 @@ void qdra_config_address_create_CT(qdr_core_t *core, } else qdr_query_free(query); } + + +static void qdr_manage_write_config_address_map_CT(qdr_core_t *core, + qdr_address_config_t *addr, + qd_composed_field_t *body, + const char *qdr_config_address_columns[]) +{ + qd_compose_start_map(body); + + for(int i = 0; i < QDR_CONFIG_ADDRESS_COLUMN_COUNT; i++) { + qd_compose_insert_string(body, qdr_config_address_columns[i]); + qdr_config_address_insert_column_CT(addr, i, body, false); + } + + qd_compose_end_map(body); +} + + +void qdra_config_address_get_CT(qdr_core_t *core, + qd_field_iterator_t *name, + qd_field_iterator_t *identity, + qdr_query_t *query, + const char *qdr_config_address_columns[]) +{ + qdr_address_config_t *addr = 0; + + if (!name && !identity) + query->status = QD_AMQP_BAD_REQUEST; + else { + if (identity) //If there is identity, ignore the name + addr = qdr_address_config_find_by_identity_CT(core, identity); + else if (name) + addr = qdr_address_config_find_by_name_CT(core, name); + + if (addr == 0) { + // Send back a 404 + query->status = QD_AMQP_NOT_FOUND; + } + else { + // + // Write the columns of the address entity into the response body. + // + qdr_manage_write_config_address_map_CT(core, addr, query->body, qdr_config_address_columns); + query->status = QD_AMQP_OK; + } + } + + // + // Enqueue the response. + // + qdr_agent_enqueue_response_CT(core, query); + +} http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/src/router_core/agent_config_address.h ---------------------------------------------------------------------- diff --git a/src/router_core/agent_config_address.h b/src/router_core/agent_config_address.h index 97d863b..139c6cd 100644 --- a/src/router_core/agent_config_address.h +++ b/src/router_core/agent_config_address.h @@ -27,6 +27,11 @@ void qdra_config_address_create_CT(qdr_core_t *core, qd_field_iterator_t *name, void qdra_config_address_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body); void qdra_config_address_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_field_iterator_t *name, qd_field_iterator_t *identity); +void qdra_config_address_get_CT(qdr_core_t *core, + qd_field_iterator_t *name, + qd_field_iterator_t *identity, + qdr_query_t *query, + const char *qdr_config_address_columns[]); #define QDR_CONFIG_ADDRESS_COLUMN_COUNT 8 http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/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 b59d77c..4f77348 100644 --- a/src/router_core/agent_config_auto_link.c +++ b/src/router_core/agent_config_auto_link.c @@ -424,3 +424,56 @@ void qdra_config_auto_link_create_CT(qdr_core_t *core, qdr_query_free(query); } } + + +static void qdr_manage_write_config_auto_link_map_CT(qdr_core_t *core, + qdr_auto_link_t *al, + qd_composed_field_t *body, + const char *qdr_config_auto_link_columns[]) +{ + qd_compose_start_map(body); + + for(int i = 0; i < QDR_CONFIG_AUTO_LINK_COLUMN_COUNT; i++) { + qd_compose_insert_string(body, qdr_config_auto_link_columns[i]); + qdr_config_auto_link_insert_column_CT(al, i, body, false); + } + + qd_compose_end_map(body); +} + + +void qdra_config_auto_link_get_CT(qdr_core_t *core, + qd_field_iterator_t *name, + qd_field_iterator_t *identity, + qdr_query_t *query, + const char *qdr_config_auto_link_columns[]) +{ + qdr_auto_link_t *al = 0; + + if (!name && !identity) + query->status = QD_AMQP_BAD_REQUEST; + else { + if (identity) //If there is identity, ignore the name + al = qdr_auto_link_config_find_by_identity_CT(core, identity); + else if (name) + al = qdr_auto_link_config_find_by_name_CT(core, name); + + if (al == 0) { + // Send back a 404 + query->status = QD_AMQP_NOT_FOUND; + } + else { + // + // Write the columns of the address entity into the response body. + // + qdr_manage_write_config_auto_link_map_CT(core, al, query->body, qdr_config_auto_link_columns); + query->status = QD_AMQP_OK; + } + } + + // + // Enqueue the response. + // + qdr_agent_enqueue_response_CT(core, query); + +} http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/src/router_core/agent_config_auto_link.h ---------------------------------------------------------------------- diff --git a/src/router_core/agent_config_auto_link.h b/src/router_core/agent_config_auto_link.h index e1a433f..338f9d8 100644 --- a/src/router_core/agent_config_auto_link.h +++ b/src/router_core/agent_config_auto_link.h @@ -27,7 +27,11 @@ void qdra_config_auto_link_create_CT(qdr_core_t *core, qd_field_iterator_t *name void qdra_config_auto_link_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body); void qdra_config_auto_link_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_field_iterator_t *name, qd_field_iterator_t *identity); - +void qdra_config_auto_link_get_CT(qdr_core_t *core, + qd_field_iterator_t *name, + qd_field_iterator_t *identity, + qdr_query_t *query, + const char *qdr_config_auto_link_columns[]); #define QDR_CONFIG_AUTO_LINK_COLUMN_COUNT 11 const char *qdr_config_auto_link_columns[QDR_CONFIG_AUTO_LINK_COLUMN_COUNT + 1]; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/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 5413ffd..e2a38bf 100644 --- a/src/router_core/agent_config_link_route.c +++ b/src/router_core/agent_config_link_route.c @@ -188,6 +188,23 @@ void qdra_config_link_route_get_first_CT(qdr_core_t *core, qdr_query_t *query, i } +static void qdr_manage_write_config_link_route_map_CT(qdr_core_t *core, + qdr_link_route_t *lr, + qd_composed_field_t *body, + const char *qdr_config_link_route_columns[]) +{ + qd_compose_start_map(body); + + for(int i = 0; i < QDR_CONFIG_LINK_ROUTE_COLUMN_COUNT; i++) { + qd_compose_insert_string(body, qdr_config_link_route_columns[i]); + qdr_config_link_route_insert_column_CT(lr, i, body, false); + } + + qd_compose_end_map(body); +} + + + void qdra_config_link_route_get_next_CT(qdr_core_t *core, qdr_query_t *query) { qdr_link_route_t *lr = 0; @@ -414,3 +431,39 @@ void qdra_config_link_route_create_CT(qdr_core_t *core, qdr_query_free(query); } } + +void qdra_config_link_route_get_CT(qdr_core_t *core, + qd_field_iterator_t *name, + qd_field_iterator_t *identity, + qdr_query_t *query, + const char *qdr_config_link_route_columns[]) +{ + qdr_link_route_t *lr = 0; + + if (!name && !identity) + query->status = QD_AMQP_BAD_REQUEST; + else { + if (identity) //If there is identity, ignore the name + lr = qdr_link_route_config_find_by_identity_CT(core, identity); + else if (name) + lr = qdr_link_route_config_find_by_name_CT(core, name); + + if (lr == 0) { + // Send back a 404 + query->status = QD_AMQP_NOT_FOUND; + } + else { + // + // Write the columns of the linkRoute entity into the response body. + // + qdr_manage_write_config_link_route_map_CT(core, lr, query->body, qdr_config_link_route_columns); + query->status = QD_AMQP_OK; + } + } + + // + // Enqueue the response. + // + qdr_agent_enqueue_response_CT(core, query); + +} http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/src/router_core/agent_config_link_route.h ---------------------------------------------------------------------- diff --git a/src/router_core/agent_config_link_route.h b/src/router_core/agent_config_link_route.h index 7c4a044..46c9e15 100644 --- a/src/router_core/agent_config_link_route.h +++ b/src/router_core/agent_config_link_route.h @@ -27,6 +27,11 @@ void qdra_config_link_route_create_CT(qdr_core_t *core, qd_field_iterator_t *nam void qdra_config_link_route_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body); void qdra_config_link_route_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_field_iterator_t *name, qd_field_iterator_t *identity); +void qdra_config_link_route_get_CT(qdr_core_t *core, + qd_field_iterator_t *name, + qd_field_iterator_t *identity, + qdr_query_t *query, + const char *qdr_config_link_route_columns[]); #define QDR_CONFIG_LINK_ROUTE_COLUMN_COUNT 9 http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/src/router_core/management_agent.c ---------------------------------------------------------------------- diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c index 419ab91..030499a 100644 --- a/src/router_core/management_agent.c +++ b/src/router_core/management_agent.c @@ -177,6 +177,12 @@ static void qd_manage_response_handler(void *context, const qd_amqp_error_t *sta qd_compose_start_map(ctx->field); qd_compose_end_map(ctx->field); } + else if (ctx->operation_type == QD_ROUTER_OPERATION_READ) { + if (status->status / 100 != 2) { + qd_compose_start_map(ctx->field); + qd_compose_end_map(ctx->field); + } + } qd_field_iterator_t *reply_to = 0; qd_composed_field_t *fld = 0; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/778b0ba2/tests/system_tests_link_routes.py ---------------------------------------------------------------------- diff --git a/tests/system_tests_link_routes.py b/tests/system_tests_link_routes.py index b3dbac2..77844d6 100644 --- a/tests/system_tests_link_routes.py +++ b/tests/system_tests_link_routes.py @@ -92,7 +92,7 @@ class LinkRoutePatternTest(TestCase): ('connector', {'name': 'broker', 'role': 'route-container', 'host': '0.0.0.0', 'port': a_listener_port, 'saslMechanisms': 'ANONYMOUS'}), # Only inter router communication must happen on 'inter-router' connectors. This connector makes # a connection from the router B's ephemeral port to c_listener_port - ('connector', {'role': 'inter-router', 'host': '0.0.0.0', 'port': c_listener_port}), + ('connector', {'name': 'routerC', 'role': 'inter-router', 'host': '0.0.0.0', 'port': c_listener_port}), ('linkRoutePattern', {'prefix': 'org.apache', 'connector': 'broker'}), ('linkRoute', {'prefix': 'pulp.task', 'connection': 'test-tag', 'dir': 'in'}), ('linkRoute', {'prefix': 'pulp.task', 'connection': 'test-tag', 'dir': 'out'}) @@ -161,6 +161,44 @@ class LinkRoutePatternTest(TestCase): self.assertTrue('"dir": "out"' in out) self.assertTrue('"connection": "broker"' in out) + identity = out[out.find("identity") + 12: out.find("identity") + 13] + cmd = 'READ --type=linkRoute --identity=' + identity + out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0]) + self.assertTrue(identity in out) + + exception_occurred = False + try: + # This identity should not be found + cmd = 'READ --type=linkRoute --identity=9999' + out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0]) + except Exception, e: + exception_occurred = True + self.assertTrue("NotFoundStatus: Not Found" in e.message) + + self.assertTrue(exception_occurred) + + exception_occurred = False + try: + # There is no identity specified, this is a bad request + cmd = 'READ --type=linkRoute' + out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0]) + except Exception, e: + exception_occurred = True + self.assertTrue("BadRequestStatus: Bad Request" in e.message) + + self.assertTrue(exception_occurred) + + cmd = 'CREATE --type=autoLink addr=127.0.0.1 dir=in connection=routerC' + out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0]) + + identity = out[out.find("identity") + 12: out.find("identity") + 14] + cmd = 'READ --type=autoLink --identity=' + identity + out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0]) + self.assertTrue(identity 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' @@ -394,6 +432,7 @@ class LinkRoutePatternTest(TestCase): identity_2 = result_list[1][1] identity_3 = result_list[2][1] identity_4 = result_list[3][1] + identity_4 = result_list[3][1] cmd = 'DELETE --type=linkRoute --identity=' + identity_1 self.run_qdmanage(cmd=cmd, address=addr) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org