1 #include "incs.h" 2 3 /* 4 * put/get/has attributes 5 */ 6 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