| /* |
| * tests/check-attr.c nla_attr unit tests |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation version 2.1 |
| * of the License. |
| * |
| * Copyright (c) 2013 Thomas Graf <tgraf@suug.ch> |
| */ |
| |
| #include "util.h" |
| #include <netlink/attr.h> |
| #include <netlink/msg.h> |
| |
| START_TEST(attr_size) |
| { |
| fail_if(nla_attr_size(0) != NLA_HDRLEN, |
| "Length of empty attribute should match header size"); |
| fail_if(nla_attr_size(1) != NLA_HDRLEN + 1, |
| "Length of 1 bytes payload should be NLA_HDRLEN + 1"); |
| fail_if(nla_attr_size(2) != NLA_HDRLEN + 2, |
| "Length of 2 bytes payload should be NLA_HDRLEN + 2"); |
| fail_if(nla_attr_size(3) != NLA_HDRLEN + 3, |
| "Length of 3 bytes payload should be NLA_HDRLEN + 3"); |
| fail_if(nla_attr_size(4) != NLA_HDRLEN + 4, |
| "Length of 4 bytes payload should be NLA_HDRLEN + 4"); |
| |
| fail_if(nla_total_size(1) != NLA_HDRLEN + 4, |
| "Total size of 1 bytes payload should result in 8 bytes"); |
| fail_if(nla_total_size(2) != NLA_HDRLEN + 4, |
| "Total size of 2 bytes payload should result in 8 bytes"); |
| fail_if(nla_total_size(3) != NLA_HDRLEN + 4, |
| "Total size of 3 bytes payload should result in 8 bytes"); |
| fail_if(nla_total_size(4) != NLA_HDRLEN + 4, |
| "Total size of 4 bytes payload should result in 8 bytes"); |
| |
| fail_if(nla_padlen(1) != 3, |
| "2 bytes of payload should result in 3 padding bytes"); |
| fail_if(nla_padlen(2) != 2, |
| "2 bytes of payload should result in 2 padding bytes"); |
| fail_if(nla_padlen(3) != 1, |
| "3 bytes of payload should result in 1 padding bytes"); |
| fail_if(nla_padlen(4) != 0, |
| "4 bytes of payload should result in 0 padding bytes"); |
| fail_if(nla_padlen(5) != 3, |
| "5 bytes of payload should result in 3 padding bytes"); |
| } |
| END_TEST |
| |
| START_TEST(msg_construct) |
| { |
| struct nl_msg *msg; |
| struct nlmsghdr *nlh; |
| struct nlattr *a; |
| int i, rem; |
| |
| msg = nlmsg_alloc(); |
| fail_if(!msg, "Unable to allocate netlink message"); |
| |
| for (i = 1; i < 256; i++) { |
| fail_if(nla_put_u32(msg, i, i+1) != 0, |
| "Unable to add attribute %d", i); |
| } |
| |
| nlh = nlmsg_hdr(msg); |
| i = 1; |
| nlmsg_for_each_attr(a, nlh, 0, rem) { |
| fail_if(nla_type(a) != i, "Expected attribute %d", i); |
| i++; |
| fail_if(nla_get_u32(a) != i, "Expected attribute value %d", i); |
| } |
| |
| nlmsg_free(msg); |
| } |
| END_TEST |
| |
| Suite *make_nl_attr_suite(void) |
| { |
| Suite *suite = suite_create("Netlink attributes"); |
| |
| TCase *nl_attr = tcase_create("Core"); |
| tcase_add_test(nl_attr, attr_size); |
| tcase_add_test(nl_attr, msg_construct); |
| suite_add_tcase(suite, nl_attr); |
| |
| return suite; |
| } |