From 32188058ad3b9a8bfc555215982145a128adfc44 Mon Sep 17 00:00:00 2001 From: Nick Rosbrook Date: Tue, 22 Nov 2022 17:01:47 -0500 Subject: [PATCH] sd-netlink: add a test for rtnl_set_link_name() Add a test that verifies a deleted alternative name is restored on error in rtnl_set_link_name(). (cherry picked from commit b338a8bb402a3ab241a617e096b21ae6a7b7badf) Related: RHEL-5988 --- src/libsystemd/sd-netlink/test-netlink.c | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c index 3f74ecc068..2d93f9eba0 100644 --- a/src/libsystemd/sd-netlink/test-netlink.c +++ b/src/libsystemd/sd-netlink/test-netlink.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "sd-netlink.h" @@ -16,6 +17,7 @@ #include "macro.h" #include "netlink-genl.h" #include "netlink-internal.h" +#include "netlink-util.h" #include "socket-util.h" #include "stdio-util.h" #include "string-util.h" @@ -667,6 +669,30 @@ static void test_genl(void) { } } +static void test_rtnl_set_link_name(sd_netlink *rtnl, int ifindex) { + _cleanup_strv_free_ char **alternative_names = NULL; + int r; + + log_debug("/* %s */", __func__); + + if (geteuid() != 0) + return (void) log_tests_skipped("not root"); + + /* Test that the new name (which is currently an alternative name) is + * restored as an alternative name on error. Create an error by using + * an invalid device name, namely one that exceeds IFNAMSIZ + * (alternative names can exceed IFNAMSIZ, but not regular names). */ + r = rtnl_set_link_alternative_names(&rtnl, ifindex, STRV_MAKE("testlongalternativename")); + if (r == -EPERM) + return (void) log_tests_skipped("missing required capabilities"); + + assert_se(r >= 0); + assert_se(rtnl_set_link_name(&rtnl, ifindex, "testlongalternativename") == -EINVAL); + assert_se(rtnl_get_link_alternative_names(&rtnl, ifindex, &alternative_names) >= 0); + assert_se(strv_contains(alternative_names, "testlongalternativename")); + assert_se(rtnl_delete_link_alternative_names(&rtnl, ifindex, STRV_MAKE("testlongalternativename")) >= 0); +} + int main(void) { sd_netlink *rtnl; sd_netlink_message *m; @@ -698,6 +724,7 @@ int main(void) { test_pipe(if_loopback); test_event_loop(if_loopback); test_link_configure(rtnl, if_loopback); + test_rtnl_set_link_name(rtnl, if_loopback); test_get_addresses(rtnl); test_message_link_bridge(rtnl);