ifcfg-rh/tests: add tests for RES_OPTIONS parsing

This commit is contained in:
Beniamino Galvani 2015-05-04 15:27:15 +02:00
parent a1d76a019e
commit 66e63c1632
2 changed files with 219 additions and 0 deletions

View file

@ -0,0 +1,15 @@
TYPE=Ethernet
DEVICE=eth2
HWADDR=00:11:22:33:44:ee
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=yes
NM_CONTROLLED=yes
PEERDNS=yes
DNS1=10.2.0.4
DOMAIN="lorem.com ipsum.org dolor.edu"
RES_OPTIONS="ndots:3 single-request-reopen inet6"
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR="1001:abba::1234/56"
IPV6ADDR_SECONDARIES="2001:abba::2234/64 3001:abba::3234/96"

View file

@ -2493,6 +2493,208 @@ test_read_wired_aliases_bad_2 (void)
test_read_wired_aliases_bad (TEST_IFCFG_ALIASES_BAD_2, "System aliasem2");
}
#define TEST_IFCFG_DNS_OPTIONS TEST_IFCFG_DIR "/network-scripts/ifcfg-test-dns-options"
static void
test_read_dns_options (void)
{
NMConnection *connection;
NMSettingIPConfig *s_ip4, *s_ip6;
char *unmanaged = NULL;
const char *option;
GError *error = NULL;
const char *options[] = { "ndots:3", "single-request-reopen", "inet6" };
guint32 i, options_len = sizeof (options) / sizeof (options[0]);
connection = connection_from_file_test (TEST_IFCFG_DNS_OPTIONS,
NULL,
TYPE_ETHERNET,
&unmanaged,
&error);
ASSERT (connection != NULL,
"read-dns-options",
"failed to read %s: %s", TEST_IFCFG_DNS_OPTIONS, error->message);
ASSERT (nm_connection_verify (connection, &error),
"read-dns-options",
"failed to verify %s: %s", TEST_IFCFG_DNS_OPTIONS, error->message);
ASSERT (unmanaged == NULL,
"read-dns-options",
"failed to verify %s: unexpected unmanaged value", TEST_IFCFG_DNS_OPTIONS);
s_ip4 = nm_connection_get_setting_ip4_config (connection);
ASSERT (s_ip4 != NULL,
"read-dns-options",
"failed to verify %s: missing %s setting", TEST_IFCFG_DNS_OPTIONS,
NM_SETTING_IP4_CONFIG_SETTING_NAME);
s_ip6 = nm_connection_get_setting_ip6_config (connection);
ASSERT (s_ip6 != NULL,
"read-dns-options",
"failed to verify %s: missing %s setting", TEST_IFCFG_DNS_OPTIONS,
NM_SETTING_IP6_CONFIG_SETTING_NAME);
i = nm_setting_ip_config_get_num_dns_options (s_ip4);
ASSERT (i == options_len,
"read-dns-options",
"failed to verify %s: wrong IPv4 DNS options number %u",
TEST_IFCFG_DNS_OPTIONS, i);
i = nm_setting_ip_config_get_num_dns_options (s_ip6);
ASSERT (i == options_len,
"read-dns-options",
"failed to verify %s: wrong IPv6 DNS options number %u",
TEST_IFCFG_DNS_OPTIONS, i);
for (i = 0; i < options_len; i++) {
option = nm_setting_ip_config_get_dns_option (s_ip4, i);
ASSERT (strcmp (options[i], option) == 0,
"read-dns-options",
"failed to verify %s: wrong IPv4 DNS option %u '%s'",
TEST_IFCFG_DNS_OPTIONS, i, option);
option = nm_setting_ip_config_get_dns_option (s_ip6, i);
ASSERT (strcmp (options[i], option) == 0,
"read-dns-options",
"failed to verify %s: wrong IPv6 DNS option %u '%s'"
TEST_IFCFG_DNS_OPTIONS, i, option);
}
g_object_unref (connection);
}
static void
test_write_dns_options (void)
{
NMConnection *connection;
NMConnection *reread;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
NMSettingIPConfig *s_ip6;
static const char *mac = "31:33:33:37:be:cd";
guint32 mtu = 1492;
char *uuid;
NMIPAddress *addr;
NMIPAddress *addr6;
gboolean success;
GError *error = NULL;
char *testfile = NULL;
connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
nm_connection_add_setting (connection, NM_SETTING (s_con));
uuid = nm_utils_uuid_generate ();
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "Test DNS options",
NM_SETTING_CONNECTION_UUID, uuid,
NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
NULL);
g_free (uuid);
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
g_object_set (s_wired,
NM_SETTING_WIRED_MAC_ADDRESS, mac,
NM_SETTING_WIRED_MTU, mtu,
NULL);
/* IP4 setting */
s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
nm_connection_add_setting (connection, NM_SETTING (s_ip4));
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.1",
NM_SETTING_IP_CONFIG_ROUTE_METRIC, (gint64) 204,
NULL);
addr = nm_ip_address_new (AF_INET, "1.1.1.3", 24, &error);
nm_setting_ip_config_add_address (s_ip4, addr);
nm_ip_address_unref (addr);
/* IP6 setting */
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
NM_SETTING_IP_CONFIG_ROUTE_METRIC, (gint64) 206,
NULL);
/* Add addresses */
addr6 = nm_ip_address_new (AF_INET6, "1003:1234:abcd::1", 11, &error);
nm_setting_ip_config_add_address (s_ip6, addr6);
nm_ip_address_unref (addr6);
nm_setting_ip_config_add_dns_option (s_ip4, "debug");
nm_setting_ip_config_add_dns_option (s_ip6, "timeout:3");
ASSERT (nm_connection_verify (connection, &error) == TRUE,
"write-dns-options",
"failed to verify connection: %s",
(error && error->message) ? error->message : "(unknown)");
/* Save the ifcfg */
success = writer_new_connection (connection,
TEST_SCRATCH_DIR "/network-scripts/",
&testfile,
&error);
ASSERT (success == TRUE,
"write-dns-options",
"failed to write connection to disk: %s",
(error && error->message) ? error->message : "(unknown)");
ASSERT (testfile != NULL,
"write-dns-options",
"didn't get ifcfg file path back after writing connection");
/* reread will be normalized, so we must normalize connection too. */
nm_connection_normalize (connection, NULL, NULL, NULL);
/* re-read the connection for comparison */
reread = connection_from_file_test (testfile,
NULL,
TYPE_ETHERNET,
NULL,
&error);
unlink (testfile);
/* RES_OPTIONS is copied to both IPv4 and IPv6 settings */
nm_setting_ip_config_clear_dns_options (s_ip4);
nm_setting_ip_config_add_dns_option (s_ip4, "debug");
nm_setting_ip_config_add_dns_option (s_ip4, "timeout:3");
nm_setting_ip_config_clear_dns_options (s_ip6);
nm_setting_ip_config_add_dns_option (s_ip6, "debug");
nm_setting_ip_config_add_dns_option (s_ip6, "timeout:3");
ASSERT (reread != NULL,
"write-dns-options",
"failed to read %s: %s", testfile, error->message);
ASSERT (nm_connection_verify (reread, &error),
"write-dns-options",
"failed to verify %s: %s", testfile, error->message);
ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
"write-dns-options",
"written and re-read connection weren't the same.");
g_free (testfile);
g_object_unref (connection);
g_object_unref (reread);
}
#define TEST_IFCFG_WIFI_OPEN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open"
static void
@ -12461,6 +12663,7 @@ int main (int argc, char **argv)
g_test_add_data_func (TPATH "static-ip6-only-gw/::", "::", test_write_wired_static_ip6_only_gw);
g_test_add_data_func (TPATH "static-ip6-only-gw/2001:db8:8:4::2", "2001:db8:8:4::2", test_write_wired_static_ip6_only_gw);
g_test_add_data_func (TPATH "static-ip6-only-gw/::ffff:255.255.255.255", "::ffff:255.255.255.255", test_write_wired_static_ip6_only_gw);
test_read_dns_options ();
test_read_wired_static (TEST_IFCFG_WIRED_STATIC, "System test-wired-static", TRUE);
test_read_wired_static (TEST_IFCFG_WIRED_STATIC_BOOTPROTO, "System test-wired-static-bootproto", FALSE);
@ -12611,6 +12814,7 @@ int main (int argc, char **argv)
test_write_vlan ();
test_write_vlan_only_vlanid ();
test_write_ethernet_missing_ipv6 ();
test_write_dns_options();
/* iSCSI / ibft */
g_test_add_func (TPATH "ibft/ignored", test_read_ibft_ignored);