1 /*
2 * Copyright (c) 2023 Basalte bv
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <string.h>
8 #include <zephyr/kernel.h>
9 #include <zephyr/ztest.h>
10
11 #include <pb_encode.h>
12 #include <pb_decode.h>
13
14 #include <proto/simple.pb.h>
15 #include <proto/complex.pb.h>
16
17 #include "lib.h"
18
ZTEST(nanopb_tests,test_nanopb_simple)19 ZTEST(nanopb_tests, test_nanopb_simple)
20 {
21 uint8_t buffer[SimpleMessage_size];
22 SimpleMessage msg = SimpleMessage_init_zero;
23
24 for (size_t i = 0; i < sizeof(msg.buffer); ++i) {
25 msg.buffer[i] = i;
26 }
27
28 pb_ostream_t ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
29
30 zassert_true(pb_encode(&ostream, SimpleMessage_fields, &msg),
31 "Encoding failed: %s", PB_GET_ERROR(&ostream));
32
33 /* Coherence check, clear data */
34 memset(&msg, 0, sizeof(SimpleMessage));
35
36 pb_istream_t istream = pb_istream_from_buffer(buffer, ostream.bytes_written);
37
38 zassert_true(pb_decode(&istream, SimpleMessage_fields, &msg),
39 "Decoding failed: %s", PB_GET_ERROR(&istream));
40
41 for (size_t i = 0; i < sizeof(msg.buffer); ++i) {
42 zassert_equal(msg.buffer[i], i);
43 }
44
45 pb_release(SimpleMessage_fields, &msg);
46 }
47
ZTEST(nanopb_tests,test_nanopb_nested)48 ZTEST(nanopb_tests, test_nanopb_nested)
49 {
50 uint8_t buffer[ComplexMessage_size];
51 ComplexMessage msg = ComplexMessage_init_zero;
52
53 msg.has_nested = true;
54 msg.nested.id = 42;
55 strcpy(msg.nested.name, "Test name");
56
57 pb_ostream_t ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
58
59 zassert_true(pb_encode(&ostream, ComplexMessage_fields, &msg),
60 "Encoding failed: %s", PB_GET_ERROR(&ostream));
61
62 /* Coherence check, clear data */
63 memset(&msg, 0, sizeof(ComplexMessage));
64
65 pb_istream_t istream = pb_istream_from_buffer(buffer, ostream.bytes_written);
66
67 zassert_true(pb_decode(&istream, ComplexMessage_fields, &msg),
68 "Decoding failed: %s", PB_GET_ERROR(&istream));
69
70 zassert_equal(42, msg.nested.id);
71 zassert_true(msg.has_nested);
72 zassert_str_equal(msg.nested.name, "Test name");
73
74 pb_release(ComplexMessage_fields, &msg);
75 }
76
ZTEST(nanopb_tests,test_nanopb_lib)77 ZTEST(nanopb_tests, test_nanopb_lib)
78 {
79 SimpleMessage msg = SimpleMessage_init_zero;
80
81 lib_fill_message(&msg);
82
83 for (size_t i = 0; i < sizeof(msg.buffer); ++i) {
84 zassert_equal(msg.buffer[i], sizeof(msg.buffer) - i);
85 }
86 }
87
88 ZTEST_SUITE(nanopb_tests, NULL, NULL, NULL, NULL, NULL);
89