1*0eaf192dSyasuoka #include "incs.h"
2*0eaf192dSyasuoka
3*0eaf192dSyasuoka /*
4*0eaf192dSyasuoka * integer (uint16_t, uint32_t, uint64_t) attributes
5*0eaf192dSyasuoka */
6*0eaf192dSyasuoka
test21(void)7*0eaf192dSyasuoka void test21(void)
8*0eaf192dSyasuoka {
9*0eaf192dSyasuoka RADIUS_PACKET *packet;
10*0eaf192dSyasuoka uint16_t v16;
11*0eaf192dSyasuoka uint32_t v32;
12*0eaf192dSyasuoka uint64_t v64;
13*0eaf192dSyasuoka
14*0eaf192dSyasuoka static const uint8_t attrs_beforeset[] = {
15*0eaf192dSyasuoka 1, 3, 0,
16*0eaf192dSyasuoka 10, 4, 0x12, 0x34,
17*0eaf192dSyasuoka RADIUS_TYPE_VENDOR_SPECIFIC, 10, 0, 0, 0, 20, 30, 4, 0x43, 0x21,
18*0eaf192dSyasuoka 40, 6, 0x13, 0x57, 0x9b, 0xdf,
19*0eaf192dSyasuoka RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 0, 50, 60, 6, 0x24, 0x68, 0xac, 0xe0,
20*0eaf192dSyasuoka 70, 10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
21*0eaf192dSyasuoka RADIUS_TYPE_VENDOR_SPECIFIC, 16, 0, 0, 0, 80, 90, 10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
22*0eaf192dSyasuoka };
23*0eaf192dSyasuoka static const uint8_t attrs_afterset[] = {
24*0eaf192dSyasuoka 1, 3, 0,
25*0eaf192dSyasuoka 10, 4, 0x43, 0x21,
26*0eaf192dSyasuoka RADIUS_TYPE_VENDOR_SPECIFIC, 10, 0, 0, 0, 20, 30, 4, 0x12, 0x34,
27*0eaf192dSyasuoka 40, 6, 0x24, 0x68, 0xac, 0xe0,
28*0eaf192dSyasuoka RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 0, 50, 60, 6, 0x13, 0x57, 0x9b, 0xdf,
29*0eaf192dSyasuoka 70, 10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
30*0eaf192dSyasuoka RADIUS_TYPE_VENDOR_SPECIFIC, 16, 0, 0, 0, 80, 90, 10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
31*0eaf192dSyasuoka };
32*0eaf192dSyasuoka
33*0eaf192dSyasuoka packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST);
34*0eaf192dSyasuoka
35*0eaf192dSyasuoka radius_put_raw_attr(packet, 1, "", 1); /* padding for UNalignment */
36*0eaf192dSyasuoka radius_put_uint16_attr(packet, 10, 0x1234);
37*0eaf192dSyasuoka radius_put_vs_uint16_attr(packet, 20, 30, 0x4321);
38*0eaf192dSyasuoka radius_put_uint32_attr(packet, 40, 0x13579bdfU);
39*0eaf192dSyasuoka radius_put_vs_uint32_attr(packet, 50, 60, 0x2468ace0U);
40*0eaf192dSyasuoka radius_put_uint64_attr(packet, 70, 0x0123456789abcdefULL);
41*0eaf192dSyasuoka radius_put_vs_uint64_attr(packet, 80, 90, 0xfedcba9876543210ULL);
42*0eaf192dSyasuoka
43*0eaf192dSyasuoka CHECK(radius_get_length(packet) == sizeof(attrs_beforeset) + 20);
44*0eaf192dSyasuoka CHECK(memcmp(radius_get_data(packet) + 20, attrs_beforeset, sizeof(attrs_beforeset)) == 0);
45*0eaf192dSyasuoka
46*0eaf192dSyasuoka CHECK(radius_get_uint16_attr(packet, 10, &v16) == 0);
47*0eaf192dSyasuoka CHECK(v16 == 0x1234);
48*0eaf192dSyasuoka CHECK(radius_get_vs_uint16_attr(packet, 20, 30, &v16) == 0);
49*0eaf192dSyasuoka CHECK(v16 == 0x4321);
50*0eaf192dSyasuoka
51*0eaf192dSyasuoka CHECK(radius_get_uint32_attr(packet, 40, &v32) == 0);
52*0eaf192dSyasuoka CHECK(v32 == 0x13579bdfU);
53*0eaf192dSyasuoka CHECK(radius_get_vs_uint32_attr(packet, 50, 60, &v32) == 0);
54*0eaf192dSyasuoka CHECK(v32 == 0x2468ace0U);
55*0eaf192dSyasuoka
56*0eaf192dSyasuoka CHECK(radius_get_uint64_attr(packet, 70, &v64) == 0);
57*0eaf192dSyasuoka CHECK(v64 == 0x0123456789abcdefULL);
58*0eaf192dSyasuoka CHECK(radius_get_vs_uint64_attr(packet, 80, 90, &v64) == 0);
59*0eaf192dSyasuoka CHECK(v64 == 0xfedcba9876543210ULL);
60*0eaf192dSyasuoka
61*0eaf192dSyasuoka CHECK(radius_set_uint16_attr(packet, 10, 0x4321) == 0);
62*0eaf192dSyasuoka CHECK(radius_set_vs_uint16_attr(packet, 20, 30, 0x1234) == 0);
63*0eaf192dSyasuoka CHECK(radius_set_uint32_attr(packet, 40, 0x2468ace0U) == 0);
64*0eaf192dSyasuoka CHECK(radius_set_vs_uint32_attr(packet, 50, 60, 0x13579bdfU) == 0);
65*0eaf192dSyasuoka CHECK(radius_set_uint64_attr(packet, 70, 0xfedcba9876543210ULL) == 0);
66*0eaf192dSyasuoka CHECK(radius_set_vs_uint64_attr(packet, 80, 90, 0x0123456789abcdefULL) == 0);
67*0eaf192dSyasuoka
68*0eaf192dSyasuoka CHECK(radius_get_length(packet) == sizeof(attrs_afterset) + 20);
69*0eaf192dSyasuoka CHECK(memcmp(radius_get_data(packet) + 20, attrs_afterset, sizeof(attrs_afterset)) == 0);
70*0eaf192dSyasuoka
71*0eaf192dSyasuoka CHECK(radius_get_uint16_attr(packet, 40, &v16) != 0);
72*0eaf192dSyasuoka CHECK(radius_get_vs_uint16_attr(packet, 50, 60, &v16) != 0);
73*0eaf192dSyasuoka CHECK(radius_get_uint32_attr(packet, 70, &v32) != 0);
74*0eaf192dSyasuoka CHECK(radius_get_vs_uint32_attr(packet, 80, 90, &v32) != 0);
75*0eaf192dSyasuoka CHECK(radius_get_uint64_attr(packet, 10, &v64) != 0);
76*0eaf192dSyasuoka CHECK(radius_get_vs_uint64_attr(packet, 20, 30, &v64) != 0);
77*0eaf192dSyasuoka }
78*0eaf192dSyasuoka
79*0eaf192dSyasuoka ADD_TEST(test21)
80