Blame src/settings/plugins/ifupdown/tests/test-ifupdown.c

Packit Service a1bd4f
/* SPDX-License-Identifier: GPL-2.0+ */
Packit 5756e2
/*
Packit 5756e2
 * Copyright (C) 2010 Red Hat, Inc.
Packit 5756e2
 */
Packit 5756e2
Packit 5756e2
#include "nm-default.h"
Packit 5756e2
Packit 5756e2
#include "nm-core-internal.h"
Packit 5756e2
Packit 5756e2
#include "settings/plugins/ifupdown/nms-ifupdown-interface-parser.h"
Packit 5756e2
#include "settings/plugins/ifupdown/nms-ifupdown-parser.h"
Packit 5756e2
Packit 5756e2
#include "nm-test-utils-core.h"
Packit 5756e2
Packit Service a1bd4f
#define TEST_DIR NM_BUILD_SRCDIR "/src/settings/plugins/ifupdown/tests"
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit Service a1bd4f
#define _connection_from_if_block(block)                                      \
Packit Service a1bd4f
    ({                                                                        \
Packit Service a1bd4f
        NMConnection *_con;                                                   \
Packit Service a1bd4f
        if_block *    _block = (block);                                       \
Packit Service a1bd4f
        GError *      _local = NULL;                                          \
Packit Service a1bd4f
                                                                              \
Packit Service a1bd4f
        g_assert(_block);                                                     \
Packit Service a1bd4f
        _con = ifupdown_new_connection_from_if_block(_block, FALSE, &_local); \
Packit Service a1bd4f
        nmtst_assert_success(NM_IS_CONNECTION(_con), _local);                 \
Packit Service a1bd4f
        nmtst_assert_connection_verifies_without_normalization(_con);         \
Packit Service a1bd4f
        _con;                                                                 \
Packit Service a1bd4f
    })
