1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-19 19:43:52 +01:00
RIOT/tests/unittests/tests-unicoap/tests-unicoap-options.c
2025-07-24 15:58:26 +02:00

405 lines
28 KiB
C

/*
* Copyright (C) 2024-2025 Carl Seifert
* Copyright (C) 2024-2025 TU Dresden
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for
* more details.
*/
/**
* @file
* @ingroup unittests
* @brief Unit tests for CoAP option accessors
* @author Carl Seifert <carl.seifert1@mailbox.tu-dresden.de>
*/
#include <stdio.h>
#include "tests-unicoap.h"
#include "net/unicoap/options.h"
#include <errno.h>
static const char poem[] = "CoAP"
"In a world of bytes, where data flows,"
"Across the air, where no wire grows,"
"In the quiet hum of devices small,"
"Where sensors blink and data calls,"
"CoAP rises, light and clear,"
"A simple voice that all can hear."
"Lightweight, swift, it makes the call,"
"Requesting data, large or small."
"It sends a GET, it sends a POST,"
"Across the networks, coast to coast."
"So here's to networks small and grand,"
"Where CoAP's whispers gently land.";
/* - ChatGPT */
static void assert_options_data(const unicoap_options_t* options)
{
/* In this order:
* Uri-Path: actuators
* Uri-Path: leds
* Content-Format: JSON
* Uri-Query: color=g
* Accept: JSON
*/
uint8_t option_data[] = {
0xb9, 0x61, 0x63, 0x74, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x04, 0x6c, 0x65, 0x64, 0x73,
0x11, 0x32, 0x37, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x67, 0x21, 0x32
};
TEST_ASSERT_EQUAL_INT(options->option_count, 5);
TEST_ASSERT_EQUAL_INT(unicoap_options_size(options), sizeof(option_data));
_TEST_ASSERT_EQUAL_BYTES(unicoap_options_data(options), option_data, sizeof(option_data));
}
static void test_in_order(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 100);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_path_component_string(&options, "actuators"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_path_component_string(&options, "leds"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_content_format(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_query_string(&options, "color=g"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_accept(&options, UNICOAP_FORMAT_JSON), 0);
assert_options_data(&options);
}
static void test_out_of_order(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 100);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_accept(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_path_component_string(&options, "actuators"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_query_string(&options, "color=g"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_content_format(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_path_component_string(&options, "leds"), 0);
assert_options_data(&options);
}
static void test_idempotent(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 100);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_accept(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_accept(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_path_component_string(&options, "actuators"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_query_string(&options, "color=g"), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_content_format(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_content_format(&options, UNICOAP_FORMAT_TEXT), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set_content_format(&options, UNICOAP_FORMAT_JSON), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add_uri_path_component_string(&options, "leds"), 0);
assert_options_data(&options);
}
static void _populate(unicoap_options_t* options)
{
TEST_ASSERT_EQUAL_INT(unicoap_options_add(options, 50, (uint8_t*)poem, _UINT4_MAX + 1), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add(options, 12, (uint8_t*)poem, _UINT4_MAX), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add(options, 12, (uint8_t*)poem, _UINT4_MAX + 1), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add(options, 13, (uint8_t*)poem, _UINT4_MAX + 1), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set(options, 8, (uint8_t*)poem, _UINT12_MAX), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_add(options, 8, (uint8_t*)poem, _UINT12_MAX), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set(options, 10, (uint8_t*)poem, 200), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set(options, 2, (uint8_t*)poem, _UINT4_MAX + 1), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set(options, 70, (uint8_t*)poem, 1), 0);
TEST_ASSERT_EQUAL_INT(unicoap_options_set(options, 1, (uint8_t*)poem, 1), 0);
}
static void test_extended_uint_shifts(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 900);
_populate(&options);
/* options blob, from nanoCoAP */
static const uint8_t options_blob[] = {
0x11, 0x43, 0x1D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x6D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61,
0x72, 0x2E, 0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20,
0x73, 0x77, 0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72,
0x67, 0x65, 0x0D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61,
0x72, 0x2E, 0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20,
0x73, 0x77, 0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72,
0x67, 0x65, 0x2D, 0xBB, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x2C, 0x43, 0x6F, 0x41, 0x50, 0x49,
0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x0D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E,
0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x1D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E,
0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0xDD, 0x18, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49,
0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0xD1, 0x07, 0x43
};
TEST_ASSERT_EQUAL_INT(sizeof(options_blob), unicoap_options_size(&options));
_TEST_ASSERT_EQUAL_BYTES(options_blob, unicoap_options_data(&options), sizeof(options_blob));
}
static void test_remove_leading(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 900);
_populate(&options);
TEST_ASSERT_EQUAL_INT(unicoap_options_remove(&options, 1), 0);
/* options blob, from nanoCoAP */
static const uint8_t options_blob[] = {
0x2D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C,
0x6D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C,
0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77, 0x68, 0x65,
0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73, 0x2C, 0x41,
0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72, 0x2C, 0x20,
0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65, 0x20, 0x67,
0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69,
0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20,
0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x61,
0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x2C, 0x43,
0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69, 0x67, 0x68,
0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41, 0x20, 0x73,
0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61,
0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61, 0x72, 0x2E,
0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20, 0x73, 0x77,
0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65,
0x0D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C,
0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77, 0x68, 0x65,
0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73, 0x2C, 0x41,
0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72, 0x2C, 0x20,
0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65, 0x20, 0x67,
0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69,
0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20,
0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x61,
0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x2C, 0x43,
0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69, 0x67, 0x68,
0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41, 0x20, 0x73,
0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61,
0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61, 0x72, 0x2E,
0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20, 0x73, 0x77,
0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72, 0x67, 0x65,
0x2D, 0xBB, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C,
0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77, 0x68, 0x65,
0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73, 0x2C, 0x41,
0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72, 0x2C, 0x20,
0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65, 0x20, 0x67,
0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69,
0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20,
0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x61,
0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73, 0x2C, 0x43,
0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69, 0x67, 0x68,
0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41, 0x20, 0x73,
0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61,
0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x2C, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20,
0x61, 0x20, 0x77, 0x6F, 0x72, 0x0D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61,
0x20, 0x77, 0x6F, 0x72, 0x6C, 0x1D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61,
0x20, 0x77, 0x6F, 0x72, 0x6C, 0xDD, 0x18, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20,
0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0xD1, 0x07, 0x43
};
TEST_ASSERT_EQUAL_INT(sizeof(options_blob), unicoap_options_size(&options));
_TEST_ASSERT_EQUAL_BYTES(options_blob, unicoap_options_data(&options), sizeof(options_blob));
}
static void test_remove_trailing(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 900);
_populate(&options);
TEST_ASSERT_EQUAL_INT(unicoap_options_remove(&options, 70), 0);
/* options blob, from nanoCoAP */
static const uint8_t options_blob[] = {
0x11, 0x43, 0x1D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x6D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61,
0x72, 0x2E, 0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20,
0x73, 0x77, 0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72,
0x67, 0x65, 0x0D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61,
0x72, 0x2E, 0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20,
0x73, 0x77, 0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72,
0x67, 0x65, 0x2D, 0xBB, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x2C, 0x43, 0x6F, 0x41, 0x50, 0x49,
0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x0D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E,
0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x1D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E,
0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0xDD, 0x18, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49,
0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C
};
TEST_ASSERT_EQUAL_INT(sizeof(options_blob), unicoap_options_size(&options));
_TEST_ASSERT_EQUAL_BYTES(options_blob, unicoap_options_data(&options), sizeof(options_blob));
}
static void test_remove_multiple(void)
{
UNICOAP_OPTIONS_ALLOC_STATIC(options, 900);
_populate(&options);
TEST_ASSERT_EQUAL_INT(unicoap_options_remove(&options, 12), 0);
/* options blob, from nanoCoAP */
static const uint8_t options_blob[] = {
0x11, 0x43, 0x1D, 0x00, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x6D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61,
0x72, 0x2E, 0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20,
0x73, 0x77, 0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72,
0x67, 0x65, 0x0D, 0xFF, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x61, 0x6E, 0x20, 0x68, 0x65, 0x61,
0x72, 0x2E, 0x4C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2C, 0x20,
0x73, 0x77, 0x69, 0x66, 0x74, 0x2C, 0x20, 0x69, 0x74, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x2C, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x6C, 0x61, 0x72,
0x67, 0x65, 0x2D, 0xBB, 0x43, 0x6F, 0x41, 0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F,
0x72, 0x6C, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x2C, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6C, 0x6F, 0x77, 0x73,
0x2C, 0x41, 0x63, 0x72, 0x6F, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x69, 0x72,
0x2C, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6E, 0x6F, 0x20, 0x77, 0x69, 0x72, 0x65,
0x20, 0x67, 0x72, 0x6F, 0x77, 0x73, 0x2C, 0x49, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71,
0x75, 0x69, 0x65, 0x74, 0x20, 0x68, 0x75, 0x6D, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x20, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x2C, 0x57, 0x68, 0x65, 0x72,
0x65, 0x20, 0x73, 0x65, 0x6E, 0x73, 0x6F, 0x72, 0x73, 0x20, 0x62, 0x6C, 0x69, 0x6E, 0x6B,
0x20, 0x61, 0x6E, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x73,
0x2C, 0x43, 0x6F, 0x41, 0x50, 0x20, 0x72, 0x69, 0x73, 0x65, 0x73, 0x2C, 0x20, 0x6C, 0x69,
0x67, 0x68, 0x74, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x2C, 0x41,
0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x6F, 0x69, 0x63, 0x65, 0x20, 0x74,
0x68, 0x61, 0x74, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x3D, 0x00, 0x43, 0x6F, 0x41, 0x50,
0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0xDD, 0x18, 0x00, 0x43, 0x6F, 0x41,
0x50, 0x49, 0x6E, 0x20, 0x61, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0xD1, 0x07, 0x43
};
TEST_ASSERT_EQUAL_INT(sizeof(options_blob), unicoap_options_size(&options));
_TEST_ASSERT_EQUAL_BYTES(options_blob, unicoap_options_data(&options), sizeof(options_blob));
}
Test* tests_unicoap_options(void)
{
EMB_UNIT_TESTFIXTURES(fixtures){
new_TestFixture(test_in_order),
new_TestFixture(test_out_of_order),
new_TestFixture(test_idempotent),
new_TestFixture(test_extended_uint_shifts),
new_TestFixture(test_remove_leading),
new_TestFixture(test_remove_trailing),
new_TestFixture(test_remove_multiple),
};
EMB_UNIT_TESTCALLER(test_unicoap, NULL, NULL, fixtures);
return (Test*)&test_unicoap;
}