Home | History | Annotate | Line # | Download | only in test
      1 /*
      2  * This file provides testing tools for the streaming decoder. The intended
      3  * usage is as follows: 1) SE API wrapper is initialized 2) Client builds
      4  * (ordered) series of expectations 3) The decoder is executed 4) SE checks all
      5  * assertions 5) Go to 2) if desired
      6  */
      7 
      8 #ifndef STREAM_EXPECTATIONS_H_
      9 #define STREAM_EXPECTATIONS_H_
     10 
     11 #include <setjmp.h>
     12 #include <stdarg.h>
     13 #include <stddef.h>
     14 
     15 #include <cmocka.h>
     16 
     17 #include <stdint.h>
     18 #include "cbor.h"
     19 
     20 #define MAX_QUEUE_ITEMS 30
     21 
     22 enum test_expectation {
     23   UINT8_EQ,
     24   UINT16_EQ,
     25   UINT32_EQ,
     26   UINT64_EQ,
     27 
     28   NEGINT8_EQ,
     29   NEGINT16_EQ,
     30   NEGINT32_EQ,
     31   NEGINT64_EQ,
     32 
     33   BSTRING_MEM_EQ, /* Matches length and memory address for definite byte strings
     34                    */
     35   BSTRING_INDEF_START,
     36 
     37   ARRAY_START, /* Definite arrays only */
     38   ARRAY_INDEF_START,
     39 
     40   MAP_START, /* Definite maps only */
     41   MAP_INDEF_START,
     42 
     43   TAG_EQ,
     44 
     45   HALF_EQ,
     46   FLOAT_EQ,
     47   DOUBLE_EQ,
     48   BOOL_EQ,
     49   NIL,
     50   UNDEF,
     51   INDEF_BREAK /* Expect "Break" */
     52 };
     53 
     54 union test_expectation_data {
     55   uint8_t int8;
     56   uint16_t int16;
     57   uint32_t int32;
     58   uint64_t int64;
     59   struct string {
     60     cbor_data address;
     61     size_t length;
     62   } string;
     63   size_t length;
     64   float float2;
     65   float float4;
     66   double float8;
     67   bool boolean;
     68 };
     69 
     70 struct test_assertion {
     71   enum test_expectation expectation;
     72   union test_expectation_data data;
     73 };
     74 
     75 /* Tested function */
     76 typedef struct cbor_decoder_result decoder_t(cbor_data, size_t,
     77                                              const struct cbor_callbacks *,
     78                                              void *);
     79 
     80 void set_decoder(decoder_t *);
     81 struct cbor_decoder_result decode(cbor_data, size_t);
     82 
     83 /* Assertions builders */
     84 
     85 void assert_uint8_eq(uint8_t);
     86 void assert_uint16_eq(uint16_t);
     87 void assert_uint32_eq(uint32_t);
     88 void assert_uint64_eq(uint64_t);
     89 
     90 void assert_negint8_eq(uint8_t);
     91 void assert_negint16_eq(uint16_t);
     92 void assert_negint32_eq(uint32_t);
     93 void assert_negint64_eq(uint64_t);
     94 
     95 void assert_bstring_mem_eq(cbor_data, size_t);
     96 void assert_bstring_indef_start();
     97 
     98 void assert_array_start(size_t);
     99 void assert_indef_array_start();
    100 
    101 void assert_map_start(size_t);
    102 void assert_indef_map_start();
    103 
    104 void assert_tag_eq(uint64_t);
    105 
    106 void assert_half(float);
    107 void assert_float(float);
    108 void assert_double(double);
    109 
    110 void assert_bool(bool);
    111 void assert_nil(); /* assert_null already exists */
    112 void assert_undef();
    113 
    114 void assert_indef_break();
    115 
    116 /* Assertions verifying callbacks */
    117 void uint8_callback(void *, uint8_t);
    118 void uint16_callback(void *, uint16_t);
    119 void uint32_callback(void *, uint32_t);
    120 void uint64_callback(void *, uint64_t);
    121 
    122 void negint8_callback(void *, uint8_t);
    123 void negint16_callback(void *, uint16_t);
    124 void negint32_callback(void *, uint32_t);
    125 void negint64_callback(void *, uint64_t);
    126 
    127 void byte_string_callback(void *, cbor_data, size_t);
    128 void byte_string_start_callback(void *);
    129 
    130 void array_start_callback(void *, size_t);
    131 void indef_array_start_callback(void *);
    132 
    133 void map_start_callback(void *, size_t);
    134 void indef_map_start_callback(void *);
    135 
    136 void tag_callback(void *, uint64_t);
    137 
    138 void half_callback(void *, float);
    139 void float_callback(void *, float);
    140 void double_callback(void *, double);
    141 void indef_break_callback(void *);
    142 
    143 void bool_callback(void *, bool);
    144 void null_callback(void *);
    145 void undef_callback(void *);
    146 
    147 #endif
    148