Let the caller handle the error. This prepares us for reporting errors
in daemon mode.

Also, extend the tests to cover this error path.

Signed-off-by: Jakub Sitnicki <j...@redhat.com>
---
 ovn/utilities/ovn-nbctl.c | 23 ++++++++++++++++-------
 tests/ovn-nbctl.at        |  5 +++++
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index d07524697..0cd11e845 100644
--- a/ovn/utilities/ovn-nbctl.c
+++ b/ovn/utilities/ovn-nbctl.c
@@ -609,10 +609,12 @@ lb_by_name_or_uuid(struct ctl_context *ctx, const char 
*id, bool must_exist,
     return NULL;
 }
 
-static const struct nbrec_port_group *
-pg_by_name_or_uuid(struct ctl_context *ctx, const char *id, bool must_exist)
+static char * OVS_WARN_UNUSED_RESULT
+pg_by_name_or_uuid(struct ctl_context *ctx, const char *id, bool must_exist,
+                   const struct nbrec_port_group **pg_p)
 {
     const struct nbrec_port_group *pg = NULL;
+    *pg_p = NULL;
 
     struct uuid pg_uuid;
     bool is_uuid = uuid_from_string(&pg_uuid, id);
@@ -632,11 +634,12 @@ pg_by_name_or_uuid(struct ctl_context *ctx, const char 
*id, bool must_exist)
     }
 
     if (!pg && must_exist) {
-        ctl_fatal("%s: port group %s not found", id,
-                  is_uuid ? "UUID" : "name");
+        return xasprintf("%s: port group %s not found", id,
+                         is_uuid ? "UUID" : "name");
     }
 
-    return pg;
+    *pg_p = pg;
+    return NULL;
 }
 
 static void
@@ -1559,7 +1562,10 @@ acl_cmd_get_pg_or_ls(struct ctl_context *ctx,
     char *error;
 
     if (!opt_type) {
-        *pg = pg_by_name_or_uuid(ctx, ctx->argv[1], false);
+        error = pg_by_name_or_uuid(ctx, ctx->argv[1], false, pg);
+        if (error) {
+            return error;
+        }
         error = ls_by_name_or_uuid(ctx, ctx->argv[1], false, ls);
         if (error) {
             return error;
@@ -1574,7 +1580,10 @@ acl_cmd_get_pg_or_ls(struct ctl_context *ctx,
                              ctx->argv[1]);
         }
     } else if (!strcmp(opt_type, "port-group")) {
-        *pg = pg_by_name_or_uuid(ctx, ctx->argv[1], true);
+        error = pg_by_name_or_uuid(ctx, ctx->argv[1], true, pg);
+        if (error) {
+            return error;
+        }
         *ls = NULL;
     } else if (!strcmp(opt_type, "switch")) {
         error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, ls);
diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
index 73a61a4be..9f6a2783b 100644
--- a/tests/ovn-nbctl.at
+++ b/tests/ovn-nbctl.at
@@ -234,6 +234,11 @@ OVN_NBCTL_TEST_ACL([ls1], [--type=switch])
 AT_CHECK([ovn-nbctl create port_group name=pg0], [0], [ignore])
 OVN_NBCTL_TEST_ACL([pg0], [--type=port-group])
 
+dnl Test when port group doesn't exist
+AT_CHECK([ovn-nbctl --type=port-group acl-add pg1 to-lport 100 ip drop], [1], 
[], [dnl
+ovn-nbctl: pg1: port group name not found
+])
+
 dnl Test when same name exists in logical switches and portgroups
 AT_CHECK([ovn-nbctl create port_group name=ls0], [0], [ignore])
 AT_CHECK([ovn-nbctl acl-add ls0 to-lport 100 ip drop], [1], [], [stderr])
-- 
2.14.4

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to