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