1 #include "incs.h"
2
3 /*
4 * put/get/has attributes
5 */
6
test01(void)7 void test01(void)
8 {
9 RADIUS_PACKET *packet;
10 uint8_t buf[256];
11 size_t len;
12 const void *ptr;
13
14 static const uint8_t data0[] = { 0xfe, 0xdc, 0xba, 0x98 };
15 static const uint8_t data1[] = { 0x76, 0x54, 0x32 };
16 static const uint8_t data2[] = { 0x0f, 0x1e, 0x2d, 0x3c };
17 static const uint8_t data3[] = { 0x4b, 0x5a, 0x69 };
18 static const uint8_t attrs[] = {
19 10, 6, 0xfe, 0xdc, 0xba, 0x98,
20 20, 5, 0x76, 0x54, 0x32,
21 RADIUS_TYPE_VENDOR_SPECIFIC, 12, 0, 0, 300/256, 300%256, 40, 6, 0x0f, 0x1e, 0x2d, 0x3c,
22 RADIUS_TYPE_VENDOR_SPECIFIC, 11, 0, 0, 500/256, 500%256, 60, 5, 0x4b, 0x5a, 0x69,
23 20, 6, 0x0f, 0x1e, 0x2d, 0x3c,
24 RADIUS_TYPE_VENDOR_SPECIFIC, 11, 0, 0, 300/256, 300%256, 40, 5, 0x76, 0x54, 0x32,
25 };
26
27 packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST);
28
29 radius_put_raw_attr(packet, 10, data0, sizeof(data0));
30 radius_put_raw_attr(packet, 20, data1, sizeof(data1));
31 radius_put_vs_raw_attr(packet, 300, 40, data2, sizeof(data2));
32 radius_put_vs_raw_attr(packet, 500, 60, data3, sizeof(data3));
33 radius_put_raw_attr(packet, 20, data2, sizeof(data2));
34 radius_put_vs_raw_attr(packet, 300, 40, data1, sizeof(data1));
35
36 CHECK(radius_get_length(packet) == sizeof(attrs) + 20);
37 CHECK(memcmp(radius_get_data(packet) + 20, attrs, sizeof(attrs)) == 0);
38
39 len = sizeof(buf);
40 CHECK(radius_get_raw_attr(packet, 10, buf, &len) == 0);
41 CHECK(len == sizeof(data0));
42 CHECK(memcmp(buf, data0, len) == 0);
43
44 len = sizeof(buf);
45 CHECK(radius_get_raw_attr(packet, 20, buf, &len) == 0);
46 CHECK(len == sizeof(data1));
47 CHECK(memcmp(buf, data1, len) == 0);
48
49 len = sizeof(buf);
50 CHECK(radius_get_vs_raw_attr(packet, 300, 40, buf, &len) == 0);
51 CHECK(len == sizeof(data2));
52 CHECK(memcmp(buf, data2, len) == 0);
53
54 len = sizeof(buf);
55 CHECK(radius_get_vs_raw_attr(packet, 500, 60, buf, &len) == 0);
56 CHECK(len == sizeof(data3));
57 CHECK(memcmp(buf, data3, len) == 0);
58
59 len = 2;
60 CHECK(radius_get_raw_attr(packet, 10, buf, &len) == 0);
61 CHECK(len == 2);
62 CHECK(memcmp(buf, data0, len) == 0);
63
64 len = 2;
65 CHECK(radius_get_vs_raw_attr(packet, 300, 40, buf, &len) == 0);
66 CHECK(len == 2);
67 CHECK(memcmp(buf, data2, len) == 0);
68
69 len = sizeof(buf);
70 CHECK(radius_get_raw_attr(packet, 90, buf, &len) != 0);
71 CHECK(radius_get_vs_raw_attr(packet, 300, 90, buf, &len) != 0);
72 CHECK(radius_get_vs_raw_attr(packet, 900, 40, buf, &len) != 0);
73
74 len = 0;
75 CHECK(radius_get_raw_attr_ptr(packet, 10, &ptr, &len) == 0);
76 CHECK(len == 4);
77 CHECK(ptr == radius_get_data(packet) + 20 + 0 + 2);
78
79 len = 0;
80 CHECK(radius_get_vs_raw_attr_ptr(packet, 500, 60, &ptr, &len) == 0);
81 CHECK(len == 3);
82 CHECK(ptr == radius_get_data(packet) + 20 + 23 + 8);
83
84 CHECK(radius_get_raw_attr_ptr(packet, 90, &ptr, &len) != 0);
85 CHECK(radius_get_vs_raw_attr_ptr(packet, 300, 90, &ptr, &len) != 0);
86 CHECK(radius_get_vs_raw_attr_ptr(packet, 900, 40, &ptr, &len) != 0);
87
88 CHECK(radius_has_attr(packet, 10));
89 CHECK(radius_has_attr(packet, 20));
90 CHECK(radius_has_vs_attr(packet, 300, 40));
91 CHECK(radius_has_vs_attr(packet, 500, 60));
92 CHECK(!radius_has_attr(packet, 90));
93 CHECK(!radius_has_vs_attr(packet, 300, 90));
94 CHECK(!radius_has_vs_attr(packet, 900, 40));
95 }
96
97 ADD_TEST(test01)
98