kernel-netlink: Add non-dumping variants of echo and stress tests
This commit is contained in:
@@ -39,6 +39,37 @@ bool netlink_msg_loss(struct nlmsghdr *hdr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
START_TEST(test_echo)
|
START_TEST(test_echo)
|
||||||
|
{
|
||||||
|
netlink_socket_t *s;
|
||||||
|
struct nlmsghdr *out;
|
||||||
|
struct rtmsg *msg;
|
||||||
|
char dst[] = {
|
||||||
|
127,0,0,1
|
||||||
|
};
|
||||||
|
size_t len;
|
||||||
|
netlink_buf_t request = {
|
||||||
|
.hdr = {
|
||||||
|
.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)),
|
||||||
|
.nlmsg_flags = NLM_F_REQUEST,
|
||||||
|
.nlmsg_type = RTM_GETROUTE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
msg = NLMSG_DATA(&request.hdr);
|
||||||
|
msg->rtm_family = AF_INET;
|
||||||
|
netlink_add_attribute(&request.hdr, RTA_DST,
|
||||||
|
chunk_from_thing(dst), sizeof(request));
|
||||||
|
|
||||||
|
s = netlink_socket_create(NETLINK_ROUTE, NULL);
|
||||||
|
|
||||||
|
ck_assert(s->send(s, &request.hdr, &out, &len) == SUCCESS);
|
||||||
|
ck_assert_int_eq(out->nlmsg_type, RTM_NEWROUTE);
|
||||||
|
free(out);
|
||||||
|
s->destroy(s);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_echo_dump)
|
||||||
{
|
{
|
||||||
netlink_socket_t *s;
|
netlink_socket_t *s;
|
||||||
struct nlmsghdr *out, *current;
|
struct nlmsghdr *out, *current;
|
||||||
@@ -75,6 +106,38 @@ END_TEST
|
|||||||
|
|
||||||
CALLBACK(stress, void*,
|
CALLBACK(stress, void*,
|
||||||
netlink_socket_t *s)
|
netlink_socket_t *s)
|
||||||
|
{
|
||||||
|
struct nlmsghdr *out;
|
||||||
|
struct rtmsg *msg;
|
||||||
|
char dst[] = {
|
||||||
|
127,0,0,1
|
||||||
|
};
|
||||||
|
size_t len;
|
||||||
|
int i;
|
||||||
|
netlink_buf_t request = {
|
||||||
|
.hdr = {
|
||||||
|
.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)),
|
||||||
|
.nlmsg_flags = NLM_F_REQUEST,
|
||||||
|
.nlmsg_type = RTM_GETROUTE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
for (i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
msg = NLMSG_DATA(&request.hdr);
|
||||||
|
msg->rtm_family = AF_INET;
|
||||||
|
netlink_add_attribute(&request.hdr, RTA_DST,
|
||||||
|
chunk_from_thing(dst), sizeof(request));
|
||||||
|
|
||||||
|
ck_assert(s->send(s, &request.hdr, &out, &len) == SUCCESS);
|
||||||
|
ck_assert_int_eq(out->nlmsg_type, RTM_NEWROUTE);
|
||||||
|
free(out);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CALLBACK(stress_dump, void*,
|
||||||
|
netlink_socket_t *s)
|
||||||
{
|
{
|
||||||
struct nlmsghdr *out, *current;
|
struct nlmsghdr *out, *current;
|
||||||
struct rtgenmsg *msg;
|
struct rtgenmsg *msg;
|
||||||
@@ -129,6 +192,25 @@ START_TEST(test_stress)
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_stress_dump)
|
||||||
|
{
|
||||||
|
thread_t *threads[10];
|
||||||
|
netlink_socket_t *s;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
s = netlink_socket_create(NETLINK_ROUTE, NULL);
|
||||||
|
for (i = 0; i < countof(threads); i++)
|
||||||
|
{
|
||||||
|
threads[i] = thread_create(stress_dump, s);
|
||||||
|
}
|
||||||
|
for (i = 0; i < countof(threads); i++)
|
||||||
|
{
|
||||||
|
threads[i]->join(threads[i]);
|
||||||
|
}
|
||||||
|
s->destroy(s);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
START_TEST(test_retransmit_success)
|
START_TEST(test_retransmit_success)
|
||||||
{
|
{
|
||||||
netlink_socket_t *s;
|
netlink_socket_t *s;
|
||||||
@@ -203,10 +285,12 @@ Suite *socket_suite_create()
|
|||||||
|
|
||||||
tc = tcase_create("echo");
|
tc = tcase_create("echo");
|
||||||
tcase_add_test(tc, test_echo);
|
tcase_add_test(tc, test_echo);
|
||||||
|
tcase_add_test(tc, test_echo_dump);
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
tc = tcase_create("stress");
|
tc = tcase_create("stress");
|
||||||
tcase_add_test(tc, test_stress);
|
tcase_add_test(tc, test_stress);
|
||||||
|
tcase_add_test(tc, test_stress_dump);
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
tc = tcase_create("retransmit");
|
tc = tcase_create("retransmit");
|
||||||
|
|||||||
Reference in New Issue
Block a user