aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2020-11-25 08:52:53 +0200
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2020-11-25 11:40:51 +0200
commitd9d5dfd869aca4d00a81f671b2445fb4cea0352f (patch)
tree28ea695609f6fe42deb2a924b1e8f5849b9cf378
parent8119dfe5631f2616d11e50ead95448d12e816062 (diff)
downloadnanopb-c-d9d5dfd869aca4d00a81f671b2445fb4cea0352f.tar.gz
Expand mem_release testcase to cover submessage merge (#615)
This also covers the fairly rarely used behavior of protobuf C++ library regarding oneof merges: if an oneof submessage occurs multiple times in a message, their contents are merged together. This behavior was also previously broken in nanopb.
-rw-r--r--tests/mem_release/mem_release.c35
1 files changed, 30 insertions, 5 deletions
diff --git a/tests/mem_release/mem_release.c b/tests/mem_release/mem_release.c
index 6e06da5..fae4516 100644
--- a/tests/mem_release/mem_release.c
+++ b/tests/mem_release/mem_release.c
@@ -133,13 +133,16 @@ static bool test_OneofMessage()
}
}
- /* Encode second with SubMessage, invoking 'merge' behaviour */
+ /* Encode second with SubMessage, replacing the oneof item */
{
OneofMessage msg = OneofMessage_init_zero;
+ char *teststr = "1";
msg.which_msgs = OneofMessage_msg2_tag;
msg.first = 999;
msg.msgs.msg2.dynamic_str = "ABCD";
+ msg.msgs.msg2.dynamic_str_arr_count = 1;
+ msg.msgs.msg2.dynamic_str_arr = &teststr;
msg.last = 888;
if (!pb_encode(&stream, OneofMessage_fields, &msg))
@@ -148,6 +151,25 @@ static bool test_OneofMessage()
return false;
}
}
+
+ /* Encode second SubMessage, invoking submessage merge behavior */
+ {
+ OneofMessage msg = OneofMessage_init_zero;
+ char *teststr = "2";
+ msg.which_msgs = OneofMessage_msg2_tag;
+
+ msg.first = 99;
+ msg.msgs.msg2.dynamic_str = "EFGH";
+ msg.msgs.msg2.dynamic_str_arr_count = 1;
+ msg.msgs.msg2.dynamic_str_arr = &teststr;
+ msg.last = 88;
+
+ if (!pb_encode(&stream, OneofMessage_fields, &msg))
+ {
+ fprintf(stderr, "Encode failed: %s\n", PB_GET_ERROR(&stream));
+ return false;
+ }
+ }
msgsize = stream.bytes_written;
}
@@ -160,13 +182,16 @@ static bool test_OneofMessage()
return false;
}
- TEST(msg.first == 999);
+ TEST(msg.first == 99);
TEST(msg.which_msgs == OneofMessage_msg2_tag);
TEST(msg.msgs.msg2.dynamic_str);
- TEST(strcmp(msg.msgs.msg2.dynamic_str, "ABCD") == 0);
- TEST(msg.msgs.msg2.dynamic_str_arr == NULL);
+ TEST(strcmp(msg.msgs.msg2.dynamic_str, "EFGH") == 0);
+ TEST(msg.msgs.msg2.dynamic_str_arr != NULL);
+ TEST(msg.msgs.msg2.dynamic_str_arr_count == 2);
+ TEST(strcmp(msg.msgs.msg2.dynamic_str_arr[0], "1") == 0);
+ TEST(strcmp(msg.msgs.msg2.dynamic_str_arr[1], "2") == 0);
TEST(msg.msgs.msg2.dynamic_submsg == NULL);
- TEST(msg.last == 888);
+ TEST(msg.last == 88);
pb_release(OneofMessage_fields, &msg);
TEST(get_alloc_count() == 0);