diff options
| author | Sebastien Bacher <seb128@ubuntu.com> | 2020-05-19 16:38:51 +0200 |
|---|---|---|
| committer | Sebastien Bacher <seb128@ubuntu.com> | 2020-05-19 16:38:51 +0200 |
| commit | 96642ebde58e1eea692aea6a92d33f45452fa9c0 (patch) | |
| tree | 106ddfa2180b3997e8965787b5cb122982ebab9d /src/platform/tests/test-link.c | |
| parent | 8f6881ac06714ef99cc470a03e7ac0ce1af49a16 (diff) | |
| parent | d460892bbfece74fb6d3cd846bf6ef548290be41 (diff) | |
Merge branch 'upstream/latest' of https://salsa.debian.org/utopia-team/network-manager into upstream/latestt pu
Diffstat (limited to 'src/platform/tests/test-link.c')
| -rw-r--r-- | src/platform/tests/test-link.c | 110 |
1 files changed, 81 insertions, 29 deletions
diff --git a/src/platform/tests/test-link.c b/src/platform/tests/test-link.c index 37e1cde5..ea4a2c5a 100644 --- a/src/platform/tests/test-link.c +++ b/src/platform/tests/test-link.c @@ -1144,7 +1144,7 @@ test_software_detect (gconstpointer user_data) break; } case NM_LINK_TYPE_MACVTAP: { - NMPlatformLnkMacvtap lnk_macvtap = { }; + NMPlatformLnkMacvlan lnk_macvtap = { }; lnk_macvtap.mode = MACVLAN_MODE_PRIVATE; lnk_macvtap.no_promisc = FALSE; @@ -1182,6 +1182,21 @@ test_software_detect (gconstpointer user_data) case NM_LINK_TYPE_VLAN: nmtstp_run_command_check ("ip link add name %s link %s type vlan id 1242", DEVICE_NAME, PARENT_NAME); break; + case NM_LINK_TYPE_VRF: { + NMPlatformLnkVrf lnk_vrf = { }; + gboolean not_supported; + + lnk_vrf.table = 9876; + + if (!nmtstp_link_vrf_add (NULL, ext, DEVICE_NAME, &lnk_vrf, ¬_supported)) { + if (not_supported) { + g_test_skip ("Cannot create VRF interface because of missing kernel support"); + goto out_delete_parent; + } + g_error ("Failed adding VRF interface"); + } + break; + } case NM_LINK_TYPE_VXLAN: { NMPlatformLnkVxlan lnk_vxlan = { }; @@ -1389,7 +1404,7 @@ test_software_detect (gconstpointer user_data) break; } case NM_LINK_TYPE_MACVTAP: { - const NMPlatformLnkMacvtap *plnk = &lnk->lnk_macvlan; + const NMPlatformLnkMacvlan *plnk = &lnk->lnk_macvlan; g_assert (plnk == nm_platform_link_get_lnk_macvtap (NM_PLATFORM_GET, ifindex, NULL)); g_assert_cmpint (plnk->no_promisc, ==, FALSE); @@ -1444,6 +1459,13 @@ test_software_detect (gconstpointer user_data) g_assert_cmpint (plnk->id, ==, 1242); break; } + case NM_LINK_TYPE_VRF: { + const NMPlatformLnkVrf *plnk = &lnk->lnk_vrf; + + g_assert (plnk == nm_platform_link_get_lnk_vrf (NM_PLATFORM_GET, ifindex, NULL)); + g_assert_cmpint (plnk->table, ==, 9876); + break; + } case NM_LINK_TYPE_VXLAN: { const NMPlatformLnkVxlan *plnk = &lnk->lnk_vxlan; @@ -2095,7 +2117,7 @@ test_vlan_set_xgress (void) static void test_create_many_links_do (guint n_devices) { - gint64 time, start_time = nm_utils_get_monotonic_timestamp_ns (); + gint64 time, start_time = nm_utils_get_monotonic_timestamp_nsec (); guint i; char name[64]; const NMPlatformLink *pllink; @@ -2149,8 +2171,8 @@ test_create_many_links_do (guint n_devices) _LOGI (">>> process events after deleting devices..."); nm_platform_process_events (NM_PLATFORM_GET); - time = nm_utils_get_monotonic_timestamp_ns () - start_time; - _LOGI (">>> finished in %ld.%09ld seconds", (long) (time / NM_UTILS_NS_PER_SECOND), (long) (time % NM_UTILS_NS_PER_SECOND)); + time = nm_utils_get_monotonic_timestamp_nsec () - start_time; + _LOGI (">>> finished in %ld.%09ld seconds", (long) (time / NM_UTILS_NSEC_PER_SEC), (long) (time % NM_UTILS_NSEC_PER_SEC)); } static void @@ -3028,18 +3050,29 @@ test_sysctl_netns_switch (void) nmtstp_link_delete (PL, FALSE, ifindex, NULL, TRUE); } -static void -sysctl_set_async_cb_assert_success (GError *error, gpointer data) -{ - g_assert_no_error (error); - g_main_loop_quit (data); -} +typedef struct { + GMainLoop *loop; + const char *path; + gboolean expected_success; + gint32 expected_value; +} SetAsyncData; static void -sysctl_set_async_cb_assert_failure (GError *error, gpointer data) +sysctl_set_async_cb (GError *error, gpointer user_data) { - g_assert (error); - g_main_loop_quit (data); + SetAsyncData *data = user_data; + + if (data->expected_success) { + g_assert_no_error (error); + g_assert_cmpint (nm_platform_sysctl_get_int32 (NM_PLATFORM_GET, + NMP_SYSCTL_PATHID_ABSOLUTE (data->path), + -1), + ==, + data->expected_value); + } else + g_assert (error); + + g_main_loop_quit (data->loop); } static void @@ -3048,43 +3081,53 @@ test_sysctl_set_async (void) NMPlatform *const PL = NM_PLATFORM_GET; const char *const IFNAME = "nm-dummy-0"; const char *const PATH = "/proc/sys/net/ipv4/conf/nm-dummy-0/rp_filter"; - gs_free GMainLoop *loop = NULL; + GMainLoop *loop; gs_unref_object GCancellable *cancellable = NULL; + gboolean proc_writable; + SetAsyncData data; int ifindex; ifindex = nmtstp_link_dummy_add (PL, -1, IFNAME)->ifindex; loop = g_main_loop_new (NULL, FALSE); cancellable = g_cancellable_new (); + proc_writable = access (PATH, W_OK) == 0; + + data = (SetAsyncData) { + .loop = loop, + .path = PATH, + .expected_success = proc_writable, + .expected_value = 2, + }; nm_platform_sysctl_set_async (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), (const char *[]) { "2", NULL}, - sysctl_set_async_cb_assert_success, - loop, + sysctl_set_async_cb, + &data, cancellable); if (!nmtst_main_loop_run (loop, 1000)) g_assert_not_reached (); - g_assert_cmpint (nm_platform_sysctl_get_int32 (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), -1), - ==, - 2); + data = (SetAsyncData) { + .loop = loop, + .path = PATH, + .expected_success = proc_writable, + .expected_value = 1, + }; nm_platform_sysctl_set_async (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), (const char *[]) { "2", "0", "1", "0", "1", NULL}, - sysctl_set_async_cb_assert_success, - loop, + sysctl_set_async_cb, + &data, cancellable); if (!nmtst_main_loop_run (loop, 2000)) g_assert_not_reached (); - g_assert_cmpint (nm_platform_sysctl_get_int32 (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), -1), - ==, - 1); - nmtstp_link_delete (NULL, -1, ifindex, IFNAME, TRUE); + g_main_loop_unref (loop); } static void @@ -3093,25 +3136,33 @@ test_sysctl_set_async_fail (void) NMPlatform *const PL = NM_PLATFORM_GET; const char *const IFNAME = "nm-dummy-0"; const char *const PATH = "/proc/sys/net/ipv4/conf/nm-dummy-0/does-not-exist"; - gs_free GMainLoop *loop = NULL; + GMainLoop *loop; gs_unref_object GCancellable *cancellable = NULL; + SetAsyncData data; int ifindex; ifindex = nmtstp_link_dummy_add (PL, -1, IFNAME)->ifindex; loop = g_main_loop_new (NULL, FALSE); cancellable = g_cancellable_new (); + data = (SetAsyncData) { + .loop = loop, + .path = PATH, + .expected_success = FALSE, + }; + nm_platform_sysctl_set_async (PL, NMP_SYSCTL_PATHID_ABSOLUTE (PATH), (const char *[]) { "2", NULL}, - sysctl_set_async_cb_assert_failure, - loop, + sysctl_set_async_cb, + &data, cancellable); if (!nmtst_main_loop_run (loop, 1000)) g_assert_not_reached (); nmtstp_link_delete (NULL, -1, ifindex, IFNAME, TRUE); + g_main_loop_unref (loop); } /*****************************************************************************/ @@ -3313,6 +3364,7 @@ _nmtstp_setup_tests (void) test_software_detect_add ("/link/software/detect/sit", NM_LINK_TYPE_SIT, 0); test_software_detect_add ("/link/software/detect/tun", NM_LINK_TYPE_TUN, 0); test_software_detect_add ("/link/software/detect/vlan", NM_LINK_TYPE_VLAN, 0); + test_software_detect_add ("/link/software/detect/vrf", NM_LINK_TYPE_VRF, 0); test_software_detect_add ("/link/software/detect/vxlan/0", NM_LINK_TYPE_VXLAN, 0); test_software_detect_add ("/link/software/detect/vxlan/1", NM_LINK_TYPE_VXLAN, 1); test_software_detect_add ("/link/software/detect/wireguard/0", NM_LINK_TYPE_WIREGUARD, 0); |