Files
nanopb/tests/extensions/decode_extensions.c
Petteri Aimonen 6d278fb70b Fix more stack overflows in test cases on AVR.
printf() strings go into ram on AVR, move most
tests to use the common logic in unittests.h that
only prints line numbers on AVR.
2020-02-02 08:36:46 +02:00

58 lines
1.5 KiB
C

/* Test decoding of extension fields. */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pb_decode.h>
#include "alltypes.pb.h"
#include "extensions.pb.h"
#include "test_helpers.h"
#include "unittests.h"
int main(int argc, char **argv)
{
uint8_t buffer[1024];
size_t count;
pb_istream_t stream;
int status = 0;
AllTypes alltypes = AllTypes_init_zero;
int32_t extensionfield1;
pb_extension_t ext1 = pb_extension_init_zero;
ExtensionMessage extensionfield2 = ExtensionMessage_init_zero;
pb_extension_t ext2 = pb_extension_init_zero;
/* Read the message data */
SET_BINARY_MODE(stdin);
count = fread(buffer, 1, sizeof(buffer), stdin);
stream = pb_istream_from_buffer(buffer, count);
/* Add the extensions */
alltypes.extensions = &ext1;
ext1.type = &AllTypes_extensionfield1;
ext1.dest = &extensionfield1;
ext1.next = &ext2;
ext2.type = &ExtensionMessage_AllTypes_extensionfield2;
ext2.dest = &extensionfield2;
ext2.next = NULL;
/* Decode the message */
if (!pb_decode(&stream, AllTypes_fields, &alltypes))
{
printf("Parsing failed: %s\n", PB_GET_ERROR(&stream));
return 1;
}
/* Check that the extensions decoded properly */
TEST(ext1.found)
TEST(extensionfield1 == 12345)
TEST(ext2.found)
TEST(strcmp(extensionfield2.test1, "test") == 0)
TEST(extensionfield2.test2 == 54321)
return status;
}