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

Reply via email to