You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2016/09/13 21:46:36 UTC

qpid-proton git commit: PROTON-1301: add pn_condition_format for formatted descriptions

Repository: qpid-proton
Updated Branches:
  refs/heads/master 6c131d8ac -> 12a6e4d33


PROTON-1301: add pn_condition_format for formatted descriptions

Add pn_condition_format/vformat similar to pn_error_format/vformat so a
condition description can be set using a printf-style format string.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/12a6e4d3
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/12a6e4d3
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/12a6e4d3

Branch: refs/heads/master
Commit: 12a6e4d3359322c707c497b3da3647d9bd80012f
Parents: 6c131d8
Author: Alan Conway <ac...@redhat.com>
Authored: Tue Sep 6 17:05:09 2016 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue Sep 13 12:20:06 2016 -0500

----------------------------------------------------------------------
 proton-c/include/proton/condition.h |  6 ++++
 proton-c/include/proton/cproton.i   |  3 +-
 proton-c/src/engine/engine.c        | 25 ++++++++++++++
 proton-c/src/tests/CMakeLists.txt   |  1 +
 proton-c/src/tests/condition.c      | 56 ++++++++++++++++++++++++++++++++
 5 files changed, 90 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/include/proton/condition.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/condition.h b/proton-c/include/proton/condition.h
index 34b2cbf..cf2f8aa 100644
--- a/proton-c/include/proton/condition.h
+++ b/proton-c/include/proton/condition.h
@@ -131,6 +131,12 @@ PN_EXTERN int pn_condition_set_description(pn_condition_t *condition, const char
  */
 PN_EXTERN pn_data_t *pn_condition_info(pn_condition_t *condition);
 
+/** Set the name and printf-style formatted description. */
+PN_EXTERN int pn_condition_vformat(pn_condition_t *, const char *name, const char *fmt, va_list ap);
+
+/** Set the name and printf-style formatted description. */
+PN_EXTERN int pn_condition_format(pn_condition_t *, const char *name, const char *fmt, ...);
+
 /**
  * Returns true if the condition is a redirect.
  *

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/include/proton/cproton.i
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/cproton.i b/proton-c/include/proton/cproton.i
index 8b0bf66..6129037 100644
--- a/proton-c/include/proton/cproton.i
+++ b/proton-c/include/proton/cproton.i
@@ -64,7 +64,8 @@ typedef unsigned long int uintptr_t;
 
 %ignore pn_error_format;
 %ignore pn_error_vformat;
-
+%ignore pn_condition_format;
+%ignore pn_condition_vformat;
 
 /* checks that ensure only allowed values are supplied or returned */
 %aggregate_check(int, check_error,

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/src/engine/engine.c
----------------------------------------------------------------------
diff --git a/proton-c/src/engine/engine.c b/proton-c/src/engine/engine.c
index b076a5f..ca7e4d8 100644
--- a/proton-c/src/engine/engine.c
+++ b/proton-c/src/engine/engine.c
@@ -2090,6 +2090,31 @@ int pn_condition_set_description(pn_condition_t *condition, const char *descript
   return pn_string_set(condition->description, description);
 }
 
+int pn_condition_vformat(pn_condition_t *condition, const char *name, const char *fmt, va_list ap)
+{
+  assert(condition);
+  int err = pn_condition_set_name(condition, name);
+  if (err)
+      return err;
+
+  char text[1024];
+  size_t n = vsnprintf(text, 1024, fmt, ap);
+  if (n >= sizeof(text))
+      text[sizeof(text)-1] = '\0';
+  err = pn_condition_set_description(condition, text);
+  return err;
+}
+
+int pn_condition_format(pn_condition_t *condition, const char *name, const char *fmt, ...)
+{
+  assert(condition);
+  va_list ap;
+  va_start(ap, fmt);
+  int err = pn_condition_vformat(condition, name, fmt, ap);
+  va_end(ap);
+  return err;
+}
+
 pn_data_t *pn_condition_info(pn_condition_t *condition)
 {
   assert(condition);

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/src/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/CMakeLists.txt b/proton-c/src/tests/CMakeLists.txt
index 3ea8bcf..59c7665 100644
--- a/proton-c/src/tests/CMakeLists.txt
+++ b/proton-c/src/tests/CMakeLists.txt
@@ -48,3 +48,4 @@ pn_add_c_test (c-refcount-tests refcount.c)
 pn_add_c_test (c-reactor-tests reactor.c)
 pn_add_c_test (c-event-tests event.c)
 pn_add_c_test (c-data-tests data.c)
+pn_add_c_test (c-condition-tests condition.c)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/12a6e4d3/proton-c/src/tests/condition.c
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/condition.c b/proton-c/src/tests/condition.c
new file mode 100644
index 0000000..b7d63be
--- /dev/null
+++ b/proton-c/src/tests/condition.c
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <proton/condition.h>
+#include <proton/connection.h>
+#include <stdio.h>
+#include <string.h>
+
+static int fail = 0;
+
+#define TEST_ASSERT(B)                                  \
+    if(!(B)) {                                          \
+        ++fail;                                         \
+        printf("%s:%d %s\n", __FILE__, __LINE__ , #B); \
+    }
+
+int main(int argc, char **argv) {
+    pn_connection_t *c = pn_connection();
+    pn_condition_t *cond = pn_connection_condition(c);
+
+    // Verify empty
+    TEST_ASSERT(!pn_condition_is_set(cond));
+    TEST_ASSERT(!pn_condition_get_name(cond));
+    TEST_ASSERT(!pn_condition_get_description(cond));
+
+    // Format a condition
+    pn_condition_format(cond, "foo", "hello %d", 42);
+    TEST_ASSERT(pn_condition_is_set(cond));
+    TEST_ASSERT(strcmp("foo", pn_condition_get_name(cond)) == 0);
+    TEST_ASSERT(strcmp("hello 42", pn_condition_get_description(cond)) == 0);
+
+    // Clear and verify empty
+    pn_condition_clear(cond);
+    TEST_ASSERT(!pn_condition_is_set(cond));
+    TEST_ASSERT(!pn_condition_get_name(cond));
+    TEST_ASSERT(!pn_condition_get_description(cond));
+
+    pn_connection_release(c);
+    return fail;
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org