Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
picocoap/tests/coap_test.c@7:f9df43829cea, 2014-12-19 (annotated)
- Committer:
 - Patrick Barrett 
 - Date:
 - Fri Dec 19 15:43:03 2014 -0600
 - Revision:
 - 7:f9df43829cea
 - Child:
 - 26:3d46024a8c30
 
make picocoap a subtree instead of submodule
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| Patrick Barrett  | 
7:f9df43829cea | 1 | #include <stdio.h> | 
| Patrick Barrett  | 
7:f9df43829cea | 2 | #include <string.h> | 
| Patrick Barrett  | 
7:f9df43829cea | 3 | #include "minunit.h" | 
| Patrick Barrett  | 
7:f9df43829cea | 4 | #include "../src/coap.h" | 
| Patrick Barrett  | 
7:f9df43829cea | 5 | |
| Patrick Barrett  | 
7:f9df43829cea | 6 | int tests_run = 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 7 | |
| Patrick Barrett  | 
7:f9df43829cea | 8 | |
| Patrick Barrett  | 
7:f9df43829cea | 9 | void coap_pretty_print(coap_pdu *pdu); | 
| Patrick Barrett  | 
7:f9df43829cea | 10 | void hex_dump(char* bytes, size_t len); | 
| Patrick Barrett  | 
7:f9df43829cea | 11 | |
| Patrick Barrett  | 
7:f9df43829cea | 12 | static char * test_math() { | 
| Patrick Barrett  | 
7:f9df43829cea | 13 | mu_assert("[ERROR] 2+2 != 4", 2+2 == 4); | 
| Patrick Barrett  | 
7:f9df43829cea | 14 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 15 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 16 | |
| Patrick Barrett  | 
7:f9df43829cea | 17 | static char * test_msg_empty_con_getters() { | 
| Patrick Barrett  | 
7:f9df43829cea | 18 | uint8_t ref_bin[] = {64,0,0,0}; | 
| Patrick Barrett  | 
7:f9df43829cea | 19 | coap_pdu msg_ref = {ref_bin, 4, 4}; | 
| Patrick Barrett  | 
7:f9df43829cea | 20 | |
| Patrick Barrett  | 
7:f9df43829cea | 21 | mu_assert("[ERROR] Empty CON failed validation.", | 
| Patrick Barrett  | 
7:f9df43829cea | 22 | coap_validate_pkt(&msg_ref) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 23 | |
| Patrick Barrett  | 
7:f9df43829cea | 24 | mu_assert("[ERROR] Empty CON version decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 25 | coap_get_version(&msg_ref) == COAP_V1); | 
| Patrick Barrett  | 
7:f9df43829cea | 26 | |
| Patrick Barrett  | 
7:f9df43829cea | 27 | mu_assert("[ERROR] Empty CON type decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 28 | coap_get_type(&msg_ref) == CT_CON); | 
| Patrick Barrett  | 
7:f9df43829cea | 29 | |
| Patrick Barrett  | 
7:f9df43829cea | 30 | mu_assert("[ERROR] Empty CON tkl decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 31 | coap_get_tkl(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 32 | |
| Patrick Barrett  | 
7:f9df43829cea | 33 | mu_assert("[ERROR] Empty CON token decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 34 | coap_get_token(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 35 | |
| Patrick Barrett  | 
7:f9df43829cea | 36 | mu_assert("[ERROR] Empty CON code decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 37 | coap_get_code(&msg_ref) == CC_EMPTY); | 
| Patrick Barrett  | 
7:f9df43829cea | 38 | |
| Patrick Barrett  | 
7:f9df43829cea | 39 | mu_assert("[ERROR] Empty CON code class decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 40 | coap_get_code_class(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 41 | |
| Patrick Barrett  | 
7:f9df43829cea | 42 | mu_assert("[ERROR] Empty CON code detail decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 43 | coap_get_code_detail(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 44 | |
| Patrick Barrett  | 
7:f9df43829cea | 45 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 46 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 47 | |
| Patrick Barrett  | 
7:f9df43829cea | 48 | static char * test_msg_empty_con_getters_with_token() { | 
| Patrick Barrett  | 
7:f9df43829cea | 49 | uint8_t ref_bin[] = {66,0,0,0,37,42}; | 
| Patrick Barrett  | 
7:f9df43829cea | 50 | coap_pdu msg_ref = {ref_bin, 6, 6}; | 
| Patrick Barrett  | 
7:f9df43829cea | 51 | |
| Patrick Barrett  | 
7:f9df43829cea | 52 | mu_assert("[ERROR] Empty CON with token failed validation.", | 
| Patrick Barrett  | 
7:f9df43829cea | 53 | coap_validate_pkt(&msg_ref) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 54 | |
| Patrick Barrett  | 
7:f9df43829cea | 55 | mu_assert("[ERROR] Empty CON with token version decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 56 | coap_get_version(&msg_ref) == COAP_V1); | 
| Patrick Barrett  | 
7:f9df43829cea | 57 | |
| Patrick Barrett  | 
7:f9df43829cea | 58 | mu_assert("[ERROR] Empty CON with token type decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 59 | coap_get_type(&msg_ref) == CT_CON); | 
| Patrick Barrett  | 
7:f9df43829cea | 60 | |
| Patrick Barrett  | 
7:f9df43829cea | 61 | mu_assert("[ERROR] Empty CON with token tkl decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 62 | coap_get_tkl(&msg_ref) == 2); | 
| Patrick Barrett  | 
7:f9df43829cea | 63 | |
| Patrick Barrett  | 
7:f9df43829cea | 64 | mu_assert("[ERROR] Empty CON with token token decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 65 | coap_get_token(&msg_ref) == 0x2A25); | 
| Patrick Barrett  | 
7:f9df43829cea | 66 | |
| Patrick Barrett  | 
7:f9df43829cea | 67 | mu_assert("[ERROR] Empty CON with token code decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 68 | coap_get_code(&msg_ref) == CC_EMPTY); | 
| Patrick Barrett  | 
7:f9df43829cea | 69 | |
| Patrick Barrett  | 
7:f9df43829cea | 70 | mu_assert("[ERROR] Empty CON with token code class decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 71 | coap_get_code_class(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 72 | |
| Patrick Barrett  | 
7:f9df43829cea | 73 | mu_assert("[ERROR] Empty CON with token code detail decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 74 | coap_get_code_detail(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 75 | |
| Patrick Barrett  | 
7:f9df43829cea | 76 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 77 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 78 | |
| Patrick Barrett  | 
7:f9df43829cea | 79 | static char * test_msg_empty_con_setters() { | 
| Patrick Barrett  | 
7:f9df43829cea | 80 | uint8_t ref_bin[] = {64,0,0,0}; | 
| Patrick Barrett  | 
7:f9df43829cea | 81 | uint8_t test_bin[4]; | 
| Patrick Barrett  | 
7:f9df43829cea | 82 | coap_pdu msg_ref = {ref_bin, 4, 4}; | 
| Patrick Barrett  | 
7:f9df43829cea | 83 | coap_pdu msg_test = {test_bin, 0, 4}; | 
| Patrick Barrett  | 
7:f9df43829cea | 84 | |
| Patrick Barrett  | 
7:f9df43829cea | 85 | mu_assert("[ERROR] Empty CON failed to init.", | 
| Patrick Barrett  | 
7:f9df43829cea | 86 | coap_init_pdu(&msg_test) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 87 | |
| Patrick Barrett  | 
7:f9df43829cea | 88 | mu_assert("[ERROR] Empty CON failed to set version.", | 
| Patrick Barrett  | 
7:f9df43829cea | 89 | coap_set_version(&msg_test, COAP_V1) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 90 | |
| Patrick Barrett  | 
7:f9df43829cea | 91 | mu_assert("[ERROR] Empty CON failed to set type.", | 
| Patrick Barrett  | 
7:f9df43829cea | 92 | coap_set_type(&msg_test, CT_CON) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 93 | |
| Patrick Barrett  | 
7:f9df43829cea | 94 | mu_assert("[ERROR] Empty CON failed to set code.", | 
| Patrick Barrett  | 
7:f9df43829cea | 95 | coap_set_code(&msg_test, CC_EMPTY) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 96 | |
| Patrick Barrett  | 
7:f9df43829cea | 97 | mu_assert("[ERROR] Empty CON failed to set message ID.", | 
| Patrick Barrett  | 
7:f9df43829cea | 98 | coap_set_mid(&msg_test, 0) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 99 | |
| Patrick Barrett  | 
7:f9df43829cea | 100 | mu_assert("[ERROR] Empty CON failed to set token.", | 
| Patrick Barrett  | 
7:f9df43829cea | 101 | coap_set_token(&msg_test, 0, 0) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 102 | |
| Patrick Barrett  | 
7:f9df43829cea | 103 | mu_assert("[ERROR] Empty CON length set wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 104 | msg_test.len == msg_ref.len); | 
| Patrick Barrett  | 
7:f9df43829cea | 105 | |
| Patrick Barrett  | 
7:f9df43829cea | 106 | mu_assert("[ERROR] Empty CON failed to encode.", | 
| Patrick Barrett  | 
7:f9df43829cea | 107 | memcmp(msg_test.buf, msg_ref.buf, msg_ref.len) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 108 | |
| Patrick Barrett  | 
7:f9df43829cea | 109 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 110 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 111 | |
| Patrick Barrett  | 
7:f9df43829cea | 112 | static char * test_msg_get_con_getters() { | 
| Patrick Barrett  | 
7:f9df43829cea | 113 | uint8_t ref_bin[] = {0x40,0x01,0x00,0x37,0xb2,0x31,0x61,0x04,0x74,0x65, | 
| Patrick Barrett  | 
7:f9df43829cea | 114 | 0x6d,0x70,0x4d,0x1b,0x61,0x33,0x32,0x63,0x38,0x35, | 
| Patrick Barrett  | 
7:f9df43829cea | 115 | 0x62,0x61,0x39,0x64,0x64,0x61,0x34,0x35,0x38,0x32, | 
| Patrick Barrett  | 
7:f9df43829cea | 116 | 0x33,0x62,0x65,0x34,0x31,0x36,0x32,0x34,0x36,0x63, | 
| Patrick Barrett  | 
7:f9df43829cea | 117 | 0x66,0x38,0x62,0x34,0x33,0x33,0x62,0x61,0x61,0x30, | 
| Patrick Barrett  | 
7:f9df43829cea | 118 | 0x36,0x38,0x64,0x37}; | 
| Patrick Barrett  | 
7:f9df43829cea | 119 | coap_pdu msg_ref = {ref_bin, 54, 54}; | 
| Patrick Barrett  | 
7:f9df43829cea | 120 | coap_option option; | 
| Patrick Barrett  | 
7:f9df43829cea | 121 | |
| Patrick Barrett  | 
7:f9df43829cea | 122 | mu_assert("[ERROR] GET CON failed validation.", | 
| Patrick Barrett  | 
7:f9df43829cea | 123 | coap_validate_pkt(&msg_ref) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 124 | |
| Patrick Barrett  | 
7:f9df43829cea | 125 | mu_assert("[ERROR] GET CON version decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 126 | coap_get_version(&msg_ref) == COAP_V1); | 
| Patrick Barrett  | 
7:f9df43829cea | 127 | |
| Patrick Barrett  | 
7:f9df43829cea | 128 | mu_assert("[ERROR] GET CON type decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 129 | coap_get_type(&msg_ref) == CT_CON); | 
| Patrick Barrett  | 
7:f9df43829cea | 130 | |
| Patrick Barrett  | 
7:f9df43829cea | 131 | mu_assert("[ERROR] GET CON code decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 132 | coap_get_code(&msg_ref) == CC_GET); | 
| Patrick Barrett  | 
7:f9df43829cea | 133 | |
| Patrick Barrett  | 
7:f9df43829cea | 134 | mu_assert("[ERROR] GET CON code class decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 135 | coap_get_code_class(&msg_ref) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 136 | |
| Patrick Barrett  | 
7:f9df43829cea | 137 | mu_assert("[ERROR] GET CON code detail decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 138 | coap_get_code_detail(&msg_ref) == 1); | 
| Patrick Barrett  | 
7:f9df43829cea | 139 | |
| Patrick Barrett  | 
7:f9df43829cea | 140 | option = coap_get_option(&msg_ref, NULL); | 
| Patrick Barrett  | 
7:f9df43829cea | 141 | mu_assert("[ERROR] GET CON option zero length was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 142 | option.len == 2); | 
| Patrick Barrett  | 
7:f9df43829cea | 143 | mu_assert("[ERROR] GET CON option zero number was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 144 | option.num == CON_URI_PATH); | 
| Patrick Barrett  | 
7:f9df43829cea | 145 | mu_assert("[ERROR] GET CON option zero value was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 146 | memcmp(option.val, ref_bin+5, option.len) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 147 | |
| Patrick Barrett  | 
7:f9df43829cea | 148 | option = coap_get_option(&msg_ref, &option); | 
| Patrick Barrett  | 
7:f9df43829cea | 149 | mu_assert("[ERROR] GET CON option one length was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 150 | option.len == 4); | 
| Patrick Barrett  | 
7:f9df43829cea | 151 | mu_assert("[ERROR] GET CON option one number was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 152 | option.num == CON_URI_PATH); | 
| Patrick Barrett  | 
7:f9df43829cea | 153 | mu_assert("[ERROR] GET CON option one value was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 154 | memcmp(option.val, ref_bin+8, option.len) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 155 | |
| Patrick Barrett  | 
7:f9df43829cea | 156 | option = coap_get_option(&msg_ref, &option); | 
| Patrick Barrett  | 
7:f9df43829cea | 157 | mu_assert("[ERROR] GET CON option two length was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 158 | option.len == 40); | 
| Patrick Barrett  | 
7:f9df43829cea | 159 | mu_assert("[ERROR] GET CON option two number was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 160 | option.num == CON_URI_QUERY); | 
| Patrick Barrett  | 
7:f9df43829cea | 161 | mu_assert("[ERROR] GET CON option two value was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 162 | memcmp(option.val, ref_bin+14, option.len) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 163 | |
| Patrick Barrett  | 
7:f9df43829cea | 164 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 165 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 166 | |
| Patrick Barrett  | 
7:f9df43829cea | 167 | static char * test_msg_get_con_setters() { | 
| Patrick Barrett  | 
7:f9df43829cea | 168 | uint8_t ref_bin[] = {0x40,0x01,0x00,0x37,0xb2,0x31,0x61,0x04,0x74,0x65, | 
| Patrick Barrett  | 
7:f9df43829cea | 169 | 0x6d,0x70,0x4d,0x1b,0x61,0x33,0x32,0x63,0x38,0x35, | 
| Patrick Barrett  | 
7:f9df43829cea | 170 | 0x62,0x61,0x39,0x64,0x64,0x61,0x34,0x35,0x38,0x32, | 
| Patrick Barrett  | 
7:f9df43829cea | 171 | 0x33,0x62,0x65,0x34,0x31,0x36,0x32,0x34,0x36,0x63, | 
| Patrick Barrett  | 
7:f9df43829cea | 172 | 0x66,0x38,0x62,0x34,0x33,0x33,0x62,0x61,0x61,0x30, | 
| Patrick Barrett  | 
7:f9df43829cea | 173 | 0x36,0x38,0x64,0x37}; | 
| Patrick Barrett  | 
7:f9df43829cea | 174 | coap_pdu msg_ref = {ref_bin, 54, 54}; | 
| Patrick Barrett  | 
7:f9df43829cea | 175 | |
| Patrick Barrett  | 
7:f9df43829cea | 176 | uint8_t test_bin[54]; | 
| Patrick Barrett  | 
7:f9df43829cea | 177 | coap_pdu msg_test = {test_bin, 0,54}; | 
| Patrick Barrett  | 
7:f9df43829cea | 178 | |
| Patrick Barrett  | 
7:f9df43829cea | 179 | mu_assert("[ERROR] Empty CON failed to init.", | 
| Patrick Barrett  | 
7:f9df43829cea | 180 | coap_init_pdu(&msg_test) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 181 | |
| Patrick Barrett  | 
7:f9df43829cea | 182 | mu_assert("[ERROR] GET CON failed to set version.", | 
| Patrick Barrett  | 
7:f9df43829cea | 183 | coap_set_version(&msg_test, COAP_V1) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 184 | |
| Patrick Barrett  | 
7:f9df43829cea | 185 | mu_assert("[ERROR] GET CON failed to set type.", | 
| Patrick Barrett  | 
7:f9df43829cea | 186 | coap_set_type(&msg_test, CT_CON) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 187 | |
| Patrick Barrett  | 
7:f9df43829cea | 188 | mu_assert("[ERROR] GET CON failed to set code.", | 
| Patrick Barrett  | 
7:f9df43829cea | 189 | coap_set_code(&msg_test, CC_GET) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 190 | |
| Patrick Barrett  | 
7:f9df43829cea | 191 | mu_assert("[ERROR] GET CON failed to set message ID.", | 
| Patrick Barrett  | 
7:f9df43829cea | 192 | coap_set_mid(&msg_test, 0x37) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 193 | |
| Patrick Barrett  | 
7:f9df43829cea | 194 | mu_assert("[ERROR] GET CON failed to set token.", | 
| Patrick Barrett  | 
7:f9df43829cea | 195 | coap_set_token(&msg_test, 0, 0) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 196 | |
| Patrick Barrett  | 
7:f9df43829cea | 197 | mu_assert("[ERROR] GET CON failed to add first path option.", | 
| Patrick Barrett  | 
7:f9df43829cea | 198 | coap_add_option(&msg_test, CON_URI_PATH, ref_bin+5, 2) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 199 | |
| Patrick Barrett  | 
7:f9df43829cea | 200 | mu_assert("[ERROR] GET CON failed to add second path option.", | 
| Patrick Barrett  | 
7:f9df43829cea | 201 | coap_add_option(&msg_test, CON_URI_PATH, ref_bin+8, 4) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 202 | |
| Patrick Barrett  | 
7:f9df43829cea | 203 | mu_assert("[ERROR] GET CON failed to add query option.", | 
| Patrick Barrett  | 
7:f9df43829cea | 204 | coap_add_option(&msg_test, CON_URI_QUERY, ref_bin+14, 40) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 205 | |
| Patrick Barrett  | 
7:f9df43829cea | 206 | mu_assert("[ERROR] GET CON length set wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 207 | msg_test.len == 54); | 
| Patrick Barrett  | 
7:f9df43829cea | 208 | |
| Patrick Barrett  | 
7:f9df43829cea | 209 | mu_assert("[ERROR] GET CON failed to encode.", | 
| Patrick Barrett  | 
7:f9df43829cea | 210 | memcmp(msg_ref.buf, msg_test.buf, 54) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 211 | |
| Patrick Barrett  | 
7:f9df43829cea | 212 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 213 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 214 | |
| Patrick Barrett  | 
7:f9df43829cea | 215 | static char * test_msg_get_con_setters_out_order() { | 
| Patrick Barrett  | 
7:f9df43829cea | 216 | uint8_t ref_bin[] = {0x44,0x01,0x00,0x37,0xff,0xff,0xff,0xff,0xb2,0x31, | 
| Patrick Barrett  | 
7:f9df43829cea | 217 | 0x61,0x04,0x74,0x65,0x6d,0x70,0x4d,0x1b,0x61,0x33, | 
| Patrick Barrett  | 
7:f9df43829cea | 218 | 0x32,0x63,0x38,0x35,0x62,0x61,0x39,0x64,0x64,0x61, | 
| Patrick Barrett  | 
7:f9df43829cea | 219 | 0x34,0x35,0x38,0x32,0x33,0x62,0x65,0x34,0x31,0x36, | 
| Patrick Barrett  | 
7:f9df43829cea | 220 | 0x32,0x34,0x36,0x63,0x66,0x38,0x62,0x34,0x33,0x33, | 
| Patrick Barrett  | 
7:f9df43829cea | 221 | 0x62,0x61,0x61,0x30,0x36,0x38,0x64,0x37}; | 
| Patrick Barrett  | 
7:f9df43829cea | 222 | coap_pdu msg_ref = {ref_bin, 58, 58}; | 
| Patrick Barrett  | 
7:f9df43829cea | 223 | |
| Patrick Barrett  | 
7:f9df43829cea | 224 | uint8_t test_bin[64]; | 
| Patrick Barrett  | 
7:f9df43829cea | 225 | coap_pdu msg_test = {test_bin, 0, 64}; | 
| Patrick Barrett  | 
7:f9df43829cea | 226 | |
| Patrick Barrett  | 
7:f9df43829cea | 227 | //memset(test_bin, 0, 64); | 
| Patrick Barrett  | 
7:f9df43829cea | 228 | |
| Patrick Barrett  | 
7:f9df43829cea | 229 | mu_assert("[ERROR] Empty CON failed to init.", | 
| Patrick Barrett  | 
7:f9df43829cea | 230 | coap_init_pdu(&msg_test) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 231 | |
| Patrick Barrett  | 
7:f9df43829cea | 232 | mu_assert("[ERROR] GET CON failed to set version. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 233 | coap_set_version(&msg_test, COAP_V1) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 234 | |
| Patrick Barrett  | 
7:f9df43829cea | 235 | mu_assert("[ERROR] GET CON failed to set type. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 236 | coap_set_type(&msg_test, CT_CON) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 237 | |
| Patrick Barrett  | 
7:f9df43829cea | 238 | mu_assert("[ERROR] GET CON failed to set code. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 239 | coap_set_code(&msg_test, CC_GET) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 240 | |
| Patrick Barrett  | 
7:f9df43829cea | 241 | mu_assert("[ERROR] GET CON failed to set message ID. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 242 | coap_set_mid(&msg_test, 0x37) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 243 | |
| Patrick Barrett  | 
7:f9df43829cea | 244 | mu_assert("[ERROR] GET CON failed to set token. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 245 | coap_set_token(&msg_test, 0xFFFFFFFF, 4) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 246 | |
| Patrick Barrett  | 
7:f9df43829cea | 247 | mu_assert("[ERROR] GET CON failed to add first path option. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 248 | coap_add_option(&msg_test, CON_URI_PATH, ref_bin+9, 2) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 249 | |
| Patrick Barrett  | 
7:f9df43829cea | 250 | mu_assert("[ERROR] GET CON failed to add second path option. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 251 | coap_add_option(&msg_test, CON_URI_PATH, ref_bin+12, 4) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 252 | |
| Patrick Barrett  | 
7:f9df43829cea | 253 | mu_assert("[ERROR] GET CON failed to add query option. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 254 | coap_add_option(&msg_test, CON_URI_QUERY, ref_bin+18, 40) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 255 | |
| Patrick Barrett  | 
7:f9df43829cea | 256 | mu_assert("[ERROR] GET CON length set wrong. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 257 | msg_test.len == 58); | 
| Patrick Barrett  | 
7:f9df43829cea | 258 | |
| Patrick Barrett  | 
7:f9df43829cea | 259 | mu_assert("[ERROR] GET CON failed to encode. (Out of Order)", | 
| Patrick Barrett  | 
7:f9df43829cea | 260 | memcmp(msg_test.buf, msg_ref.buf, 58) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 261 | |
| Patrick Barrett  | 
7:f9df43829cea | 262 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 263 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 264 | |
| Patrick Barrett  | 
7:f9df43829cea | 265 | static char * test_msg_post_con_setters() { | 
| Patrick Barrett  | 
7:f9df43829cea | 266 | uint8_t ref_bin[] = {0x40,0x02,0x00,0x37,0xb2,0x31,0x61,0x04,0x74,0x65, | 
| Patrick Barrett  | 
7:f9df43829cea | 267 | 0x6d,0x70,0x4d,0x1b,0x61,0x33,0x32,0x63,0x38,0x35, | 
| Patrick Barrett  | 
7:f9df43829cea | 268 | 0x62,0x61,0x39,0x64,0x64,0x61,0x34,0x35,0x38,0x32, | 
| Patrick Barrett  | 
7:f9df43829cea | 269 | 0x33,0x62,0x65,0x34,0x31,0x36,0x32,0x34,0x36,0x63, | 
| Patrick Barrett  | 
7:f9df43829cea | 270 | 0x66,0x38,0x62,0x34,0x33,0x33,0x62,0x61,0x61,0x30, | 
| Patrick Barrett  | 
7:f9df43829cea | 271 | 0x36,0x38,0x64,0x37,0xFF,0x39,0x39}; | 
| Patrick Barrett  | 
7:f9df43829cea | 272 | coap_pdu msg_ref = {ref_bin, 57, 57}; | 
| Patrick Barrett  | 
7:f9df43829cea | 273 | |
| Patrick Barrett  | 
7:f9df43829cea | 274 | uint8_t test_bin[57]; | 
| Patrick Barrett  | 
7:f9df43829cea | 275 | coap_pdu msg_test = {test_bin, 0, 57}; | 
| Patrick Barrett  | 
7:f9df43829cea | 276 | |
| Patrick Barrett  | 
7:f9df43829cea | 277 | mu_assert("[ERROR] Empty CON failed to init.", | 
| Patrick Barrett  | 
7:f9df43829cea | 278 | coap_init_pdu(&msg_test) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 279 | |
| Patrick Barrett  | 
7:f9df43829cea | 280 | mu_assert("[ERROR] POST CON failed to set version.", | 
| Patrick Barrett  | 
7:f9df43829cea | 281 | coap_set_version(&msg_test, COAP_V1) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 282 | |
| Patrick Barrett  | 
7:f9df43829cea | 283 | mu_assert("[ERROR] POST CON failed to set type.", | 
| Patrick Barrett  | 
7:f9df43829cea | 284 | coap_set_type(&msg_test, CT_CON) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 285 | |
| Patrick Barrett  | 
7:f9df43829cea | 286 | mu_assert("[ERROR] POST CON failed to set code.", | 
| Patrick Barrett  | 
7:f9df43829cea | 287 | coap_set_code(&msg_test, CC_POST) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 288 | |
| Patrick Barrett  | 
7:f9df43829cea | 289 | mu_assert("[ERROR] POST CON failed to set message ID.", | 
| Patrick Barrett  | 
7:f9df43829cea | 290 | coap_set_mid(&msg_test, 0x37) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 291 | |
| Patrick Barrett  | 
7:f9df43829cea | 292 | mu_assert("[ERROR] POST CON failed to set token.", | 
| Patrick Barrett  | 
7:f9df43829cea | 293 | coap_set_token(&msg_test, 0, 0) >= 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 294 | |
| Patrick Barrett  | 
7:f9df43829cea | 295 | mu_assert("[ERROR] POST CON failed to add first path option.", | 
| Patrick Barrett  | 
7:f9df43829cea | 296 | coap_add_option(&msg_test, CON_URI_PATH, ref_bin+5, 2) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 297 | |
| Patrick Barrett  | 
7:f9df43829cea | 298 | mu_assert("[ERROR] POST CON failed to add second path option.", | 
| Patrick Barrett  | 
7:f9df43829cea | 299 | coap_add_option(&msg_test, CON_URI_PATH, ref_bin+8, 4) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 300 | |
| Patrick Barrett  | 
7:f9df43829cea | 301 | mu_assert("[ERROR] POST CON failed to add query option.", | 
| Patrick Barrett  | 
7:f9df43829cea | 302 | coap_add_option(&msg_test, CON_URI_QUERY, ref_bin+14, 40) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 303 | |
| Patrick Barrett  | 
7:f9df43829cea | 304 | mu_assert("[ERROR] POST CON failed to add payload.", | 
| Patrick Barrett  | 
7:f9df43829cea | 305 | coap_set_payload(&msg_test, ref_bin+55, 2) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 306 | |
| Patrick Barrett  | 
7:f9df43829cea | 307 | mu_assert("[ERROR] POST CON length set wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 308 | msg_test.len == 57); | 
| Patrick Barrett  | 
7:f9df43829cea | 309 | |
| Patrick Barrett  | 
7:f9df43829cea | 310 | mu_assert("[ERROR] POST CON failed to encode.", | 
| Patrick Barrett  | 
7:f9df43829cea | 311 | memcmp(msg_ref.buf, msg_test.buf, 57) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 312 | |
| Patrick Barrett  | 
7:f9df43829cea | 313 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 314 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 315 | |
| Patrick Barrett  | 
7:f9df43829cea | 316 | static char * test_msg_content_ack_getters() { | 
| Patrick Barrett  | 
7:f9df43829cea | 317 | uint8_t ref_bin[] = {0x61,0x45,0xEE,0xCC,0xA2,0xFF,0x35,0x36}; | 
| Patrick Barrett  | 
7:f9df43829cea | 318 | coap_pdu msg_ref = {ref_bin, 8, 8}; | 
| Patrick Barrett  | 
7:f9df43829cea | 319 | |
| Patrick Barrett  | 
7:f9df43829cea | 320 | coap_payload payload; | 
| Patrick Barrett  | 
7:f9df43829cea | 321 | |
| Patrick Barrett  | 
7:f9df43829cea | 322 | mu_assert("[ERROR] CONTENT ACK failed validation.", | 
| Patrick Barrett  | 
7:f9df43829cea | 323 | coap_validate_pkt(&msg_ref) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 324 | |
| Patrick Barrett  | 
7:f9df43829cea | 325 | mu_assert("[ERROR] CONTENT ACK version decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 326 | coap_get_version(&msg_ref) == COAP_V1); | 
| Patrick Barrett  | 
7:f9df43829cea | 327 | |
| Patrick Barrett  | 
7:f9df43829cea | 328 | mu_assert("[ERROR] CONTENT ACK type decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 329 | coap_get_type(&msg_ref) == CT_ACK); | 
| Patrick Barrett  | 
7:f9df43829cea | 330 | |
| Patrick Barrett  | 
7:f9df43829cea | 331 | mu_assert("[ERROR] CONTENT ACK code decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 332 | coap_get_code(&msg_ref) == CC_CONTENT); | 
| Patrick Barrett  | 
7:f9df43829cea | 333 | |
| Patrick Barrett  | 
7:f9df43829cea | 334 | mu_assert("[ERROR] CONTENT ACK code class decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 335 | coap_get_code_class(&msg_ref) == 2); | 
| Patrick Barrett  | 
7:f9df43829cea | 336 | |
| Patrick Barrett  | 
7:f9df43829cea | 337 | mu_assert("[ERROR] CONTENT ACK code detail decoded wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 338 | coap_get_code_detail(&msg_ref) == 5); | 
| Patrick Barrett  | 
7:f9df43829cea | 339 | |
| Patrick Barrett  | 
7:f9df43829cea | 340 | payload = coap_get_payload(&msg_ref); | 
| Patrick Barrett  | 
7:f9df43829cea | 341 | mu_assert("[ERROR] CONTENT ACK payload length was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 342 | payload.len == 2); | 
| Patrick Barrett  | 
7:f9df43829cea | 343 | mu_assert("[ERROR] CONTENT ACK payload value was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 344 | memcmp(payload.val, ref_bin+6, 2) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 345 | |
| Patrick Barrett  | 
7:f9df43829cea | 346 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 347 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 348 | |
| Patrick Barrett  | 
7:f9df43829cea | 349 | static char * test_msg_pl_from_get_opt_no_opt() { | 
| Patrick Barrett  | 
7:f9df43829cea | 350 | uint8_t ref_bin[] = {0x62, 0x45, 0xee, 0x8b, 0x0e, 0x50, 0xff, 0x53, | 
| Patrick Barrett  | 
7:f9df43829cea | 351 | 0x68, 0x6f, 0x6f, 0x70}; | 
| Patrick Barrett  | 
7:f9df43829cea | 352 | coap_pdu msg_ref = {ref_bin, 12, 12}; | 
| Patrick Barrett  | 
7:f9df43829cea | 353 | |
| Patrick Barrett  | 
7:f9df43829cea | 354 | coap_option payload; | 
| Patrick Barrett  | 
7:f9df43829cea | 355 | |
| Patrick Barrett  | 
7:f9df43829cea | 356 | mu_assert("[ERROR] PAYLOAD NO OPT failed validation.", | 
| Patrick Barrett  | 
7:f9df43829cea | 357 | coap_validate_pkt(&msg_ref) == CE_NONE); | 
| Patrick Barrett  | 
7:f9df43829cea | 358 | |
| Patrick Barrett  | 
7:f9df43829cea | 359 | payload = coap_get_option(&msg_ref, 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 360 | mu_assert("[ERROR] PAYLOAD NO OPT didn't find payload.", | 
| Patrick Barrett  | 
7:f9df43829cea | 361 | payload.num == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 362 | mu_assert("[ERROR] PAYLOAD NO OPT payload length was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 363 | payload.len == 5); | 
| Patrick Barrett  | 
7:f9df43829cea | 364 | mu_assert("[ERROR] PAYLOAD NO OPT payload value was wrong.", | 
| Patrick Barrett  | 
7:f9df43829cea | 365 | memcmp(payload.val, ref_bin+7, 5) == 0); | 
| Patrick Barrett  | 
7:f9df43829cea | 366 | |
| Patrick Barrett  | 
7:f9df43829cea | 367 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 368 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 369 | |
| Patrick Barrett  | 
7:f9df43829cea | 370 | // Helpers | 
| Patrick Barrett  | 
7:f9df43829cea | 371 | void hex_dump(char* bytes, size_t len) | 
| Patrick Barrett  | 
7:f9df43829cea | 372 | { | 
| Patrick Barrett  | 
7:f9df43829cea | 373 | size_t i, j; | 
| Patrick Barrett  | 
7:f9df43829cea | 374 | for (i = 0; i < len; i+=16){ | 
| Patrick Barrett  | 
7:f9df43829cea | 375 | printf(" 0x%.3zx ", i); | 
| Patrick Barrett  | 
7:f9df43829cea | 376 | for (j = 0; j < 16; j++){ | 
| Patrick Barrett  | 
7:f9df43829cea | 377 | if (i+j < len) | 
| Patrick Barrett  | 
7:f9df43829cea | 378 | printf("%.2hhx ", bytes[i+j]); | 
| Patrick Barrett  | 
7:f9df43829cea | 379 | else | 
| Patrick Barrett  | 
7:f9df43829cea | 380 | printf("%s ", "--"); | 
| Patrick Barrett  | 
7:f9df43829cea | 381 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 382 | printf(" %.*s\n", (int)(16 > len-i ? len-i : 16), bytes+i); | 
| Patrick Barrett  | 
7:f9df43829cea | 383 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 384 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 385 | |
| Patrick Barrett  | 
7:f9df43829cea | 386 | void coap_pretty_print(coap_pdu *pdu) | 
| Patrick Barrett  | 
7:f9df43829cea | 387 | { | 
| Patrick Barrett  | 
7:f9df43829cea | 388 | if (coap_validate_pkt(pdu) == 0){ | 
| Patrick Barrett  | 
7:f9df43829cea | 389 | printf("Found Valid Coap Packet\n"); | 
| Patrick Barrett  | 
7:f9df43829cea | 390 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 391 | |
| Patrick Barrett  | 
7:f9df43829cea | 392 | hex_dump((char*)pdu->buf, pdu->len); | 
| Patrick Barrett  | 
7:f9df43829cea | 393 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 394 | |
| Patrick Barrett  | 
7:f9df43829cea | 395 | static char * all_tests() { | 
| Patrick Barrett  | 
7:f9df43829cea | 396 | // Make Sure the Tests Are Working | 
| Patrick Barrett  | 
7:f9df43829cea | 397 | mu_run_test(test_math); | 
| Patrick Barrett  | 
7:f9df43829cea | 398 | |
| Patrick Barrett  | 
7:f9df43829cea | 399 | // Actually Run the Real Tests | 
| Patrick Barrett  | 
7:f9df43829cea | 400 | mu_run_test(test_msg_empty_con_getters); | 
| Patrick Barrett  | 
7:f9df43829cea | 401 | mu_run_test(test_msg_empty_con_getters_with_token); | 
| Patrick Barrett  | 
7:f9df43829cea | 402 | mu_run_test(test_msg_empty_con_setters); | 
| Patrick Barrett  | 
7:f9df43829cea | 403 | mu_run_test(test_msg_get_con_getters); | 
| Patrick Barrett  | 
7:f9df43829cea | 404 | mu_run_test(test_msg_get_con_setters); | 
| Patrick Barrett  | 
7:f9df43829cea | 405 | mu_run_test(test_msg_content_ack_getters); | 
| Patrick Barrett  | 
7:f9df43829cea | 406 | mu_run_test(test_msg_get_con_setters_out_order); | 
| Patrick Barrett  | 
7:f9df43829cea | 407 | mu_run_test(test_msg_post_con_setters); | 
| Patrick Barrett  | 
7:f9df43829cea | 408 | mu_run_test(test_msg_pl_from_get_opt_no_opt); | 
| Patrick Barrett  | 
7:f9df43829cea | 409 | return 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 410 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 411 | |
| Patrick Barrett  | 
7:f9df43829cea | 412 | int main(int argc, char **argv) { | 
| Patrick Barrett  | 
7:f9df43829cea | 413 | char *result = all_tests(); | 
| Patrick Barrett  | 
7:f9df43829cea | 414 | if (result != 0) { | 
| Patrick Barrett  | 
7:f9df43829cea | 415 | printf("%s\n", result); | 
| Patrick Barrett  | 
7:f9df43829cea | 416 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 417 | else { | 
| Patrick Barrett  | 
7:f9df43829cea | 418 | printf("ALL TESTS PASSED\n"); | 
| Patrick Barrett  | 
7:f9df43829cea | 419 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 420 | printf("Tests run: %d\n", tests_run); | 
| Patrick Barrett  | 
7:f9df43829cea | 421 | |
| Patrick Barrett  | 
7:f9df43829cea | 422 | return result != 0; | 
| Patrick Barrett  | 
7:f9df43829cea | 423 | } | 
| Patrick Barrett  | 
7:f9df43829cea | 424 |