Add testcase for issue #247
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sat, 25 Feb 2017 19:22:41 +0000 (21:22 +0200)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sat, 25 Feb 2017 19:22:41 +0000 (21:22 +0200)
tests/regression/issue_247/SConscript [new file with mode: 0644]
tests/regression/issue_247/padding.c [new file with mode: 0644]
tests/regression/issue_247/padding.proto [new file with mode: 0644]

diff --git a/tests/regression/issue_247/SConscript b/tests/regression/issue_247/SConscript
new file mode 100644 (file)
index 0000000..b41e9f2
--- /dev/null
@@ -0,0 +1,14 @@
+# Test that pb_check_proto3_default_value() correctly skips padding
+# bytes in submessage structures.
+
+Import("env")
+
+env.NanopbProto("padding")
+
+p = env.Program(["padding.c",
+                 "padding.pb.c",
+                 "$COMMON/pb_encode.o",
+                 "$COMMON/pb_common.o"])
+
+env.RunTest(p)
+
diff --git a/tests/regression/issue_247/padding.c b/tests/regression/issue_247/padding.c
new file mode 100644 (file)
index 0000000..8860179
--- /dev/null
@@ -0,0 +1,32 @@
+#include <pb_encode.h>
+#include <unittests.h>
+#include <string.h>
+#include "padding.pb.h"
+
+int main()
+{
+    int status = 0;
+    
+    TestMessage msg;
+    
+    /* Set padding bytes to garbage */
+    memset(&msg, 0xAA, sizeof(msg));
+    
+    /* Set all meaningful fields to 0 */
+    msg.submsg.boolfield = false;
+    msg.submsg.intfield = 0;
+    
+    /* Test encoding */
+    {
+        pb_byte_t buf[128] = {0};
+        pb_ostream_t stream = pb_ostream_from_buffer(buf, sizeof(buf));
+        TEST(pb_encode(&stream, TestMessage_fields, &msg));
+        
+        /* Because all fields have zero values, proto3 encoder
+         * shouldn't write out anything. */
+        TEST(stream.bytes_written == 0);
+    }
+    
+    return status;
+}
+
diff --git a/tests/regression/issue_247/padding.proto b/tests/regression/issue_247/padding.proto
new file mode 100644 (file)
index 0000000..20bddac
--- /dev/null
@@ -0,0 +1,12 @@
+syntax = "proto3";
+import "nanopb.proto";
+
+message SubMessage {
+    bool boolfield = 1;
+    int64 intfield = 2;
+}
+
+message TestMessage {
+    SubMessage submsg = 1;
+}
+