diff options
-rw-r--r-- | src/platform/tests/test-link.c | 73 |
1 files changed, 62 insertions, 11 deletions
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index db43b55006..9da2404ddc 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -42,6 +42,9 @@ #define VLAN_FLAGS 0 #define MTU 1357 +#define _ADD_DUMMY(platform, name) \ + g_assert_cmpint (nm_platform_link_dummy_add ((platform), (name), NULL), ==, NM_PLATFORM_ERROR_SUCCESS) + static void test_bogus(void) { @@ -1865,6 +1868,24 @@ _test_netns_teardown (gpointer fixture, gconstpointer test_data) SETUP (); } +static NMPlatform * +_test_netns_create_platform (void) +{ + NMPNetns *netns; + NMPlatform *platform; + + netns = nmp_netns_new (); + g_assert (NMP_IS_NETNS (netns)); + + platform = g_object_new (NM_TYPE_LINUX_PLATFORM, NM_PLATFORM_NETNS_SUPPORT, TRUE, NULL); + g_assert (NM_IS_LINUX_PLATFORM (platform)); + + nmp_netns_pop (netns); + g_object_unref (netns); + + return platform; +} + static gboolean _test_netns_check_skip (void) { @@ -1900,7 +1921,6 @@ test_netns_general (gpointer fixture, gconstpointer test_data) { gs_unref_object NMPlatform *platform_1 = NULL; gs_unref_object NMPlatform *platform_2 = NULL; - gs_unref_object NMPNetns *netns_2 = NULL; NMPNetns *netns_tmp; char sbuf[100]; int i, j, k; @@ -1910,19 +1930,13 @@ test_netns_general (gpointer fixture, gconstpointer test_data) return; platform_1 = g_object_new (NM_TYPE_LINUX_PLATFORM, NM_PLATFORM_NETNS_SUPPORT, TRUE, NULL); - - netns_2 = nmp_netns_new (); - platform_2 = g_object_new (NM_TYPE_LINUX_PLATFORM, NM_PLATFORM_NETNS_SUPPORT, TRUE, NULL); - nmp_netns_pop (netns_2); + platform_2 = _test_netns_create_platform (); /* add some dummy devices. The "other-*" devices are there to bump the ifindex */ for (k = 0; k < 2; k++) { NMPlatform *p = (k == 0 ? platform_1 : platform_2); const char *id = (k == 0 ? "a" : "b"); -#define _ADD_DUMMY(platform, name) \ - g_assert_cmpint (nm_platform_link_dummy_add ((platform), (name), NULL), ==, NM_PLATFORM_ERROR_SUCCESS) - for (i = 0, j = nmtst_get_rand_int () % 5; i < j; i++) _ADD_DUMMY (p, nm_sprintf_buf (sbuf, "other-a-%s-%02d", id, i)); @@ -1935,8 +1949,6 @@ test_netns_general (gpointer fixture, gconstpointer test_data) for (i = 0, j = nmtst_get_rand_int () % 5; i < j; i++) _ADD_DUMMY (p, nm_sprintf_buf (sbuf, "other-c-%s-%02d", id, i)); - -#undef _ADD_DUMMY } g_assert_cmpstr (nm_platform_sysctl_get (platform_1, "/sys/devices/virtual/net/dummy1_/ifindex"), ==, nm_sprintf_buf (sbuf, "%d", nm_platform_link_get_by_ifname (platform_1, "dummy1_")->ifindex)); @@ -1985,7 +1997,6 @@ test_netns_general (gpointer fixture, gconstpointer test_data) } g_assert (nm_platform_netns_push (platform_2, &netns_tmp)); - g_assert (netns_tmp == netns_2); if (ethtool_support) { g_assert ( nmp_utils_ethtool_get_driver_info ("dummy1_", NULL, NULL, NULL)); @@ -2001,6 +2012,45 @@ test_netns_general (gpointer fixture, gconstpointer test_data) /*****************************************************************************/ +static void +test_netns_set_netns (gpointer fixture, gconstpointer test_data) +{ + NMPlatform *platforms[3]; + gs_unref_object NMPlatform *platform_0 = NULL; + gs_unref_object NMPlatform *platform_1 = NULL; + gs_unref_object NMPlatform *platform_2 = NULL; + nm_auto_pop_netns NMPNetns *netns_pop = NULL; + int i; + + if (_test_netns_check_skip ()) + return; + + platforms[0] = platform_0 = g_object_new (NM_TYPE_LINUX_PLATFORM, NM_PLATFORM_NETNS_SUPPORT, TRUE, NULL); + platforms[1] = platform_1 = _test_netns_create_platform (); + platforms[2] = platform_2 = _test_netns_create_platform (); + + i = nmtst_get_rand_int () % 4; + if (i != 3) + g_assert (nm_platform_netns_push (platforms[i], &netns_pop)); + +#define LINK_MOVE_NAME "link-move" + g_assert (!nm_platform_link_get_by_ifname (platform_1, LINK_MOVE_NAME)); + g_assert (!nm_platform_link_get_by_ifname (platform_2, LINK_MOVE_NAME)); + _ADD_DUMMY (platform_1, LINK_MOVE_NAME); + g_assert ( nm_platform_link_get_by_ifname (platform_1, LINK_MOVE_NAME)); + g_assert (!nm_platform_link_get_by_ifname (platform_2, LINK_MOVE_NAME)); + g_assert (nm_platform_link_set_netns (platform_1, + nm_platform_link_get_by_ifname (platform_1, LINK_MOVE_NAME)->ifindex, + nmp_netns_get_fd_net (nm_platform_netns_get (platform_2)))); + g_assert (!nm_platform_link_get_by_ifname (platform_1, LINK_MOVE_NAME)); + g_assert (!nm_platform_link_get_by_ifname (platform_2, LINK_MOVE_NAME)); + nmtstp_assert_wait_for_link (platform_2, LINK_MOVE_NAME, NM_LINK_TYPE_DUMMY, 100); + g_assert (!nm_platform_link_get_by_ifname (platform_1, LINK_MOVE_NAME)); + g_assert ( nm_platform_link_get_by_ifname (platform_2, LINK_MOVE_NAME)); +} + +/*****************************************************************************/ + void init_tests (int *argc, char ***argv) { @@ -2049,5 +2099,6 @@ setup_tests (void) g_test_add_func ("/link/nl-bugs/spurious-dellink", test_nl_bugs_spuroius_dellink); g_test_add_vtable ("/general/netns/general", 0, NULL, _test_netns_setup, test_netns_general, _test_netns_teardown); + g_test_add_vtable ("/general/netns/set-netns", 0, NULL, _test_netns_setup, test_netns_set_netns, _test_netns_teardown); } } |