Packit Service a1bd4f
Packit Service a1bd4f
#define _connection_first_from_parser(parser)                  \
Packit Service a1bd4f
    ({                                                         \
Packit Service a1bd4f
        if_parser *_parser = (parser);                         \
Packit Service a1bd4f
                                                               \
Packit Service a1bd4f
        g_assert(_parser);                                     \
Packit Service a1bd4f
        _connection_from_if_block(ifparser_getfirst(_parser)); \
Packit Service a1bd4f
    })
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
typedef struct {
Packit Service a1bd4f
    char *key;
Packit Service a1bd4f
    char *data;
Packit 5756e2
} ExpectedKey;
Packit 5756e2
Packit 5756e2
typedef struct {
Packit Service a1bd4f
    char *  type;
Packit Service a1bd4f
    char *  name;
Packit Service a1bd4f
    GSList *keys;
Packit 5756e2
} ExpectedBlock;
Packit 5756e2
Packit 5756e2
typedef struct {
Packit Service a1bd4f
    GSList *blocks;
Packit 5756e2
} Expected;
Packit 5756e2
Packit 5756e2
static ExpectedKey *
Packit Service a1bd4f
expected_key_new(const char *key, const char *data)
Packit 5756e2
{
Packit Service a1bd4f
    ExpectedKey *k;
Packit 5756e2
Packit Service a1bd4f
    k       = g_malloc0(sizeof(ExpectedKey));
Packit Service a1bd4f
    k->key  = g_strdup(key);
Packit Service a1bd4f
    k->data = g_strdup(data);
Packit Service a1bd4f
    return k;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
expected_key_free(gpointer ptr)
Packit 5756e2
{
Packit Service a1bd4f
    ExpectedKey *k = ptr;
Packit 5756e2
Packit Service a1bd4f
    g_assert(k);
Packit Service a1bd4f
    g_free(k->key);
Packit Service a1bd4f
    g_free(k->data);
Packit Service a1bd4f
    memset(k, 0, sizeof(ExpectedKey));
Packit Service a1bd4f
    g_free(k);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static ExpectedBlock *
Packit Service a1bd4f
expected_block_new(const char *type, const char *name)
Packit 5756e2
{
Packit Service a1bd4f
    ExpectedBlock *b;
Packit 5756e2
Packit Service a1bd4f
    g_assert(type);
Packit Service a1bd4f
    g_assert(name);
Packit Service a1bd4f
    b = g_malloc0(sizeof(ExpectedBlock));
Packit Service a1bd4f
    g_assert(b);
Packit Service a1bd4f
    b->type = g_strdup(type);
Packit Service a1bd4f
    b->name = g_strdup(name);
Packit Service a1bd4f
    return b;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
expected_block_free(gpointer ptr)
Packit 5756e2
{
Packit Service a1bd4f
    ExpectedBlock *b = ptr;
Packit 5756e2
Packit Service a1bd4f
    g_assert(b);
Packit Service a1bd4f
    g_slist_free_full(b->keys, expected_key_free);
Packit Service a1bd4f
    g_free(b->type);
Packit Service a1bd4f
    g_free(b->name);
Packit Service a1bd4f
    memset(b, 0, sizeof(ExpectedBlock));
Packit Service a1bd4f
    g_free(b);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
expected_block_add_key(ExpectedBlock *b, ExpectedKey *k)
Packit 5756e2
{
Packit Service a1bd4f
    g_assert(b);
Packit Service a1bd4f
    g_assert(k);
Packit Service a1bd4f
    b->keys = g_slist_append(b->keys, k);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static Expected *
Packit Service a1bd4f
expected_new(void)
Packit 5756e2
{
Packit Service a1bd4f
    return g_malloc0(sizeof(Expected));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
expected_add_block(Expected *e, ExpectedBlock *b)
Packit 5756e2
{
Packit Service a1bd4f
    g_assert(e);
Packit Service a1bd4f
    g_assert(b);
Packit Service a1bd4f
    e->blocks = g_slist_append(e->blocks, b);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
expected_free(Expected *e)
Packit 5756e2
{
Packit Service a1bd4f
    g_assert(e);
Packit Service a1bd4f
    g_slist_free_full(e->blocks, expected_block_free);
Packit Service a1bd4f
    memset(e, 0, sizeof(Expected));
Packit Service a1bd4f
    g_free(e);
Packit 5756e2
}
Packit 5756e2
Packit Service a1bd4f
NM_AUTO_DEFINE_FCN_VOID0(Expected *, _nm_auto_free_expected, expected_free);
Packit 5756e2
#define nm_auto_free_expected nm_auto(_nm_auto_free_expected)
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
compare_expected_to_ifparser(if_parser *parser, Expected *e)
Packit 5756e2
{
Packit Service a1bd4f
    if_block *n;
Packit Service a1bd4f
    GSList *  biter, *kiter;
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(g_slist_length(e->blocks), ==, ifparser_get_num_blocks(parser));
Packit 5756e2
Packit Service a1bd4f
    biter = e->blocks;
Packit Service a1bd4f
    c_list_for_each_entry (n, &parser->block_lst_head, block_lst) {
Packit Service a1bd4f
        if_data *      m;
Packit Service a1bd4f
        ExpectedBlock *b = biter->data;
Packit 5756e2
Packit Service a1bd4f
        g_assert(b->type && n->type);
Packit Service a1bd4f
        g_assert_cmpstr(b->type, ==, n->type);
Packit Service a1bd4f
        g_assert(b->name);
Packit Service a1bd4f
        g_assert_cmpstr(b->name, ==, n->name);
Packit 5756e2
Packit Service a1bd4f
        g_assert_cmpint(g_slist_length(b->keys), ==, ifparser_get_num_info(n));
Packit 5756e2
Packit Service a1bd4f
        kiter = b->keys;
Packit Service a1bd4f
        c_list_for_each_entry (m, &n->data_lst_head, data_lst) {
Packit Service a1bd4f
            ExpectedKey *k = kiter->data;
Packit 5756e2
Packit Service a1bd4f
            g_assert(k->key);
Packit Service a1bd4f
            g_assert_cmpstr(k->key, ==, m->key);
Packit Service a1bd4f
            g_assert(k->data && m->data);
Packit Service a1bd4f
            g_assert_cmpstr(k->data, ==, m->data);
Packit 5756e2
Packit Service a1bd4f
            kiter = g_slist_next(kiter);
Packit Service a1bd4f
        }
Packit Service a1bd4f
        g_assert(!kiter);
Packit 5756e2
Packit Service a1bd4f
        biter = g_slist_next(biter);
Packit Service a1bd4f
    }
Packit Service a1bd4f
    g_assert(!biter);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
dump_blocks(if_parser *parser)
Packit 5756e2
{
Packit Service a1bd4f
    if_block *n;
Packit 5756e2
Packit Service a1bd4f
    g_message("\n***************************************************");
Packit Service a1bd4f
    c_list_for_each_entry (n, &parser->block_lst_head, block_lst) {
Packit Service a1bd4f
        if_data *m;
Packit 5756e2
Packit Service a1bd4f
        // each block start with its type & name
Packit Service a1bd4f
        // (single quotes used to show typ & name baoundaries)
Packit Service a1bd4f
        g_print("'%s' '%s'\n", n->type, n->name);
Packit 5756e2
Packit Service a1bd4f
        // each key-value pair within a block is indented & separated by a tab
Packit Service a1bd4f
        // (single quotes used to show type & name boundaries)
Packit Service a1bd4f
        c_list_for_each_entry (m, &n->data_lst_head, data_lst)
Packit Service a1bd4f
            g_print("\t'%s'\t'%s'\n", m->key, m->data);
Packit 5756e2
Packit Service a1bd4f
        // blocks are separated by an empty line
Packit Service a1bd4f
        g_print("\n");
Packit Service a1bd4f
    }
Packit Service a1bd4f
    g_message("##################################################\n");
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static if_parser *
Packit Service a1bd4f
init_ifparser_with_file(const char *file)
Packit 5756e2
{
Packit Service a1bd4f
    if_parser *   parser;
Packit Service a1bd4f
    gs_free char *tmp = NULL;
Packit 5756e2
Packit Service a1bd4f
    tmp    = g_strdup_printf("%s/%s", TEST_DIR, file);
Packit Service a1bd4f
    parser = ifparser_parse(tmp, 1);
Packit Service a1bd4f
    g_assert(parser);
Packit Service a1bd4f
    return parser;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test1_ignore_line_before_first_block(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test1");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("auto", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("iface", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "dhcp"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test2_wrapped_line(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test2");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("auto", "lo");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test3_wrapped_multiline_multiarg(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test3");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("allow-hotplug", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("allow-hotplug", "wlan0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("allow-hotplug", "bnep0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test4_allow_auto_is_auto(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test4");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("auto", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test5_allow_auto_multiarg(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test5");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("allow-hotplug", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("allow-hotplug", "wlan0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test6_mixed_whitespace(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test6");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "lo");
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "loopback"));
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test7_long_line(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test7");
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(ifparser_get_num_blocks(parser), ==, 0);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test8_long_line_wrapped(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test8");
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(ifparser_get_num_blocks(parser), ==, 0);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test9_wrapped_lines_in_block(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test9");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "static"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("address", "10.250.2.3"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("netmask", "255.255.255.192"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("broadcast", "10.250.2.63"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("gateway", "10.250.2.50"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test11_complex_wrap(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test11");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "pppoe");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "manual"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("pre-up", "/sbin/ifconfig eth0 up"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test12_complex_wrap_split_word(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test12");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "pppoe");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "manual"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("up", "ifup ppp0=dsl"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test13_more_mixed_whitespace(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test13");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "dsl");
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "ppp"));
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test14_mixed_whitespace_block_start(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test14");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "wlan0");
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "manual"));
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("iface", "wlan-adpm");
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "dhcp"));
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("iface", "wlan-default");
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "dhcp"));
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test15_trailing_space(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test15");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    b = expected_block_new("iface", "bnep0");
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "static"));
Packit Service a1bd4f
    expected_add_block(e, b);
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test16_missing_newline(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e  = NULL;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test16");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit Service a1bd4f
    expected_add_block(e, expected_block_new("mapping", "eth0"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test17_read_static_ipv4(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    NMSettingConnection *         s_con;
Packit Service a1bd4f
    NMSettingIPConfig *           s_ip4;
Packit Service a1bd4f
    NMSettingWired *              s_wired;
Packit Service a1bd4f
    NMIPAddress *                 ip4_addr;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test17-wired-static-verify-ip4");
Packit 5756e2
Packit Service a1bd4f
    connection = _connection_first_from_parser(parser);
Packit 5756e2
Packit Service a1bd4f
    /* ===== CONNECTION SETTING ===== */
Packit Service a1bd4f
    s_con = nm_connection_get_setting_connection(connection);
Packit Service a1bd4f
    g_assert(s_con);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "Ifupdown (eth0)");
Packit 5756e2
Packit Service a1bd4f
    /* ===== WIRED SETTING ===== */
Packit Service a1bd4f
    s_wired = nm_connection_get_setting_wired(connection);
Packit Service a1bd4f
    g_assert(s_wired);
Packit 5756e2
Packit Service a1bd4f
    /* ===== IPv4 SETTING ===== */
Packit Service a1bd4f
    s_ip4 = nm_connection_get_setting_ip4_config(connection);
Packit Service a1bd4f
    g_assert(s_ip4);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1);
Packit Service a1bd4f
    ip4_addr = nm_setting_ip_config_get_address(s_ip4, 0);
Packit Service a1bd4f
    g_assert(ip4_addr != NULL);
Packit Service a1bd4f
    g_assert_cmpstr(nm_ip_address_get_address(ip4_addr), ==, "10.0.0.3");
Packit Service a1bd4f
    g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, 8);
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 2);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 0), ==, "10.0.0.1");
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 1), ==, "10.0.0.2");
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_dns_searches(s_ip4), ==, 2);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip4, 0), ==, "example.com");
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip4, 1), ==, "foo.example.com");
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test18_read_static_ipv6(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    NMSettingConnection *         s_con;
Packit Service a1bd4f
    NMSettingIPConfig *           s_ip6;
Packit Service a1bd4f
    NMSettingWired *              s_wired;
Packit Service a1bd4f
    NMIPAddress *                 ip6_addr;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test18-wired-static-verify-ip6");
Packit 5756e2
Packit Service a1bd4f
    connection = _connection_first_from_parser(parser);
Packit 5756e2
Packit Service a1bd4f
    /* ===== CONNECTION SETTING ===== */
Packit Service a1bd4f
    s_con = nm_connection_get_setting_connection(connection);
Packit Service a1bd4f
    g_assert(s_con);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "Ifupdown (myip6tunnel)");
