Patrick Barrett / libexositecoap
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?

UserRevisionLine numberNew 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