Improve the detection of missing required fields.
Now the limit of tracked fields is configurable at compile-time using PB_MAX_REQUIRED_FIELDS. Added related test and updated documentation. Fixes issue #18.
This commit is contained in:
49
tests/test_missing_fields.c
Normal file
49
tests/test_missing_fields.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/* Checks that missing required fields are detected properly */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pb_encode.h>
|
||||
#include <pb_decode.h>
|
||||
#include "missing_fields.pb.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
uint8_t buffer[512] = {};
|
||||
|
||||
/* Create a message with one missing field */
|
||||
{
|
||||
MissingField msg = {};
|
||||
pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
|
||||
if (!pb_encode(&stream, MissingField_fields, &msg))
|
||||
{
|
||||
printf("Encode failed.\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Test that it decodes properly if we don't require that field */
|
||||
{
|
||||
MissingField msg = {};
|
||||
pb_istream_t stream = pb_istream_from_buffer(buffer, sizeof(buffer));
|
||||
|
||||
if (!pb_decode(&stream, MissingField_fields, &msg))
|
||||
{
|
||||
printf("Decode failed.\n");
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
/* Test that it does *not* decode properly if we require the field */
|
||||
{
|
||||
AllFields msg = {};
|
||||
pb_istream_t stream = pb_istream_from_buffer(buffer, sizeof(buffer));
|
||||
|
||||
if (pb_decode(&stream, AllFields_fields, &msg))
|
||||
{
|
||||
printf("Decode didn't detect missing field.\n");
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
return 0; /* All ok */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user