Packit 5756e2
Packit Service a1bd4f
    /* ===== WIRED SETTING ===== */
Packit Service a1bd4f
    s_wired = nm_connection_get_setting_wired(connection);
Packit Service a1bd4f
    g_assert(s_wired);
Packit 5756e2
Packit Service a1bd4f
    /* ===== IPv6 SETTING ===== */
Packit Service a1bd4f
    s_ip6 = nm_connection_get_setting_ip6_config(connection);
Packit Service a1bd4f
    g_assert(s_ip6);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip6), ==, 1);
Packit Service a1bd4f
    ip6_addr = nm_setting_ip_config_get_address(s_ip6, 0);
Packit Service a1bd4f
    g_assert(ip6_addr != NULL);
Packit Service a1bd4f
    g_assert_cmpstr(nm_ip_address_get_address(ip6_addr), ==, "fc00::1");
Packit Service a1bd4f
    g_assert_cmpint(nm_ip_address_get_prefix(ip6_addr), ==, 64);
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip6), ==, 2);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 0), ==, "fc00::2");
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 1), ==, "fc00::3");
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_dns_searches(s_ip6), ==, 2);
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 0), ==, "example.com");
Packit Service a1bd4f
    g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 1), ==, "foo.example.com");
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test19_read_static_ipv4_plen(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    NMSettingIPConfig *           s_ip4;
Packit Service a1bd4f
    NMIPAddress *                 ip4_addr;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser =
Packit Service a1bd4f
        init_ifparser_with_file("test19-wired-static-verify-ip4-plen");
Packit 5756e2
Packit Service a1bd4f
    connection = _connection_first_from_parser(parser);
Packit 5756e2
Packit Service a1bd4f
    /* ===== IPv4 SETTING ===== */
Packit Service a1bd4f
    s_ip4 = nm_connection_get_setting_ip4_config(connection);
Packit Service a1bd4f
    g_assert(s_ip4);
Packit 5756e2
Packit Service a1bd4f
    g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1);
Packit Service a1bd4f
    ip4_addr = nm_setting_ip_config_get_address(s_ip4, 0);
Packit Service a1bd4f
    g_assert(ip4_addr != NULL);
Packit Service a1bd4f
    g_assert_cmpstr(nm_ip_address_get_address(ip4_addr), ==, "10.0.0.3");
Packit Service a1bd4f
    g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, 8);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test20_source_stanza(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test20-source-stanza");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit 5756e2
Packit Service a1bd4f
    b = expected_block_new("auto", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("iface", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "dhcp"));
Packit 5756e2
Packit Service a1bd4f
    b = expected_block_new("auto", "eth1");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("iface", "eth1");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "dhcp"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test21_source_dir_stanza(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test21-source-dir-stanza");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit 5756e2
Packit Service a1bd4f
    b = expected_block_new("auto", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    b = expected_block_new("iface", "eth0");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "dhcp"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test22_duplicate_stanzas(void)
Packit 5756e2
{
Packit Service a1bd4f
    nm_auto_free_expected Expected *e = NULL;
Packit Service a1bd4f
    ExpectedBlock *                 b;
Packit Service a1bd4f
    nm_auto_ifparser if_parser *parser = init_ifparser_with_file("test22-duplicate-stanzas");
Packit 5756e2
Packit Service a1bd4f
    e = expected_new();
Packit 5756e2
Packit Service a1bd4f
    b = expected_block_new("iface", "br10");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "manual"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("bridge-ports", "enp6s0.15"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("bridge-stp", "off"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("bridge-maxwait", "0"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("bridge-fd", "0"));
Packit Service a1bd4f
    b = expected_block_new("iface", "br10");
Packit Service a1bd4f
    expected_add_block(e, b);
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("inet", "auto"));
Packit Service a1bd4f
    expected_block_add_key(b, expected_key_new("bridge-ports", "enp6s0.15"));
Packit 5756e2
Packit Service a1bd4f
    compare_expected_to_ifparser(parser, e);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit Service a1bd4f
NMTST_DEFINE();
Packit 5756e2
Packit 5756e2
int
Packit Service a1bd4f
main(int argc, char **argv)
Packit Service a1bd4f
{
Packit Service a1bd4f
    nmtst_init_assert_logging(&argc, &argv, "WARN", "DEFAULT");
Packit Service a1bd4f
Packit Service a1bd4f
    (void) dump_blocks;
Packit Service a1bd4f
Packit Service a1bd4f
    g_test_add_func("/ifupdate/ignore_line_before_first_block",
Packit Service a1bd4f
                    test1_ignore_line_before_first_block);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/wrapped_line", test2_wrapped_line);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/wrapped_multiline_multiarg", test3_wrapped_multiline_multiarg);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/allow_auto_is_auto", test4_allow_auto_is_auto);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/allow_auto_multiarg", test5_allow_auto_multiarg);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/mixed_whitespace", test6_mixed_whitespace);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/long_line", test7_long_line);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/long_line_wrapped", test8_long_line_wrapped);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/wrapped_lines_in_block", test9_wrapped_lines_in_block);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/complex_wrap", test11_complex_wrap);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/complex_wrap_split_word", test12_complex_wrap_split_word);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/more_mixed_whitespace", test13_more_mixed_whitespace);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/mixed_whitespace_block_start", test14_mixed_whitespace_block_start);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/trailing_space", test15_trailing_space);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/missing_newline", test16_missing_newline);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/read_static_ipv4", test17_read_static_ipv4);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/read_static_ipv6", test18_read_static_ipv6);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/read_static_ipv4_plen", test19_read_static_ipv4_plen);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/source_stanza", test20_source_stanza);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/source_dir_stanza", test21_source_dir_stanza);
Packit Service a1bd4f
    g_test_add_func("/ifupdate/test22-duplicate-stanzas", test22_duplicate_stanzas);
Packit Service a1bd4f
Packit Service a1bd4f
    return g_test_run();
Packit 5756e2
}