LCOV - code coverage report
Current view: top level - fixed_count - fixed_count_unittests.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 107 108 99.1 %
Date: 2023-02-14 20:10:26 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #include <stdio.h>
       2             : #include <string.h>
       3             : #include <pb_decode.h>
       4             : #include <pb_encode.h>
       5             : #include <malloc_wrappers.h>
       6             : #include "unittests.h"
       7             : #include "fixed_count.pb.h"
       8             : 
       9           1 : int main()
      10             : {
      11           1 :     int status = 0;
      12             : 
      13             :     {
      14             :       pb_byte_t buffer[Message1_size];
      15           1 :       Message1 msg_a = Message1_init_zero;
      16           1 :       Message1 msg_b = Message1_init_zero;
      17             : 
      18             :       pb_ostream_t ostream;
      19             :       pb_istream_t istream;
      20             :       size_t message_length;
      21             : 
      22           1 :       msg_a.data[0] = 1;
      23           1 :       msg_a.data[0] = 2;
      24           1 :       msg_a.data[0] = 3;
      25             : 
      26           1 :       COMMENT("Test encode and decode with three entries");
      27             : 
      28           1 :       ostream = pb_ostream_from_buffer(buffer, Message1_size);
      29           1 :       TEST(pb_encode(&ostream, Message1_fields, &msg_a));
      30           1 :       message_length = ostream.bytes_written;
      31             : 
      32           1 :       istream = pb_istream_from_buffer(buffer, message_length);
      33           1 :       TEST(pb_decode(&istream, Message1_fields, &msg_b));
      34             : 
      35           1 :       TEST(istream.bytes_left == 0);
      36           1 :       TEST(memcmp(&msg_b, &msg_a, sizeof(msg_a)) == 0);
      37             :     }
      38             : 
      39             :     {
      40           1 :       pb_byte_t input[] = {0x08, 0x00, 0x08, 0x01, 0x08, 0x02, 0x08, 0x03};
      41             :       pb_istream_t stream;
      42           1 :       Message1 msg = Message1_init_zero;
      43             : 
      44           1 :       COMMENT("Test wrong number of entries");
      45             : 
      46           1 :       stream = pb_istream_from_buffer(input, 6);
      47           1 :       TEST(pb_decode(&stream, Message1_fields, &msg));
      48           1 :       TEST(msg.data[0] == 0 && msg.data[1] == 1 && msg.data[2] == 2);
      49             : 
      50           1 :       stream = pb_istream_from_buffer(input, 8);
      51           1 :       TEST(!pb_decode(&stream, Message1_fields, &msg));
      52           1 :       TEST(strcmp(stream.errmsg, "array overflow") == 0);
      53             : 
      54           1 :       stream = pb_istream_from_buffer(input, 4);
      55           1 :       TEST(!pb_decode(&stream, Message1_fields, &msg));
      56           1 :       TEST(strcmp(stream.errmsg, "wrong size for fixed count field") == 0);
      57             :     }
      58             : 
      59             :     {
      60             :       pb_byte_t buffer[Message2_size];
      61           1 :       Message2 msg_a = Message2_init_zero;
      62           1 :       Message2 msg_b = Message2_init_zero;
      63             : 
      64             :       pb_ostream_t ostream;
      65             :       pb_istream_t istream;
      66             :       size_t message_length;
      67             : 
      68           1 :       COMMENT("Test encode and decode with nested messages");
      69             : 
      70           1 :       msg_a.data[0].data[0] = 1;
      71           1 :       msg_a.data[0].data[1] = 2;
      72           1 :       msg_a.data[0].data[2] = 3;
      73           1 :       msg_a.data[1].data[0] = 4;
      74           1 :       msg_a.data[1].data[1] = 5;
      75           1 :       msg_a.data[1].data[2] = 6;
      76             : 
      77           1 :       ostream = pb_ostream_from_buffer(buffer, Message2_size);
      78           1 :       TEST(pb_encode(&ostream, Message2_fields, &msg_a));
      79           1 :       message_length = ostream.bytes_written;
      80             : 
      81           1 :       istream = pb_istream_from_buffer(buffer, message_length);
      82           1 :       TEST(pb_decode(&istream, Message2_fields, &msg_b));
      83             : 
      84           1 :       TEST(istream.bytes_left == 0);
      85           1 :       TEST(memcmp(&msg_b, &msg_a, sizeof(msg_a)) == 0);
      86             :     }
      87             : 
      88             :     {
      89             :       pb_byte_t buffer[Message3_size];
      90           1 :       Message3 msg_a = Message3_init_zero;
      91           1 :       Message3 msg_b = Message3_init_zero;
      92             : 
      93             :       pb_ostream_t ostream;
      94             :       pb_istream_t istream;
      95             :       size_t message_length;
      96             : 
      97           1 :       COMMENT("Test encode and decode with two nested messages");
      98             : 
      99           1 :       msg_a.data1[0].data[0].data[0] = 1;
     100           1 :       msg_a.data1[0].data[0].data[1] = 2;
     101           1 :       msg_a.data1[0].data[0].data[2] = 3;
     102           1 :       msg_a.data1[0].data[1].data[0] = 4;
     103           1 :       msg_a.data1[0].data[1].data[1] = 5;
     104           1 :       msg_a.data1[0].data[1].data[2] = 6;
     105             : 
     106           1 :       msg_a.data1[1].data[0].data[0] = 7;
     107           1 :       msg_a.data1[1].data[0].data[1] = 8;
     108           1 :       msg_a.data1[1].data[0].data[2] = 9;
     109           1 :       msg_a.data1[1].data[1].data[0] = 10;
     110           1 :       msg_a.data1[1].data[1].data[1] = 11;
     111           1 :       msg_a.data1[1].data[1].data[2] = 12;
     112             : 
     113           1 :       msg_a.data2[0].data[0].data[0] = 11;
     114           1 :       msg_a.data2[0].data[0].data[1] = 12;
     115           1 :       msg_a.data2[0].data[0].data[2] = 13;
     116           1 :       msg_a.data2[0].data[1].data[0] = 14;
     117           1 :       msg_a.data2[0].data[1].data[1] = 15;
     118           1 :       msg_a.data2[0].data[1].data[2] = 16;
     119             : 
     120           1 :       msg_a.data2[1].data[0].data[0] = 17;
     121           1 :       msg_a.data2[1].data[0].data[1] = 18;
     122           1 :       msg_a.data2[1].data[0].data[2] = 19;
     123           1 :       msg_a.data2[1].data[1].data[0] = 110;
     124           1 :       msg_a.data2[1].data[1].data[1] = 111;
     125           1 :       msg_a.data2[1].data[1].data[2] = 112;
     126             : 
     127           1 :       ostream = pb_ostream_from_buffer(buffer, Message3_size);
     128           1 :       TEST(pb_encode(&ostream, Message3_fields, &msg_a));
     129           1 :       message_length = ostream.bytes_written;
     130             : 
     131           1 :       istream = pb_istream_from_buffer(buffer, message_length);
     132           1 :       TEST(pb_decode(&istream, Message3_fields, &msg_b));
     133             : 
     134           1 :       TEST(istream.bytes_left == 0);
     135           1 :       TEST(memcmp(&msg_b, &msg_a, sizeof(msg_a)) == 0);
     136             :     }
     137             : 
     138             :     {
     139             :       pb_byte_t buffer[256];
     140           1 :       Message4 msg_a = Message4_init_zero;
     141           1 :       Message4 msg_b = Message4_init_zero;
     142             : 
     143             :       pb_ostream_t ostream;
     144             :       pb_istream_t istream;
     145             :       size_t message_length;
     146             : 
     147           1 :       COMMENT("Test encode and decode with pointer type fixarray");
     148             : 
     149           1 :       SubMessage submsgs[pb_arraysize(Message4, submsgs[0])] = {SubMessage_init_zero};
     150           1 :       submsgs[0].a = 1;
     151           1 :       submsgs[1].a = 5;
     152           1 :       submsgs[2].a = 999;
     153             : 
     154           1 :       char a[5] = "a";
     155           1 :       char b[5] = "b";
     156           1 :       char abc[5] = "abc";
     157           1 :       char *strings[pb_arraysize(Message4, strings[0])] = {a, b, abc};
     158             : 
     159           1 :       msg_a.submsgs = &submsgs;
     160           1 :       msg_a.strings = &strings;
     161             : 
     162           1 :       ostream = pb_ostream_from_buffer(buffer, Message3_size);
     163           1 :       TEST(pb_encode(&ostream, Message4_fields, &msg_a));
     164           1 :       message_length = ostream.bytes_written;
     165             : 
     166           1 :       TEST(get_alloc_count() == 0);
     167             : 
     168           1 :       istream = pb_istream_from_buffer(buffer, message_length);
     169           1 :       TEST(pb_decode(&istream, Message4_fields, &msg_b));
     170             : 
     171           1 :       TEST(istream.bytes_left == 0);
     172             : 
     173           1 :       TEST((*msg_b.submsgs)[0].a == 1);
     174           1 :       TEST((*msg_b.submsgs)[1].a == 5);
     175           1 :       TEST((*msg_b.submsgs)[2].a == 999);
     176             : 
     177           1 :       TEST(strcmp((*msg_b.strings)[0], "a") == 0);
     178           1 :       TEST(strcmp((*msg_b.strings)[1], "b") == 0);
     179           1 :       TEST(strcmp((*msg_b.strings)[2], "abc") == 0);
     180             : 
     181           1 :       pb_release(Message4_fields, &msg_b);
     182             : 
     183           1 :       TEST(get_alloc_count() == 0);
     184             :     }
     185             : 
     186           1 :     if (status != 0)
     187           0 :         fprintf(stdout, "\n\nSome tests FAILED!\n");
     188             : 
     189           1 :     return status;
     190             : }

Generated by: LCOV version 1.14