ifcfg-rh/tests: add test checking persisting ethtool settings to ifcfg-rh

There are still various failures. That will be fixed next.
This commit is contained in:
Thomas Haller 2022-11-08 17:45:13 +01:00
parent 8e4296a487
commit 3755e6b175
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
6 changed files with 227 additions and 0 deletions

View file

@ -3665,6 +3665,10 @@ EXTRA_DIST += \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-3.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-4.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-5.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-6.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-7.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-8.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_roundtrip_ethtool-9.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test_write_wired_auto_negotiate_on.cexpected \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-dynamic-wep-leap \
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-leap \

View file

@ -0,0 +1,15 @@
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
ETHTOOL_OPTS="autoneg on ; -A net0 pause-autoneg off"
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=test_roundtrip_ethtool
UUID=${UUID}
ONBOOT=yes

View file

@ -0,0 +1,15 @@
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
ETHTOOL_OPTS="autoneg on ; -G net0 rx 512"
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=test_roundtrip_ethtool
UUID=${UUID}
ONBOOT=yes

View file

@ -0,0 +1,15 @@
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
ETHTOOL_OPTS="autoneg on ; -A net0 pause-autoneg off"
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=test_roundtrip_ethtool
UUID=${UUID}
ONBOOT=yes

View file

@ -0,0 +1,15 @@
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
ETHTOOL_OPTS="autoneg on ; -A net0 pause-autoneg off"
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=default
NAME=test_roundtrip_ethtool
UUID=${UUID}
ONBOOT=yes

View file

@ -3438,6 +3438,7 @@ test_roundtrip_ethtool(void)
gs_unref_object NMConnection *connection = NULL;
NMSetting *s_ethtool;
NMSetting *s_wired;
int i_run;
connection = nmtst_create_minimal_connection("test_roundtrip_ethtool",
NULL,
@ -3500,6 +3501,168 @@ test_roundtrip_ethtool(void)
TEST_IFCFG_DIR "/ifcfg-test_roundtrip_ethtool-5.cexpected",
NULL);
g_clear_object(&connection);
connection = nmtst_create_minimal_connection("test_roundtrip_ethtool",
NULL,
NM_SETTING_WIRED_SETTING_NAME,
NULL);
s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
nm_setting_option_set_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_AUTONEG, FALSE);
_writer_new_connec_exp(connection,
TEST_SCRATCH_DIR,
TEST_IFCFG_DIR "/ifcfg-test_roundtrip_ethtool-6.cexpected",
NULL);
g_clear_object(&connection);
connection = nmtst_create_minimal_connection("test_roundtrip_ethtool",
NULL,
NM_SETTING_WIRED_SETTING_NAME,
NULL);
s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
nm_setting_option_set_uint32(s_ethtool, NM_ETHTOOL_OPTNAME_RING_RX, 512);
_writer_new_connec_exp(connection,
TEST_SCRATCH_DIR,
TEST_IFCFG_DIR "/ifcfg-test_roundtrip_ethtool-7.cexpected",
NULL);
g_clear_object(&connection);
connection = nmtst_create_minimal_connection("test_roundtrip_ethtool",
NULL,
NM_SETTING_WIRED_SETTING_NAME,
NULL);
s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
/* FIXME: ensure proper round-trip with no ethtool settings set. */
nm_setting_option_set_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_AUTONEG, FALSE);
_writer_new_connec_exp(connection,
TEST_SCRATCH_DIR,
TEST_IFCFG_DIR "/ifcfg-test_roundtrip_ethtool-8.cexpected",
NULL);
g_clear_object(&connection);
connection = nmtst_create_minimal_connection("test_roundtrip_ethtool",
NULL,
NM_SETTING_WIRED_SETTING_NAME,
NULL);
s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
nm_setting_option_set_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_AUTONEG, FALSE);
//FIXME: nm_setting_option_set_uint32(s_ethtool, NM_ETHTOOL_OPTNAME_RING_RX, 512);
_writer_new_connec_exp(connection,
TEST_SCRATCH_DIR,
TEST_IFCFG_DIR "/ifcfg-test_roundtrip_ethtool-9.cexpected",
NULL);
g_clear_object(&connection);
for (i_run = 0; i_run < 20; i_run++) {
gs_unref_object NMConnection *con2 = NULL;
gs_unref_object NMConnection *reread = NULL;
nmtst_auto_unlinkfile char *testfile = NULL;
gboolean reread_same;
gboolean v_bool;
NMEthtoolID ethtool_ids[_NM_ETHTOOL_ID_NUM];
guint i;
guint l;
NMSettingWiredWakeOnLan wake_on_lan;
con2 = nmtst_create_minimal_connection("test_roundtrip_ethtool",
NULL,
NM_SETTING_WIRED_SETTING_NAME,
NULL);
s_wired = nmtst_connection_assert_setting(con2, NM_TYPE_SETTING_WIRED);
g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, nmtst_get_rand_bool(), NULL);
if (nmtst_get_rand_bool()) {
g_object_set(s_wired,
NM_SETTING_WIRED_SPEED,
1000u,
NM_SETTING_WIRED_DUPLEX,
nmtst_get_rand_bool() ? "full" : "half",
NULL);
}
wake_on_lan = nmtst_get_rand_uint32();
wake_on_lan = wake_on_lan & NM_SETTING_WIRED_WAKE_ON_LAN_ALL;
wake_on_lan = nmtst_rand_select(wake_on_lan,
NM_SETTING_WIRED_WAKE_ON_LAN_DEFAULT,
NM_SETTING_WIRED_WAKE_ON_LAN_IGNORE);
g_object_set(s_wired, NM_SETTING_WIRED_WAKE_ON_LAN, (guint) wake_on_lan, NULL);
if (NM_FLAGS_HAS(wake_on_lan, NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC)
&& nmtst_get_rand_bool()) {
g_object_set(s_wired, NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD, "aa:bb:cc:dd:ee:ff", NULL);
}
l = nmtst_get_rand_uint32() % (G_N_ELEMENTS(ethtool_ids) + 2);
if (l == 0) {
/* pass. No ethtool setting. */
goto check_roundtrip;
}
l--;
s_ethtool = _nm_connection_new_setting(con2, NM_TYPE_SETTING_ETHTOOL);
for (i = 0; i < (int) G_N_ELEMENTS(ethtool_ids); i++)
ethtool_ids[i] = i;
nmtst_rand_perm(NULL, ethtool_ids, NULL, sizeof(ethtool_ids[0]), G_N_ELEMENTS(ethtool_ids));
l = 1; /* FIXME */
for (i = 0; i < l; i++) {
NMEthtoolID ethtool_id = ethtool_ids[i];
const GVariantType *vtype;
const char *optname;
optname = nm_ethtool_data[ethtool_id]->optname;
vtype = nm_ethtool_id_get_variant_type(ethtool_id);
if (NM_IN_SET(ethtool_id,
NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX,
NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX)) {
nm_setting_option_set_uint32(s_ethtool, optname, nmtst_get_rand_uint32() % 2);
} else if (g_variant_type_equal(vtype, G_VARIANT_TYPE_BOOLEAN))
nm_setting_option_set_boolean(s_ethtool, optname, nmtst_get_rand_bool());
else if (g_variant_type_equal(vtype, G_VARIANT_TYPE_UINT32))
nm_setting_option_set_uint32(s_ethtool, optname, nmtst_get_rand_uint32());
else
g_assert_not_reached();
}
if ((nm_setting_option_get_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_RX, NULL)
|| nm_setting_option_get_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_TX, NULL))
&& nm_setting_option_get_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_PAUSE_AUTONEG, &v_bool)
&& v_bool) {
/* don't accidentally create an invalid profile. */
nm_setting_option_set(s_ethtool,
NM_ETHTOOL_OPTNAME_PAUSE_AUTONEG,
nmtst_get_rand_bool() ? g_variant_new_boolean(FALSE) : NULL);
}
if (!nm_setting_option_get_all_names(s_ethtool, NULL)) {
// FIXME.
continue;
}
check_roundtrip:
_writer_new_connection_reread(con2,
TEST_SCRATCH_DIR,
&testfile,
NO_EXPECTED,
&reread,
&reread_same);
g_assert(NM_IS_CONNECTION(reread));
g_assert(reread_same);
}
}
static void