Home | History | Annotate | Line # | Download | only in libbluetooth
      1 /*	$NetBSD: t_sdp_put.c,v 1.3 2011/04/16 07:32:27 plunky Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2011 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Iain Hibbert.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #include <atf-c.h>
     33 
     34 #include <limits.h>
     35 #include <sdp.h>
     36 #include <string.h>
     37 
     38 ATF_TC(check_sdp_put_data);
     39 
     40 ATF_TC_HEAD(check_sdp_put_data, tc)
     41 {
     42 
     43 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_data results");
     44 }
     45 
     46 ATF_TC_BODY(check_sdp_put_data, tc)
     47 {
     48 	uint8_t buf[256];
     49 	sdp_data_t test = { buf, buf + sizeof(buf) };
     50 	uint8_t data[] = {
     51 		0x35, 0x05,		// seq8(5)
     52 		0x08, 0x00,		//   uint8	0x00
     53 		0x09, 0x12, 0x34,	//   uint16	0x1234
     54 	};
     55 	sdp_data_t value = { data, data + sizeof(data) };
     56 
     57 	ATF_REQUIRE(sdp_put_data(&test, &value));
     58 	test.end = test.next;
     59 	test.next = buf;
     60 
     61 	const uint8_t expect[] = {
     62 		0x35, 0x05,		// seq8(5)
     63 		0x08, 0x00,		//   uint8	0x00
     64 		0x09, 0x12, 0x34,	//   uint16	0x1234
     65 	};
     66 
     67 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
     68 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
     69 }
     70 
     71 ATF_TC(check_sdp_put_attr);
     72 
     73 ATF_TC_HEAD(check_sdp_put_attr, tc)
     74 {
     75 
     76 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_attr results");
     77 }
     78 
     79 ATF_TC_BODY(check_sdp_put_attr, tc)
     80 {
     81 	uint8_t buf[256];
     82 	sdp_data_t test = { buf, buf + sizeof(buf) };
     83 	uint8_t data[] = {
     84 		0x00,			// nil
     85 		0x19, 0x33, 0x44,	// uuid16	0x3344
     86 	};
     87 	sdp_data_t value = { data, data + sizeof(data) };
     88 
     89 	ATF_REQUIRE_EQ(sdp_put_attr(&test, 0xabcd, &value), false);
     90 	value.next += 1; // skip "nil"
     91 	ATF_REQUIRE(sdp_put_attr(&test, 0x1337, &value));
     92 	test.end = test.next;
     93 	test.next = buf;
     94 
     95 	const uint8_t expect[] = {
     96 		0x09, 0x13, 0x37,	// uint16	0x1337
     97 		0x19, 0x33, 0x44,	// uuid16	0x3344
     98 	};
     99 
    100 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    101 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    102 }
    103 
    104 ATF_TC(check_sdp_put_uuid);
    105 
    106 ATF_TC_HEAD(check_sdp_put_uuid, tc)
    107 {
    108 
    109 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uuid results");
    110 }
    111 
    112 ATF_TC_BODY(check_sdp_put_uuid, tc)
    113 {
    114 	uint8_t buf[256];
    115 	sdp_data_t test = { buf, buf + sizeof(buf) };
    116 	const uuid_t u16 = {
    117 		0x00001234,
    118 		0x0000,
    119 		0x1000,
    120 		0x80,
    121 		0x00,
    122 		{ 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb }
    123 	};
    124 	const uuid_t u32 = {
    125 		0x12345678,
    126 		0x0000,
    127 		0x1000,
    128 		0x80,
    129 		0x00,
    130 		{ 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb }
    131 	};
    132 	const uuid_t u128 = {
    133 		0x00112233,
    134 		0x4444,
    135 		0x5555,
    136 		0x66,
    137 		0x77,
    138 		{ 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd }
    139 	};
    140 
    141 	ATF_REQUIRE(sdp_put_uuid(&test, &u16));
    142 	ATF_REQUIRE(sdp_put_uuid(&test, &u32));
    143 	ATF_REQUIRE(sdp_put_uuid(&test, &u128));
    144 	test.end = test.next;
    145 	test.next = buf;
    146 
    147 	const uint8_t expect[] = {
    148 		0x19, 0x12, 0x34,	// uuid16	0x1234
    149 		0x1a, 0x12, 0x34, 0x56, // uuid32	0x12345678
    150 		0x78,
    151 		0x1c, 0x00, 0x11, 0x22,	// uuid128	00112233-4444-5555-6677-8899aabbccdd
    152 		0x33, 0x44, 0x44, 0x55,
    153 		0x55, 0x66, 0x77, 0x88,
    154 		0x99, 0xaa, 0xbb, 0xcc,
    155 		0xdd,
    156 	};
    157 
    158 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    159 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    160 }
    161 
    162 ATF_TC(check_sdp_put_uuid16);
    163 
    164 ATF_TC_HEAD(check_sdp_put_uuid16, tc)
    165 {
    166 
    167 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uuid16 results");
    168 }
    169 
    170 ATF_TC_BODY(check_sdp_put_uuid16, tc)
    171 {
    172 	uint8_t buf[256];
    173 	sdp_data_t test = { buf, buf + sizeof(buf) };
    174 
    175 	ATF_REQUIRE(sdp_put_uuid16(&test, 0x4567));
    176 	test.end = test.next;
    177 	test.next = buf;
    178 
    179 	const uint8_t expect[] = {
    180 		0x19, 0x45, 0x67,	// uuid16	0x4567
    181 	};
    182 
    183 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    184 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    185 }
    186 
    187 ATF_TC(check_sdp_put_uuid32);
    188 
    189 ATF_TC_HEAD(check_sdp_put_uuid32, tc)
    190 {
    191 
    192 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uuid32 results");
    193 }
    194 
    195 ATF_TC_BODY(check_sdp_put_uuid32, tc)
    196 {
    197 	uint8_t buf[256];
    198 	sdp_data_t test = { buf, buf + sizeof(buf) };
    199 
    200 	ATF_REQUIRE(sdp_put_uuid32(&test, 0xabcdef00));
    201 	test.end = test.next;
    202 	test.next = buf;
    203 
    204 	const uint8_t expect[] = {
    205 		0x1a, 0xab, 0xcd, 0xef, // uuid32	0xabcdef00
    206 		0x00,
    207 	};
    208 
    209 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    210 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    211 }
    212 
    213 ATF_TC(check_sdp_put_uuid128);
    214 
    215 ATF_TC_HEAD(check_sdp_put_uuid128, tc)
    216 {
    217 
    218 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uuid128 results");
    219 }
    220 
    221 ATF_TC_BODY(check_sdp_put_uuid128, tc)
    222 {
    223 	uint8_t buf[256];
    224 	sdp_data_t test = { buf, buf + sizeof(buf) };
    225 	uuid_t value = {
    226 		0x00000100,
    227 		0x0000,
    228 		0x1000,
    229 		0x80,
    230 		0x00,
    231 		{ 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb }
    232 	};
    233 
    234 	ATF_REQUIRE(sdp_put_uuid128(&test, &value));
    235 	test.end = test.next;
    236 	test.next = buf;
    237 
    238 	const uint8_t expect[] = {
    239 		0x1c, 0x00, 0x00, 0x01,	// uuid128	0000100-0000-1000-8000-00805f9b34fb
    240 		0x00, 0x00, 0x00, 0x10,	//			(L2CAP protocol)
    241 		0x00, 0x80, 0x00, 0x00,
    242 		0x80, 0x5f, 0x9b, 0x34,
    243 		0xfb,
    244 	};
    245 
    246 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    247 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    248 }
    249 
    250 ATF_TC(check_sdp_put_bool);
    251 
    252 ATF_TC_HEAD(check_sdp_put_bool, tc)
    253 {
    254 
    255 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_bool results");
    256 }
    257 
    258 ATF_TC_BODY(check_sdp_put_bool, tc)
    259 {
    260 	uint8_t buf[256];
    261 	sdp_data_t test = { buf, buf + sizeof(buf) };
    262 
    263 	ATF_REQUIRE(sdp_put_bool(&test, true));
    264 	ATF_REQUIRE(sdp_put_bool(&test, false));
    265 	test.end = test.next;
    266 	test.next = buf;
    267 
    268 	const uint8_t expect[] = {
    269 		0x28, 0x01,		// bool	true
    270 		0x28, 0x00,		// bool	false
    271 	};
    272 
    273 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    274 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    275 }
    276 
    277 ATF_TC(check_sdp_put_uint);
    278 
    279 ATF_TC_HEAD(check_sdp_put_uint, tc)
    280 {
    281 
    282 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uint results");
    283 }
    284 
    285 ATF_TC_BODY(check_sdp_put_uint, tc)
    286 {
    287 	uint8_t buf[256];
    288 	sdp_data_t test = { buf, buf + sizeof(buf) };
    289 
    290 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)0));
    291 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT8_MAX));
    292 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT8_MAX + 1));
    293 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT16_MAX));
    294 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT16_MAX + 1));
    295 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT32_MAX));
    296 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT32_MAX + 1));
    297 	ATF_REQUIRE(sdp_put_uint(&test, (uintmax_t)UINT64_MAX));
    298 	test.end = test.next;
    299 	test.next = buf;
    300 
    301 	const uint8_t expect[] = {
    302 		0x08, 0x00,		// uint8	0x00
    303 		0x08, 0xff,		// uint8	0xff
    304 		0x09, 0x01, 0x00,	// uint16	0x0100
    305 		0x09, 0xff, 0xff,	// uint16	0xffff
    306 		0x0a, 0x00, 0x01, 0x00,	// uint32	0x00010000
    307 		0x00,
    308 		0x0a, 0xff, 0xff, 0xff,	// uint32	0xffffffff
    309 		0xff,
    310 		0x0b, 0x00, 0x00, 0x00,	// uint64	0x0000000100000000
    311 		0x01, 0x00, 0x00, 0x00,
    312 		0x00,
    313 		0x0b, 0xff, 0xff, 0xff,	// uint64	0xffffffffffffffff
    314 		0xff, 0xff, 0xff, 0xff,
    315 		0xff,
    316 	};
    317 
    318 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    319 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    320 }
    321 
    322 ATF_TC(check_sdp_put_uint8);
    323 
    324 ATF_TC_HEAD(check_sdp_put_uint8, tc)
    325 {
    326 
    327 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uint8 results");
    328 }
    329 
    330 ATF_TC_BODY(check_sdp_put_uint8, tc)
    331 {
    332 	uint8_t buf[256];
    333 	sdp_data_t test = { buf, buf + sizeof(buf) };
    334 
    335 	ATF_REQUIRE(sdp_put_uint8(&test, (uint8_t)0));
    336 	ATF_REQUIRE(sdp_put_uint8(&test, (uint8_t)UINT8_MAX));
    337 	test.end = test.next;
    338 	test.next = buf;
    339 
    340 	const uint8_t expect[] = {
    341 		0x08, 0x00,		// uint8	0x00
    342 		0x08, 0xff,		// uint8	0xff
    343 	};
    344 
    345 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    346 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    347 }
    348 
    349 ATF_TC(check_sdp_put_uint16);
    350 
    351 ATF_TC_HEAD(check_sdp_put_uint16, tc)
    352 {
    353 
    354 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uint16 results");
    355 }
    356 
    357 ATF_TC_BODY(check_sdp_put_uint16, tc)
    358 {
    359 	uint8_t buf[256];
    360 	sdp_data_t test = { buf, buf + sizeof(buf) };
    361 
    362 	ATF_REQUIRE(sdp_put_uint16(&test, (uint16_t)0));
    363 	ATF_REQUIRE(sdp_put_uint16(&test, (uint16_t)UINT8_MAX));
    364 	ATF_REQUIRE(sdp_put_uint16(&test, (uint16_t)UINT16_MAX));
    365 	ATF_REQUIRE(sdp_put_uint16(&test, (uint16_t)0xabcd));
    366 	test.end = test.next;
    367 	test.next = buf;
    368 
    369 	const uint8_t expect[] = {
    370 		0x09, 0x00, 0x00,	// uint16	0x0000
    371 		0x09, 0x00, 0xff,	// uint16	0x00ff
    372 		0x09, 0xff, 0xff,	// uint16	0xffff
    373 		0x09, 0xab, 0xcd,	// uint16	0xabcd
    374 	};
    375 
    376 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    377 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    378 }
    379 
    380 ATF_TC(check_sdp_put_uint32);
    381 
    382 ATF_TC_HEAD(check_sdp_put_uint32, tc)
    383 {
    384 
    385 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uint32 results");
    386 }
    387 
    388 ATF_TC_BODY(check_sdp_put_uint32, tc)
    389 {
    390 	uint8_t buf[256];
    391 	sdp_data_t test = { buf, buf + sizeof(buf) };
    392 
    393 	ATF_REQUIRE(sdp_put_uint32(&test, (uint32_t)0));
    394 	ATF_REQUIRE(sdp_put_uint32(&test, (uint32_t)UINT8_MAX));
    395 	ATF_REQUIRE(sdp_put_uint32(&test, (uint32_t)UINT16_MAX));
    396 	ATF_REQUIRE(sdp_put_uint32(&test, (uint32_t)UINT32_MAX));
    397 	ATF_REQUIRE(sdp_put_uint32(&test, (uint32_t)0xdeadbeef));
    398 	test.end = test.next;
    399 	test.next = buf;
    400 
    401 	const uint8_t expect[] = {
    402 		0x0a, 0x00, 0x00, 0x00,	// uint32	0x00000000
    403 		0x00,
    404 		0x0a, 0x00, 0x00, 0x00,	// uint32	0x000000ff
    405 		0xff,
    406 		0x0a, 0x00, 0x00, 0xff,	// uint32	0x0000ffff
    407 		0xff,
    408 		0x0a, 0xff, 0xff, 0xff,	// uint32	0xffffffff
    409 		0xff,
    410 		0x0a, 0xde, 0xad, 0xbe,	// uint32	0xdeadbeef
    411 		0xef,
    412 	};
    413 
    414 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    415 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    416 }
    417 
    418 ATF_TC(check_sdp_put_uint64);
    419 
    420 ATF_TC_HEAD(check_sdp_put_uint64, tc)
    421 {
    422 
    423 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_uint64 results");
    424 }
    425 
    426 ATF_TC_BODY(check_sdp_put_uint64, tc)
    427 {
    428 	uint8_t buf[256];
    429 	sdp_data_t test = { buf, buf + sizeof(buf) };
    430 
    431 	ATF_REQUIRE(sdp_put_uint64(&test, (uint64_t)0));
    432 	ATF_REQUIRE(sdp_put_uint64(&test, (uint64_t)UINT8_MAX));
    433 	ATF_REQUIRE(sdp_put_uint64(&test, (uint64_t)UINT16_MAX));
    434 	ATF_REQUIRE(sdp_put_uint64(&test, (uint64_t)UINT32_MAX));
    435 	ATF_REQUIRE(sdp_put_uint64(&test, (uint64_t)UINT64_MAX));
    436 	ATF_REQUIRE(sdp_put_uint64(&test, (uint64_t)0xc0ffeecafec0ffee));
    437 	test.end = test.next;
    438 	test.next = buf;
    439 
    440 	const uint8_t expect[] = {
    441 		0x0b, 0x00, 0x00, 0x00,	// uint64	0x0000000000000000
    442 		0x00, 0x00, 0x00, 0x00,
    443 		0x00,
    444 		0x0b, 0x00, 0x00, 0x00,	// uint64	0x00000000000000ff
    445 		0x00, 0x00, 0x00, 0x00,
    446 		0xff,
    447 		0x0b, 0x00, 0x00, 0x00,	// uint64	0x000000000000ffff
    448 		0x00, 0x00, 0x00, 0xff,
    449 		0xff,
    450 		0x0b, 0x00, 0x00, 0x00,	// uint64	0x00000000ffffffff
    451 		0x00, 0xff, 0xff, 0xff,
    452 		0xff,
    453 		0x0b, 0xff, 0xff, 0xff,	// uint64	0xffffffffffffffff
    454 		0xff, 0xff, 0xff, 0xff,
    455 		0xff,
    456 		0x0b, 0xc0, 0xff, 0xee,	// uint64	0xc0ffeecafec0ffee
    457 		0xca, 0xfe, 0xc0, 0xff,
    458 		0xee,
    459 	};
    460 
    461 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    462 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    463 }
    464 
    465 ATF_TC(check_sdp_put_int);
    466 
    467 ATF_TC_HEAD(check_sdp_put_int, tc)
    468 {
    469 
    470 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_int results");
    471 }
    472 
    473 ATF_TC_BODY(check_sdp_put_int, tc)
    474 {
    475 	uint8_t buf[256];
    476 	sdp_data_t test = { buf, buf + sizeof(buf) };
    477 
    478 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)0));
    479 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT8_MIN));
    480 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT8_MAX));
    481 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT8_MIN - 1));
    482 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT8_MAX + 1));
    483 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT16_MIN));
    484 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT16_MAX));
    485 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT16_MIN - 1));
    486 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT16_MAX + 1));
    487 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT32_MIN));
    488 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT32_MAX));
    489 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT32_MIN - 1));
    490 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT32_MAX + 1));
    491 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT64_MIN));
    492 	ATF_REQUIRE(sdp_put_int(&test, (intmax_t)INT64_MAX));
    493 	test.end = test.next;
    494 	test.next = buf;
    495 
    496 	const uint8_t expect[] = {
    497 		0x10, 0x00,		// int8		0
    498 		0x10, 0x80,		// int8		-128
    499 		0x10, 0x7f,		// int8		127
    500 		0x11, 0xff, 0x7f,	// int16	-129
    501 		0x11, 0x00, 0x80,	// int16	128
    502 		0x11, 0x80, 0x00,	// int16	-32768
    503 		0x11, 0x7f, 0xff,	// int16	32767
    504 		0x12, 0xff, 0xff, 0x7f,	// int32	-32769
    505 		0xff,
    506 		0x12, 0x00, 0x00, 0x80,	// int32	32768
    507 		0x00,
    508 		0x12, 0x80, 0x00, 0x00,	// int32	-2147483648
    509 		0x00,
    510 		0x12, 0x7f, 0xff, 0xff,	// int32	2147483647
    511 		0xff,
    512 		0x13, 0xff, 0xff, 0xff,	// int64	-2147483649
    513 		0xff, 0x7f, 0xff, 0xff,
    514 		0xff,
    515 		0x13, 0x00, 0x00, 0x00,	// int64	2147483648
    516 		0x00, 0x80, 0x00, 0x00,
    517 		0x00,
    518 		0x13, 0x80, 0x00, 0x00,	// int64	-9223372036854775808
    519 		0x00, 0x00, 0x00, 0x00,
    520 		0x00,
    521 		0x13, 0x7f, 0xff, 0xff,	// int64	9223372036854775807
    522 		0xff, 0xff, 0xff, 0xff,
    523 		0xff,
    524 	};
    525 
    526 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    527 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    528 }
    529 
    530 ATF_TC(check_sdp_put_int8);
    531 
    532 ATF_TC_HEAD(check_sdp_put_int8, tc)
    533 {
    534 
    535 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_int8 results");
    536 }
    537 
    538 ATF_TC_BODY(check_sdp_put_int8, tc)
    539 {
    540 	uint8_t buf[256];
    541 	sdp_data_t test = { buf, buf + sizeof(buf) };
    542 
    543 	ATF_REQUIRE(sdp_put_int8(&test, (int8_t)0));
    544 	ATF_REQUIRE(sdp_put_int8(&test, (int8_t)INT8_MIN));
    545 	ATF_REQUIRE(sdp_put_int8(&test, (int8_t)INT8_MAX));
    546 	test.end = test.next;
    547 	test.next = buf;
    548 
    549 	const uint8_t expect[] = {
    550 		0x10, 0x00,		// int8		0
    551 		0x10, 0x80,		// int8		-128
    552 		0x10, 0x7f,		// int8		127
    553 	};
    554 
    555 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    556 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    557 }
    558 
    559 ATF_TC(check_sdp_put_int16);
    560 
    561 ATF_TC_HEAD(check_sdp_put_int16, tc)
    562 {
    563 
    564 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_int16 results");
    565 }
    566 
    567 ATF_TC_BODY(check_sdp_put_int16, tc)
    568 {
    569 	uint8_t buf[256];
    570 	sdp_data_t test = { buf, buf + sizeof(buf) };
    571 
    572 	ATF_REQUIRE(sdp_put_int16(&test, (int16_t)0));
    573 	ATF_REQUIRE(sdp_put_int16(&test, (int16_t)INT8_MIN));
    574 	ATF_REQUIRE(sdp_put_int16(&test, (int16_t)INT8_MAX));
    575 	ATF_REQUIRE(sdp_put_int16(&test, (int16_t)INT16_MIN));
    576 	ATF_REQUIRE(sdp_put_int16(&test, (int16_t)INT16_MAX));
    577 	test.end = test.next;
    578 	test.next = buf;
    579 
    580 	const uint8_t expect[] = {
    581 		0x11, 0x00, 0x00,	// int16	0
    582 		0x11, 0xff, 0x80,	// int16	-128
    583 		0x11, 0x00, 0x7f,	// int16	127
    584 		0x11, 0x80, 0x00,	// int16	-32768
    585 		0x11, 0x7f, 0xff,	// int16	32767
    586 	};
    587 
    588 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    589 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    590 }
    591 
    592 ATF_TC(check_sdp_put_int32);
    593 
    594 ATF_TC_HEAD(check_sdp_put_int32, tc)
    595 {
    596 
    597 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_int32 results");
    598 }
    599 
    600 ATF_TC_BODY(check_sdp_put_int32, tc)
    601 {
    602 	uint8_t buf[256];
    603 	sdp_data_t test = { buf, buf + sizeof(buf) };
    604 
    605 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)0));
    606 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)INT8_MIN));
    607 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)INT8_MAX));
    608 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)INT16_MIN));
    609 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)INT16_MAX));
    610 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)INT32_MIN));
    611 	ATF_REQUIRE(sdp_put_int32(&test, (int32_t)INT32_MAX));
    612 	test.end = test.next;
    613 	test.next = buf;
    614 
    615 	const uint8_t expect[] = {
    616 		0x12, 0x00, 0x00, 0x00,	// int32	0
    617 		0x00,
    618 		0x12, 0xff, 0xff, 0xff,	// int32	-128
    619 		0x80,
    620 		0x12, 0x00, 0x00, 0x00,	// int32	127
    621 		0x7f,
    622 		0x12, 0xff, 0xff, 0x80,	// int32	-32768
    623 		0x00,
    624 		0x12, 0x00, 0x00, 0x7f,	// int32	32767
    625 		0xff,
    626 		0x12, 0x80, 0x00, 0x00,	// int32	-2147483648
    627 		0x00,
    628 		0x12, 0x7f, 0xff, 0xff,	// int32	2147483647
    629 		0xff,
    630 	};
    631 
    632 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    633 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    634 }
    635 
    636 ATF_TC(check_sdp_put_int64);
    637 
    638 ATF_TC_HEAD(check_sdp_put_int64, tc)
    639 {
    640 
    641 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_int64 results");
    642 }
    643 
    644 ATF_TC_BODY(check_sdp_put_int64, tc)
    645 {
    646 	uint8_t buf[256];
    647 	sdp_data_t test = { buf, buf + sizeof(buf) };
    648 
    649 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)0));
    650 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT8_MIN));
    651 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT8_MAX));
    652 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT16_MIN));
    653 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT16_MAX));
    654 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT32_MIN));
    655 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT32_MAX));
    656 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT64_MIN));
    657 	ATF_REQUIRE(sdp_put_int64(&test, (int64_t)INT64_MAX));
    658 	test.end = test.next;
    659 	test.next = buf;
    660 
    661 	const uint8_t expect[] = {
    662 		0x13, 0x00, 0x00, 0x00,	// int64	0
    663 		0x00, 0x00, 0x00, 0x00,
    664 		0x00,
    665 		0x13, 0xff, 0xff, 0xff,	// int64	-128
    666 		0xff, 0xff, 0xff, 0xff,
    667 		0x80,
    668 		0x13, 0x00, 0x00, 0x00,	// int64	127
    669 		0x00, 0x00, 0x00, 0x00,
    670 		0x7f,
    671 		0x13, 0xff, 0xff, 0xff,	// int64	-32768
    672 		0xff, 0xff, 0xff, 0x80,
    673 		0x00,
    674 		0x13, 0x00, 0x00, 0x00,	// int64	32767
    675 		0x00, 0x00, 0x00, 0x7f,
    676 		0xff,
    677 		0x13, 0xff, 0xff, 0xff,	// int64	-2147483648
    678 		0xff, 0x80, 0x00, 0x00,
    679 		0x00,
    680 		0x13, 0x00, 0x00, 0x00,	// int64	2147483647
    681 		0x00, 0x7f, 0xff, 0xff,
    682 		0xff,
    683 		0x13, 0x80, 0x00, 0x00,	// int64	-9223372036854775808
    684 		0x00, 0x00, 0x00, 0x00,
    685 		0x00,
    686 		0x13, 0x7f, 0xff, 0xff,	// int64	9223372036854775807
    687 		0xff, 0xff, 0xff, 0xff,
    688 		0xff,
    689 	};
    690 
    691 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    692 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    693 }
    694 
    695 ATF_TC(check_sdp_put_seq);
    696 
    697 ATF_TC_HEAD(check_sdp_put_seq, tc)
    698 {
    699 
    700 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_seq results");
    701 }
    702 
    703 ATF_TC_BODY(check_sdp_put_seq, tc)
    704 {
    705 	uint8_t buf[512];
    706 	sdp_data_t test = { buf, buf + sizeof(buf) };
    707 
    708 	ATF_REQUIRE(sdp_put_seq(&test, (ssize_t)0));
    709 	ATF_REQUIRE(sdp_put_seq(&test, (ssize_t)UINT8_MAX));
    710 	ATF_REQUIRE(sdp_put_seq(&test, (ssize_t)UINT8_MAX + 1));
    711 	ATF_REQUIRE(sdp_put_seq(&test, (ssize_t)-1));
    712 	ATF_CHECK_EQ(sdp_put_seq(&test, (ssize_t)UINT16_MAX), false);	/* no room */
    713 	ATF_CHECK_EQ(sdp_put_seq(&test, (ssize_t)SSIZE_MAX), false);	/* no room */
    714 	test.end = test.next;
    715 	test.next = buf;
    716 
    717 	/* (not a valid element list) */
    718 	const uint8_t expect[] = {
    719 		0x35, 0x00,		// seq8(0)
    720 		0x35, 0xff,		// seq8(255)
    721 		0x36, 0x01, 0x00,	// seq16(256)
    722 		0x36, 0x01, 0xf6,	// seq16(502)	<- sizeof(buf) - 7 - 3
    723 	};
    724 
    725 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    726 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    727 }
    728 
    729 ATF_TC(check_sdp_put_alt);
    730 
    731 ATF_TC_HEAD(check_sdp_put_alt, tc)
    732 {
    733 
    734 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_alt results");
    735 }
    736 
    737 ATF_TC_BODY(check_sdp_put_alt, tc)
    738 {
    739 	uint8_t buf[512];
    740 	sdp_data_t test = { buf, buf + sizeof(buf) };
    741 
    742 	ATF_REQUIRE(sdp_put_alt(&test, (ssize_t)0));
    743 	ATF_REQUIRE(sdp_put_alt(&test, (ssize_t)UINT8_MAX));
    744 	ATF_REQUIRE(sdp_put_alt(&test, (ssize_t)UINT8_MAX + 1));
    745 	ATF_REQUIRE(sdp_put_alt(&test, (ssize_t)-1));
    746 	ATF_CHECK_EQ(sdp_put_alt(&test, (ssize_t)UINT16_MAX), false);	/* no room */
    747 	ATF_CHECK_EQ(sdp_put_alt(&test, (ssize_t)SSIZE_MAX), false);	/* no room */
    748 	test.end = test.next;
    749 	test.next = buf;
    750 
    751 	/* (not a valid element list) */
    752 	const uint8_t expect[] = {
    753 		0x3d, 0x00,		// alt8(0)
    754 		0x3d, 0xff,		// alt8(255)
    755 		0x3e, 0x01, 0x00,	// alt16(256)
    756 		0x3e, 0x01, 0xf6,	// alt16(502)	<- sizeof(buf) - 7 - 3
    757 	};
    758 
    759 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    760 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    761 }
    762 
    763 ATF_TC(check_sdp_put_str);
    764 
    765 ATF_TC_HEAD(check_sdp_put_str, tc)
    766 {
    767 
    768 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_str results");
    769 }
    770 
    771 ATF_TC_BODY(check_sdp_put_str, tc)
    772 {
    773 	uint8_t buf[512];
    774 	sdp_data_t test = { buf, buf + sizeof(buf) };
    775 
    776 	/*
    777 	 * this does not test str16 or str32, but that is
    778 	 * handled by the same code as sdp_put_seq above..
    779 	 */
    780 
    781 	ATF_REQUIRE(sdp_put_str(&test, "Hello World!", 5));
    782 	ATF_REQUIRE(sdp_put_str(&test, "Hello\0World", 11));
    783 	ATF_REQUIRE(sdp_put_str(&test, "Hello World!", -1));
    784 	ATF_REQUIRE(sdp_put_str(&test, "Hello\0World", -1));
    785 	test.end = test.next;
    786 	test.next = buf;
    787 
    788 	const uint8_t expect[] = {
    789 		0x25, 0x05, 0x48, 0x65,	// str8		"Hello"
    790 		0x6c, 0x6c, 0x6f,
    791 		0x25, 0x0b, 0x48, 0x65,	// str8		"Hello\0World"
    792 		0x6c, 0x6c, 0x6f, 0x00,
    793 		0x57, 0x6f, 0x72, 0x6c,
    794 		0x64,
    795 		0x25, 0x0c, 0x48, 0x65,	// str8		"Hello World!"
    796 		0x6c, 0x6c, 0x6f, 0x20,
    797 		0x57, 0x6f, 0x72, 0x6c,
    798 		0x64, 0x21,
    799 		0x25, 0x05, 0x48, 0x65,	// str8		"Hello"
    800 		0x6c, 0x6c, 0x6f,
    801 	};
    802 
    803 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    804 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    805 }
    806 
    807 ATF_TC(check_sdp_put_url);
    808 
    809 ATF_TC_HEAD(check_sdp_put_url, tc)
    810 {
    811 
    812 	atf_tc_set_md_var(tc, "descr", "Test sdp_put_url results");
    813 }
    814 
    815 ATF_TC_BODY(check_sdp_put_url, tc)
    816 {
    817 	uint8_t buf[512];
    818 	sdp_data_t test = { buf, buf + sizeof(buf) };
    819 
    820 	/*
    821 	 * this does not test url16 or url32, but that is
    822 	 * handled by the same code as sdp_put_seq above..
    823 	 */
    824 
    825 	ATF_REQUIRE(sdp_put_url(&test, "http://www.netbsd.org/", 21));
    826 	ATF_REQUIRE(sdp_put_url(&test, "http://www.netbsd.org/", -1));
    827 	test.end = test.next;
    828 	test.next = buf;
    829 
    830 	const uint8_t expect[] = {
    831 		0x45, 0x15, 0x68, 0x74,	// url8	"http://www.netbsd.org"
    832 		0x74, 0x70, 0x3a, 0x2f,
    833 		0x2f, 0x77, 0x77, 0x77,
    834 		0x2e, 0x6e, 0x65, 0x74,
    835 		0x62, 0x73, 0x64, 0x2e,
    836 		0x6f, 0x72, 0x67,
    837 		0x45, 0x16, 0x68, 0x74,	// url8	"http://www.netbsd.org/"
    838 		0x74, 0x70, 0x3a, 0x2f,
    839 		0x2f, 0x77, 0x77, 0x77,
    840 		0x2e, 0x6e, 0x65, 0x74,
    841 		0x62, 0x73, 0x64, 0x2e,
    842 		0x6f, 0x72, 0x67, 0x2f,
    843 	};
    844 
    845 	ATF_REQUIRE_EQ(test.end - test.next, sizeof(expect));
    846 	ATF_CHECK(memcmp(expect, test.next, sizeof(expect)) == 0);
    847 }
    848 
    849 ATF_TP_ADD_TCS(tp)
    850 {
    851 
    852 	ATF_TP_ADD_TC(tp, check_sdp_put_data);
    853 	ATF_TP_ADD_TC(tp, check_sdp_put_attr);
    854 	ATF_TP_ADD_TC(tp, check_sdp_put_uuid);
    855 	ATF_TP_ADD_TC(tp, check_sdp_put_uuid16);
    856 	ATF_TP_ADD_TC(tp, check_sdp_put_uuid32);
    857 	ATF_TP_ADD_TC(tp, check_sdp_put_uuid128);
    858 	ATF_TP_ADD_TC(tp, check_sdp_put_bool);
    859 	ATF_TP_ADD_TC(tp, check_sdp_put_uint);
    860 	ATF_TP_ADD_TC(tp, check_sdp_put_uint8);
    861 	ATF_TP_ADD_TC(tp, check_sdp_put_uint16);
    862 	ATF_TP_ADD_TC(tp, check_sdp_put_uint32);
    863 	ATF_TP_ADD_TC(tp, check_sdp_put_uint64);
    864 	ATF_TP_ADD_TC(tp, check_sdp_put_int);
    865 	ATF_TP_ADD_TC(tp, check_sdp_put_int8);
    866 	ATF_TP_ADD_TC(tp, check_sdp_put_int16);
    867 	ATF_TP_ADD_TC(tp, check_sdp_put_int32);
    868 	ATF_TP_ADD_TC(tp, check_sdp_put_int64);
    869 	ATF_TP_ADD_TC(tp, check_sdp_put_seq);
    870 	ATF_TP_ADD_TC(tp, check_sdp_put_alt);
    871 	ATF_TP_ADD_TC(tp, check_sdp_put_str);
    872 	ATF_TP_ADD_TC(tp, check_sdp_put_url);
    873 
    874 	return atf_no_error();
    875 }
    876