summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-08-25 14:29:13 +0200
committerThomas Haller <thaller@redhat.com>2019-08-26 13:05:50 +0200
commitb0fc485e42061232945106db7d091fd9ff81454b (patch)
tree6c09b6736c06ba8b9c2c7e6379cf2dfff61f50d1
parent3a0a79ab2d7d1f9bcadaceb81af6a3567369ce3b (diff)
downloadNetworkManager-b0fc485e42061232945106db7d091fd9ff81454b.tar.gz
keyfile/tests: add unit test showing bug where keyfile writer looses settings that are all-default
-rw-r--r--libnm-core/tests/test-setting.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c
index 3438aea99d..0a314562c3 100644
--- a/libnm-core/tests/test-setting.c
+++ b/libnm-core/tests/test-setting.c
@@ -3281,6 +3281,53 @@ test_parse_tc_handle (void)
/*****************************************************************************/
+static void
+test_empty_setting (void)
+{
+ gs_unref_object NMConnection *con = NULL;
+ gs_unref_object NMConnection *con2 = NULL;
+ NMSettingBluetooth *s_bt;
+ NMSettingGsm *s_gsm;
+ gs_unref_keyfile GKeyFile *kf = NULL;
+ gs_free_error GError *error = NULL;
+
+ con = nmtst_create_minimal_connection ("bt-empty-gsm", "dca3192a-f2dc-48eb-b806-d0ff788f122c", NM_SETTING_BLUETOOTH_SETTING_NAME, NULL);
+
+ s_bt = _nm_connection_get_setting (con, NM_TYPE_SETTING_BLUETOOTH);
+ g_object_set (s_bt,
+ NM_SETTING_BLUETOOTH_TYPE, "dun",
+ NM_SETTING_BLUETOOTH_BDADDR, "aa:bb:cc:dd:ee:ff",
+ NULL);
+
+ s_gsm = NM_SETTING_GSM (nm_setting_gsm_new ());
+ nm_connection_add_setting (con, NM_SETTING (s_gsm));
+
+ nmtst_connection_normalize (con);
+
+ nmtst_assert_connection_verifies_without_normalization (con);
+
+ kf = nm_keyfile_write (con, NULL, NULL, &error);
+ nmtst_assert_success (kf, error);
+
+ /* the [gsm] setting was lost because it only has default values.
+ * As a result, the connection also became invalid. */
+
+ g_assert (!g_key_file_has_group (kf, "gsm"));
+
+ con2 = nm_keyfile_read (kf,
+ "/ignored/current/working/directory/for/loading/relative/paths",
+ NULL,
+ NULL,
+ &error);
+ nmtst_assert_success (con2, error);
+
+ g_assert (!nm_connection_get_setting (con2, NM_TYPE_SETTING_GSM));
+
+ nmtst_assert_connection_unnormalizable (con2, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
+}
+
+/*****************************************************************************/
+
NMTST_DEFINE ();
int
@@ -3368,5 +3415,7 @@ main (int argc, char **argv)
g_test_add_func ("/libnm/test_team_setting", test_team_setting);
+ g_test_add_func ("/libnm/test_empty_setting", test_empty_setting);
+
return g_test_run ();
}