summary refs log tree commit diff
path: root/src/core/platform/tests/test-common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/platform/tests/test-common.h')
-rw-r--r--src/core/platform/tests/test-common.h190
1 files changed, 120 insertions, 70 deletions
diff --git a/src/core/platform/tests/test-common.h b/src/core/platform/tests/test-common.h
index da30b0ed..2802d8fd 100644
--- a/src/core/platform/tests/test-common.h
+++ b/src/core/platform/tests/test-common.h
@@ -18,8 +18,6 @@
 
 #include "nm-test-utils-core.h"
 
-#define DEVICE_NAME "nm-test-device"
-
 /*****************************************************************************/
 
 #define nmtstp_normalize_jiffies_time(requested_value, kernel_value)                             \
@@ -141,6 +139,13 @@ int nmtstp_run_command(const char *format, ...) _nm_printf(1, 2);
 
 /*****************************************************************************/
 
+gboolean
+nmtstp_check_platform_full(NMPlatform *platform, guint32 obj_type_flags, gboolean do_assert);
+
+void nmtstp_check_platform(NMPlatform *platform, guint32 obj_type_flags);
+
+/*****************************************************************************/
+
 guint                 nmtstp_wait_for_signal(NMPlatform *platform, gint64 timeout_msec);
 guint                 nmtstp_wait_for_signal_until(NMPlatform *platform, gint64 until_ms);
 const NMPlatformLink *nmtstp_wait_for_link(NMPlatform *platform,
@@ -261,7 +266,7 @@ void     nmtstp_ip_address_assert_lifetime(const NMPlatformIPAddress *addr,
                                            guint32                    expected_preferred);
 
 void nmtstp_ip4_address_add(NMPlatform *platform,
-                            gboolean    external_command,
+                            int         external_command,
                             int         ifindex,
                             in_addr_t   address,
                             int         plen,
@@ -271,7 +276,7 @@ void nmtstp_ip4_address_add(NMPlatform *platform,
                             guint32     flags,
                             const char *label);
 void nmtstp_ip6_address_add(NMPlatform     *platform,
-                            gboolean        external_command,
+                            int             external_command,
                             int             ifindex,
                             struct in6_addr address,
                             int             plen,
@@ -280,13 +285,13 @@ void nmtstp_ip6_address_add(NMPlatform     *platform,
                             guint32         preferred,
                             guint32         flags);
 void nmtstp_ip4_address_del(NMPlatform *platform,
-                            gboolean    external_command,
+                            int         external_command,
                             int         ifindex,
                             in_addr_t   address,
                             int         plen,
                             in_addr_t   peer_address);
 void nmtstp_ip6_address_del(NMPlatform     *platform,
-                            gboolean        external_command,
+                            int             external_command,
                             int             ifindex,
                             struct in6_addr address,
                             int             plen);
@@ -452,8 +457,7 @@ const NMPlatformLink *nmtstp_link_get(NMPlatform *platform, int ifindex, const c
 
 gboolean nmtstp_kernel_support_get(NMPlatformKernelSupportType type);
 
-void
-nmtstp_link_set_updown(NMPlatform *platform, gboolean external_command, int ifindex, gboolean up);
+void nmtstp_link_set_updown(NMPlatform *platform, int external_command, int ifindex, gboolean up);
 
 const NMPlatformLnkBridge *
 nmtstp_link_bridge_normalize_jiffies_time(const NMPlatformLnkBridge *requested,
@@ -461,61 +465,78 @@ nmtstp_link_bridge_normalize_jiffies_time(const NMPlatformLnkBridge *requested,
                                           NMPlatformLnkBridge       *dst);
 
 const NMPlatformLink *nmtstp_link_bridge_add(NMPlatform                *platform,
-                                             gboolean                   external_command,
+                                             int                        external_command,
                                              const char                *name,
                                              const NMPlatformLnkBridge *lnk);
 const NMPlatformLink *nmtstp_link_veth_add(NMPlatform *platform,
-                                           gboolean    external_command,
+                                           int         external_command,
                                            const char *name,
                                            const char *peer);
 const NMPlatformLink *
-nmtstp_link_dummy_add(NMPlatform *platform, gboolean external_command, const char *name);
+nmtstp_link_dummy_add(NMPlatform *platform, int external_command, const char *name);
 const NMPlatformLink *nmtstp_link_gre_add(NMPlatform             *platform,
-                                          gboolean                external_command,
+                                          int                     external_command,
                                           const char             *name,
                                           const NMPlatformLnkGre *lnk);
 const NMPlatformLink *nmtstp_link_ip6tnl_add(NMPlatform                *platform,
-                                             gboolean                   external_command,
+                                             int                        external_command,
                                              const char                *name,
                                              const NMPlatformLnkIp6Tnl *lnk);
 const NMPlatformLink *nmtstp_link_ip6gre_add(NMPlatform                *platform,
-                                             gboolean                   external_command,
+                                             int                        external_command,
                                              const char                *name,
                                              const NMPlatformLnkIp6Tnl *lnk);
 const NMPlatformLink *nmtstp_link_ipip_add(NMPlatform              *platform,
-                                           gboolean                 external_command,
+                                           int                      external_command,
                                            const char              *name,
                                            const NMPlatformLnkIpIp *lnk);
 const NMPlatformLink *nmtstp_link_macvlan_add(NMPlatform                 *platform,
-                                              gboolean                    external_command,
+                                              int                         external_command,
                                               const char                 *name,
                                               int                         parent,
                                               const NMPlatformLnkMacvlan *lnk);
 const NMPlatformLink *nmtstp_link_sit_add(NMPlatform             *platform,
-                                          gboolean                external_command,
+                                          int                     external_command,
                                           const char             *name,
                                           const NMPlatformLnkSit *lnk);
 const NMPlatformLink *nmtstp_link_tun_add(NMPlatform             *platform,
-                                          gboolean                external_command,
+                                          int                     external_command,
                                           const char             *name,
                                           const NMPlatformLnkTun *lnk,
                                           int                    *out_fd);
-const NMPlatformLink *nmtstp_link_vrf_add(NMPlatform             *platform,
+const NMPlatformLink *nmtstp_link_vlan_add(NMPlatform              *platform,
+                                           int                      external_command,
+                                           const char              *name,
+                                           int                      parent,
+                                           const NMPlatformLnkVlan *lnk);
+const NMPlatformLink *nmtstp_link_vti_add(NMPlatform             *platform,
                                           gboolean                external_command,
                                           const char             *name,
+                                          const NMPlatformLnkVti *lnk);
+const NMPlatformLink *nmtstp_link_vti6_add(NMPlatform              *platform,
+                                           gboolean                 external_command,
+                                           const char              *name,
+                                           const NMPlatformLnkVti6 *lnk);
+const NMPlatformLink *nmtstp_link_vrf_add(NMPlatform             *platform,
+                                          int                     external_command,
+                                          const char             *name,
                                           const NMPlatformLnkVrf *lnk,
                                           gboolean               *out_not_supported);
 const NMPlatformLink *nmtstp_link_vxlan_add(NMPlatform               *platform,
-                                            gboolean                  external_command,
+                                            int                       external_command,
                                             const char               *name,
                                             const NMPlatformLnkVxlan *lnk);
 
 void nmtstp_link_delete(NMPlatform *platform,
-                        gboolean    external_command,
+                        int         external_command,
                         int         ifindex,
                         const char *name,
                         gboolean    require_exist);
 
+gboolean nmtstp_link_is_iptunnel_special(const NMPlatformLink *link);
+
+gboolean nmtstp_ensure_module(const char *module_name);
+
 /*****************************************************************************/
 
 #define nmtst_object_new_mptcp_addr(...) \
@@ -523,36 +544,47 @@ void nmtstp_link_delete(NMPlatform *platform,
 
 /*****************************************************************************/
 
-extern int NMTSTP_ENV1_IFINDEX;
+extern int               NMTSTP_ENV1_IFINDEXES[2];
+extern const char *const NMTSTP_ENV1_DEVICE_NAME[G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES)];
+
+#define DEVICE_NAME         "nm-test-device0"
+#define NMTSTP_ENV1_IFINDEX (NMTSTP_ENV1_IFINDEXES[0])
+
 extern int NMTSTP_ENV1_EX;
 
 static inline void
 _nmtstp_env1_wrapper_setup(const NmtstTestData *test_data)
 {
-    int     *p_ifindex;
+    int     *p_ifindexes;
+    gpointer p_n_ifaces;
     gpointer p_ifup;
-
-    nmtst_test_data_unpack(test_data, &p_ifindex, NULL, NULL, NULL, &p_ifup);
-
-    g_assert(p_ifindex && *p_ifindex == -1);
+    int      n_ifaces;
+    int      i;
 
     _LOGT("TEST[%s]: setup", test_data->testpath);
 
-    nmtstp_link_delete(NM_PLATFORM_GET, -1, -1, DEVICE_NAME, FALSE);
+    nmtst_test_data_unpack(test_data, &p_ifindexes, &p_n_ifaces, NULL, NULL, NULL, &p_ifup);
 
-    g_assert(NMTST_NM_ERR_SUCCESS(nm_platform_link_dummy_add(NM_PLATFORM_GET, DEVICE_NAME, NULL)));
+    n_ifaces = GPOINTER_TO_UINT(p_n_ifaces);
+    g_assert_cmpint(n_ifaces, >=, 1);
+    g_assert_cmpint(n_ifaces, <=, (int) G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES));
 
-    *p_ifindex = nm_platform_link_get_ifindex(NM_PLATFORM_GET, DEVICE_NAME);
-    g_assert_cmpint(*p_ifindex, >, 0);
-    g_assert_cmpint(NMTSTP_ENV1_IFINDEX, ==, -1);
+    for (i = 0; i < (int) G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES); i++) {
+        g_assert_cmpint(NMTSTP_ENV1_IFINDEXES[i], ==, 0);
+        g_assert_cmpint(p_ifindexes[i], ==, 0);
+    }
 
-    if (GPOINTER_TO_INT(p_ifup))
-        g_assert(nm_platform_link_change_flags(NM_PLATFORM_GET, *p_ifindex, IFF_UP, TRUE) >= 0);
+    for (i = 0; i < n_ifaces; i++) {
+        p_ifindexes[i] = nmtstp_link_dummy_add(NULL, -1, NMTSTP_ENV1_DEVICE_NAME[i])->ifindex;
+        if (GPOINTER_TO_INT(p_ifup))
+            nmtstp_link_set_updown(NULL, -1, p_ifindexes[i], TRUE);
+    }
 
     nm_platform_process_events(NM_PLATFORM_GET);
 
-    NMTSTP_ENV1_IFINDEX = *p_ifindex;
-    NMTSTP_ENV1_EX      = nmtstp_run_command_check_external_global();
+    for (i = 0; i < n_ifaces; i++)
+        NMTSTP_ENV1_IFINDEXES[i] = p_ifindexes[i];
+    NMTSTP_ENV1_EX = nmtstp_run_command_check_external_global();
 }
 
 static inline void
@@ -563,7 +595,7 @@ _nmtstp_env1_wrapper_run(gconstpointer user_data)
     GTestFunc            test_func;
     gconstpointer        d;
 
-    nmtst_test_data_unpack(test_data, NULL, &test_func, &test_func_data, &d, NULL);
+    nmtst_test_data_unpack(test_data, NULL, NULL, &test_func, &test_func_data, &d, NULL);
 
     _LOGT("TEST[%s]: run", test_data->testpath);
     if (test_func)
@@ -575,55 +607,73 @@ _nmtstp_env1_wrapper_run(gconstpointer user_data)
 static inline void
 _nmtstp_env1_wrapper_teardown(const NmtstTestData *test_data)
 {
-    int *p_ifindex;
+    int     *p_ifindexes;
+    gpointer p_n_ifaces;
+    int      n_ifaces;
+    int      i;
 
-    nmtst_test_data_unpack(test_data, &p_ifindex, NULL, NULL, NULL, NULL);
+    _LOGT("TEST[%s]: teardown", test_data->testpath);
 
-    g_assert_cmpint(NMTSTP_ENV1_IFINDEX, ==, *p_ifindex);
-    NMTSTP_ENV1_IFINDEX = -1;
+    nmtst_test_data_unpack(test_data, &p_ifindexes, &p_n_ifaces, NULL, NULL, NULL, NULL);
 
-    _LOGT("TEST[%s]: teardown", test_data->testpath);
+    n_ifaces = GPOINTER_TO_UINT(p_n_ifaces);
+    g_assert_cmpint(n_ifaces, >=, 1);
+    g_assert_cmpint(n_ifaces, <=, (int) G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES));
+
+    for (i = 0; i < (int) G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES); i++) {
+        if (i < n_ifaces)
+            g_assert_cmpint(p_ifindexes[i], >, 0);
+        else
+            g_assert_cmpint(p_ifindexes[i], ==, 0);
+        g_assert_cmpint(NMTSTP_ENV1_IFINDEXES[i], ==, p_ifindexes[i]);
+        NMTSTP_ENV1_IFINDEXES[i] = 0;
+    }
 
-    g_assert_cmpint(*p_ifindex, ==, nm_platform_link_get_ifindex(NM_PLATFORM_GET, DEVICE_NAME));
-    g_assert(nm_platform_link_delete(NM_PLATFORM_GET, *p_ifindex));
+    for (i = 0; i < n_ifaces; i++)
+        nmtstp_link_delete(NULL, -1, p_ifindexes[i], NMTSTP_ENV1_DEVICE_NAME[i], TRUE);
 
     nm_platform_process_events(NM_PLATFORM_GET);
 
     _LOGT("TEST[%s]: finished", test_data->testpath);
 
-    *p_ifindex = -1;
+    for (i = 0; i < (int) G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES); i++)
+        p_ifindexes[i] = 0;
 }
 
 /* add test function, that set's up a particular environment, consisting
  * of a dummy device with ifindex NMTSTP_ENV1_IFINDEX. */
-#define _nmtstp_env1_add_test_func_full(testpath, test_func, test_data_func, arg, ifup) \
-    nmtst_add_test_func_full(testpath,                                                  \
-                             _nmtstp_env1_wrapper_run,                                  \
-                             _nmtstp_env1_wrapper_setup,                                \
-                             _nmtstp_env1_wrapper_teardown,                             \
-                             ({                                                         \
-                                 static int _ifindex = -1;                              \
-                                 &_ifindex;                                             \
-                             }),                                                        \
-                             ({                                                         \
-                                 GTestFunc _test_func = (test_func);                    \
-                                 _test_func;                                            \
-                             }),                                                        \
-                             ({                                                         \
-                                 GTestDataFunc _test_func = (test_data_func);           \
-                                 _test_func;                                            \
-                             }),                                                        \
-                             (arg),                                                     \
-                             ({                                                         \
-                                 gboolean _ifup = (ifup);                               \
-                                 GINT_TO_POINTER(_ifup);                                \
+#define _nmtstp_env1_add_test_func_full(testpath, test_func, test_data_func, arg, n_ifaces, ifup)  \
+    nmtst_add_test_func_full(testpath,                                                             \
+                             _nmtstp_env1_wrapper_run,                                             \
+                             _nmtstp_env1_wrapper_setup,                                           \
+                             _nmtstp_env1_wrapper_teardown,                                        \
+                             ({                                                                    \
+                                 static int _ifindexes[G_N_ELEMENTS(NMTSTP_ENV1_IFINDEXES)] = {0}; \
+                                 _ifindexes;                                                       \
+                             }),                                                                   \
+                             ({                                                                    \
+                                 guint _n_ifaces = (n_ifaces);                                     \
+                                 GUINT_TO_POINTER(_n_ifaces);                                      \
+                             }),                                                                   \
+                             ({                                                                    \
+                                 GTestFunc _test_func = (test_func);                               \
+                                 _test_func;                                                       \
+                             }),                                                                   \
+                             ({                                                                    \
+                                 GTestDataFunc _test_func = (test_data_func);                      \
+                                 _test_func;                                                       \
+                             }),                                                                   \
+                             (arg),                                                                \
+                             ({                                                                    \
+                                 gboolean _ifup = (ifup);                                          \
+                                 GINT_TO_POINTER(!!_ifup);                                         \
                              }))
 
-#define nmtstp_env1_add_test_func_data(testpath, test_func, arg, ifup) \
-    _nmtstp_env1_add_test_func_full(testpath, NULL, test_func, arg, ifup)
+#define nmtstp_env1_add_test_func_data(testpath, test_func, arg, n_ifaces, ifup) \
+    _nmtstp_env1_add_test_func_full(testpath, NULL, test_func, arg, n_ifaces, ifup)
 
-#define nmtstp_env1_add_test_func(testpath, test_func, ifup) \
-    _nmtstp_env1_add_test_func_full(testpath, test_func, NULL, NULL, ifup)
+#define nmtstp_env1_add_test_func(testpath, test_func, n_ifaces, ifup) \
+    _nmtstp_env1_add_test_func_full(testpath, test_func, NULL, NULL, n_ifaces, ifup)
 
 /*****************************************************************************/