1*57718be8SEnji Cooper /* $NetBSD: t_sdp_set.c,v 1.2 2011/04/07 08:29:50 plunky Exp $ */ 2*57718be8SEnji Cooper 3*57718be8SEnji Cooper /*- 4*57718be8SEnji Cooper * Copyright (c) 2011 The NetBSD Foundation, Inc. 5*57718be8SEnji Cooper * All rights reserved. 6*57718be8SEnji Cooper * 7*57718be8SEnji Cooper * This code is derived from software contributed to The NetBSD Foundation 8*57718be8SEnji Cooper * by Iain Hibbert. 9*57718be8SEnji Cooper * 10*57718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 11*57718be8SEnji Cooper * modification, are permitted provided that the following conditions 12*57718be8SEnji Cooper * are met: 13*57718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 14*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 15*57718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 16*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 17*57718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 18*57718be8SEnji Cooper * 19*57718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20*57718be8SEnji Cooper * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21*57718be8SEnji Cooper * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22*57718be8SEnji Cooper * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23*57718be8SEnji Cooper * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*57718be8SEnji Cooper * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*57718be8SEnji Cooper * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*57718be8SEnji Cooper * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*57718be8SEnji Cooper * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*57718be8SEnji Cooper * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*57718be8SEnji Cooper * POSSIBILITY OF SUCH DAMAGE. 30*57718be8SEnji Cooper */ 31*57718be8SEnji Cooper 32*57718be8SEnji Cooper #include <atf-c.h> 33*57718be8SEnji Cooper 34*57718be8SEnji Cooper #include <limits.h> 35*57718be8SEnji Cooper #include <sdp.h> 36*57718be8SEnji Cooper #include <string.h> 37*57718be8SEnji Cooper 38*57718be8SEnji Cooper ATF_TC(check_sdp_set_bool); 39*57718be8SEnji Cooper 40*57718be8SEnji Cooper ATF_TC_HEAD(check_sdp_set_bool, tc) 41*57718be8SEnji Cooper { 42*57718be8SEnji Cooper 43*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test sdp_set_bool results"); 44*57718be8SEnji Cooper } 45*57718be8SEnji Cooper 46*57718be8SEnji Cooper ATF_TC_BODY(check_sdp_set_bool, tc) 47*57718be8SEnji Cooper { 48*57718be8SEnji Cooper uint8_t data[] = { 49*57718be8SEnji Cooper 0x28, 0x00, // bool false 50*57718be8SEnji Cooper 0x00, // nil 51*57718be8SEnji Cooper 0x28, // bool <invalid> 52*57718be8SEnji Cooper }; 53*57718be8SEnji Cooper sdp_data_t test = { data, data + sizeof(data) }; 54*57718be8SEnji Cooper sdp_data_t discard; 55*57718be8SEnji Cooper 56*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_BOOL); 57*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_bool(&test, true)); 58*57718be8SEnji Cooper ATF_CHECK_EQ(test.next[1], 0x01); 59*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_bool(&test, false)); 60*57718be8SEnji Cooper ATF_CHECK_EQ(test.next[1], 0x00); 61*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 62*57718be8SEnji Cooper 63*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_NIL); 64*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_bool(&test, true), false); /* not bool */ 65*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 66*57718be8SEnji Cooper 67*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_BOOL); 68*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_bool(&test, true), false); /* no value */ 69*57718be8SEnji Cooper } 70*57718be8SEnji Cooper 71*57718be8SEnji Cooper ATF_TC(check_sdp_set_uint); 72*57718be8SEnji Cooper 73*57718be8SEnji Cooper ATF_TC_HEAD(check_sdp_set_uint, tc) 74*57718be8SEnji Cooper { 75*57718be8SEnji Cooper 76*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test sdp_set_uint results"); 77*57718be8SEnji Cooper } 78*57718be8SEnji Cooper 79*57718be8SEnji Cooper ATF_TC_BODY(check_sdp_set_uint, tc) 80*57718be8SEnji Cooper { 81*57718be8SEnji Cooper uint8_t data[] = { 82*57718be8SEnji Cooper 0x08, 0x00, // uint8 0x00 83*57718be8SEnji Cooper 0x00, // nil 84*57718be8SEnji Cooper 0x09, 0x00, 0x00, // uint16 0x0000 85*57718be8SEnji Cooper 0x0a, 0x00, 0x00, 0x00, // uint32 0x00000000 86*57718be8SEnji Cooper 0x00, 87*57718be8SEnji Cooper 0x0b, 0x00, 0x00, 0x00, // uint64 0x0000000000000000 88*57718be8SEnji Cooper 0x00, 0x00, 0x00, 0x00, 89*57718be8SEnji Cooper 0x00, 90*57718be8SEnji Cooper 0x0c, 0x00, 0x44, 0x00, // uint128 0x00440044004400440044004400440044 91*57718be8SEnji Cooper 0x44, 0x00, 0x44, 0x00, 92*57718be8SEnji Cooper 0x44, 0x00, 0x44, 0x00, 93*57718be8SEnji Cooper 0x44, 0x00, 0x44, 0x00, 94*57718be8SEnji Cooper 0x00, 95*57718be8SEnji Cooper 0x09, 0x00, // uint16 <invalid> 96*57718be8SEnji Cooper }; 97*57718be8SEnji Cooper sdp_data_t test = { data, data + sizeof(data) }; 98*57718be8SEnji Cooper sdp_data_t discard; 99*57718be8SEnji Cooper 100*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT8); 101*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_uint(&test, 0x44)); 102*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_uint(&test, UINT8_MAX + 1), false); /* too big */ 103*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 104*57718be8SEnji Cooper 105*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_NIL); 106*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_uint(&test, 0x00), false); /* not uint */ 107*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 108*57718be8SEnji Cooper 109*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT16); 110*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_uint(&test, 0xabcd)); 111*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_uint(&test, UINT16_MAX + 1), false); /* too big */ 112*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 113*57718be8SEnji Cooper 114*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT32); 115*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_uint(&test, 0xdeadbeef)); 116*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_uint(&test, (uintmax_t)UINT32_MAX + 1), false); /* too big */ 117*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 118*57718be8SEnji Cooper 119*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT64); 120*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_uint(&test, 0xc0ffeecafec0ffee)); 121*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 122*57718be8SEnji Cooper 123*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT128); 124*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_uint(&test, 0xabcdef0123456789)); 125*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 126*57718be8SEnji Cooper 127*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT16); 128*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_uint(&test, 0x3344), false); /* no value */ 129*57718be8SEnji Cooper 130*57718be8SEnji Cooper const uint8_t expect[] = { 131*57718be8SEnji Cooper 0x08, 0x44, // uint8 0x44 132*57718be8SEnji Cooper 0x00, // nil 133*57718be8SEnji Cooper 0x09, 0xab, 0xcd, // uint16 0xabcd 134*57718be8SEnji Cooper 0x0a, 0xde, 0xad, 0xbe, // uint32 0xdeadbeef 135*57718be8SEnji Cooper 0xef, 136*57718be8SEnji Cooper 0x0b, 0xc0, 0xff, 0xee, // uint64 0xc0ffeecafec0ffee 137*57718be8SEnji Cooper 0xca, 0xfe, 0xc0, 0xff, 138*57718be8SEnji Cooper 0xee, 139*57718be8SEnji Cooper 0x0c, 0x00, 0x00, 0x00, // uint128 0x0000000000000000abcdef0123456789 140*57718be8SEnji Cooper 0x00, 0x00, 0x00, 0x00, 141*57718be8SEnji Cooper 0x00, 0xab, 0xcd, 0xef, 142*57718be8SEnji Cooper 0x01, 0x23, 0x45, 0x67, 143*57718be8SEnji Cooper 0x89, 144*57718be8SEnji Cooper 0x09, 0x00, // uint16 <invalid> 145*57718be8SEnji Cooper }; 146*57718be8SEnji Cooper 147*57718be8SEnji Cooper ATF_REQUIRE_EQ(sizeof(data), sizeof(expect)); 148*57718be8SEnji Cooper ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0); 149*57718be8SEnji Cooper } 150*57718be8SEnji Cooper 151*57718be8SEnji Cooper ATF_TC(check_sdp_set_int); 152*57718be8SEnji Cooper 153*57718be8SEnji Cooper ATF_TC_HEAD(check_sdp_set_int, tc) 154*57718be8SEnji Cooper { 155*57718be8SEnji Cooper 156*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test sdp_set_int results"); 157*57718be8SEnji Cooper } 158*57718be8SEnji Cooper 159*57718be8SEnji Cooper ATF_TC_BODY(check_sdp_set_int, tc) 160*57718be8SEnji Cooper { 161*57718be8SEnji Cooper uint8_t data[] = { 162*57718be8SEnji Cooper 0x10, 0x00, // int8 0 163*57718be8SEnji Cooper 0x00, // nil 164*57718be8SEnji Cooper 0x11, 0x00, 0x00, // int16 0 165*57718be8SEnji Cooper 0x12, 0x00, 0x00, 0x00, // int32 0 166*57718be8SEnji Cooper 0x00, 167*57718be8SEnji Cooper 0x13, 0x00, 0x00, 0x00, // int64 0 168*57718be8SEnji Cooper 0x00, 0x00, 0x00, 0x00, 169*57718be8SEnji Cooper 0x00, 170*57718be8SEnji Cooper 0x14, 0x00, 0x44, 0x00, // int128 0x00440044004400440044004400440044 171*57718be8SEnji Cooper 0x44, 0x00, 0x44, 0x00, 172*57718be8SEnji Cooper 0x44, 0x00, 0x44, 0x00, 173*57718be8SEnji Cooper 0x44, 0x00, 0x44, 0x00, 174*57718be8SEnji Cooper 0x00, 175*57718be8SEnji Cooper 0x11, 0x00, // int16 <invalid> 176*57718be8SEnji Cooper }; 177*57718be8SEnji Cooper sdp_data_t test = { data, data + sizeof(data) }; 178*57718be8SEnji Cooper sdp_data_t discard; 179*57718be8SEnji Cooper 180*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT8); 181*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_int(&test, -1)); 182*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_int(&test, INT8_MAX + 1), false); /* too big */ 183*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 184*57718be8SEnji Cooper 185*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_NIL); 186*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_int(&test, 33), false); /* not int */ 187*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 188*57718be8SEnji Cooper 189*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16); 190*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_int(&test, 789)); 191*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_int(&test, INT16_MIN - 1), false); /* too big */ 192*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 193*57718be8SEnji Cooper 194*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT32); 195*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_int(&test, -4567)); 196*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_int(&test, (intmax_t)INT32_MAX + 1), false); /* too big */ 197*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 198*57718be8SEnji Cooper 199*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT64); 200*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_int(&test, -3483738234)); 201*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 202*57718be8SEnji Cooper 203*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT128); 204*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_int(&test, 3423489463464)); 205*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 206*57718be8SEnji Cooper 207*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16); 208*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_int(&test, 1234), false); /* no value */ 209*57718be8SEnji Cooper 210*57718be8SEnji Cooper const uint8_t expect[] = { 211*57718be8SEnji Cooper 0x10, 0xff, // int8 -1 212*57718be8SEnji Cooper 0x00, // nil 213*57718be8SEnji Cooper 0x11, 0x03, 0x15, // int16 789 214*57718be8SEnji Cooper 0x12, 0xff, 0xff, 0xee, // int32 -4567 215*57718be8SEnji Cooper 0x29, 216*57718be8SEnji Cooper 0x13, 0xff, 0xff, 0xff, // int64 -3483738234 217*57718be8SEnji Cooper 0xff, 0x30, 0x5a, 0x5f, 218*57718be8SEnji Cooper 0x86, 219*57718be8SEnji Cooper 0x14, 0x00, 0x00, 0x00, // int128 3423489463464 220*57718be8SEnji Cooper 0x00, 0x00, 0x00, 0x00, 221*57718be8SEnji Cooper 0x00, 0x00, 0x00, 0x03, 222*57718be8SEnji Cooper 0x1d, 0x17, 0xdf, 0x94, 223*57718be8SEnji Cooper 0xa8, 224*57718be8SEnji Cooper 0x11, 0x00, // int16 <invalid> 225*57718be8SEnji Cooper }; 226*57718be8SEnji Cooper 227*57718be8SEnji Cooper ATF_REQUIRE_EQ(sizeof(data), sizeof(expect)); 228*57718be8SEnji Cooper ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0); 229*57718be8SEnji Cooper } 230*57718be8SEnji Cooper 231*57718be8SEnji Cooper ATF_TC(check_sdp_set_seq); 232*57718be8SEnji Cooper 233*57718be8SEnji Cooper ATF_TC_HEAD(check_sdp_set_seq, tc) 234*57718be8SEnji Cooper { 235*57718be8SEnji Cooper 236*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test sdp_set_seq results"); 237*57718be8SEnji Cooper } 238*57718be8SEnji Cooper 239*57718be8SEnji Cooper ATF_TC_BODY(check_sdp_set_seq, tc) 240*57718be8SEnji Cooper { 241*57718be8SEnji Cooper uint8_t data[] = { 242*57718be8SEnji Cooper 0x35, 0x03, // seq8(3) 243*57718be8SEnji Cooper 0x11, 0xff, 0xff, // int16 -1 244*57718be8SEnji Cooper 0x36, 0x01, 0x00, // seq16(256) 245*57718be8SEnji Cooper 0x09, 0xff, 0xff, // uint16 0xffff 246*57718be8SEnji Cooper 0x37, 0x01, 0x02, 0x03, // seq32(16909060) 247*57718be8SEnji Cooper 0x04, 248*57718be8SEnji Cooper 0x36, 0x00, // seq16(<invalid>) 249*57718be8SEnji Cooper }; 250*57718be8SEnji Cooper sdp_data_t test = { data, data + sizeof(data) }; 251*57718be8SEnji Cooper sdp_data_t discard; 252*57718be8SEnji Cooper 253*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ8); 254*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_seq(&test, 0)); 255*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_seq(&test, UINT8_MAX), false); /* data too big */ 256*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_seq(&test, UINT16_MAX), false); /* size too big */ 257*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 258*57718be8SEnji Cooper 259*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16); 260*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_seq(&test, 33), false); /* not seq */ 261*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 262*57718be8SEnji Cooper 263*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ16); 264*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_seq(&test, 3)); 265*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_seq(&test, SSIZE_MAX), false); /* size too big */ 266*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 267*57718be8SEnji Cooper 268*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ32); 269*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_seq(&test, 0)); 270*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 271*57718be8SEnji Cooper 272*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ16); 273*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_seq(&test, 22), false); /* no size */ 274*57718be8SEnji Cooper 275*57718be8SEnji Cooper const uint8_t expect[] = { 276*57718be8SEnji Cooper 0x35, 0x00, // seq8(0) 277*57718be8SEnji Cooper 0x11, 0xff, 0xff, // int16 -1 278*57718be8SEnji Cooper 0x36, 0x00, 0x03, // seq16(3) 279*57718be8SEnji Cooper 0x09, 0xff, 0xff, // uint16 0xffff 280*57718be8SEnji Cooper 0x37, 0x00, 0x00, 0x00, // seq32(0) 281*57718be8SEnji Cooper 0x00, 282*57718be8SEnji Cooper 0x36, 0x00, // seq16(<invalid>) 283*57718be8SEnji Cooper }; 284*57718be8SEnji Cooper 285*57718be8SEnji Cooper ATF_REQUIRE_EQ(sizeof(data), sizeof(expect)); 286*57718be8SEnji Cooper ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0); 287*57718be8SEnji Cooper } 288*57718be8SEnji Cooper 289*57718be8SEnji Cooper ATF_TC(check_sdp_set_alt); 290*57718be8SEnji Cooper 291*57718be8SEnji Cooper ATF_TC_HEAD(check_sdp_set_alt, tc) 292*57718be8SEnji Cooper { 293*57718be8SEnji Cooper 294*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Test sdp_set_alt results"); 295*57718be8SEnji Cooper } 296*57718be8SEnji Cooper 297*57718be8SEnji Cooper ATF_TC_BODY(check_sdp_set_alt, tc) 298*57718be8SEnji Cooper { 299*57718be8SEnji Cooper uint8_t data[] = { 300*57718be8SEnji Cooper 0x3d, 0x06, // alt8(6) 301*57718be8SEnji Cooper 0x11, 0xff, 0xff, // int16 -1 302*57718be8SEnji Cooper 0x3e, 0xff, 0xff, // alt16(65535) 303*57718be8SEnji Cooper 0x3f, 0x01, 0x02, 0x03, // alt32(16909060) 304*57718be8SEnji Cooper 0x04, 305*57718be8SEnji Cooper 0x0a, 0x00, 0x00, 0x00, // uint32 0x00000003 306*57718be8SEnji Cooper 0x03, 307*57718be8SEnji Cooper 0x3e, 0x00, // alt16(<invalid>) 308*57718be8SEnji Cooper }; 309*57718be8SEnji Cooper sdp_data_t test = { data, data + sizeof(data) }; 310*57718be8SEnji Cooper sdp_data_t discard; 311*57718be8SEnji Cooper 312*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_ALT8); 313*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_alt(&test, 0)); 314*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_alt(&test, UINT8_MAX), false); /* data too big */ 315*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_alt(&test, UINT16_MAX), false); /* size too big */ 316*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 317*57718be8SEnji Cooper 318*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16); 319*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_alt(&test, 27), false); /* not alt */ 320*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_data(&test, &discard)); 321*57718be8SEnji Cooper 322*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_ALT16); 323*57718be8SEnji Cooper ATF_REQUIRE(sdp_set_alt(&test, 10)); 324*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_alt(&test, SSIZE_MAX), false); /* size too big */ 325*57718be8SEnji Cooper ATF_REQUIRE(sdp_get_alt(&test, &discard)); 326*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&discard), SDP_DATA_ALT32); 327*57718be8SEnji Cooper ATF_CHECK(sdp_set_alt(&discard, -1)); /* end of alt16 */ 328*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_alt(&discard, 6), false); /* data too big */ 329*57718be8SEnji Cooper 330*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_ALT16); 331*57718be8SEnji Cooper ATF_CHECK_EQ(sdp_set_alt(&test, 22), false); /* no size */ 332*57718be8SEnji Cooper 333*57718be8SEnji Cooper const uint8_t expect[] = { 334*57718be8SEnji Cooper 0x3d, 0x00, // alt8(0) 335*57718be8SEnji Cooper 0x11, 0xff, 0xff, // int16 -1 336*57718be8SEnji Cooper 0x3e, 0x00, 0x0a, // alt16(10) 337*57718be8SEnji Cooper 0x3f, 0x00, 0x00, 0x00, // alt32(5) 338*57718be8SEnji Cooper 0x05, 339*57718be8SEnji Cooper 0x0a, 0x00, 0x00, 0x00, // uint32 0x00000003 340*57718be8SEnji Cooper 0x03, 341*57718be8SEnji Cooper 0x3e, 0x00, // alt16(<invalid>) 342*57718be8SEnji Cooper }; 343*57718be8SEnji Cooper 344*57718be8SEnji Cooper ATF_REQUIRE_EQ(sizeof(data), sizeof(expect)); 345*57718be8SEnji Cooper ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0); 346*57718be8SEnji Cooper } 347*57718be8SEnji Cooper 348*57718be8SEnji Cooper 349*57718be8SEnji Cooper ATF_TP_ADD_TCS(tp) 350*57718be8SEnji Cooper { 351*57718be8SEnji Cooper 352*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, check_sdp_set_bool); 353*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, check_sdp_set_uint); 354*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, check_sdp_set_int); 355*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, check_sdp_set_seq); 356*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, check_sdp_set_alt); 357*57718be8SEnji Cooper 358*57718be8SEnji Cooper return atf_no_error(); 359*57718be8SEnji Cooper } 360