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
ATF_TC_HEAD(check_sdp_put_data,tc)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
ATF_TC_BODY(check_sdp_put_data,tc)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
ATF_TC_HEAD(check_sdp_put_attr,tc)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
ATF_TC_BODY(check_sdp_put_attr,tc)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
ATF_TC_HEAD(check_sdp_put_uuid,tc)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
ATF_TC_BODY(check_sdp_put_uuid,tc)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
ATF_TC_HEAD(check_sdp_put_uuid16,tc)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
ATF_TC_BODY(check_sdp_put_uuid16,tc)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
ATF_TC_HEAD(check_sdp_put_uuid32,tc)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
ATF_TC_BODY(check_sdp_put_uuid32,tc)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
ATF_TC_HEAD(check_sdp_put_uuid128,tc)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
ATF_TC_BODY(check_sdp_put_uuid128,tc)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
ATF_TC_HEAD(check_sdp_put_bool,tc)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
ATF_TC_BODY(check_sdp_put_bool,tc)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
ATF_TC_HEAD(check_sdp_put_uint,tc)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
ATF_TC_BODY(check_sdp_put_uint,tc)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
ATF_TC_HEAD(check_sdp_put_uint8,tc)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
ATF_TC_BODY(check_sdp_put_uint8,tc)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
ATF_TC_HEAD(check_sdp_put_uint16,tc)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
ATF_TC_BODY(check_sdp_put_uint16,tc)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
ATF_TC_HEAD(check_sdp_put_uint32,tc)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
ATF_TC_BODY(check_sdp_put_uint32,tc)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
ATF_TC_HEAD(check_sdp_put_uint64,tc)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
ATF_TC_BODY(check_sdp_put_uint64,tc)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
ATF_TC_HEAD(check_sdp_put_int,tc)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
ATF_TC_BODY(check_sdp_put_int,tc)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
ATF_TC_HEAD(check_sdp_put_int8,tc)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
ATF_TC_BODY(check_sdp_put_int8,tc)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
ATF_TC_HEAD(check_sdp_put_int16,tc)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
ATF_TC_BODY(check_sdp_put_int16,tc)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
ATF_TC_HEAD(check_sdp_put_int32,tc)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
ATF_TC_BODY(check_sdp_put_int32,tc)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
ATF_TC_HEAD(check_sdp_put_int64,tc)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
ATF_TC_BODY(check_sdp_put_int64,tc)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
ATF_TC_HEAD(check_sdp_put_seq,tc)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
ATF_TC_BODY(check_sdp_put_seq,tc)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
ATF_TC_HEAD(check_sdp_put_alt,tc)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
ATF_TC_BODY(check_sdp_put_alt,tc)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
ATF_TC_HEAD(check_sdp_put_str,tc)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
ATF_TC_BODY(check_sdp_put_str,tc)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
ATF_TC_HEAD(check_sdp_put_url,tc)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
ATF_TC_BODY(check_sdp_put_url,tc)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
ATF_TP_ADD_TCS(tp)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