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