summaryrefslogtreecommitdiff
path: root/src/libsystemd/sd-rtnl/test-rtnl.c
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2014-01-24 21:04:05 +0100
committerTom Gundersen <teg@jklm.no>2014-01-24 22:20:34 +0100
commite5c4350b0d91551041795eb3c4fd4f22b2604ee2 (patch)
tree0444279a3e163630e68a6ef53b668461c68a7821 /src/libsystemd/sd-rtnl/test-rtnl.c
parent1fa132931a3eed8556da801d9fe91aa4c166445e (diff)
sd-rtnl: add support for reading containers
Also insist on messages being sealed before reading them. In other words we don't allow interleaving of reading and appending to messages.
Diffstat (limited to 'src/libsystemd/sd-rtnl/test-rtnl.c')
-rw-r--r--src/libsystemd/sd-rtnl/test-rtnl.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/libsystemd/sd-rtnl/test-rtnl.c b/src/libsystemd/sd-rtnl/test-rtnl.c
index 98213d6782..a173b0fc61 100644
--- a/src/libsystemd/sd-rtnl/test-rtnl.c
+++ b/src/libsystemd/sd-rtnl/test-rtnl.c
@@ -27,6 +27,7 @@
#include "sd-rtnl.h"
#include "socket-util.h"
#include "rtnl-util.h"
+#include "rtnl-internal.h"
#include "event-util.h"
static void test_link_configure(sd_rtnl *rtnl, int ifindex) {
@@ -42,6 +43,8 @@ static void test_link_configure(sd_rtnl *rtnl, int ifindex) {
assert(sd_rtnl_message_append_ether_addr(message, IFLA_ADDRESS, ether_aton(mac)) >= 0);
assert(sd_rtnl_message_append_u32(message, IFLA_MTU, mtu) >= 0);
+ assert(sd_rtnl_call(rtnl, message, 0, NULL) == 1);
+
assert(sd_rtnl_message_read(message, &type, &data) > 0);
assert(type == IFLA_IFNAME);
assert(streq(name, (char *) data));
@@ -53,8 +56,6 @@ static void test_link_configure(sd_rtnl *rtnl, int ifindex) {
assert(sd_rtnl_message_read(message, &type, &data) > 0);
assert(type == IFLA_MTU);
assert(mtu == *(unsigned int *) data);
-
- assert(sd_rtnl_call(rtnl, message, 0, NULL) == 1);
}
static void test_route(void) {
@@ -85,6 +86,8 @@ static void test_route(void) {
return;
}
+ assert(message_seal(NULL, req) >= 0);
+
assert(sd_rtnl_message_read(req, &type, &data) > 0);
assert(type == RTA_GATEWAY);
assert(((struct in_addr *)data)->s_addr == addr.s_addr);
@@ -224,15 +227,26 @@ static void test_container(void) {
assert(sd_rtnl_message_close_container(m) >= 0);
assert(sd_rtnl_message_close_container(m) == -EINVAL);
- assert(sd_rtnl_message_read(m, &type, &data) == -EINVAL);
+ assert(message_seal(NULL, m) >= 0);
-/* TODO: add support for entering containers
- assert(sd_rtnl_message_read(m, &type, &data) > 0);
+ assert(sd_rtnl_message_read(m, &type, &data) >= 0);
+ assert(type == IFLA_LINKINFO);
+ assert(data == NULL);
+ assert(sd_rtnl_message_read(m, &type, &data) >= 0);
assert(type == IFLA_INFO_KIND);
- assert(streq("kind", (char *) data));
-
- assert(sd_rtnl_message_read(m, &type, &data) == 0);
-*/
+ assert(streq("kind", (char *)data));
+ assert(sd_rtnl_message_read(m, &type, &data) >= 0);
+ assert(type == IFLA_INFO_DATA);
+ assert(data == NULL);
+ assert(sd_rtnl_message_read(m, &type, &data) >= 0);
+ assert(type == IFLA_VLAN_ID);
+ assert(*(uint16_t *)data == 100);
+ assert(sd_rtnl_message_exit_container(m) >= 0);
+ assert(sd_rtnl_message_read(m, &type, &data) >= 0);
+ assert(type == IFLA_INFO_KIND);
+ assert(streq("kind", (char *)data));
+ assert(sd_rtnl_message_exit_container(m) >= 0);
+ assert(sd_rtnl_message_exit_container(m) == -EINVAL);
}
static void test_match(void) {
@@ -286,7 +300,7 @@ int main(void) {
assert(sd_rtnl_message_get_type(m, &type) >= 0);
assert(type == RTM_GETLINK);
- assert(sd_rtnl_message_read(m, &type, &data) == 0);
+ assert(sd_rtnl_message_read(m, &type, &data) == -EPERM);
assert(sd_rtnl_call(rtnl, m, 0, &r) == 1);
assert(sd_rtnl_message_get_type(r, &type) >= 0);
@@ -303,6 +317,8 @@ int main(void) {
assert(m);
assert(sd_rtnl_message_append_u32(m, IFLA_MTU, mtu) >= 0);
+ assert(sd_rtnl_message_read(m, &type, (void **) &mtu_reply) == -EPERM);
+ assert(sd_rtnl_call(rtnl, m, -1, &r) == 1);
assert(sd_rtnl_message_read(m, &type, (void **) &mtu_reply) == 1);
assert(type == IFLA_MTU);
@@ -310,7 +326,6 @@ int main(void) {
assert(sd_rtnl_message_read(m, &type, &data) == 0);
- assert(sd_rtnl_call(rtnl, m, -1, &r) == 1);
while (sd_rtnl_message_read(r, &type, &data) > 0) {
switch (type) {
// case IFLA_MTU: