Blame src/core/platform/tests/test-cleanup.c

Packit Service 5ffa24
/* SPDX-License-Identifier: GPL-2.0-or-later */
Packit Service 5ffa24
/*
Packit Service 5ffa24
 * Copyright (C) 2016 Red Hat, Inc.
Packit Service 5ffa24
 */
Packit Service 5ffa24
Packit Service 2bceb2
#include "src/core/nm-default-daemon.h"
Packit Service 5ffa24
Packit Service 5ffa24
#include "test-common.h"
Packit Service 5ffa24
Packit Service 5ffa24
static void
Packit Service 5ffa24
test_cleanup_internal(void)
Packit Service 5ffa24
{
Packit Service 5ffa24
    SignalData *    link_added = add_signal_ifname(NM_PLATFORM_SIGNAL_LINK_CHANGED,
Packit Service 5ffa24
                                               NM_PLATFORM_SIGNAL_ADDED,
Packit Service 5ffa24
                                               link_callback,
Packit Service 5ffa24
                                               DEVICE_NAME);
Packit Service 5ffa24
    int             ifindex;
Packit Service 5ffa24
    GArray *        addresses4;
Packit Service 5ffa24
    GArray *        addresses6;
Packit Service 5ffa24
    GPtrArray *     routes4;
Packit Service 5ffa24
    GPtrArray *     routes6;
Packit Service 5ffa24
    in_addr_t       addr4;
Packit Service 5ffa24
    in_addr_t       network4;
Packit Service 5ffa24
    int             plen4 = 24;
Packit Service 5ffa24
    in_addr_t       gateway4;
Packit Service 5ffa24
    struct in6_addr addr6;
Packit Service 5ffa24
    struct in6_addr network6;
Packit Service 5ffa24
    int             plen6 = 64;
Packit Service 5ffa24
    struct in6_addr gateway6;
Packit Service 5ffa24
    int             lifetime  = NM_PLATFORM_LIFETIME_PERMANENT;
Packit Service 5ffa24
    int             preferred = NM_PLATFORM_LIFETIME_PERMANENT;
Packit Service 5ffa24
    int             metric    = 20;
Packit Service 5ffa24
    int             mss       = 1000;
Packit Service 5ffa24
    guint32         flags     = 0;
Packit Service 5ffa24
Packit Service 5ffa24
    inet_pton(AF_INET, "192.0.2.1", &addr4);
Packit Service 5ffa24
    inet_pton(AF_INET, "192.0.3.0", &network4);
Packit Service 5ffa24
    inet_pton(AF_INET, "198.51.100.1", &gateway4);
Packit Service 5ffa24
    inet_pton(AF_INET6, "2001:db8:a:b:1:2:3:4", &addr6);
Packit Service 5ffa24
    inet_pton(AF_INET6, "2001:db8:c:d:0:0:0:0", &network6);
Packit Service 5ffa24
    inet_pton(AF_INET6, "2001:db8:e:f:1:2:3:4", &gateway6);
Packit Service 5ffa24
Packit Service 5ffa24
    /* Create and set up device */
Packit Service 5ffa24
    g_assert(NMTST_NM_ERR_SUCCESS(nm_platform_link_dummy_add(NM_PLATFORM_GET, DEVICE_NAME, NULL)));
Packit Service 5ffa24
    accept_signal(link_added);
Packit Service 5ffa24
    free_signal(link_added);
Packit Bot c44df3
    g_assert(
Packit Bot c44df3
        nm_platform_link_change_flags(NM_PLATFORM_GET,
Packit Bot c44df3
                                      nm_platform_link_get_ifindex(NM_PLATFORM_GET, DEVICE_NAME),
Packit Bot c44df3
                                      IFF_UP,
Packit Bot c44df3
                                      TRUE)
Packit Bot c44df3
        >= 0);
Packit Service 5ffa24
    ifindex = nm_platform_link_get_ifindex(NM_PLATFORM_GET, DEVICE_NAME);
Packit Service 5ffa24
    g_assert(ifindex > 0);
Packit Service 5ffa24
Packit Service 5ffa24
    /* wait for kernel to add the IPv6 link local address... it takes a bit. */
Packit Service 5ffa24
    NMTST_WAIT_ASSERT(300, {
Packit Service 5ffa24
        gs_unref_array GArray *     addrs = NULL;
Packit Service 5ffa24
        const NMPlatformIP6Address *a;
Packit Service 5ffa24
Packit Service 5ffa24
        if (nmtst_wait_iteration > 0) {
Packit Service 5ffa24
            nmtstp_wait_for_signal(NM_PLATFORM_GET, nmtst_wait_remaining_us / 1000);
Packit Service 5ffa24
            nm_platform_process_events(NM_PLATFORM_GET);
Packit Service 5ffa24
        }
Packit Service 5ffa24
        addrs = nmtstp_platform_ip6_address_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
        if (addrs->len == 1 && (a = &g_array_index(addrs, NMPlatformIP6Address, 0))
Packit Service 5ffa24
            && IN6_IS_ADDR_LINKLOCAL(&a->address))
Packit Service 5ffa24
            break;
Packit Service 5ffa24
    });
Packit Service 5ffa24
Packit Service 5ffa24
    g_assert(nm_platform_ip4_address_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                                         ifindex,
Packit Service 5ffa24
                                         addr4,
Packit Service 5ffa24
                                         plen4,
Packit Service 5ffa24
                                         addr4,
Packit Service 5ffa24
                                         nm_platform_ip4_broadcast_address_create(addr4, plen4),
Packit Service 5ffa24
                                         lifetime,
Packit Service 5ffa24
                                         preferred,
Packit Service 5ffa24
                                         0,
Packit Service 5ffa24
                                         NULL));
Packit Service 5ffa24
    g_assert(nm_platform_ip6_address_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                                         ifindex,
Packit Service 5ffa24
                                         addr6,
Packit Service 5ffa24
                                         plen6,
Packit Service 5ffa24
                                         in6addr_any,
Packit Service 5ffa24
                                         lifetime,
Packit Service 5ffa24
                                         preferred,
Packit Service 5ffa24
                                         flags));
Packit Service 5ffa24
    nmtstp_ip4_route_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                         ifindex,
Packit Service 5ffa24
                         NM_IP_CONFIG_SOURCE_USER,
Packit Service 5ffa24
                         gateway4,
Packit Service 5ffa24
                         32,
Packit Service 5ffa24
                         INADDR_ANY,
Packit Service 5ffa24
                         0,
Packit Service 5ffa24
                         metric,
Packit Service 5ffa24
                         mss);
Packit Service 5ffa24
    nmtstp_ip4_route_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                         ifindex,
Packit Service 5ffa24
                         NM_IP_CONFIG_SOURCE_USER,
Packit Service 5ffa24
                         network4,
Packit Service 5ffa24
                         plen4,
Packit Service 5ffa24
                         gateway4,
Packit Service 5ffa24
                         0,
Packit Service 5ffa24
                         metric,
Packit Service 5ffa24
                         mss);
Packit Service 5ffa24
    nmtstp_ip4_route_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                         ifindex,
Packit Service 5ffa24
                         NM_IP_CONFIG_SOURCE_USER,
Packit Service 5ffa24
                         0,
Packit Service 5ffa24
                         0,
Packit Service 5ffa24
                         gateway4,
Packit Service 5ffa24
                         0,
Packit Service 5ffa24
                         metric,
Packit Service 5ffa24
                         mss);
Packit Service 5ffa24
    nmtstp_ip6_route_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                         ifindex,
Packit Service 5ffa24
                         NM_IP_CONFIG_SOURCE_USER,
Packit Service 5ffa24
                         gateway6,
Packit Service 5ffa24
                         128,
Packit Service 5ffa24
                         in6addr_any,
Packit Service 5ffa24
                         in6addr_any,
Packit Service 5ffa24
                         metric,
Packit Service 5ffa24
                         mss);
Packit Service 5ffa24
    nmtstp_ip6_route_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                         ifindex,
