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