1*c8d645caSAndroid Build Coastguard Worker /* Checks that missing required fields are detected properly */
2*c8d645caSAndroid Build Coastguard Worker
3*c8d645caSAndroid Build Coastguard Worker #include <stdio.h>
4*c8d645caSAndroid Build Coastguard Worker #include <pb_encode.h>
5*c8d645caSAndroid Build Coastguard Worker #include <pb_decode.h>
6*c8d645caSAndroid Build Coastguard Worker #include "missing_fields.pb.h"
7*c8d645caSAndroid Build Coastguard Worker
main()8*c8d645caSAndroid Build Coastguard Worker int main()
9*c8d645caSAndroid Build Coastguard Worker {
10*c8d645caSAndroid Build Coastguard Worker uint8_t buffer[512];
11*c8d645caSAndroid Build Coastguard Worker size_t size;
12*c8d645caSAndroid Build Coastguard Worker
13*c8d645caSAndroid Build Coastguard Worker /* Create a message with one missing field */
14*c8d645caSAndroid Build Coastguard Worker {
15*c8d645caSAndroid Build Coastguard Worker MissingField msg = {0};
16*c8d645caSAndroid Build Coastguard Worker pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
17*c8d645caSAndroid Build Coastguard Worker
18*c8d645caSAndroid Build Coastguard Worker if (!pb_encode(&stream, MissingField_fields, &msg))
19*c8d645caSAndroid Build Coastguard Worker {
20*c8d645caSAndroid Build Coastguard Worker printf("Encode failed.\n");
21*c8d645caSAndroid Build Coastguard Worker return 1;
22*c8d645caSAndroid Build Coastguard Worker }
23*c8d645caSAndroid Build Coastguard Worker
24*c8d645caSAndroid Build Coastguard Worker size = stream.bytes_written;
25*c8d645caSAndroid Build Coastguard Worker }
26*c8d645caSAndroid Build Coastguard Worker
27*c8d645caSAndroid Build Coastguard Worker /* Test that it decodes properly if we don't require that field */
28*c8d645caSAndroid Build Coastguard Worker {
29*c8d645caSAndroid Build Coastguard Worker MissingField msg = {0};
30*c8d645caSAndroid Build Coastguard Worker pb_istream_t stream = pb_istream_from_buffer(buffer, size);
31*c8d645caSAndroid Build Coastguard Worker
32*c8d645caSAndroid Build Coastguard Worker if (!pb_decode(&stream, MissingField_fields, &msg))
33*c8d645caSAndroid Build Coastguard Worker {
34*c8d645caSAndroid Build Coastguard Worker printf("Decode failed: %s\n", PB_GET_ERROR(&stream));
35*c8d645caSAndroid Build Coastguard Worker return 2;
36*c8d645caSAndroid Build Coastguard Worker }
37*c8d645caSAndroid Build Coastguard Worker }
38*c8d645caSAndroid Build Coastguard Worker
39*c8d645caSAndroid Build Coastguard Worker /* Test that it does *not* decode properly if we require the field */
40*c8d645caSAndroid Build Coastguard Worker {
41*c8d645caSAndroid Build Coastguard Worker AllFields msg = {0};
42*c8d645caSAndroid Build Coastguard Worker pb_istream_t stream = pb_istream_from_buffer(buffer, size);
43*c8d645caSAndroid Build Coastguard Worker
44*c8d645caSAndroid Build Coastguard Worker if (pb_decode(&stream, AllFields_fields, &msg))
45*c8d645caSAndroid Build Coastguard Worker {
46*c8d645caSAndroid Build Coastguard Worker printf("Decode didn't detect missing field.\n");
47*c8d645caSAndroid Build Coastguard Worker return 3;
48*c8d645caSAndroid Build Coastguard Worker }
49*c8d645caSAndroid Build Coastguard Worker }
50*c8d645caSAndroid Build Coastguard Worker
51*c8d645caSAndroid Build Coastguard Worker return 0; /* All ok */
52*c8d645caSAndroid Build Coastguard Worker }
53*c8d645caSAndroid Build Coastguard Worker
54