Path: blob/main/contrib/libcbor/test/stream_expectations.c
39507 views
#include "stream_expectations.h"12struct test_assertion assertions_queue[MAX_QUEUE_ITEMS];3int queue_size = 0;4int current_expectation = 0;56int clean_up_stream_assertions(void **state) {7if (queue_size != current_expectation) {8return 1; // We have not matched all expectations correctly9}10queue_size = current_expectation = 0;11free(*state);12return 0;13}1415/* Callbacks */16struct test_assertion current(void) {17return assertions_queue[current_expectation];18}1920/* Assertions builders and matcher callbacks */2122void assert_uint8_eq(uint8_t actual) {23assertions_queue[queue_size++] = (struct test_assertion){24UINT8_EQ, (union test_expectation_data){.int8 = actual}};25}2627void uint8_callback(void *_CBOR_UNUSED(_context), uint8_t actual) {28assert_true(current().expectation == UINT8_EQ);29assert_true(current().data.int8 == actual);30current_expectation++;31}3233void assert_uint16_eq(uint16_t actual) {34assertions_queue[queue_size++] = (struct test_assertion){35UINT16_EQ, (union test_expectation_data){.int16 = actual}};36}3738void uint16_callback(void *_CBOR_UNUSED(_context), uint16_t actual) {39assert_true(current().expectation == UINT16_EQ);40assert_true(current().data.int16 == actual);41current_expectation++;42}4344void assert_uint32_eq(uint32_t actual) {45assertions_queue[queue_size++] = (struct test_assertion){46UINT32_EQ, (union test_expectation_data){.int32 = actual}};47}4849void uint32_callback(void *_CBOR_UNUSED(_context), uint32_t actual) {50assert_true(current().expectation == UINT32_EQ);51assert_true(current().data.int32 == actual);52current_expectation++;53}5455void assert_uint64_eq(uint64_t actual) {56assertions_queue[queue_size++] = (struct test_assertion){57UINT64_EQ, (union test_expectation_data){.int64 = actual}};58}5960void uint64_callback(void *_CBOR_UNUSED(_context), uint64_t actual) {61assert_true(current().expectation == UINT64_EQ);62assert_true(current().data.int64 == actual);63current_expectation++;64}6566void assert_negint8_eq(uint8_t actual) {67assertions_queue[queue_size++] = (struct test_assertion){68NEGINT8_EQ, (union test_expectation_data){.int8 = actual}};69}7071void negint8_callback(void *_CBOR_UNUSED(_context), uint8_t actual) {72assert_true(current().expectation == NEGINT8_EQ);73assert_true(current().data.int8 == actual);74current_expectation++;75}7677void assert_negint16_eq(uint16_t actual) {78assertions_queue[queue_size++] = (struct test_assertion){79NEGINT16_EQ, (union test_expectation_data){.int16 = actual}};80}8182void negint16_callback(void *_CBOR_UNUSED(_context), uint16_t actual) {83assert_true(current().expectation == NEGINT16_EQ);84assert_true(current().data.int16 == actual);85current_expectation++;86}8788void assert_negint32_eq(uint32_t actual) {89assertions_queue[queue_size++] = (struct test_assertion){90NEGINT32_EQ, (union test_expectation_data){.int32 = actual}};91}9293void negint32_callback(void *_CBOR_UNUSED(_context), uint32_t actual) {94assert_true(current().expectation == NEGINT32_EQ);95assert_true(current().data.int32 == actual);96current_expectation++;97}9899void assert_negint64_eq(uint64_t actual) {100assertions_queue[queue_size++] = (struct test_assertion){101NEGINT64_EQ, (union test_expectation_data){.int64 = actual}};102}103104void negint64_callback(void *_CBOR_UNUSED(_context), uint64_t actual) {105assert_true(current().expectation == NEGINT64_EQ);106assert_true(current().data.int64 == actual);107current_expectation++;108}109110void assert_bstring_mem_eq(cbor_data address, size_t length) {111assertions_queue[queue_size++] = (struct test_assertion){112BSTRING_MEM_EQ,113(union test_expectation_data){.string = {address, length}}};114}115116void byte_string_callback(void *_CBOR_UNUSED(_context), cbor_data address,117uint64_t length) {118assert_true(current().expectation == BSTRING_MEM_EQ);119assert_true(current().data.string.address == address);120assert_true(current().data.string.length == length);121current_expectation++;122}123124void assert_bstring_indef_start(void) {125assertions_queue[queue_size++] =126(struct test_assertion){.expectation = BSTRING_INDEF_START};127}128129void byte_string_start_callback(void *_CBOR_UNUSED(_context)) {130assert_true(current().expectation == BSTRING_INDEF_START);131current_expectation++;132}133134void assert_string_mem_eq(cbor_data address, size_t length) {135assertions_queue[queue_size++] = (struct test_assertion){136STRING_MEM_EQ,137(union test_expectation_data){.string = {address, length}}};138}139140void string_callback(void *_CBOR_UNUSED(_context), cbor_data address,141uint64_t length) {142assert_true(current().expectation == STRING_MEM_EQ);143assert_true(current().data.string.address == address);144assert_true(current().data.string.length == length);145current_expectation++;146}147148void assert_string_indef_start(void) {149assertions_queue[queue_size++] =150(struct test_assertion){.expectation = STRING_INDEF_START};151}152153void string_start_callback(void *_CBOR_UNUSED(_context)) {154assert_true(current().expectation == STRING_INDEF_START);155current_expectation++;156}157158void assert_indef_break(void) {159assertions_queue[queue_size++] =160(struct test_assertion){.expectation = INDEF_BREAK};161}162163void indef_break_callback(void *_CBOR_UNUSED(_context)) {164assert_true(current().expectation == INDEF_BREAK);165current_expectation++;166}167168void assert_array_start(size_t length) {169assertions_queue[queue_size++] =170(struct test_assertion){ARRAY_START, {.length = length}};171}172173void array_start_callback(void *_CBOR_UNUSED(_context), uint64_t length) {174assert_true(current().expectation == ARRAY_START);175assert_true(current().data.length == length);176current_expectation++;177}178179void assert_indef_array_start(void) {180assertions_queue[queue_size++] =181(struct test_assertion){.expectation = ARRAY_INDEF_START};182}183184void indef_array_start_callback(void *_CBOR_UNUSED(_context)) {185assert_true(current().expectation == ARRAY_INDEF_START);186current_expectation++;187}188189void assert_map_start(size_t length) {190assertions_queue[queue_size++] =191(struct test_assertion){MAP_START, {.length = length}};192}193194void map_start_callback(void *_CBOR_UNUSED(_context), uint64_t length) {195assert_true(current().expectation == MAP_START);196assert_true(current().data.length == length);197current_expectation++;198}199200void assert_indef_map_start(void) {201assertions_queue[queue_size++] =202(struct test_assertion){.expectation = MAP_INDEF_START};203}204205void indef_map_start_callback(void *_CBOR_UNUSED(_context)) {206assert_true(current().expectation == MAP_INDEF_START);207current_expectation++;208}209210void assert_tag_eq(uint64_t value) {211assertions_queue[queue_size++] =212(struct test_assertion){TAG_EQ, {.int64 = value}};213}214215void tag_callback(void *_CBOR_UNUSED(_context), uint64_t value) {216assert_true(current().expectation == TAG_EQ);217assert_true(current().data.int64 == value);218current_expectation++;219}220221void assert_half(float value) {222assertions_queue[queue_size++] =223(struct test_assertion){HALF_EQ, {.float2 = value}};224}225226void half_callback(void *_CBOR_UNUSED(_context), float actual) {227assert_true(current().expectation == HALF_EQ);228assert_true(current().data.float2 == actual);229current_expectation++;230}231232void assert_float(float value) {233assertions_queue[queue_size++] =234(struct test_assertion){FLOAT_EQ, {.float4 = value}};235}236237void float_callback(void *_CBOR_UNUSED(_context), float actual) {238assert_true(current().expectation == FLOAT_EQ);239assert_true(current().data.float4 == actual);240current_expectation++;241}242243void assert_double(double value) {244assertions_queue[queue_size++] =245(struct test_assertion){DOUBLE_EQ, {.float8 = value}};246}247248void double_callback(void *_CBOR_UNUSED(_context), double actual) {249assert_true(current().expectation == DOUBLE_EQ);250assert_true(current().data.float8 == actual);251current_expectation++;252}253254void assert_bool(bool value) {255assertions_queue[queue_size++] =256(struct test_assertion){BOOL_EQ, {.boolean = value}};257}258259void assert_nil(void) {260assertions_queue[queue_size++] = (struct test_assertion){.expectation = NIL};261}262263void assert_undef(void) {264assertions_queue[queue_size++] =265(struct test_assertion){.expectation = UNDEF};266}267268void bool_callback(void *_CBOR_UNUSED(_context), bool actual) {269assert_true(current().expectation == BOOL_EQ);270assert_true(current().data.boolean == actual);271current_expectation++;272}273274void null_callback(void *_CBOR_UNUSED(_context)) {275assert_true(current().expectation == NIL);276current_expectation++;277}278279void undef_callback(void *_CBOR_UNUSED(_context)) {280assert_true(current().expectation == UNDEF);281current_expectation++;282}283284const struct cbor_callbacks asserting_callbacks = {285.uint8 = &uint8_callback,286.uint16 = &uint16_callback,287.uint32 = &uint32_callback,288.uint64 = &uint64_callback,289290.negint8 = &negint8_callback,291.negint16 = &negint16_callback,292.negint32 = &negint32_callback,293.negint64 = &negint64_callback,294295.byte_string = &byte_string_callback,296.byte_string_start = &byte_string_start_callback,297298.string = &string_callback,299.string_start = &string_start_callback,300301.array_start = &array_start_callback,302.indef_array_start = &indef_array_start_callback,303304.map_start = &map_start_callback,305.indef_map_start = &indef_map_start_callback,306307.tag = &tag_callback,308309.float2 = &half_callback,310.float4 = &float_callback,311.float8 = &double_callback,312313.undefined = &undef_callback,314.boolean = &bool_callback,315.null = &null_callback,316.indef_break = &indef_break_callback};317318struct cbor_decoder_result decode(cbor_data source, size_t source_size) {319int last_expectation = current_expectation;320struct cbor_decoder_result result =321cbor_stream_decode(source, source_size, &asserting_callbacks, NULL);322if (result.status == CBOR_DECODER_FINISHED) {323// Check that we have matched an expectation from the queue324assert_true(last_expectation + 1 == current_expectation);325}326return result;327}328329330