Blame src/nm-test-utils-core.h

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