1c87c5fbaSopenharmony_ci/* libcoap unit tests 2c87c5fbaSopenharmony_ci * 3c87c5fbaSopenharmony_ci * Copyright (C) 2019-2023 Olaf Bergmann <bergmann@tzi.org> 4c87c5fbaSopenharmony_ci * 5c87c5fbaSopenharmony_ci * SPDX-License-Identifier: BSD-2-Clause 6c87c5fbaSopenharmony_ci * 7c87c5fbaSopenharmony_ci * This file is part of the CoAP library libcoap. Please see 8c87c5fbaSopenharmony_ci * README for terms of use. 9c87c5fbaSopenharmony_ci */ 10c87c5fbaSopenharmony_ci 11c87c5fbaSopenharmony_ci#include "test_common.h" 12c87c5fbaSopenharmony_ci#include "test_encode.h" 13c87c5fbaSopenharmony_ci 14c87c5fbaSopenharmony_ci#include <stdio.h> 15c87c5fbaSopenharmony_ci#include <stdlib.h> 16c87c5fbaSopenharmony_ci#include <string.h> 17c87c5fbaSopenharmony_ci 18c87c5fbaSopenharmony_ci/************************************************************************ 19c87c5fbaSopenharmony_ci ** decoder tests 20c87c5fbaSopenharmony_ci ************************************************************************/ 21c87c5fbaSopenharmony_ci 22c87c5fbaSopenharmony_cistatic void 23c87c5fbaSopenharmony_cit_decode1(void) { 24c87c5fbaSopenharmony_ci const coap_binary_t teststr = { 0, NULL }; 25c87c5fbaSopenharmony_ci unsigned int result; 26c87c5fbaSopenharmony_ci 27c87c5fbaSopenharmony_ci result = coap_decode_var_bytes(teststr.s, teststr.length); 28c87c5fbaSopenharmony_ci 29c87c5fbaSopenharmony_ci CU_ASSERT(result == 0); 30c87c5fbaSopenharmony_ci} 31c87c5fbaSopenharmony_ci 32c87c5fbaSopenharmony_cistatic void 33c87c5fbaSopenharmony_cit_decode2(void) { 34c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01 }; 35c87c5fbaSopenharmony_ci coap_binary_t teststr = { sizeof(data), data }; 36c87c5fbaSopenharmony_ci unsigned int result; 37c87c5fbaSopenharmony_ci 38c87c5fbaSopenharmony_ci result = coap_decode_var_bytes8(teststr.s, teststr.length); 39c87c5fbaSopenharmony_ci 40c87c5fbaSopenharmony_ci CU_ASSERT(result == 1); 41c87c5fbaSopenharmony_ci} 42c87c5fbaSopenharmony_ci 43c87c5fbaSopenharmony_cistatic void 44c87c5fbaSopenharmony_cit_decode3(void) { 45c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01, 0x00, 0x00, 0x00 }; 46c87c5fbaSopenharmony_ci coap_binary_t teststr = { sizeof(data), data }; 47c87c5fbaSopenharmony_ci unsigned int result; 48c87c5fbaSopenharmony_ci 49c87c5fbaSopenharmony_ci result = coap_decode_var_bytes(teststr.s, teststr.length); 50c87c5fbaSopenharmony_ci 51c87c5fbaSopenharmony_ci CU_ASSERT(result == 0x01000000); 52c87c5fbaSopenharmony_ci} 53c87c5fbaSopenharmony_ci 54c87c5fbaSopenharmony_cistatic void 55c87c5fbaSopenharmony_cit_decode4(void) { 56c87c5fbaSopenharmony_ci uint8_t data[] = { 0x05, 0x06, 0x07, 0x08 }; 57c87c5fbaSopenharmony_ci coap_binary_t teststr = { sizeof(data), data }; 58c87c5fbaSopenharmony_ci unsigned int result; 59c87c5fbaSopenharmony_ci 60c87c5fbaSopenharmony_ci result = coap_decode_var_bytes(teststr.s, teststr.length); 61c87c5fbaSopenharmony_ci 62c87c5fbaSopenharmony_ci CU_ASSERT(result == 0x05060708); 63c87c5fbaSopenharmony_ci} 64c87c5fbaSopenharmony_ci 65c87c5fbaSopenharmony_cistatic void 66c87c5fbaSopenharmony_cit_decode5(void) { 67c87c5fbaSopenharmony_ci const coap_binary_t teststr = { 0, NULL }; 68c87c5fbaSopenharmony_ci uint64_t result; 69c87c5fbaSopenharmony_ci 70c87c5fbaSopenharmony_ci result = coap_decode_var_bytes8(teststr.s, teststr.length); 71c87c5fbaSopenharmony_ci 72c87c5fbaSopenharmony_ci CU_ASSERT(result == 0); 73c87c5fbaSopenharmony_ci} 74c87c5fbaSopenharmony_ci 75c87c5fbaSopenharmony_cistatic void 76c87c5fbaSopenharmony_cit_decode6(void) { 77c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01 }; 78c87c5fbaSopenharmony_ci coap_binary_t teststr = { sizeof(data), data }; 79c87c5fbaSopenharmony_ci uint64_t result; 80c87c5fbaSopenharmony_ci 81c87c5fbaSopenharmony_ci result = coap_decode_var_bytes8(teststr.s, teststr.length); 82c87c5fbaSopenharmony_ci 83c87c5fbaSopenharmony_ci CU_ASSERT(result == 1); 84c87c5fbaSopenharmony_ci} 85c87c5fbaSopenharmony_ci 86c87c5fbaSopenharmony_cistatic void 87c87c5fbaSopenharmony_cit_decode7(void) { 88c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 89c87c5fbaSopenharmony_ci coap_binary_t teststr = { sizeof(data), data }; 90c87c5fbaSopenharmony_ci uint64_t result; 91c87c5fbaSopenharmony_ci 92c87c5fbaSopenharmony_ci result = coap_decode_var_bytes8(teststr.s, teststr.length); 93c87c5fbaSopenharmony_ci 94c87c5fbaSopenharmony_ci CU_ASSERT(result == 0x0100000000000000); 95c87c5fbaSopenharmony_ci} 96c87c5fbaSopenharmony_ci 97c87c5fbaSopenharmony_cistatic void 98c87c5fbaSopenharmony_cit_decode8(void) { 99c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; 100c87c5fbaSopenharmony_ci coap_binary_t teststr = { sizeof(data), data }; 101c87c5fbaSopenharmony_ci uint64_t result; 102c87c5fbaSopenharmony_ci 103c87c5fbaSopenharmony_ci result = coap_decode_var_bytes8(teststr.s, teststr.length); 104c87c5fbaSopenharmony_ci 105c87c5fbaSopenharmony_ci CU_ASSERT(result == 0x0102030405060708); 106c87c5fbaSopenharmony_ci} 107c87c5fbaSopenharmony_ci 108c87c5fbaSopenharmony_ci/************************************************************************ 109c87c5fbaSopenharmony_ci ** encoder tests 110c87c5fbaSopenharmony_ci ************************************************************************/ 111c87c5fbaSopenharmony_ci 112c87c5fbaSopenharmony_cistatic void 113c87c5fbaSopenharmony_cit_encode1(void) { 114c87c5fbaSopenharmony_ci uint8_t buf[16]; 115c87c5fbaSopenharmony_ci uint8_t data[] = { 0x00 }; 116c87c5fbaSopenharmony_ci unsigned int result; 117c87c5fbaSopenharmony_ci 118c87c5fbaSopenharmony_ci result = coap_encode_var_safe(buf, sizeof(buf), 0x00); 119c87c5fbaSopenharmony_ci 120c87c5fbaSopenharmony_ci CU_ASSERT(result == 0); 121c87c5fbaSopenharmony_ci 122c87c5fbaSopenharmony_ci CU_ASSERT(memcmp(buf, data, result) == 0); 123c87c5fbaSopenharmony_ci} 124c87c5fbaSopenharmony_ci 125c87c5fbaSopenharmony_cistatic void 126c87c5fbaSopenharmony_cit_encode2(void) { 127c87c5fbaSopenharmony_ci uint8_t buf[16]; 128c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01 }; 129c87c5fbaSopenharmony_ci unsigned int result; 130c87c5fbaSopenharmony_ci 131c87c5fbaSopenharmony_ci result = coap_encode_var_safe(buf, sizeof(buf), 0x01); 132c87c5fbaSopenharmony_ci 133c87c5fbaSopenharmony_ci CU_ASSERT(result == sizeof(data)); 134c87c5fbaSopenharmony_ci 135c87c5fbaSopenharmony_ci CU_ASSERT(memcmp(buf, data, result) == 0); 136c87c5fbaSopenharmony_ci} 137c87c5fbaSopenharmony_ci 138c87c5fbaSopenharmony_cistatic void 139c87c5fbaSopenharmony_cit_encode3(void) { 140c87c5fbaSopenharmony_ci uint8_t buf[16]; 141c87c5fbaSopenharmony_ci uint8_t data[] = { 0x05, 0x06, 0x07, 0x08 }; 142c87c5fbaSopenharmony_ci unsigned int result; 143c87c5fbaSopenharmony_ci 144c87c5fbaSopenharmony_ci result = coap_encode_var_safe8(buf, sizeof(buf), 0x05060708); 145c87c5fbaSopenharmony_ci 146c87c5fbaSopenharmony_ci CU_ASSERT(result == sizeof(data)); 147c87c5fbaSopenharmony_ci 148c87c5fbaSopenharmony_ci CU_ASSERT(memcmp(buf, data, result) == 0); 149c87c5fbaSopenharmony_ci} 150c87c5fbaSopenharmony_ci 151c87c5fbaSopenharmony_cistatic void 152c87c5fbaSopenharmony_cit_encode4(void) { 153c87c5fbaSopenharmony_ci unsigned int result = 0; 154c87c5fbaSopenharmony_ci /* This check will abort the program if configured with --enable-assert */ 155c87c5fbaSopenharmony_ci#ifdef NDEBUG 156c87c5fbaSopenharmony_ci uint8_t buf[16]; 157c87c5fbaSopenharmony_ci result = coap_encode_var_safe(buf, 2, 0x01020304); 158c87c5fbaSopenharmony_ci#endif /* NDEBUG */ 159c87c5fbaSopenharmony_ci CU_ASSERT(result == 0); 160c87c5fbaSopenharmony_ci} 161c87c5fbaSopenharmony_ci 162c87c5fbaSopenharmony_cistatic void 163c87c5fbaSopenharmony_cit_encode5(void) { 164c87c5fbaSopenharmony_ci uint8_t buf[16]; 165c87c5fbaSopenharmony_ci uint8_t data[] = { 0x00 }; 166c87c5fbaSopenharmony_ci unsigned int result; 167c87c5fbaSopenharmony_ci 168c87c5fbaSopenharmony_ci result = coap_encode_var_safe8(buf, sizeof(buf), 0x00); 169c87c5fbaSopenharmony_ci 170c87c5fbaSopenharmony_ci CU_ASSERT(result == 0); 171c87c5fbaSopenharmony_ci 172c87c5fbaSopenharmony_ci CU_ASSERT(memcmp(buf, data, result) == 0); 173c87c5fbaSopenharmony_ci} 174c87c5fbaSopenharmony_ci 175c87c5fbaSopenharmony_cistatic void 176c87c5fbaSopenharmony_cit_encode6(void) { 177c87c5fbaSopenharmony_ci uint8_t buf[16]; 178c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01 }; 179c87c5fbaSopenharmony_ci unsigned int result; 180c87c5fbaSopenharmony_ci 181c87c5fbaSopenharmony_ci result = coap_encode_var_safe8(buf, sizeof(buf), 0x01); 182c87c5fbaSopenharmony_ci 183c87c5fbaSopenharmony_ci CU_ASSERT(result == sizeof(data)); 184c87c5fbaSopenharmony_ci 185c87c5fbaSopenharmony_ci CU_ASSERT(memcmp(buf, data, result) == 0); 186c87c5fbaSopenharmony_ci} 187c87c5fbaSopenharmony_ci 188c87c5fbaSopenharmony_cistatic void 189c87c5fbaSopenharmony_cit_encode7(void) { 190c87c5fbaSopenharmony_ci uint8_t buf[16]; 191c87c5fbaSopenharmony_ci uint8_t data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; 192c87c5fbaSopenharmony_ci unsigned int result; 193c87c5fbaSopenharmony_ci 194c87c5fbaSopenharmony_ci result = coap_encode_var_safe8(buf, sizeof(buf), 0x0102030405060708); 195c87c5fbaSopenharmony_ci 196c87c5fbaSopenharmony_ci CU_ASSERT(result == sizeof(data)); 197c87c5fbaSopenharmony_ci 198c87c5fbaSopenharmony_ci CU_ASSERT(memcmp(buf, data, result) == 0); 199c87c5fbaSopenharmony_ci} 200c87c5fbaSopenharmony_ci 201c87c5fbaSopenharmony_cistatic void 202c87c5fbaSopenharmony_cit_encode8(void) { 203c87c5fbaSopenharmony_ci unsigned int result = 0; 204c87c5fbaSopenharmony_ci /* This check will abort the program if configured with --enable-assert */ 205c87c5fbaSopenharmony_ci#ifdef NDEBUG 206c87c5fbaSopenharmony_ci uint8_t buf[16]; 207c87c5fbaSopenharmony_ci result = coap_encode_var_safe8(buf, 2, 0x0102030405060708); 208c87c5fbaSopenharmony_ci#endif /* NDEBUG */ 209c87c5fbaSopenharmony_ci CU_ASSERT(result == 0); 210c87c5fbaSopenharmony_ci} 211c87c5fbaSopenharmony_ci 212c87c5fbaSopenharmony_ci/************************************************************************ 213c87c5fbaSopenharmony_ci ** initialization 214c87c5fbaSopenharmony_ci ************************************************************************/ 215c87c5fbaSopenharmony_ci 216c87c5fbaSopenharmony_ciCU_pSuite 217c87c5fbaSopenharmony_cit_init_encode_tests(void) { 218c87c5fbaSopenharmony_ci CU_pSuite suite[5]; 219c87c5fbaSopenharmony_ci 220c87c5fbaSopenharmony_ci suite[0] = CU_add_suite("byte value decoder", NULL, NULL); 221c87c5fbaSopenharmony_ci if (!suite[0]) { /* signal error */ 222c87c5fbaSopenharmony_ci fprintf(stderr, "W: cannot add byte value decoder test suite (%s)\n", 223c87c5fbaSopenharmony_ci CU_get_error_msg()); 224c87c5fbaSopenharmony_ci 225c87c5fbaSopenharmony_ci return NULL; 226c87c5fbaSopenharmony_ci } 227c87c5fbaSopenharmony_ci 228c87c5fbaSopenharmony_ci#define DECODE_TEST(n,s) \ 229c87c5fbaSopenharmony_ci if (!CU_add_test(suite[0], s, t_decode##n)) { \ 230c87c5fbaSopenharmony_ci fprintf(stderr, "W: cannot add decoder test (%s)\n", \ 231c87c5fbaSopenharmony_ci CU_get_error_msg()); \ 232c87c5fbaSopenharmony_ci } 233c87c5fbaSopenharmony_ci 234c87c5fbaSopenharmony_ci DECODE_TEST(1, "decode value #1"); 235c87c5fbaSopenharmony_ci DECODE_TEST(2, "decode value #2"); 236c87c5fbaSopenharmony_ci DECODE_TEST(3, "decode value #3"); 237c87c5fbaSopenharmony_ci DECODE_TEST(4, "decode value #4"); 238c87c5fbaSopenharmony_ci DECODE_TEST(5, "decode value #5"); 239c87c5fbaSopenharmony_ci DECODE_TEST(6, "decode value #6"); 240c87c5fbaSopenharmony_ci DECODE_TEST(7, "decode value #7"); 241c87c5fbaSopenharmony_ci DECODE_TEST(8, "decode value #8"); 242c87c5fbaSopenharmony_ci 243c87c5fbaSopenharmony_ci if ((suite[1] = CU_add_suite("byte value encoder", NULL, NULL))) { 244c87c5fbaSopenharmony_ci#define ENCODE_TEST(n,s) \ 245c87c5fbaSopenharmony_ci if (!CU_add_test(suite[1], s, t_encode##n)) { \ 246c87c5fbaSopenharmony_ci fprintf(stderr, "W: cannot add encoder test (%s)\n", \ 247c87c5fbaSopenharmony_ci CU_get_error_msg()); \ 248c87c5fbaSopenharmony_ci } 249c87c5fbaSopenharmony_ci 250c87c5fbaSopenharmony_ci ENCODE_TEST(1, "encode value #1"); 251c87c5fbaSopenharmony_ci ENCODE_TEST(2, "encode value #2"); 252c87c5fbaSopenharmony_ci ENCODE_TEST(3, "encode value #3"); 253c87c5fbaSopenharmony_ci ENCODE_TEST(4, "encode value #4"); 254c87c5fbaSopenharmony_ci ENCODE_TEST(5, "encode value #5"); 255c87c5fbaSopenharmony_ci ENCODE_TEST(6, "encode value #6"); 256c87c5fbaSopenharmony_ci ENCODE_TEST(7, "encode value #7"); 257c87c5fbaSopenharmony_ci ENCODE_TEST(8, "encode value #8"); 258c87c5fbaSopenharmony_ci 259c87c5fbaSopenharmony_ci } else { 260c87c5fbaSopenharmony_ci fprintf(stderr, "W: cannot add byte value encoder test suite (%s)\n", 261c87c5fbaSopenharmony_ci CU_get_error_msg()); 262c87c5fbaSopenharmony_ci } 263c87c5fbaSopenharmony_ci 264c87c5fbaSopenharmony_ci return suite[0]; 265c87c5fbaSopenharmony_ci} 266