3 * OBEX library with GLib integration
5 * Copyright (C) 2011 Intel Corporation. All rights reserved.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #include "gobex/gobex.h"
31 #include "gobex/gobex-header.h"
35 static uint8_t hdr_connid[] = { G_OBEX_HDR_CONNECTION, 1, 2, 3, 4 };
36 static uint8_t hdr_name_empty[] = { G_OBEX_HDR_NAME, 0x00, 0x03 };
37 static uint8_t hdr_name_ascii[] = { G_OBEX_HDR_NAME, 0x00, 0x0b,
38 0x00, 'f', 0x00, 'o', 0x00, 'o',
40 static uint8_t hdr_name_umlaut[] = { G_OBEX_HDR_NAME, 0x00, 0x0b,
41 0x00, 0xe5, 0x00, 0xe4, 0x00, 0xf6,
43 static uint8_t hdr_body[] = { G_OBEX_HDR_BODY, 0x00, 0x07, 1, 2, 3, 4 };
44 static uint8_t hdr_actionid[] = { G_OBEX_HDR_ACTION, 0xab };
46 static uint8_t hdr_uint32_nval[] = { G_OBEX_HDR_CONNECTION, 1, 2 };
47 static uint8_t hdr_unicode_nval_short[] = { G_OBEX_HDR_NAME, 0x12, 0x34,
50 static uint8_t hdr_unicode_nval_data[] = { G_OBEX_HDR_NAME, 0x00, 0x01,
51 0x00, 'a', 0x00, 'b' };
52 static uint8_t hdr_bytes_nval_short[] = { G_OBEX_HDR_BODY, 0xab, 0xcd,
54 static uint8_t hdr_bytes_nval_data[] = { G_OBEX_HDR_BODY, 0xab };
55 static uint8_t hdr_bytes_nval_len[] = { G_OBEX_HDR_BODY, 0x00, 0x00 };
56 static uint8_t hdr_apparam[] = { G_OBEX_HDR_APPARAM, 0x00, 0x09, 0x00, 0x04,
57 0x01, 0x02, 0x03, 0x04 };
59 static void test_header_name_empty(void)
65 header = g_obex_header_new_unicode(G_OBEX_HDR_NAME, "");
67 g_assert(header != NULL);
69 len = g_obex_header_encode(header, buf, sizeof(buf));
71 assert_memequal(hdr_name_empty, sizeof(hdr_name_empty), buf, len);
73 g_obex_header_free(header);
76 static void test_header_name_ascii(void)
82 header = g_obex_header_new_unicode(G_OBEX_HDR_NAME, "foo");
84 g_assert(header != NULL);
86 len = g_obex_header_encode(header, buf, sizeof(buf));
88 assert_memequal(hdr_name_ascii, sizeof(hdr_name_ascii), buf, len);
90 g_obex_header_free(header);
93 static void test_header_name_umlaut(void)
99 header = g_obex_header_new_unicode(G_OBEX_HDR_NAME, "åäö");
101 g_assert(header != NULL);
103 len = g_obex_header_encode(header, buf, sizeof(buf));
105 assert_memequal(hdr_name_umlaut, sizeof(hdr_name_umlaut), buf, len);
107 g_obex_header_free(header);
110 static void test_header_bytes(void)
113 uint8_t buf[1024], data[] = { 1, 2, 3, 4 };
116 header = g_obex_header_new_bytes(G_OBEX_HDR_BODY, data, sizeof(data));
117 g_assert(header != NULL);
119 len = g_obex_header_encode(header, buf, sizeof(buf));
121 assert_memequal(hdr_body, sizeof(hdr_body), buf, len);
123 g_obex_header_free(header);
126 static void test_header_apparam(void)
129 GObexApparam *apparam;
133 apparam = g_obex_apparam_set_uint32(NULL, 0, 0x01020304);
134 g_assert(apparam != NULL);
136 header = g_obex_header_new_apparam(apparam);
137 g_assert(header != NULL);
139 len = g_obex_header_encode(header, buf, sizeof(buf));
141 assert_memequal(hdr_apparam, sizeof(hdr_apparam), buf, len);
143 g_obex_apparam_free(apparam);
144 g_obex_header_free(header);
147 static void test_header_uint8(void)
153 header = g_obex_header_new_uint8(G_OBEX_HDR_ACTION, 0xab);
155 g_assert(header != NULL);
157 len = g_obex_header_encode(header, buf, sizeof(buf));
159 assert_memequal(hdr_actionid, sizeof(hdr_actionid), buf, len);
161 g_obex_header_free(header);
164 static void test_header_uint32(void)
170 header = g_obex_header_new_uint32(G_OBEX_HDR_CONNECTION, 0x01020304);
171 len = g_obex_header_encode(header, buf, sizeof(buf));
173 assert_memequal(hdr_connid, sizeof(hdr_connid), buf, len);
175 g_obex_header_free(header);
178 static GObexHeader *parse_and_encode(uint8_t *buf, size_t buf_len)
181 uint8_t encoded[1024];
185 header = g_obex_header_decode(buf, buf_len, G_OBEX_DATA_REF, &len,
187 g_assert_no_error(err);
188 g_assert_cmpuint(len, ==, buf_len);
190 len = g_obex_header_encode(header, encoded, sizeof(encoded));
192 assert_memequal(buf, buf_len, encoded, len);
197 static void test_header_encode_connid(void)
203 header = parse_and_encode(hdr_connid, sizeof(hdr_connid));
205 ret = g_obex_header_get_uint32(header, &val);
207 g_assert(ret == TRUE);
208 g_assert(val == 0x01020304);
210 g_obex_header_free(header);
213 static void test_header_encode_name_ascii(void)
219 header = parse_and_encode(hdr_name_ascii, sizeof(hdr_name_ascii));
221 ret = g_obex_header_get_unicode(header, &str);
223 g_assert(ret == TRUE);
224 g_assert_cmpstr(str, ==, "foo");
226 g_obex_header_free(header);
229 static void test_header_encode_name_umlaut(void)
235 header = parse_and_encode(hdr_name_umlaut, sizeof(hdr_name_umlaut));
237 ret = g_obex_header_get_unicode(header, &str);
239 g_assert(ret == TRUE);
240 g_assert_cmpstr(str, ==, "åäö");
242 g_obex_header_free(header);
245 static void test_header_encode_name_empty(void)
251 header = parse_and_encode(hdr_name_empty, sizeof(hdr_name_empty));
253 ret = g_obex_header_get_unicode(header, &str);
255 g_assert(ret == TRUE);
256 g_assert_cmpstr(str, ==, "");
258 g_obex_header_free(header);
261 static void test_header_encode_body(void)
264 guint8 expected[] = { 1, 2, 3, 4};
269 header = parse_and_encode(hdr_body, sizeof(hdr_body));
271 ret = g_obex_header_get_bytes(header, &buf, &len);
273 g_assert(ret == TRUE);
274 assert_memequal(expected, sizeof(expected), buf, len);
276 g_obex_header_free(header);
279 static void test_header_encode_apparam(void)
282 GObexApparam *apparam;
286 header = parse_and_encode(hdr_apparam, sizeof(hdr_apparam));
288 apparam = g_obex_header_get_apparam(header);
289 g_assert(apparam != NULL);
291 ret = g_obex_apparam_get_uint32(apparam, 0x00, &data);
292 g_assert(ret == TRUE);
293 g_assert(data == 0x01020304);
295 g_obex_apparam_free(apparam);
296 g_obex_header_free(header);
299 static void test_header_encode_actionid(void)
305 header = parse_and_encode(hdr_actionid, sizeof(hdr_actionid));
307 ret = g_obex_header_get_uint8(header, &val);
309 g_assert(ret == TRUE);
310 g_assert_cmpuint(val, ==, 0xab);
312 g_obex_header_free(header);
315 static void test_decode_header_connid(void)
321 header = g_obex_header_decode(hdr_connid, sizeof(hdr_connid),
322 G_OBEX_DATA_REF, &parsed, &err);
323 g_assert_no_error(err);
325 g_assert_cmpuint(parsed, ==, sizeof(hdr_connid));
327 g_obex_header_free(header);
330 static void test_decode_header_name_ascii(void)
336 header = g_obex_header_decode(hdr_name_ascii, sizeof(hdr_name_ascii),
337 G_OBEX_DATA_REF, &parsed, &err);
338 g_assert_no_error(err);
340 g_assert_cmpuint(parsed, ==, sizeof(hdr_name_ascii));
342 g_obex_header_free(header);
345 static void test_decode_header_name_empty(void)
351 header = g_obex_header_decode(hdr_name_empty, sizeof(hdr_name_empty),
352 G_OBEX_DATA_REF, &parsed, &err);
353 g_assert_no_error(err);
355 g_assert_cmpuint(parsed, ==, sizeof(hdr_name_empty));
357 g_obex_header_free(header);
360 static void test_decode_header_name_umlaut(void)
366 header = g_obex_header_decode(hdr_name_umlaut, sizeof(hdr_name_umlaut),
367 G_OBEX_DATA_REF, &parsed, &err);
368 g_assert_no_error(err);
370 g_assert_cmpuint(parsed, ==, sizeof(hdr_name_umlaut));
372 g_obex_header_free(header);
375 static void test_decode_header_body(void)
381 header = g_obex_header_decode(hdr_body, sizeof(hdr_body),
382 G_OBEX_DATA_COPY, &parsed, &err);
383 g_assert_no_error(err);
385 g_assert_cmpuint(parsed, ==, sizeof(hdr_body));
387 g_obex_header_free(header);
390 static void test_decode_header_body_extdata(void)
396 header = g_obex_header_decode(hdr_body, sizeof(hdr_body),
397 G_OBEX_DATA_REF, &parsed, &err);
398 g_assert_no_error(err);
400 g_assert_cmpuint(parsed, ==, sizeof(hdr_body));
402 g_obex_header_free(header);
405 static void test_decode_header_actionid(void)
411 header = g_obex_header_decode(hdr_actionid, sizeof(hdr_actionid),
412 G_OBEX_DATA_REF, &parsed, &err);
413 g_assert_no_error(err);
415 g_assert_cmpuint(parsed, ==, sizeof(hdr_actionid));
417 g_obex_header_free(header);
420 static void decode_header_nval(uint8_t *buf, size_t len)
426 header = g_obex_header_decode(buf, len, G_OBEX_DATA_REF, &parsed,
428 g_assert_error(err, G_OBEX_ERROR, G_OBEX_ERROR_PARSE_ERROR);
429 g_assert(header == NULL);
433 static void test_decode_header_uint32_nval(void)
435 decode_header_nval(hdr_uint32_nval, sizeof(hdr_uint32_nval));
438 static void test_decode_header_unicode_nval_short(void)
440 decode_header_nval(hdr_unicode_nval_short,
441 sizeof(hdr_unicode_nval_short));
444 static void test_decode_header_unicode_nval_data(void)
446 decode_header_nval(hdr_unicode_nval_data,
447 sizeof(hdr_unicode_nval_data));
450 static void test_decode_header_bytes_nval_short(void)
452 decode_header_nval(hdr_bytes_nval_short, sizeof(hdr_bytes_nval_short));
455 static void test_decode_header_bytes_nval_data(void)
457 decode_header_nval(hdr_bytes_nval_data, sizeof(hdr_bytes_nval_data));
460 static void test_decode_header_bytes_nval_len(void)
462 decode_header_nval(hdr_bytes_nval_len, sizeof(hdr_bytes_nval_len));
465 static void test_decode_header_multi(void)
472 buf = g_byte_array_sized_new(sizeof(hdr_connid) +
473 sizeof(hdr_name_ascii) +
474 sizeof(hdr_actionid) +
477 g_byte_array_append(buf, hdr_connid, sizeof(hdr_connid));
478 g_byte_array_append(buf, hdr_name_ascii, sizeof(hdr_name_ascii));
479 g_byte_array_append(buf, hdr_actionid, sizeof(hdr_actionid));
480 g_byte_array_append(buf, hdr_body, sizeof(hdr_body));
482 header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF,
484 g_assert_no_error(err);
485 g_assert_cmpuint(parsed, ==, sizeof(hdr_connid));
486 g_byte_array_remove_range(buf, 0, parsed);
487 g_obex_header_free(header);
489 header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF,
491 g_assert_no_error(err);
492 g_assert_cmpuint(parsed, ==, sizeof(hdr_name_ascii));
493 g_byte_array_remove_range(buf, 0, parsed);
494 g_obex_header_free(header);
496 header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF,
498 g_assert_no_error(err);
499 g_assert_cmpuint(parsed, ==, sizeof(hdr_actionid));
500 g_byte_array_remove_range(buf, 0, parsed);
501 g_obex_header_free(header);
503 header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF,
505 g_assert_no_error(err);
506 g_assert_cmpuint(parsed, ==, sizeof(hdr_body));
507 g_byte_array_remove_range(buf, 0, parsed);
508 g_obex_header_free(header);
510 g_byte_array_unref(buf);
513 int main(int argc, char *argv[])
515 g_test_init(&argc, &argv, NULL);
517 g_test_add_func("/gobex/test_decode_header_connid",
518 test_decode_header_connid);
519 g_test_add_func("/gobex/test_decode_header_name_empty",
520 test_decode_header_name_empty);
521 g_test_add_func("/gobex/test_decode_header_name_ascii",
522 test_decode_header_name_ascii);
523 g_test_add_func("/gobex/test_decode_header_name_umlaut",
524 test_decode_header_name_umlaut);
525 g_test_add_func("/gobex/test_decode_header_body",
526 test_decode_header_body);
527 g_test_add_func("/gobex/test_decode_header_body_extdata",
528 test_decode_header_body_extdata);
529 g_test_add_func("/gobex/test_decode_header_actionid",
530 test_decode_header_actionid);
531 g_test_add_func("/gobex/test_decode_header_multi",
532 test_decode_header_multi);
534 g_test_add_func("/gobex/test_decode_header_uint32_nval",
535 test_decode_header_uint32_nval);
536 g_test_add_func("/gobex/test_decode_header_unicode_nval_short",
537 test_decode_header_unicode_nval_short);
538 g_test_add_func("/gobex/test_decode_header_unicode_nval_data",
539 test_decode_header_unicode_nval_data);
540 g_test_add_func("/gobex/test_decode_header_bytes_nval_short",
541 test_decode_header_bytes_nval_short);
542 g_test_add_func("/gobex/test_decode_header_bytes_nval_data",
543 test_decode_header_bytes_nval_data);
544 g_test_add_func("/gobex/test_decode_header_bytes_nval_len",
545 test_decode_header_bytes_nval_len);
547 g_test_add_func("/gobex/test_header_encode_connid",
548 test_header_encode_connid);
549 g_test_add_func("/gobex/test_header_encode_name_empty",
550 test_header_encode_name_empty);
551 g_test_add_func("/gobex/test_header_encode_name_ascii",
552 test_header_encode_name_ascii);
553 g_test_add_func("/gobex/test_header_encode_name_umlaut",
554 test_header_encode_name_umlaut);
555 g_test_add_func("/gobex/test_header_encode_body",
556 test_header_encode_body);
557 g_test_add_func("/gobex/test_header_encode_connid",
558 test_header_encode_actionid);
559 g_test_add_func("/gobex/test_header_encode_apparam",
560 test_header_encode_apparam);
562 g_test_add_func("/gobex/test_header_name_empty",
563 test_header_name_empty);
564 g_test_add_func("/gobex/test_header_name_ascii",
565 test_header_name_ascii);
566 g_test_add_func("/gobex/test_header_name_umlaut",
567 test_header_name_umlaut);
568 g_test_add_func("/gobex/test_header_bytes", test_header_bytes);
569 g_test_add_func("/gobex/test_header_uint8", test_header_uint8);
570 g_test_add_func("/gobex/test_header_uint32", test_header_uint32);
571 g_test_add_func("/gobex/test_header_apparam", test_header_apparam);