summary refs log tree commit diff
path: root/src/core/nm-test-utils-core.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/nm-test-utils-core.h')
-rw-r--r--src/core/nm-test-utils-core.h376
1 files changed, 376 insertions, 0 deletions
diff --git a/src/core/nm-test-utils-core.h b/src/core/nm-test-utils-core.h
new file mode 100644
index 00000000..e655ce22
--- /dev/null
+++ b/src/core/nm-test-utils-core.h
@@ -0,0 +1,376 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2014 - 2016 Red Hat, Inc.
+ */
+
+#ifndef __NM_TEST_UTILS_CORE_H__
+#define __NM_TEST_UTILS_CORE_H__
+
+#include "NetworkManagerUtils.h"
+#include "nm-keyfile-internal.h"
+
+#define _NMTST_INSIDE_CORE 1
+
+#include "nm-utils/nm-test-utils.h"
+
+/*****************************************************************************/
+
+#define NMTST_EXPECT_NM(level, msg) NMTST_EXPECT("NetworkManager", level, msg)
+
+#define NMTST_EXPECT_NM_ERROR(msg) NMTST_EXPECT_NM(G_LOG_LEVEL_MESSAGE, "*<error> [*] " msg)
+#define NMTST_EXPECT_NM_WARN(msg)  NMTST_EXPECT_NM(G_LOG_LEVEL_MESSAGE, "*<warn>  [*] " msg)
+#define NMTST_EXPECT_NM_INFO(msg)  NMTST_EXPECT_NM(G_LOG_LEVEL_INFO, "*<info>  [*] " msg)
+#define NMTST_EXPECT_NM_DEBUG(msg) NMTST_EXPECT_NM(G_LOG_LEVEL_DEBUG, "*<debug> [*] " msg)
+#define NMTST_EXPECT_NM_TRACE(msg) NMTST_EXPECT_NM(G_LOG_LEVEL_DEBUG, "*<trace> [*] " msg)
+
+static inline void
+nmtst_init_with_logging(int *argc, char ***argv, const char *log_level, const char *log_domains)
+{
+    __nmtst_init(argc, argv, FALSE, log_level, log_domains, NULL);
+}
+static inline void
+nmtst_init_assert_logging(int *argc, char ***argv, const char *log_level, const char *log_domains)
+{
+    gboolean set_logging;
+
+    __nmtst_init(argc, argv, TRUE, NULL, NULL, &set_logging);
+
+    if (!set_logging) {
+        gboolean success;
+
+        success = nm_logging_setup(log_level, log_domains, NULL, NULL);
+        g_assert(success);
+    }
+}
+
+/*****************************************************************************/
+
+#ifdef __NETWORKMANAGER_PLATFORM_H__
+
+static inline NMPlatformIP4Address *
+nmtst_platform_ip4_address(const char *address, const char *peer_address, guint plen)
+{
+    static NMPlatformIP4Address addr;
+
+    g_assert(plen <= 32);
+
+    memset(&addr, 0, sizeof(addr));
+    addr.address = nmtst_inet4_from_string(address);
+    if (peer_address)
+        addr.peer_address = nmtst_inet4_from_string(peer_address);
+    else
+        addr.peer_address = addr.address;
+    addr.plen = plen;
+
+    return &addr;
+}
+
+static inline NMPlatformIP4Address *
+nmtst_platform_ip4_address_full(const char *     address,
+                                const char *     peer_address,
+                                guint            plen,
+                                int              ifindex,
+                                NMIPConfigSource source,
+                                guint32          timestamp,
+                                guint32          lifetime,
+                                guint32          preferred,
+                                guint32          flags,
+                                const char *     label)
+{
+    NMPlatformIP4Address *addr = nmtst_platform_ip4_address(address, peer_address, plen);
+
+    G_STATIC_ASSERT(NMP_IFNAMSIZ == sizeof(addr->label));
+    g_assert(!label || strlen(label) < NMP_IFNAMSIZ);
+
+    addr->ifindex     = ifindex;
+    addr->addr_source = source;
+    addr->timestamp   = timestamp;
+    addr->lifetime    = lifetime;
+    addr->preferred   = preferred;
+    addr->n_ifa_flags = flags;
+    if (label)
+        g_strlcpy(addr->label, label, sizeof(addr->label));
+
+    return addr;
+}
+
+static inline NMPlatformIP6Address *
+nmtst_platform_ip6_address(const char *address, const char *peer_address, guint plen)
+{
+    static NMPlatformIP6Address addr;
+
+    g_assert(plen <= 128);
+
+    memset(&addr, 0, sizeof(addr));
+    addr.address      = *nmtst_inet6_from_string(address);
+    addr.peer_address = *nmtst_inet6_from_string(peer_address);
+    addr.plen         = plen;
+
+    return &addr;
+}
+
+static inline NMPlatformIP6Address *
+nmtst_platform_ip6_address_full(const char *     address,
+                                const char *     peer_address,
+                                guint            plen,
+                                int              ifindex,
+                                NMIPConfigSource source,
+                                guint32          timestamp,
+                                guint32          lifetime,
+                                guint32          preferred,
+                                guint32          flags)
+{
+    NMPlatformIP6Address *addr = nmtst_platform_ip6_address(address, peer_address, plen);
+
+    addr->ifindex     = ifindex;
+    addr->addr_source = source;
+    addr->timestamp   = timestamp;
+    addr->lifetime    = lifetime;
+    addr->preferred   = preferred;
+    addr->n_ifa_flags = flags;
+
+    return addr;
+}
+
+static inline NMPlatformIP4Route *
+nmtst_platform_ip4_route(const char *network, guint plen, const char *gateway)
+{
+    static NMPlatformIP4Route route;
+
+    g_assert(plen <= 32);
+
+    memset(&route, 0, sizeof(route));
+    route.network = nmtst_inet4_from_string(network);
+    route.plen    = plen;
+    route.gateway = nmtst_inet4_from_string(gateway);
+
+    return &route;
+}
+
+static inline NMPlatformIP4Route *
+nmtst_platform_ip4_route_full(const char *     network,
+                              guint            plen,
+                              const char *     gateway,
+                              int              ifindex,
+                              NMIPConfigSource source,
+                              guint            metric,
+                              guint            mss,
+                              guint8           scope,
+                              const char *     pref_src)
+{
+    NMPlatformIP4Route *route = nmtst_platform_ip4_route(network, plen, gateway);
+
+    route->ifindex   = ifindex;
+    route->rt_source = source;
+    route->metric    = metric;
+    route->mss       = mss;
+    route->scope_inv = nm_platform_route_scope_inv(scope);
+    route->pref_src  = nmtst_inet4_from_string(pref_src);
+
+    return route;
+}
+
+static inline NMPlatformIP6Route *
+nmtst_platform_ip6_route(const char *network, guint plen, const char *gateway, const char *pref_src)
+{
+    static NMPlatformIP6Route route;
+
+    nm_assert(plen <= 128);
+
+    memset(&route, 0, sizeof(route));
+    route.network  = *nmtst_inet6_from_string(network);
+    route.plen     = plen;
+    route.gateway  = *nmtst_inet6_from_string(gateway);
+    route.pref_src = *nmtst_inet6_from_string(pref_src);
+
+    return &route;
+}
+
+static inline NMPlatformIP6Route *
+nmtst_platform_ip6_route_full(const char *     network,
+                              guint            plen,
+                              const char *     gateway,
+                              int              ifindex,
+                              NMIPConfigSource source,
+                              guint            metric,
+                              guint            mss)
+{
+    NMPlatformIP6Route *route = nmtst_platform_ip6_route(network, plen, gateway, NULL);
+
+    route->ifindex   = ifindex;
+    route->rt_source = source;
+    route->metric    = metric;
+    route->mss       = mss;
+
+    return route;
+}
+
+static inline int
+_nmtst_platform_ip4_routes_equal_sort(gconstpointer a, gconstpointer b, gpointer user_data)
+{
+    return nm_platform_ip4_route_cmp_full((const NMPlatformIP4Route *) a,
+                                          (const NMPlatformIP4Route *) b);
+}
+
+static inline void
+nmtst_platform_ip4_routes_equal(const NMPlatformIP4Route *a,
+                                const NMPlatformIP4Route *b,
+                                gsize                     len,
+                                gboolean                  ignore_order)
+{
+    gsize         i;
+    gs_free const NMPlatformIP4Route *c_a = NULL, *c_b = NULL;
+
+    g_assert(a);
+    g_assert(b);
+
+    if (ignore_order) {
+        a = c_a = nm_memdup(a, sizeof(NMPlatformIP4Route) * len);
+        b = c_b = nm_memdup(b, sizeof(NMPlatformIP4Route) * len);
+        g_qsort_with_data(c_a,
+                          len,
+                          sizeof(NMPlatformIP4Route),
+                          _nmtst_platform_ip4_routes_equal_sort,
+                          NULL);
+        g_qsort_with_data(c_b,
+                          len,
+                          sizeof(NMPlatformIP4Route),
+                          _nmtst_platform_ip4_routes_equal_sort,
+                          NULL);
+    }
+
+    for (i = 0; i < len; i++) {
+        if (nm_platform_ip4_route_cmp_full(&a[i], &b[i]) != 0) {
+            char buf[sizeof(_nm_utils_to_string_buffer)];
+
+            g_error("Error comparing IPv4 route[%lu]: %s vs %s",
+                    (unsigned long) i,
+                    nm_platform_ip4_route_to_string(&a[i], NULL, 0),
+                    nm_platform_ip4_route_to_string(&b[i], buf, sizeof(buf)));
+            g_assert_not_reached();
+        }
+    }
+}
+
+    #ifdef __NMP_OBJECT_H__
+
+static inline void
+nmtst_platform_ip4_routes_equal_aptr(const NMPObject *const *  a,
+                                     const NMPlatformIP4Route *b,
+                                     gsize                     len,
+                                     gboolean                  ignore_order)
+{
+    gsize   i;
+    gs_free NMPlatformIP4Route *c_a = NULL;
+
+    g_assert(len > 0);
+    g_assert(a);
+
+    c_a = g_new(NMPlatformIP4Route, len);
+    for (i = 0; i < len; i++)
+        c_a[i] = *NMP_OBJECT_CAST_IP4_ROUTE(a[i]);
+    nmtst_platform_ip4_routes_equal(c_a, b, len, ignore_order);
+}
+
+    #endif
+
+static inline int
+_nmtst_platform_ip6_routes_equal_sort(gconstpointer a, gconstpointer b, gpointer user_data)
+{
+    return nm_platform_ip6_route_cmp_full((const NMPlatformIP6Route *) a,
+                                          (const NMPlatformIP6Route *) b);
+}
+
+static inline void
+nmtst_platform_ip6_routes_equal(const NMPlatformIP6Route *a,
+                                const NMPlatformIP6Route *b,
+                                gsize                     len,
+                                gboolean                  ignore_order)
+{
+    gsize         i;
+    gs_free const NMPlatformIP6Route *c_a = NULL, *c_b = NULL;
+
+    g_assert(a);
+    g_assert(b);
+
+    if (ignore_order) {
+        a = c_a = nm_memdup(a, sizeof(NMPlatformIP6Route) * len);
+        b = c_b = nm_memdup(b, sizeof(NMPlatformIP6Route) * len);
+        g_qsort_with_data(c_a,
+                          len,
+                          sizeof(NMPlatformIP6Route),
+                          _nmtst_platform_ip6_routes_equal_sort,
+                          NULL);
+        g_qsort_with_data(c_b,
+                          len,
+                          sizeof(NMPlatformIP6Route),
+                          _nmtst_platform_ip6_routes_equal_sort,
+                          NULL);
+    }
+
+    for (i = 0; i < len; i++) {
+        if (nm_platform_ip6_route_cmp_full(&a[i], &b[i]) != 0) {
+            char buf[sizeof(_nm_utils_to_string_buffer)];
+
+            g_error("Error comparing IPv6 route[%lu]: %s vs %s",
+                    (unsigned long) i,
+                    nm_platform_ip6_route_to_string(&a[i], NULL, 0),
+                    nm_platform_ip6_route_to_string(&b[i], buf, sizeof(buf)));
+            g_assert_not_reached();
+        }
+    }
+}
+
+    #ifdef __NMP_OBJECT_H__
+
+static inline void
+nmtst_platform_ip6_routes_equal_aptr(const NMPObject *const *  a,
+                                     const NMPlatformIP6Route *b,
+                                     gsize                     len,
+                                     gboolean                  ignore_order)
+{
+    gsize   i;
+    gs_free NMPlatformIP6Route *c_a = NULL;
+
+    g_assert(len > 0);
+    g_assert(a);
+
+    c_a = g_new(NMPlatformIP6Route, len);
+    for (i = 0; i < len; i++)
+        c_a[i] = *NMP_OBJECT_CAST_IP6_ROUTE(a[i]);
+    nmtst_platform_ip6_routes_equal(c_a, b, len, ignore_order);
+}
+
+    #endif
+
+#endif
+
+#ifdef __NETWORKMANAGER_IP4_CONFIG_H__
+
+    #include "nm-glib-aux/nm-dedup-multi.h"
+
+static inline NMIP4Config *
+nmtst_ip4_config_new(int ifindex)
+{
+    nm_auto_unref_dedup_multi_index NMDedupMultiIndex *multi_idx = nm_dedup_multi_index_new();
+
+    return nm_ip4_config_new(multi_idx, ifindex);
+}
+
+#endif
+
+#ifdef __NETWORKMANAGER_IP6_CONFIG_H__
+
+    #include "nm-glib-aux/nm-dedup-multi.h"
+
+static inline NMIP6Config *
+nmtst_ip6_config_new(int ifindex)
+{
+    nm_auto_unref_dedup_multi_index NMDedupMultiIndex *multi_idx = nm_dedup_multi_index_new();
+
+    return nm_ip6_config_new(multi_idx, ifindex);
+}
+
+#endif
+
+#endif /* __NM_TEST_UTILS_CORE_H__ */