PROTON-1942: [c] decoding a message does not set the inferred flag.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/b114344f Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/b114344f Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/b114344f Branch: refs/heads/go1 Commit: b114344ffa2281b09af60b9635a79f7fb735a012 Parents: b429db0 Author: Alan Conway <acon...@redhat.com> Authored: Thu Sep 27 14:04:48 2018 -0400 Committer: Alan Conway <acon...@redhat.com> Committed: Thu Sep 27 14:08:00 2018 -0400 ---------------------------------------------------------------------- c/src/core/message.c | 6 +++++ c/tests/message.c | 57 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 59 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b114344f/c/src/core/message.c ---------------------------------------------------------------------- diff --git a/c/src/core/message.c b/c/src/core/message.c index 41ccd08..a52dce8 100644 --- a/c/src/core/message.c +++ b/c/src/core/message.c @@ -737,7 +737,13 @@ int pn_message_decode(pn_message_t *msg, const char *bytes, size_t size) break; case DATA: case AMQP_SEQUENCE: + msg->inferred = true; + pn_data_narrow(msg->data); + err = pn_data_copy(msg->body, msg->data); + if (err) return err; + break; case AMQP_VALUE: + msg->inferred = false; pn_data_narrow(msg->data); err = pn_data_copy(msg->body, msg->data); if (err) return err; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b114344f/c/tests/message.c ---------------------------------------------------------------------- diff --git a/c/tests/message.c b/c/tests/message.c index 5362b7d..7a6dc4f 100644 --- a/c/tests/message.c +++ b/c/tests/message.c @@ -19,6 +19,8 @@ * */ +#include "test_tools.h" + #include <stdarg.h> #include <stdio.h> #include <stdlib.h> @@ -28,20 +30,67 @@ #define assert(E) ((E) ? 0 : (abort(), 0)) -static void test_overflow_error(void) +static void test_overflow_error(test_t *t) { pn_message_t *message = pn_message(); char buf[6]; size_t size = 6; int err = pn_message_encode(message, buf, &size); - assert(err == PN_OVERFLOW); - assert(pn_message_errno(message) == 0); + TEST_INT_EQUAL(t,PN_OVERFLOW, err); + TEST_INT_EQUAL(t, 0, pn_message_errno(message)); pn_message_free(message); } +static void recode(pn_message_t *dst, pn_message_t *src) { + pn_rwbytes_t buf = { 0 }; + int size = pn_message_encode2(src, &buf); + assert(size > 0); + pn_message_decode(dst, buf.start, size); + free(buf.start); +} + +static void test_inferred(test_t *t) { + pn_message_t *src = pn_message(); + pn_message_t *dst = pn_message(); + + TEST_CHECK(t, !pn_message_is_inferred(src)); + pn_data_put_binary(pn_message_body(src), PN_BYTES_LITERAL("hello")); + recode(dst, src); + TEST_CHECK(t, !pn_message_is_inferred(dst)); + pn_message_set_inferred(src, true); + recode(dst, src); + TEST_CHECK(t, pn_message_is_inferred(dst)); + + pn_message_clear(src); + TEST_CHECK(t, !pn_message_is_inferred(src)); + pn_data_put_list(pn_message_body(src)); + pn_data_enter(pn_message_body(src)); + pn_data_put_binary(pn_message_body(src), PN_BYTES_LITERAL("hello")); + recode(dst, src); + TEST_CHECK(t, !pn_message_is_inferred(dst)); + pn_message_set_inferred(src, true); + recode(dst, src); + TEST_CHECK(t, pn_message_is_inferred(dst)); + + pn_message_clear(src); + TEST_CHECK(t, !pn_message_is_inferred(src)); + pn_data_put_string(pn_message_body(src), PN_BYTES_LITERAL("hello")); + recode(dst, src); + TEST_CHECK(t, !pn_message_is_inferred(dst)); + pn_message_set_inferred(src, true); + recode(dst, src); + /* A value section is never considered to be inferred */ + TEST_CHECK(t, !pn_message_is_inferred(dst)); + + pn_message_free(src); + pn_message_free(dst); +} + int main(int argc, char **argv) { - test_overflow_error(); + int failed = 0; + RUN_ARGV_TEST(failed, t, test_overflow_error(&t)); + RUN_ARGV_TEST(failed, t, test_inferred(&t)); return 0; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org