110ff414cSEd Maste /* 210ff414cSEd Maste * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com> 310ff414cSEd Maste * 410ff414cSEd Maste * libcbor is free software; you can redistribute it and/or modify 510ff414cSEd Maste * it under the terms of the MIT license. See LICENSE for details. 610ff414cSEd Maste */ 710ff414cSEd Maste 85d3e7166SEd Maste // cbor_serialize_alloc 95d3e7166SEd Maste #pragma clang diagnostic ignored "-Wdeprecated-declarations" 105d3e7166SEd Maste #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 115d3e7166SEd Maste 125d3e7166SEd Maste #include <math.h> 1310ff414cSEd Maste #include <setjmp.h> 1410ff414cSEd Maste #include <stdarg.h> 1510ff414cSEd Maste #include <stddef.h> 165d3e7166SEd Maste #include <stdint.h> 175d3e7166SEd Maste #include <string.h> 1810ff414cSEd Maste 1910ff414cSEd Maste #include <cmocka.h> 2010ff414cSEd Maste 215d3e7166SEd Maste #include "assertions.h" 2210ff414cSEd Maste #include "cbor.h" 235d3e7166SEd Maste #include "test_allocator.h" 2410ff414cSEd Maste 2510ff414cSEd Maste unsigned char buffer[512]; 2610ff414cSEd Maste 275d3e7166SEd Maste static void test_serialize_uint8_embed(void **_CBOR_UNUSED(_state)) { 2810ff414cSEd Maste cbor_item_t *item = cbor_new_int8(); 2910ff414cSEd Maste cbor_set_uint8(item, 0); 305d3e7166SEd Maste assert_size_equal(1, cbor_serialize(item, buffer, 512)); 3110ff414cSEd Maste assert_memory_equal(buffer, (unsigned char[]){0x00}, 1); 325d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 3310ff414cSEd Maste cbor_decref(&item); 3410ff414cSEd Maste } 3510ff414cSEd Maste 365d3e7166SEd Maste static void test_serialize_uint8(void **_CBOR_UNUSED(_state)) { 375d3e7166SEd Maste cbor_item_t *item = cbor_new_int8(); 385d3e7166SEd Maste cbor_set_uint8(item, 42); 395d3e7166SEd Maste assert_size_equal(2, cbor_serialize(item, buffer, 512)); 405d3e7166SEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x18, 0x2a}), 2); 415d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 425d3e7166SEd Maste cbor_decref(&item); 435d3e7166SEd Maste } 445d3e7166SEd Maste 455d3e7166SEd Maste static void test_serialize_uint16(void **_CBOR_UNUSED(_state)) { 4610ff414cSEd Maste cbor_item_t *item = cbor_new_int16(); 4710ff414cSEd Maste cbor_set_uint16(item, 1000); 485d3e7166SEd Maste assert_size_equal(3, cbor_serialize(item, buffer, 512)); 4910ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x19, 0x03, 0xE8}), 3); 505d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 5110ff414cSEd Maste cbor_decref(&item); 5210ff414cSEd Maste } 5310ff414cSEd Maste 545d3e7166SEd Maste static void test_serialize_uint32(void **_CBOR_UNUSED(_state)) { 5510ff414cSEd Maste cbor_item_t *item = cbor_new_int32(); 5610ff414cSEd Maste cbor_set_uint32(item, 1000000); 575d3e7166SEd Maste assert_size_equal(5, cbor_serialize(item, buffer, 512)); 5810ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x1A, 0x00, 0x0F, 0x42, 0x40}), 5910ff414cSEd Maste 5); 605d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 5); 6110ff414cSEd Maste cbor_decref(&item); 6210ff414cSEd Maste } 6310ff414cSEd Maste 645d3e7166SEd Maste static void test_serialize_uint64(void **_CBOR_UNUSED(_state)) { 6510ff414cSEd Maste cbor_item_t *item = cbor_new_int64(); 6610ff414cSEd Maste cbor_set_uint64(item, 1000000000000); 675d3e7166SEd Maste assert_size_equal(9, cbor_serialize(item, buffer, 512)); 6810ff414cSEd Maste assert_memory_equal( 6910ff414cSEd Maste buffer, 7010ff414cSEd Maste ((unsigned char[]){0x1B, 0x00, 0x00, 0x00, 0xE8, 0xD4, 0xA5, 0x10, 0x00}), 7110ff414cSEd Maste 9); 725d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 9); 7310ff414cSEd Maste cbor_decref(&item); 7410ff414cSEd Maste } 7510ff414cSEd Maste 765d3e7166SEd Maste static void test_serialize_negint8_embed(void **_CBOR_UNUSED(_state)) { 7710ff414cSEd Maste cbor_item_t *item = cbor_new_int8(); 7810ff414cSEd Maste cbor_set_uint8(item, 0); 7910ff414cSEd Maste cbor_mark_negint(item); 805d3e7166SEd Maste assert_size_equal(1, cbor_serialize(item, buffer, 512)); 8110ff414cSEd Maste assert_memory_equal(buffer, (unsigned char[]){0x20}, 1); 825d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 8310ff414cSEd Maste cbor_decref(&item); 8410ff414cSEd Maste } 8510ff414cSEd Maste 865d3e7166SEd Maste static void test_serialize_negint8(void **_CBOR_UNUSED(_state)) { 875d3e7166SEd Maste cbor_item_t *item = cbor_new_int8(); 885d3e7166SEd Maste cbor_set_uint8(item, 42); 895d3e7166SEd Maste cbor_mark_negint(item); 905d3e7166SEd Maste assert_size_equal(2, cbor_serialize(item, buffer, 512)); 915d3e7166SEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x38, 0x2a}), 2); 925d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 935d3e7166SEd Maste cbor_decref(&item); 945d3e7166SEd Maste } 955d3e7166SEd Maste 965d3e7166SEd Maste static void test_serialize_negint16(void **_CBOR_UNUSED(_state)) { 9710ff414cSEd Maste cbor_item_t *item = cbor_new_int16(); 9810ff414cSEd Maste cbor_set_uint16(item, 1000); 9910ff414cSEd Maste cbor_mark_negint(item); 1005d3e7166SEd Maste assert_size_equal(3, cbor_serialize(item, buffer, 512)); 10110ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x39, 0x03, 0xE8}), 3); 1025d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 10310ff414cSEd Maste cbor_decref(&item); 10410ff414cSEd Maste } 10510ff414cSEd Maste 1065d3e7166SEd Maste static void test_serialize_negint32(void **_CBOR_UNUSED(_state)) { 10710ff414cSEd Maste cbor_item_t *item = cbor_new_int32(); 10810ff414cSEd Maste cbor_set_uint32(item, 1000000); 10910ff414cSEd Maste cbor_mark_negint(item); 1105d3e7166SEd Maste assert_size_equal(5, cbor_serialize(item, buffer, 512)); 11110ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x3A, 0x00, 0x0F, 0x42, 0x40}), 11210ff414cSEd Maste 5); 1135d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 5); 11410ff414cSEd Maste cbor_decref(&item); 11510ff414cSEd Maste } 11610ff414cSEd Maste 1175d3e7166SEd Maste static void test_serialize_negint64(void **_CBOR_UNUSED(_state)) { 11810ff414cSEd Maste cbor_item_t *item = cbor_new_int64(); 11910ff414cSEd Maste cbor_set_uint64(item, 1000000000000); 12010ff414cSEd Maste cbor_mark_negint(item); 1215d3e7166SEd Maste assert_size_equal(9, cbor_serialize(item, buffer, 512)); 12210ff414cSEd Maste assert_memory_equal( 12310ff414cSEd Maste buffer, 12410ff414cSEd Maste ((unsigned char[]){0x3B, 0x00, 0x00, 0x00, 0xE8, 0xD4, 0xA5, 0x10, 0x00}), 12510ff414cSEd Maste 9); 1265d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 9); 12710ff414cSEd Maste cbor_decref(&item); 12810ff414cSEd Maste } 12910ff414cSEd Maste 1305d3e7166SEd Maste static void test_serialize_definite_bytestring(void **_CBOR_UNUSED(_state)) { 13110ff414cSEd Maste cbor_item_t *item = cbor_new_definite_bytestring(); 13210ff414cSEd Maste unsigned char *data = malloc(256); 13310ff414cSEd Maste cbor_bytestring_set_handle(item, data, 256); 1345d3e7166SEd Maste memset(data, 0, 256); /* Prevent undefined behavior in comparison */ 1355d3e7166SEd Maste assert_size_equal(256 + 3, cbor_serialize(item, buffer, 512)); 13610ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x59, 0x01, 0x00}), 3); 13710ff414cSEd Maste assert_memory_equal(buffer + 3, data, 256); 1385d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 259); 13910ff414cSEd Maste cbor_decref(&item); 14010ff414cSEd Maste } 14110ff414cSEd Maste 1425d3e7166SEd Maste static void test_serialize_indefinite_bytestring(void **_CBOR_UNUSED(_state)) { 14310ff414cSEd Maste cbor_item_t *item = cbor_new_indefinite_bytestring(); 14410ff414cSEd Maste 14510ff414cSEd Maste cbor_item_t *chunk = cbor_new_definite_bytestring(); 14610ff414cSEd Maste unsigned char *data = malloc(256); 1475d3e7166SEd Maste memset(data, 0, 256); /* Prevent undefined behavior in comparison */ 14810ff414cSEd Maste cbor_bytestring_set_handle(chunk, data, 256); 14910ff414cSEd Maste 1505d3e7166SEd Maste assert_true(cbor_bytestring_add_chunk(item, cbor_move(chunk))); 1515d3e7166SEd Maste assert_size_equal(cbor_bytestring_chunk_count(item), 1); 15210ff414cSEd Maste 1535d3e7166SEd Maste assert_size_equal(1 + 3 + 256 + 1, cbor_serialize(item, buffer, 512)); 15410ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x5F, 0x59, 0x01, 0x00}), 4); 15510ff414cSEd Maste assert_memory_equal(buffer + 4, data, 256); 15610ff414cSEd Maste assert_memory_equal(buffer + 4 + 256, ((unsigned char[]){0xFF}), 1); 1575d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 261); 15810ff414cSEd Maste cbor_decref(&item); 15910ff414cSEd Maste } 16010ff414cSEd Maste 1615d3e7166SEd Maste static void test_serialize_bytestring_size_overflow( 1625d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 1635d3e7166SEd Maste cbor_item_t *item = cbor_new_definite_bytestring(); 1645d3e7166SEd Maste 1655d3e7166SEd Maste // Fake having a huge chunk of data 1665d3e7166SEd Maste unsigned char *data = malloc(1); 1675d3e7166SEd Maste cbor_bytestring_set_handle(item, data, SIZE_MAX); 1685d3e7166SEd Maste 1695d3e7166SEd Maste // Would require 1 + 8 + SIZE_MAX bytes, which overflows size_t 1705d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 512), 0); 1715d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 0); 1725d3e7166SEd Maste cbor_decref(&item); 1735d3e7166SEd Maste } 1745d3e7166SEd Maste 1755d3e7166SEd Maste static void test_serialize_bytestring_no_space(void **_CBOR_UNUSED(_state)) { 1765d3e7166SEd Maste cbor_item_t *item = cbor_new_definite_bytestring(); 1775d3e7166SEd Maste unsigned char *data = malloc(12); 1785d3e7166SEd Maste cbor_bytestring_set_handle(item, data, 12); 1795d3e7166SEd Maste 1805d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 1), 0); 1815d3e7166SEd Maste 1825d3e7166SEd Maste cbor_decref(&item); 1835d3e7166SEd Maste } 1845d3e7166SEd Maste 1855d3e7166SEd Maste static void test_serialize_indefinite_bytestring_no_space( 1865d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 1875d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_bytestring(); 1885d3e7166SEd Maste cbor_item_t *chunk = cbor_new_definite_bytestring(); 1895d3e7166SEd Maste unsigned char *data = malloc(256); 1905d3e7166SEd Maste cbor_bytestring_set_handle(chunk, data, 256); 1915d3e7166SEd Maste assert_true(cbor_bytestring_add_chunk(item, cbor_move(chunk))); 1925d3e7166SEd Maste 1935d3e7166SEd Maste // Not enough space for the leading byte 1945d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 0), 0); 1955d3e7166SEd Maste 1965d3e7166SEd Maste // Not enough space for the chunk 1975d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 30), 0); 1985d3e7166SEd Maste 1995d3e7166SEd Maste // Not enough space for the indef break 2005d3e7166SEd Maste assert_size_equal( 2015d3e7166SEd Maste cbor_serialize(item, buffer, 1 + cbor_serialized_size(chunk)), 0); 2025d3e7166SEd Maste 2035d3e7166SEd Maste cbor_decref(&item); 2045d3e7166SEd Maste } 2055d3e7166SEd Maste 2065d3e7166SEd Maste static void test_serialize_definite_string(void **_CBOR_UNUSED(_state)) { 20710ff414cSEd Maste cbor_item_t *item = cbor_new_definite_string(); 20810ff414cSEd Maste unsigned char *data = malloc(12); 20910ff414cSEd Maste strncpy((char *)data, "Hello world!", 12); 21010ff414cSEd Maste cbor_string_set_handle(item, data, 12); 2115d3e7166SEd Maste assert_size_equal(1 + 12, cbor_serialize(item, buffer, 512)); 21210ff414cSEd Maste assert_memory_equal( 21310ff414cSEd Maste buffer, 21410ff414cSEd Maste ((unsigned char[]){0x6C, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 21510ff414cSEd Maste 0x72, 0x6C, 0x64, 0x21}), 21610ff414cSEd Maste 13); 2175d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 13); 21810ff414cSEd Maste cbor_decref(&item); 21910ff414cSEd Maste } 22010ff414cSEd Maste 221*abd87254SEd Maste static void test_serialize_definite_string_4b_header( 222*abd87254SEd Maste void **_CBOR_UNUSED(_state)) { 223*abd87254SEd Maste #if SIZE_MAX > UINT16_MAX 224*abd87254SEd Maste cbor_item_t *item = cbor_new_definite_string(); 225*abd87254SEd Maste const size_t size = (size_t)UINT16_MAX + 1; 226*abd87254SEd Maste unsigned char *data = malloc(size); 227*abd87254SEd Maste memset(data, 0, size); 228*abd87254SEd Maste cbor_string_set_handle(item, data, size); 229*abd87254SEd Maste assert_size_equal(cbor_serialized_size(item), 1 + 4 + size); 230*abd87254SEd Maste cbor_decref(&item); 231*abd87254SEd Maste #endif 232*abd87254SEd Maste } 233*abd87254SEd Maste 234*abd87254SEd Maste static void test_serialize_definite_string_8b_header( 235*abd87254SEd Maste void **_CBOR_UNUSED(_state)) { 236*abd87254SEd Maste #if SIZE_MAX > UINT32_MAX 237*abd87254SEd Maste cbor_item_t *item = cbor_new_definite_string(); 238*abd87254SEd Maste const size_t size = (size_t)UINT32_MAX + 1; 239*abd87254SEd Maste unsigned char *data = malloc(1); 240*abd87254SEd Maste data[0] = '\0'; 241*abd87254SEd Maste cbor_string_set_handle(item, data, 1); 242*abd87254SEd Maste // Pretend that we have a big item to avoid the huge malloc 243*abd87254SEd Maste item->metadata.string_metadata.length = size; 244*abd87254SEd Maste assert_size_equal(cbor_serialized_size(item), 1 + 8 + size); 245*abd87254SEd Maste cbor_decref(&item); 246*abd87254SEd Maste #endif 247*abd87254SEd Maste } 248*abd87254SEd Maste 2495d3e7166SEd Maste static void test_serialize_indefinite_string(void **_CBOR_UNUSED(_state)) { 25010ff414cSEd Maste cbor_item_t *item = cbor_new_indefinite_string(); 25110ff414cSEd Maste cbor_item_t *chunk = cbor_new_definite_string(); 25210ff414cSEd Maste 25310ff414cSEd Maste unsigned char *data = malloc(12); 25410ff414cSEd Maste strncpy((char *)data, "Hello world!", 12); 25510ff414cSEd Maste cbor_string_set_handle(chunk, data, 12); 25610ff414cSEd Maste 25710ff414cSEd Maste assert_true(cbor_string_add_chunk(item, cbor_move(chunk))); 2585d3e7166SEd Maste assert_size_equal(cbor_string_chunk_count(item), 1); 25910ff414cSEd Maste 2605d3e7166SEd Maste assert_size_equal(15, cbor_serialize(item, buffer, 512)); 26110ff414cSEd Maste assert_memory_equal( 26210ff414cSEd Maste buffer, 26310ff414cSEd Maste ((unsigned char[]){0x7F, 0x6C, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 26410ff414cSEd Maste 0x6F, 0x72, 0x6C, 0x64, 0x21, 0xFF}), 26510ff414cSEd Maste 15); 2665d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 15); 26710ff414cSEd Maste cbor_decref(&item); 26810ff414cSEd Maste } 26910ff414cSEd Maste 2705d3e7166SEd Maste static void test_serialize_string_no_space(void **_CBOR_UNUSED(_state)) { 2715d3e7166SEd Maste cbor_item_t *item = cbor_new_definite_string(); 2725d3e7166SEd Maste unsigned char *data = malloc(12); 273*abd87254SEd Maste memset(data, 0, 12); 2745d3e7166SEd Maste cbor_string_set_handle(item, data, 12); 2755d3e7166SEd Maste 2765d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 1), 0); 2775d3e7166SEd Maste 2785d3e7166SEd Maste cbor_decref(&item); 2795d3e7166SEd Maste } 2805d3e7166SEd Maste 2815d3e7166SEd Maste static void test_serialize_indefinite_string_no_space( 2825d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 2835d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_string(); 2845d3e7166SEd Maste cbor_item_t *chunk = cbor_new_definite_string(); 2855d3e7166SEd Maste unsigned char *data = malloc(256); 286*abd87254SEd Maste memset(data, 0, 256); 2875d3e7166SEd Maste cbor_string_set_handle(chunk, data, 256); 2885d3e7166SEd Maste assert_true(cbor_string_add_chunk(item, cbor_move(chunk))); 2895d3e7166SEd Maste 2905d3e7166SEd Maste // Not enough space for the leading byte 2915d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 0), 0); 2925d3e7166SEd Maste 2935d3e7166SEd Maste // Not enough space for the chunk 2945d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 30), 0); 2955d3e7166SEd Maste 2965d3e7166SEd Maste // Not enough space for the indef break 2975d3e7166SEd Maste assert_size_equal( 2985d3e7166SEd Maste cbor_serialize(item, buffer, 1 + cbor_serialized_size(chunk)), 0); 2995d3e7166SEd Maste 3005d3e7166SEd Maste cbor_decref(&item); 3015d3e7166SEd Maste } 3025d3e7166SEd Maste 3035d3e7166SEd Maste static void test_serialize_definite_array(void **_CBOR_UNUSED(_state)) { 30410ff414cSEd Maste cbor_item_t *item = cbor_new_definite_array(2); 30510ff414cSEd Maste cbor_item_t *one = cbor_build_uint8(1); 30610ff414cSEd Maste cbor_item_t *two = cbor_build_uint8(2); 30710ff414cSEd Maste 3085d3e7166SEd Maste assert_true(cbor_array_push(item, one)); 3095d3e7166SEd Maste assert_true(cbor_array_set(item, 1, two)); 3105d3e7166SEd Maste assert_true(cbor_array_replace(item, 0, one)); 31110ff414cSEd Maste 3125d3e7166SEd Maste assert_size_equal(3, cbor_serialize(item, buffer, 512)); 31310ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x82, 0x01, 0x02}), 3); 3145d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 31510ff414cSEd Maste cbor_decref(&item); 31610ff414cSEd Maste cbor_decref(&one); 31710ff414cSEd Maste cbor_decref(&two); 31810ff414cSEd Maste } 31910ff414cSEd Maste 3205d3e7166SEd Maste static void test_serialize_array_no_space(void **_CBOR_UNUSED(_state)) { 3215d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_array(); 3225d3e7166SEd Maste cbor_item_t *one = cbor_build_uint8(1); 3235d3e7166SEd Maste assert_true(cbor_array_push(item, one)); 3245d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 3255d3e7166SEd Maste 3265d3e7166SEd Maste // Not enough space for the leading byte 3275d3e7166SEd Maste assert_size_equal(0, cbor_serialize(item, buffer, 0)); 3285d3e7166SEd Maste 3295d3e7166SEd Maste // Not enough space for the item 3305d3e7166SEd Maste assert_size_equal(0, cbor_serialize(item, buffer, 1)); 3315d3e7166SEd Maste 3325d3e7166SEd Maste // Not enough space for the indef break 3335d3e7166SEd Maste assert_size_equal(0, cbor_serialize(item, buffer, 2)); 3345d3e7166SEd Maste 3355d3e7166SEd Maste cbor_decref(&item); 3365d3e7166SEd Maste cbor_decref(&one); 3375d3e7166SEd Maste } 3385d3e7166SEd Maste 3395d3e7166SEd Maste static void test_serialize_indefinite_array(void **_CBOR_UNUSED(_state)) { 34010ff414cSEd Maste cbor_item_t *item = cbor_new_indefinite_array(); 34110ff414cSEd Maste cbor_item_t *one = cbor_build_uint8(1); 34210ff414cSEd Maste cbor_item_t *two = cbor_build_uint8(2); 34310ff414cSEd Maste 3445d3e7166SEd Maste assert_true(cbor_array_push(item, one)); 3455d3e7166SEd Maste assert_true(cbor_array_push(item, two)); 34610ff414cSEd Maste 3475d3e7166SEd Maste assert_size_equal(4, cbor_serialize(item, buffer, 512)); 34810ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0x9F, 0x01, 0x02, 0xFF}), 4); 3495d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 4); 35010ff414cSEd Maste cbor_decref(&item); 35110ff414cSEd Maste cbor_decref(&one); 35210ff414cSEd Maste cbor_decref(&two); 35310ff414cSEd Maste } 35410ff414cSEd Maste 3555d3e7166SEd Maste static void test_serialize_definite_map(void **_CBOR_UNUSED(_state)) { 35610ff414cSEd Maste cbor_item_t *item = cbor_new_definite_map(2); 35710ff414cSEd Maste cbor_item_t *one = cbor_build_uint8(1); 35810ff414cSEd Maste cbor_item_t *two = cbor_build_uint8(2); 35910ff414cSEd Maste 36010ff414cSEd Maste assert_true(cbor_map_add(item, (struct cbor_pair){.key = one, .value = two})); 36110ff414cSEd Maste assert_true(cbor_map_add(item, (struct cbor_pair){.key = two, .value = one})); 36210ff414cSEd Maste 3635d3e7166SEd Maste assert_size_equal(5, cbor_serialize(item, buffer, 512)); 3645d3e7166SEd Maste assert_memory_equal(buffer, ((unsigned char[]){0xA2, 0x01, 0x02, 0x02, 0x01}), 3655d3e7166SEd Maste 5); 3665d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 5); 36710ff414cSEd Maste cbor_decref(&item); 36810ff414cSEd Maste cbor_decref(&one); 36910ff414cSEd Maste cbor_decref(&two); 37010ff414cSEd Maste } 37110ff414cSEd Maste 3725d3e7166SEd Maste static void test_serialize_indefinite_map(void **_CBOR_UNUSED(_state)) { 3735d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_map(); 3745d3e7166SEd Maste cbor_item_t *one = cbor_build_uint8(1); 3755d3e7166SEd Maste cbor_item_t *two = cbor_build_uint8(2); 3765d3e7166SEd Maste 3775d3e7166SEd Maste assert_true(cbor_map_add(item, (struct cbor_pair){.key = one, .value = two})); 3785d3e7166SEd Maste assert_true(cbor_map_add(item, (struct cbor_pair){.key = two, .value = one})); 3795d3e7166SEd Maste 3805d3e7166SEd Maste assert_size_equal(6, cbor_serialize(item, buffer, 512)); 3815d3e7166SEd Maste assert_memory_equal( 3825d3e7166SEd Maste buffer, ((unsigned char[]){0xBF, 0x01, 0x02, 0x02, 0x01, 0xFF}), 6); 3835d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 6); 3845d3e7166SEd Maste cbor_decref(&item); 3855d3e7166SEd Maste cbor_decref(&one); 3865d3e7166SEd Maste cbor_decref(&two); 3875d3e7166SEd Maste } 3885d3e7166SEd Maste 3895d3e7166SEd Maste static void test_serialize_map_no_space(void **_CBOR_UNUSED(_state)) { 3905d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_map(); 3915d3e7166SEd Maste cbor_item_t *one = cbor_build_uint8(1); 3925d3e7166SEd Maste cbor_item_t *two = cbor_build_uint8(2); 3935d3e7166SEd Maste assert_true(cbor_map_add(item, (struct cbor_pair){.key = one, .value = two})); 3945d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 4); 3955d3e7166SEd Maste 3965d3e7166SEd Maste // Not enough space for the leading byte 3975d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 0), 0); 3985d3e7166SEd Maste 3995d3e7166SEd Maste // Not enough space for the key 4005d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 1), 0); 4015d3e7166SEd Maste 4025d3e7166SEd Maste // Not enough space for the value 4035d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 2), 0); 4045d3e7166SEd Maste 4055d3e7166SEd Maste // Not enough space for the indef break 4065d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 3), 0); 4075d3e7166SEd Maste 4085d3e7166SEd Maste cbor_decref(&item); 4095d3e7166SEd Maste cbor_decref(&one); 4105d3e7166SEd Maste cbor_decref(&two); 4115d3e7166SEd Maste } 4125d3e7166SEd Maste 4135d3e7166SEd Maste static void test_serialize_tags(void **_CBOR_UNUSED(_state)) { 41410ff414cSEd Maste cbor_item_t *item = cbor_new_tag(21); 41510ff414cSEd Maste cbor_item_t *one = cbor_build_uint8(1); 41610ff414cSEd Maste cbor_tag_set_item(item, one); 41710ff414cSEd Maste 4185d3e7166SEd Maste assert_size_equal(2, cbor_serialize(item, buffer, 512)); 41910ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0xD5, 0x01}), 2); 4205d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 42110ff414cSEd Maste cbor_decref(&item); 42210ff414cSEd Maste cbor_decref(&one); 42310ff414cSEd Maste } 42410ff414cSEd Maste 4255d3e7166SEd Maste static void test_serialize_tags_no_space(void **_CBOR_UNUSED(_state)) { 4265d3e7166SEd Maste cbor_item_t *item = cbor_new_tag(21); 4275d3e7166SEd Maste cbor_item_t *one = cbor_build_uint8(1); 4285d3e7166SEd Maste cbor_tag_set_item(item, one); 4295d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 4305d3e7166SEd Maste 4315d3e7166SEd Maste // Not enough space for the leading byte 4325d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 0), 0); 4335d3e7166SEd Maste 4345d3e7166SEd Maste // Not enough space for the item 4355d3e7166SEd Maste assert_size_equal(cbor_serialize(item, buffer, 1), 0); 4365d3e7166SEd Maste 4375d3e7166SEd Maste cbor_decref(&item); 4385d3e7166SEd Maste cbor_decref(&one); 4395d3e7166SEd Maste } 4405d3e7166SEd Maste 4415d3e7166SEd Maste static void test_serialize_half(void **_CBOR_UNUSED(_state)) { 44210ff414cSEd Maste cbor_item_t *item = cbor_new_float2(); 44310ff414cSEd Maste cbor_set_float2(item, NAN); 44410ff414cSEd Maste 4455d3e7166SEd Maste assert_size_equal(3, cbor_serialize(item, buffer, 512)); 44610ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0xF9, 0x7E, 0x00}), 3); 4475d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 44810ff414cSEd Maste cbor_decref(&item); 44910ff414cSEd Maste } 45010ff414cSEd Maste 4515d3e7166SEd Maste static void test_serialize_single(void **_CBOR_UNUSED(_state)) { 45210ff414cSEd Maste cbor_item_t *item = cbor_new_float4(); 45310ff414cSEd Maste cbor_set_float4(item, 100000.0f); 45410ff414cSEd Maste 4555d3e7166SEd Maste assert_size_equal(5, cbor_serialize(item, buffer, 512)); 45610ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0xFA, 0x47, 0xC3, 0x50, 0x00}), 45710ff414cSEd Maste 5); 4585d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 5); 45910ff414cSEd Maste cbor_decref(&item); 46010ff414cSEd Maste } 46110ff414cSEd Maste 4625d3e7166SEd Maste static void test_serialize_double(void **_CBOR_UNUSED(_state)) { 46310ff414cSEd Maste cbor_item_t *item = cbor_new_float8(); 46410ff414cSEd Maste cbor_set_float8(item, -4.1); 46510ff414cSEd Maste 4665d3e7166SEd Maste assert_size_equal(9, cbor_serialize(item, buffer, 512)); 46710ff414cSEd Maste assert_memory_equal( 46810ff414cSEd Maste buffer, 46910ff414cSEd Maste ((unsigned char[]){0xFB, 0xC0, 0x10, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}), 47010ff414cSEd Maste 9); 4715d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 9); 47210ff414cSEd Maste cbor_decref(&item); 47310ff414cSEd Maste } 47410ff414cSEd Maste 4755d3e7166SEd Maste static void test_serialize_ctrl(void **_CBOR_UNUSED(_state)) { 47610ff414cSEd Maste cbor_item_t *item = cbor_new_undef(); 47710ff414cSEd Maste 4785d3e7166SEd Maste assert_size_equal(1, cbor_serialize(item, buffer, 512)); 47910ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0xF7}), 1); 4805d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 48110ff414cSEd Maste cbor_decref(&item); 48210ff414cSEd Maste } 48310ff414cSEd Maste 4845d3e7166SEd Maste static void test_serialize_long_ctrl(void **_CBOR_UNUSED(_state)) { 48510ff414cSEd Maste cbor_item_t *item = cbor_new_ctrl(); 48610ff414cSEd Maste cbor_set_ctrl(item, 254); 48710ff414cSEd Maste 4885d3e7166SEd Maste assert_size_equal(2, cbor_serialize(item, buffer, 512)); 48910ff414cSEd Maste assert_memory_equal(buffer, ((unsigned char[]){0xF8, 0xFE}), 2); 4905d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 49110ff414cSEd Maste cbor_decref(&item); 49210ff414cSEd Maste } 49310ff414cSEd Maste 4945d3e7166SEd Maste static void test_auto_serialize(void **_CBOR_UNUSED(_state)) { 49510ff414cSEd Maste cbor_item_t *item = cbor_new_definite_array(4); 4965d3e7166SEd Maste for (size_t i = 0; i < 4; i++) { 4975d3e7166SEd Maste assert_true(cbor_array_push(item, cbor_move(cbor_build_uint64(0)))); 4985d3e7166SEd Maste } 49910ff414cSEd Maste 5005d3e7166SEd Maste unsigned char *output; 5015d3e7166SEd Maste size_t output_size; 5025d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, &output_size), 37); 5035d3e7166SEd Maste assert_size_equal(output_size, 37); 5045d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 37); 5055d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x84, 0x1B}), 2); 50610ff414cSEd Maste cbor_decref(&item); 5075d3e7166SEd Maste _cbor_free(output); 5085d3e7166SEd Maste } 5095d3e7166SEd Maste 5105d3e7166SEd Maste static void test_auto_serialize_no_size(void **_CBOR_UNUSED(_state)) { 5115d3e7166SEd Maste cbor_item_t *item = cbor_build_uint8(1); 5125d3e7166SEd Maste 5135d3e7166SEd Maste unsigned char *output; 5145d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 1); 5155d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x01}), 1); 5165d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 5175d3e7166SEd Maste cbor_decref(&item); 5185d3e7166SEd Maste _cbor_free(output); 5195d3e7166SEd Maste } 5205d3e7166SEd Maste 5215d3e7166SEd Maste static void test_auto_serialize_too_large(void **_CBOR_UNUSED(_state)) { 5225d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_string(); 5235d3e7166SEd Maste cbor_item_t *chunk = cbor_new_definite_string(); 5245d3e7166SEd Maste assert_true(cbor_string_add_chunk(item, chunk)); 5255d3e7166SEd Maste 5265d3e7166SEd Maste // Pretend the chunk is huge 5275d3e7166SEd Maste chunk->metadata.string_metadata.length = SIZE_MAX; 5285d3e7166SEd Maste assert_true(SIZE_MAX + 2 == 1); 5295d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 0); 5305d3e7166SEd Maste unsigned char *output; 5315d3e7166SEd Maste size_t output_size; 5325d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, &output_size), 0); 5335d3e7166SEd Maste assert_size_equal(output_size, 0); 5345d3e7166SEd Maste assert_null(output); 5355d3e7166SEd Maste 5365d3e7166SEd Maste chunk->metadata.string_metadata.length = 0; 5375d3e7166SEd Maste cbor_decref(&chunk); 5385d3e7166SEd Maste cbor_decref(&item); 5395d3e7166SEd Maste } 5405d3e7166SEd Maste 5415d3e7166SEd Maste static void test_auto_serialize_alloc_fail(void **_CBOR_UNUSED(_state)) { 5425d3e7166SEd Maste cbor_item_t *item = cbor_build_uint8(42); 5435d3e7166SEd Maste 5445d3e7166SEd Maste WITH_FAILING_MALLOC({ 5455d3e7166SEd Maste unsigned char *output; 5465d3e7166SEd Maste size_t output_size; 5475d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, &output_size), 0); 5485d3e7166SEd Maste assert_size_equal(output_size, 0); 5495d3e7166SEd Maste assert_null(output); 5505d3e7166SEd Maste }); 5515d3e7166SEd Maste 5525d3e7166SEd Maste cbor_decref(&item); 5535d3e7166SEd Maste } 5545d3e7166SEd Maste 5555d3e7166SEd Maste static void test_auto_serialize_zero_len_bytestring( 5565d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 5575d3e7166SEd Maste cbor_item_t *item = cbor_build_bytestring((cbor_data) "", 0); 5585d3e7166SEd Maste 5595d3e7166SEd Maste unsigned char *output; 5605d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 1); 5615d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x40}), 1); 5625d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 5635d3e7166SEd Maste cbor_decref(&item); 5645d3e7166SEd Maste _cbor_free(output); 5655d3e7166SEd Maste } 5665d3e7166SEd Maste 5675d3e7166SEd Maste static void test_auto_serialize_zero_len_string(void **_CBOR_UNUSED(_state)) { 5685d3e7166SEd Maste cbor_item_t *item = cbor_build_string(""); 5695d3e7166SEd Maste 5705d3e7166SEd Maste unsigned char *output; 5715d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 1); 5725d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x60}), 1); 5735d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 5745d3e7166SEd Maste cbor_decref(&item); 5755d3e7166SEd Maste _cbor_free(output); 5765d3e7166SEd Maste } 5775d3e7166SEd Maste 5785d3e7166SEd Maste static void test_auto_serialize_zero_len_bytestring_chunk( 5795d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 5805d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_bytestring(); 5815d3e7166SEd Maste 5825d3e7166SEd Maste assert_true(cbor_bytestring_add_chunk( 5835d3e7166SEd Maste item, cbor_move(cbor_build_bytestring((cbor_data) "", 0)))); 5845d3e7166SEd Maste 5855d3e7166SEd Maste unsigned char *output; 5865d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 3); 5875d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x5f, 0x40, 0xff}), 3); 5885d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 5895d3e7166SEd Maste cbor_decref(&item); 5905d3e7166SEd Maste _cbor_free(output); 5915d3e7166SEd Maste } 5925d3e7166SEd Maste 5935d3e7166SEd Maste static void test_auto_serialize_zero_len_string_chunk( 5945d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 5955d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_string(); 5965d3e7166SEd Maste 5975d3e7166SEd Maste assert_true(cbor_string_add_chunk(item, cbor_move(cbor_build_string("")))); 5985d3e7166SEd Maste 5995d3e7166SEd Maste unsigned char *output; 6005d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 3); 6015d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x7f, 0x60, 0xff}), 3); 6025d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 3); 6035d3e7166SEd Maste cbor_decref(&item); 6045d3e7166SEd Maste _cbor_free(output); 6055d3e7166SEd Maste } 6065d3e7166SEd Maste 6075d3e7166SEd Maste static void test_auto_serialize_zero_len_array(void **_CBOR_UNUSED(_state)) { 6085d3e7166SEd Maste cbor_item_t *item = cbor_new_definite_array(0); 6095d3e7166SEd Maste 6105d3e7166SEd Maste unsigned char *output; 6115d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 1); 6125d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x80}), 1); 6135d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 6145d3e7166SEd Maste cbor_decref(&item); 6155d3e7166SEd Maste _cbor_free(output); 6165d3e7166SEd Maste } 6175d3e7166SEd Maste 6185d3e7166SEd Maste static void test_auto_serialize_zero_len_indef_array( 6195d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 6205d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_array(); 6215d3e7166SEd Maste 6225d3e7166SEd Maste unsigned char *output; 6235d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 2); 6245d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0x9f, 0xff}), 2); 6255d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 6265d3e7166SEd Maste cbor_decref(&item); 6275d3e7166SEd Maste _cbor_free(output); 6285d3e7166SEd Maste } 6295d3e7166SEd Maste 6305d3e7166SEd Maste static void test_auto_serialize_zero_len_map(void **_CBOR_UNUSED(_state)) { 6315d3e7166SEd Maste cbor_item_t *item = cbor_new_definite_map(0); 6325d3e7166SEd Maste 6335d3e7166SEd Maste unsigned char *output; 6345d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 1); 6355d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0xa0}), 1); 6365d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 1); 6375d3e7166SEd Maste cbor_decref(&item); 6385d3e7166SEd Maste _cbor_free(output); 6395d3e7166SEd Maste } 6405d3e7166SEd Maste 6415d3e7166SEd Maste static void test_auto_serialize_zero_len_indef_map( 6425d3e7166SEd Maste void **_CBOR_UNUSED(_state)) { 6435d3e7166SEd Maste cbor_item_t *item = cbor_new_indefinite_map(); 6445d3e7166SEd Maste 6455d3e7166SEd Maste unsigned char *output; 6465d3e7166SEd Maste assert_size_equal(cbor_serialize_alloc(item, &output, NULL), 2); 6475d3e7166SEd Maste assert_memory_equal(output, ((unsigned char[]){0xbf, 0xff}), 2); 6485d3e7166SEd Maste assert_size_equal(cbor_serialized_size(item), 2); 6495d3e7166SEd Maste cbor_decref(&item); 6505d3e7166SEd Maste _cbor_free(output); 65110ff414cSEd Maste } 65210ff414cSEd Maste 65310ff414cSEd Maste int main(void) { 65410ff414cSEd Maste const struct CMUnitTest tests[] = { 6555d3e7166SEd Maste cmocka_unit_test(test_serialize_uint8_embed), 65610ff414cSEd Maste cmocka_unit_test(test_serialize_uint8), 65710ff414cSEd Maste cmocka_unit_test(test_serialize_uint16), 65810ff414cSEd Maste cmocka_unit_test(test_serialize_uint32), 65910ff414cSEd Maste cmocka_unit_test(test_serialize_uint64), 6605d3e7166SEd Maste cmocka_unit_test(test_serialize_negint8_embed), 66110ff414cSEd Maste cmocka_unit_test(test_serialize_negint8), 66210ff414cSEd Maste cmocka_unit_test(test_serialize_negint16), 66310ff414cSEd Maste cmocka_unit_test(test_serialize_negint32), 66410ff414cSEd Maste cmocka_unit_test(test_serialize_negint64), 66510ff414cSEd Maste cmocka_unit_test(test_serialize_definite_bytestring), 66610ff414cSEd Maste cmocka_unit_test(test_serialize_indefinite_bytestring), 6675d3e7166SEd Maste cmocka_unit_test(test_serialize_bytestring_size_overflow), 6685d3e7166SEd Maste cmocka_unit_test(test_serialize_bytestring_no_space), 6695d3e7166SEd Maste cmocka_unit_test(test_serialize_indefinite_bytestring_no_space), 67010ff414cSEd Maste cmocka_unit_test(test_serialize_definite_string), 671*abd87254SEd Maste cmocka_unit_test(test_serialize_definite_string_4b_header), 672*abd87254SEd Maste cmocka_unit_test(test_serialize_definite_string_8b_header), 67310ff414cSEd Maste cmocka_unit_test(test_serialize_indefinite_string), 6745d3e7166SEd Maste cmocka_unit_test(test_serialize_string_no_space), 6755d3e7166SEd Maste cmocka_unit_test(test_serialize_indefinite_string_no_space), 67610ff414cSEd Maste cmocka_unit_test(test_serialize_definite_array), 67710ff414cSEd Maste cmocka_unit_test(test_serialize_indefinite_array), 6785d3e7166SEd Maste cmocka_unit_test(test_serialize_array_no_space), 67910ff414cSEd Maste cmocka_unit_test(test_serialize_definite_map), 68010ff414cSEd Maste cmocka_unit_test(test_serialize_indefinite_map), 6815d3e7166SEd Maste cmocka_unit_test(test_serialize_map_no_space), 68210ff414cSEd Maste cmocka_unit_test(test_serialize_tags), 6835d3e7166SEd Maste cmocka_unit_test(test_serialize_tags_no_space), 68410ff414cSEd Maste cmocka_unit_test(test_serialize_half), 68510ff414cSEd Maste cmocka_unit_test(test_serialize_single), 68610ff414cSEd Maste cmocka_unit_test(test_serialize_double), 68710ff414cSEd Maste cmocka_unit_test(test_serialize_ctrl), 68810ff414cSEd Maste cmocka_unit_test(test_serialize_long_ctrl), 6895d3e7166SEd Maste cmocka_unit_test(test_auto_serialize), 6905d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_no_size), 6915d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_too_large), 6925d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_alloc_fail), 6935d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_bytestring), 6945d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_string), 6955d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_bytestring_chunk), 6965d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_string_chunk), 6975d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_array), 6985d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_indef_array), 6995d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_map), 7005d3e7166SEd Maste cmocka_unit_test(test_auto_serialize_zero_len_indef_map), 7015d3e7166SEd Maste }; 70210ff414cSEd Maste return cmocka_run_group_tests(tests, NULL, NULL); 70310ff414cSEd Maste } 704