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