Packit Service 5ffa24
                         NM_IP_CONFIG_SOURCE_USER,
Packit Service 5ffa24
                         network6,
Packit Service 5ffa24
                         plen6,
Packit Service 5ffa24
                         gateway6,
Packit Service 5ffa24
                         in6addr_any,
Packit Service 5ffa24
                         metric,
Packit Service 5ffa24
                         mss);
Packit Service 5ffa24
    nmtstp_ip6_route_add(NM_PLATFORM_GET,
Packit Service 5ffa24
                         ifindex,
Packit Service 5ffa24
                         NM_IP_CONFIG_SOURCE_USER,
Packit Service 5ffa24
                         in6addr_any,
Packit Service 5ffa24
                         0,
Packit Service 5ffa24
                         gateway6,
Packit Service 5ffa24
                         in6addr_any,
Packit Service 5ffa24
                         metric,
Packit Service 5ffa24
                         mss);
Packit Service 5ffa24
Packit Service 5ffa24
    addresses4 = nmtstp_platform_ip4_address_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
    addresses6 = nmtstp_platform_ip6_address_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
    routes4    = nmtstp_ip4_route_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
    routes6    = nmtstp_ip6_route_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
Packit Service 5ffa24
    g_assert_cmpint(addresses4->len, ==, 1);
Packit Service 5ffa24
    g_assert_cmpint(addresses6->len, ==, 2); /* also has a IPv6 LL address. */
Packit Service 5ffa24
    g_assert_cmpint(routes4->len, ==, 3);
Packit Service 5ffa24
    g_assert_cmpint(routes6->len, ==, 3);
Packit Service 5ffa24
Packit Service 5ffa24
    g_array_unref(addresses4);
Packit Service 5ffa24
    g_array_unref(addresses6);
Packit Service 5ffa24
    g_ptr_array_unref(routes4);
Packit Service 5ffa24
    g_ptr_array_unref(routes6);
Packit Service 5ffa24
Packit Service 5ffa24
    /* Delete interface with all addresses and routes */
Packit Service 5ffa24
    g_assert(nm_platform_link_delete(NM_PLATFORM_GET, ifindex));
Packit Service 5ffa24
Packit Service 5ffa24
    addresses4 = nmtstp_platform_ip4_address_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
    addresses6 = nmtstp_platform_ip6_address_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
    routes4    = nmtstp_ip4_route_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
    routes6    = nmtstp_ip6_route_get_all(NM_PLATFORM_GET, ifindex);
Packit Service 5ffa24
Packit Service 5ffa24
    g_assert_cmpint(addresses4->len, ==, 0);
Packit Service 5ffa24
    g_assert_cmpint(addresses6->len, ==, 0);
Packit Service 5ffa24
    g_assert(!routes4);
Packit Service 5ffa24
    g_assert(!routes6);
Packit Service 5ffa24
Packit Service 5ffa24
    g_array_unref(addresses4);
Packit Service 5ffa24
    g_array_unref(addresses6);
Packit Service 5ffa24
}
Packit Service 5ffa24
Packit Service 5ffa24
NMTstpSetupFunc const _nmtstp_setup_platform_func = SETUP;
Packit Service 5ffa24
Packit Service 5ffa24
void
Packit Service 5ffa24
_nmtstp_init_tests(int *argc, char ***argv)
Packit Service 5ffa24
{
Packit Service 5ffa24
    nmtst_init_with_logging(argc, argv, NULL, "ALL");
Packit Service 5ffa24
}
Packit Service 5ffa24
Packit Service 5ffa24
void
Packit Service 5ffa24
_nmtstp_setup_tests(void)
Packit Service 5ffa24
{
Packit Service 5ffa24
    nmtstp_link_delete(NM_PLATFORM_GET, -1, -1, DEVICE_NAME, FALSE);
Packit Service 5ffa24
Packit Service 5ffa24
    g_test_add_func("/internal", test_cleanup_internal);
Packit Service 5ffa24
    /* FIXME: add external cleanup check */
Packit Service 5ffa24
}