#include <atf-c.h>
#include <limits.h>
#include <sdp.h>
#include <string.h>
ATF_TC(check_sdp_set_bool);
ATF_TC_HEAD(check_sdp_set_bool, tc)
{
atf_tc_set_md_var(tc, "descr", "Test sdp_set_bool results");
}
ATF_TC_BODY(check_sdp_set_bool, tc)
{
uint8_t data[] = {
0x28, 0x00,
0x00,
0x28,
};
sdp_data_t test = { data, data + sizeof(data) };
sdp_data_t discard;
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_BOOL);
ATF_REQUIRE(sdp_set_bool(&test, true));
ATF_CHECK_EQ(test.next[1], 0x01);
ATF_REQUIRE(sdp_set_bool(&test, false));
ATF_CHECK_EQ(test.next[1], 0x00);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_NIL);
ATF_CHECK_EQ(sdp_set_bool(&test, true), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_BOOL);
ATF_CHECK_EQ(sdp_set_bool(&test, true), false);
}
ATF_TC(check_sdp_set_uint);
ATF_TC_HEAD(check_sdp_set_uint, tc)
{
atf_tc_set_md_var(tc, "descr", "Test sdp_set_uint results");
}
ATF_TC_BODY(check_sdp_set_uint, tc)
{
uint8_t data[] = {
0x08, 0x00,
0x00,
0x09, 0x00, 0x00,
0x0a, 0x00, 0x00, 0x00,
0x00,
0x0b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00,
0x0c, 0x00, 0x44, 0x00,
0x44, 0x00, 0x44, 0x00,
0x44, 0x00, 0x44, 0x00,
0x44, 0x00, 0x44, 0x00,
0x00,
0x09, 0x00,
};
sdp_data_t test = { data, data + sizeof(data) };
sdp_data_t discard;
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT8);
ATF_REQUIRE(sdp_set_uint(&test, 0x44));
ATF_CHECK_EQ(sdp_set_uint(&test, UINT8_MAX + 1), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_NIL);
ATF_CHECK_EQ(sdp_set_uint(&test, 0x00), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT16);
ATF_REQUIRE(sdp_set_uint(&test, 0xabcd));
ATF_CHECK_EQ(sdp_set_uint(&test, UINT16_MAX + 1), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT32);
ATF_REQUIRE(sdp_set_uint(&test, 0xdeadbeef));
ATF_CHECK_EQ(sdp_set_uint(&test, (uintmax_t)UINT32_MAX + 1), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT64);
ATF_REQUIRE(sdp_set_uint(&test, 0xc0ffeecafec0ffee));
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT128);
ATF_REQUIRE(sdp_set_uint(&test, 0xabcdef0123456789));
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_UINT16);
ATF_CHECK_EQ(sdp_set_uint(&test, 0x3344), false);
const uint8_t expect[] = {
0x08, 0x44,
0x00,
0x09, 0xab, 0xcd,
0x0a, 0xde, 0xad, 0xbe,
0xef,
0x0b, 0xc0, 0xff, 0xee,
0xca, 0xfe, 0xc0, 0xff,
0xee,
0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0xab, 0xcd, 0xef,
0x01, 0x23, 0x45, 0x67,
0x89,
0x09, 0x00,
};
ATF_REQUIRE_EQ(sizeof(data), sizeof(expect));
ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0);
}
ATF_TC(check_sdp_set_int);
ATF_TC_HEAD(check_sdp_set_int, tc)
{
atf_tc_set_md_var(tc, "descr", "Test sdp_set_int results");
}
ATF_TC_BODY(check_sdp_set_int, tc)
{
uint8_t data[] = {
0x10, 0x00,
0x00,
0x11, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00,
0x00,
0x13, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00,
0x14, 0x00, 0x44, 0x00,
0x44, 0x00, 0x44, 0x00,
0x44, 0x00, 0x44, 0x00,
0x44, 0x00, 0x44, 0x00,
0x00,
0x11, 0x00,
};
sdp_data_t test = { data, data + sizeof(data) };
sdp_data_t discard;
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT8);
ATF_REQUIRE(sdp_set_int(&test, -1));
ATF_CHECK_EQ(sdp_set_int(&test, INT8_MAX + 1), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_NIL);
ATF_CHECK_EQ(sdp_set_int(&test, 33), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16);
ATF_REQUIRE(sdp_set_int(&test, 789));
ATF_CHECK_EQ(sdp_set_int(&test, INT16_MIN - 1), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT32);
ATF_REQUIRE(sdp_set_int(&test, -4567));
ATF_CHECK_EQ(sdp_set_int(&test, (intmax_t)INT32_MAX + 1), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT64);
ATF_REQUIRE(sdp_set_int(&test, -3483738234));
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT128);
ATF_REQUIRE(sdp_set_int(&test, 3423489463464));
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16);
ATF_CHECK_EQ(sdp_set_int(&test, 1234), false);
const uint8_t expect[] = {
0x10, 0xff,
0x00,
0x11, 0x03, 0x15,
0x12, 0xff, 0xff, 0xee,
0x29,
0x13, 0xff, 0xff, 0xff,
0xff, 0x30, 0x5a, 0x5f,
0x86,
0x14, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03,
0x1d, 0x17, 0xdf, 0x94,
0xa8,
0x11, 0x00,
};
ATF_REQUIRE_EQ(sizeof(data), sizeof(expect));
ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0);
}
ATF_TC(check_sdp_set_seq);
ATF_TC_HEAD(check_sdp_set_seq, tc)
{
atf_tc_set_md_var(tc, "descr", "Test sdp_set_seq results");
}
ATF_TC_BODY(check_sdp_set_seq, tc)
{
uint8_t data[] = {
0x35, 0x03,
0x11, 0xff, 0xff,
0x36, 0x01, 0x00,
0x09, 0xff, 0xff,
0x37, 0x01, 0x02, 0x03,
0x04,
0x36, 0x00,
};
sdp_data_t test = { data, data + sizeof(data) };
sdp_data_t discard;
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ8);
ATF_REQUIRE(sdp_set_seq(&test, 0));
ATF_CHECK_EQ(sdp_set_seq(&test, UINT8_MAX), false);
ATF_CHECK_EQ(sdp_set_seq(&test, UINT16_MAX), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16);
ATF_CHECK_EQ(sdp_set_seq(&test, 33), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ16);
ATF_REQUIRE(sdp_set_seq(&test, 3));
ATF_CHECK_EQ(sdp_set_seq(&test, SSIZE_MAX), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ32);
ATF_REQUIRE(sdp_set_seq(&test, 0));
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_SEQ16);
ATF_CHECK_EQ(sdp_set_seq(&test, 22), false);
const uint8_t expect[] = {
0x35, 0x00,
0x11, 0xff, 0xff,
0x36, 0x00, 0x03,
0x09, 0xff, 0xff,
0x37, 0x00, 0x00, 0x00,
0x00,
0x36, 0x00,
};
ATF_REQUIRE_EQ(sizeof(data), sizeof(expect));
ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0);
}
ATF_TC(check_sdp_set_alt);
ATF_TC_HEAD(check_sdp_set_alt, tc)
{
atf_tc_set_md_var(tc, "descr", "Test sdp_set_alt results");
}
ATF_TC_BODY(check_sdp_set_alt, tc)
{
uint8_t data[] = {
0x3d, 0x06,
0x11, 0xff, 0xff,
0x3e, 0xff, 0xff,
0x3f, 0x01, 0x02, 0x03,
0x04,
0x0a, 0x00, 0x00, 0x00,
0x03,
0x3e, 0x00,
};
sdp_data_t test = { data, data + sizeof(data) };
sdp_data_t discard;
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_ALT8);
ATF_REQUIRE(sdp_set_alt(&test, 0));
ATF_CHECK_EQ(sdp_set_alt(&test, UINT8_MAX), false);
ATF_CHECK_EQ(sdp_set_alt(&test, UINT16_MAX), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_INT16);
ATF_CHECK_EQ(sdp_set_alt(&test, 27), false);
ATF_REQUIRE(sdp_get_data(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_ALT16);
ATF_REQUIRE(sdp_set_alt(&test, 10));
ATF_CHECK_EQ(sdp_set_alt(&test, SSIZE_MAX), false);
ATF_REQUIRE(sdp_get_alt(&test, &discard));
ATF_CHECK_EQ(sdp_data_type(&discard), SDP_DATA_ALT32);
ATF_CHECK(sdp_set_alt(&discard, -1));
ATF_CHECK_EQ(sdp_set_alt(&discard, 6), false);
ATF_CHECK_EQ(sdp_data_type(&test), SDP_DATA_ALT16);
ATF_CHECK_EQ(sdp_set_alt(&test, 22), false);
const uint8_t expect[] = {
0x3d, 0x00,
0x11, 0xff, 0xff,
0x3e, 0x00, 0x0a,
0x3f, 0x00, 0x00, 0x00,
0x05,
0x0a, 0x00, 0x00, 0x00,
0x03,
0x3e, 0x00,
};
ATF_REQUIRE_EQ(sizeof(data), sizeof(expect));
ATF_CHECK(memcmp(expect, data, sizeof(expect)) == 0);
}
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, check_sdp_set_bool);
ATF_TP_ADD_TC(tp, check_sdp_set_uint);
ATF_TP_ADD_TC(tp, check_sdp_set_int);
ATF_TP_ADD_TC(tp, check_sdp_set_seq);
ATF_TP_ADD_TC(tp, check_sdp_set_alt);
return atf_no_error();
}