about summary refs log tree commit diff
path: root/libnm-core/tests
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2021-01-11 18:07:03 +0100
committerSebastien Bacher <seb128@ubuntu.com>2021-01-11 18:15:57 +0100
commit2567f558da3eb9911678227d4aeb15162e707d89 (patch)
tree13c80b0e091c8ba585b14b966cda998f95f1936d /libnm-core/tests
parent02d99ffd62ede29cffcb45fcbe33d044b7406d3a (diff)
parentf54032b30e1ddd84f10a339e0caf493772e049a7 (diff)
Merge branch 'debian/master' into ubuntu/master
Diffstat (limited to 'libnm-core/tests')
-rw-r--r--libnm-core/tests/meson.build1
-rw-r--r--libnm-core/tests/test-compare.c358
-rw-r--r--libnm-core/tests/test-crypto.c710
-rw-r--r--libnm-core/tests/test-general-enums.h38
-rw-r--r--libnm-core/tests/test-general.c16982
-rw-r--r--libnm-core/tests/test-keyfile.c1499
-rw-r--r--libnm-core/tests/test-secrets.c1103
-rw-r--r--libnm-core/tests/test-setting.c7437
-rw-r--r--libnm-core/tests/test-settings-defaults.c145
9 files changed, 14909 insertions, 13364 deletions
diff --git a/libnm-core/tests/meson.build b/libnm-core/tests/meson.build
index 58615e4d..4ce42526 100644
--- a/libnm-core/tests/meson.build
+++ b/libnm-core/tests/meson.build
@@ -15,6 +15,7 @@ enum_sources = gnome.mkenums_simple(
   enum_types,
   sources: 'test-general-enums.h',
   identifier_prefix: nm_id_prefix,
+  body_prefix: '#include "nm-default.h"',
 )
 
 deps = [
diff --git a/libnm-core/tests/test-compare.c b/libnm-core/tests/test-compare.c
index 77f0ba4f..e8c3ec33 100644
--- a/libnm-core/tests/test-compare.c
+++ b/libnm-core/tests/test-compare.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: LGPL-2.1+
+/* SPDX-License-Identifier: LGPL-2.1+ */
 /*
  * Copyright (C) 2007 - 2014 Red Hat, Inc.
  * Copyright (C) 2007 - 2008 Novell, Inc.
@@ -14,218 +14,218 @@
 #include "nm-utils/nm-test-utils.h"
 
 static void
-compare_ints (void)
+compare_ints(void)
 {
-	GVariant *value1, *value2;
+    GVariant *value1, *value2;
 
-	value1 = g_variant_new_int32 (5);
-	value2 = g_variant_new_int32 (5);
-	g_assert (nm_property_compare (value1, value2) == 0);
+    value1 = g_variant_new_int32(5);
+    value2 = g_variant_new_int32(5);
+    g_assert(nm_property_compare(value1, value2) == 0);
 
-	g_variant_unref (value2);
-	value2 = g_variant_new_int32 (10);
-	g_assert (nm_property_compare (value1, value2) < 0);
+    g_variant_unref(value2);
+    value2 = g_variant_new_int32(10);
+    g_assert(nm_property_compare(value1, value2) < 0);
 
-	g_variant_unref (value2);
-	value2 = g_variant_new_int32 (-1);
-	g_assert (nm_property_compare (value1, value2) > 0);
+    g_variant_unref(value2);
+    value2 = g_variant_new_int32(-1);
+    g_assert(nm_property_compare(value1, value2) > 0);
 
-	g_variant_unref (value1);
-	g_variant_unref (value2);
+    g_variant_unref(value1);
+    g_variant_unref(value2);
 }
 
 static void
-compare_strings (void)
+compare_strings(void)
 {
-	GVariant *value1, *value2;
-	const char *str1 = "hello";
-	const char *str2 = "world";
+    GVariant *  value1, *value2;
+    const char *str1 = "hello";
+    const char *str2 = "world";
 
-	value1 = g_variant_new_string (str1);
-	value2 = g_variant_new_string (str1);
-	g_assert (nm_property_compare (value1, value2) == 0);
+    value1 = g_variant_new_string(str1);
+    value2 = g_variant_new_string(str1);
+    g_assert(nm_property_compare(value1, value2) == 0);
 
-	g_variant_unref (value2);
-	value2 = g_variant_new_string (str2);
-	g_assert (nm_property_compare (value1, value2) < 0);
+    g_variant_unref(value2);
+    value2 = g_variant_new_string(str2);
+    g_assert(nm_property_compare(value1, value2) < 0);
 
-	g_assert (nm_property_compare (value2, value1) > 0);
+    g_assert(nm_property_compare(value2, value1) > 0);
 
-	g_variant_unref (value1);
-	g_variant_unref (value2);
+    g_variant_unref(value1);
+    g_variant_unref(value2);
 }
 
 static void
-compare_strv (void)
+compare_strv(void)
 {
-	GVariant *value1, *value2;
-	const char * const strv1[] = { "foo", "bar", "baz", NULL };
-	const char * const strv2[] = { "foo", "bar", "bar", NULL };
-	const char * const strv3[] = { "foo", "bar", NULL };
-	const char * const strv4[] = { "foo", "bar", "baz", "bam", NULL };
-
-	value1 = g_variant_new_strv (strv1, -1);
-	value2 = g_variant_new_strv (strv1, -1);
-	g_assert (nm_property_compare (value1, value2) == 0);
-
-	g_variant_unref (value2);
-	value2 = g_variant_new_strv (strv2, -1);
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value2);
-	value2 = g_variant_new_strv (strv3, -1);
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value2);
-	value2 = g_variant_new_strv (strv4, -1);
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value1);
-	g_variant_unref (value2);
+    GVariant *        value1, *value2;
+    const char *const strv1[] = {"foo", "bar", "baz", NULL};
+    const char *const strv2[] = {"foo", "bar", "bar", NULL};
+    const char *const strv3[] = {"foo", "bar", NULL};
+    const char *const strv4[] = {"foo", "bar", "baz", "bam", NULL};
+
+    value1 = g_variant_new_strv(strv1, -1);
+    value2 = g_variant_new_strv(strv1, -1);
+    g_assert(nm_property_compare(value1, value2) == 0);
+
+    g_variant_unref(value2);
+    value2 = g_variant_new_strv(strv2, -1);
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value2);
+    value2 = g_variant_new_strv(strv3, -1);
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value2);
+    value2 = g_variant_new_strv(strv4, -1);
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value1);
+    g_variant_unref(value2);
 }
 
 static void
-compare_arrays (void)
+compare_arrays(void)
 {
-	GVariant *value1, *value2;
-	guint32 array[] = { 0, 1, 2, 3, 4 };
-
-	value1 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-	                                    array, G_N_ELEMENTS (array),
-	                                    sizeof (guint32));
-	value2 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-	                                    array, G_N_ELEMENTS (array),
-	                                    sizeof (guint32));
-
-	g_assert (nm_property_compare (value1, value2) == 0);
-
-	g_variant_unref (value2);
-	value2 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-	                                    array + 1, G_N_ELEMENTS (array) - 1,
-	                                    sizeof (guint32));
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	array[0] = 7;
-	g_variant_unref (value2);
-	value2 = g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-	                                    array, G_N_ELEMENTS (array),
-	                                    sizeof (guint32));
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value1);
-	g_variant_unref (value2);
+    GVariant *value1, *value2;
+    guint32   array[] = {0, 1, 2, 3, 4};
+
+    value1 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+                                       array,
+                                       G_N_ELEMENTS(array),
+                                       sizeof(guint32));
+    value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+                                       array,
+                                       G_N_ELEMENTS(array),
+                                       sizeof(guint32));
+
+    g_assert(nm_property_compare(value1, value2) == 0);
+
+    g_variant_unref(value2);
+    value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+                                       array + 1,
+                                       G_N_ELEMENTS(array) - 1,
+                                       sizeof(guint32));
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    array[0] = 7;
+    g_variant_unref(value2);
+    value2 = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
+                                       array,
+                                       G_N_ELEMENTS(array),
+                                       sizeof(guint32));
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value1);
+    g_variant_unref(value2);
 }
 
 static void
-compare_str_hash (void)
+compare_str_hash(void)
 {
-	GVariant *value1, *value2;
-	GVariantBuilder builder;
-
-	g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
-	g_variant_builder_add (&builder, "{ss}", "key1", "hello");
-	g_variant_builder_add (&builder, "{ss}", "key2", "world");
-	g_variant_builder_add (&builder, "{ss}", "key3", "!");
-	value1 = g_variant_builder_end (&builder);
-
-	g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
-	g_variant_builder_add (&builder, "{ss}", "key3", "!");
-	g_variant_builder_add (&builder, "{ss}", "key2", "world");
-	g_variant_builder_add (&builder, "{ss}", "key1", "hello");
-	value2 = g_variant_builder_end (&builder);
-
-	g_assert (nm_property_compare (value1, value2) == 0);
-
-	g_variant_unref (value2);
-	g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
-	g_variant_builder_add (&builder, "{ss}", "key1", "hello");
-	g_variant_builder_add (&builder, "{ss}", "key3", "!");
-	value2 = g_variant_builder_end (&builder);
-
-	g_assert (nm_property_compare (value1, value2) != 0);
-	g_assert (nm_property_compare (value2, value1) != 0);
-
-	g_variant_unref (value2);
-	g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}"));
-	g_variant_builder_add (&builder, "{ss}", "key1", "hello");
-	g_variant_builder_add (&builder, "{ss}", "key2", "moon");
-	g_variant_builder_add (&builder, "{ss}", "key3", "!");
-	value2 = g_variant_builder_end (&builder);
-
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value1);
-	g_variant_unref (value2);
+    GVariant *      value1, *value2;
+    GVariantBuilder builder;
+
+    g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}"));
+    g_variant_builder_add(&builder, "{ss}", "key1", "hello");
+    g_variant_builder_add(&builder, "{ss}", "key2", "world");
+    g_variant_builder_add(&builder, "{ss}", "key3", "!");
+    value1 = g_variant_builder_end(&builder);
+
+    g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}"));
+    g_variant_builder_add(&builder, "{ss}", "key3", "!");
+    g_variant_builder_add(&builder, "{ss}", "key2", "world");
+    g_variant_builder_add(&builder, "{ss}", "key1", "hello");
+    value2 = g_variant_builder_end(&builder);
+
+    g_assert(nm_property_compare(value1, value2) == 0);
+
+    g_variant_unref(value2);
+    g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}"));
+    g_variant_builder_add(&builder, "{ss}", "key1", "hello");
+    g_variant_builder_add(&builder, "{ss}", "key3", "!");
+    value2 = g_variant_builder_end(&builder);
+
+    g_assert(nm_property_compare(value1, value2) != 0);
+    g_assert(nm_property_compare(value2, value1) != 0);
+
+    g_variant_unref(value2);
+    g_variant_builder_init(&builder, G_VARIANT_TYPE("a{ss}"));
+    g_variant_builder_add(&builder, "{ss}", "key1", "hello");
+    g_variant_builder_add(&builder, "{ss}", "key2", "moon");
+    g_variant_builder_add(&builder, "{ss}", "key3", "!");
+    value2 = g_variant_builder_end(&builder);
+
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value1);
+    g_variant_unref(value2);
 }
 
 static void
-compare_ip6_addresses (void)
+compare_ip6_addresses(void)
 {
-	GVariant *value1, *value2;
-	struct in6_addr addr1;
-	struct in6_addr addr2;
-	struct in6_addr addr3;
-	guint32 prefix1 = 64;
-	guint32 prefix2 = 64;
-	guint32 prefix3 = 0;
-
-	inet_pton (AF_INET6, "1:2:3:4:5:6:7:8", &addr1);
-	inet_pton (AF_INET6, "ffff:2:3:4:5:6:7:8", &addr2);
-	inet_pton (AF_INET6, "::", &addr3);
-
-	value1 = g_variant_new ("(@ayu@ay)",
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr1.s6_addr, 16, 1),
-	                        prefix1,
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr3.s6_addr, 16, 1));
-
-	value2 = g_variant_new ("(@ayu@ay)",
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr1.s6_addr, 16, 1),
-	                        prefix1,
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr3.s6_addr, 16, 1));
-
-	g_assert (nm_property_compare (value1, value2) == 0);
-
-	g_variant_unref (value2);
-	value2 = g_variant_new ("(@ayu@ay)",
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr2.s6_addr, 16, 1),
-	                        prefix2,
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr3.s6_addr, 16, 1));
-
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value2);
-	value2 = g_variant_new ("(@ayu@ay)",
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr3.s6_addr, 16, 1),
-	                        prefix3,
-	                        g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                   (guint8 *) addr3.s6_addr, 16, 1));
-
-	g_assert (nm_property_compare (value1, value2) != 0);
-
-	g_variant_unref (value1);
-	g_variant_unref (value2);
+    GVariant *      value1, *value2;
+    struct in6_addr addr1;
+    struct in6_addr addr2;
+    struct in6_addr addr3;
+    guint32         prefix1 = 64;
+    guint32         prefix2 = 64;
+    guint32         prefix3 = 0;
+
+    inet_pton(AF_INET6, "1:2:3:4:5:6:7:8", &addr1);
+    inet_pton(AF_INET6, "ffff:2:3:4:5:6:7:8", &addr2);
+    inet_pton(AF_INET6, "::", &addr3);
+
+    value1 = g_variant_new(
+        "(@ayu@ay)",
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr1.s6_addr, 16, 1),
+        prefix1,
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1));
+
+    value2 = g_variant_new(
+        "(@ayu@ay)",
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr1.s6_addr, 16, 1),
+        prefix1,
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1));
+
+    g_assert(nm_property_compare(value1, value2) == 0);
+
+    g_variant_unref(value2);
+    value2 = g_variant_new(
+        "(@ayu@ay)",
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr2.s6_addr, 16, 1),
+        prefix2,
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1));
+
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value2);
+    value2 = g_variant_new(
+        "(@ayu@ay)",
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1),
+        prefix3,
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, (guint8 *) addr3.s6_addr, 16, 1));
+
+    g_assert(nm_property_compare(value1, value2) != 0);
+
+    g_variant_unref(value1);
+    g_variant_unref(value2);
 }
 
-NMTST_DEFINE ();
+NMTST_DEFINE();
 
 int
-main (int argc, char *argv[])
+main(int argc, char *argv[])
 {
-	nmtst_init (&argc, &argv, TRUE);
+    nmtst_init(&argc, &argv, TRUE);
 
-	g_test_add_func ("/libnm/compare/ints", compare_ints);
-	g_test_add_func ("/libnm/compare/strings", compare_strings);
-	g_test_add_func ("/libnm/compare/strv", compare_strv);
-	g_test_add_func ("/libnm/compare/arrays", compare_arrays);
-	g_test_add_func ("/libnm/compare/str_hash", compare_str_hash);
-	g_test_add_func ("/libnm/compare/ip6_addresses", compare_ip6_addresses);
+    g_test_add_func("/libnm/compare/ints", compare_ints);
+    g_test_add_func("/libnm/compare/strings", compare_strings);
+    g_test_add_func("/libnm/compare/strv", compare_strv);
+    g_test_add_func("/libnm/compare/arrays", compare_arrays);
+    g_test_add_func("/libnm/compare/str_hash", compare_str_hash);
+    g_test_add_func("/libnm/compare/ip6_addresses", compare_ip6_addresses);
 
-	return g_test_run ();
+    return g_test_run();
 }
diff --git a/libnm-core/tests/test-crypto.c b/libnm-core/tests/test-crypto.c
index 538bf858..a8af7f84 100644
--- a/libnm-core/tests/test-crypto.c
+++ b/libnm-core/tests/test-crypto.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: LGPL-2.1+
+/* SPDX-License-Identifier: LGPL-2.1+ */
 /*
  * Dan Williams <dcbw@redhat.com>
  * Copyright (C) 2007 - 2011 Red Hat, Inc.
@@ -17,7 +17,7 @@
 
 #include "nm-utils/nm-test-utils.h"
 
-#define TEST_CERT_DIR              NM_BUILD_SRCDIR"/libnm-core/tests/certs"
+#define TEST_CERT_DIR NM_BUILD_SRCDIR "/libnm-core/tests/certs"
 
 #if 0
 static const char *pem_rsa_key_begin = "-----BEGIN RSA PRIVATE KEY-----";
@@ -29,443 +29,427 @@ static const char *pem_dsa_key_end = "-----END DSA PRIVATE KEY-----";
 static void
 dump_key_to_pem (const char *key, gsize key_len, int key_type)
 {
-	char *b64 = NULL;
-	GString *str = NULL;
-	const char *start_tag;
-	const char *end_tag;
-	char *p;
-
-	switch (key_type) {
-	case NM_CRYPTO_KEY_TYPE_RSA:
-		start_tag = pem_rsa_key_begin;
-		end_tag = pem_rsa_key_end;
-		break;
-	case NM_CRYPTO_KEY_TYPE_DSA:
-		start_tag = pem_dsa_key_begin;
-		end_tag = pem_dsa_key_end;
-		break;
-	default:
-		g_warning ("Unknown key type %d", key_type);
-		return;
-	}
-
-	b64 = g_base64_encode ((const unsigned char *) key, key_len);
-	if (!b64) {
-		g_warning ("Couldn't base64 encode the key.");
-		goto out;
-	}
-
-	str = g_string_new (NULL);
-
-	g_string_append (str, start_tag);
-	g_string_append_c (str, '\n');
-
-	for (p = b64; p < (b64 + strlen (b64)); p += 64) {
-		g_string_append_len (str, p, strnlen (p, 64));
-		g_string_append_c (str, '\n');
-	}
-
-	g_string_append (str, end_tag);
-	g_string_append_c (str, '\n');
-
-	g_message ("Decrypted private key:\n\n%s", str->str);
+    char *b64 = NULL;
+    GString *str = NULL;
+    const char *start_tag;
+    const char *end_tag;
+    char *p;
+
+    switch (key_type) {
+    case NM_CRYPTO_KEY_TYPE_RSA:
+        start_tag = pem_rsa_key_begin;
+        end_tag = pem_rsa_key_end;
+        break;
+    case NM_CRYPTO_KEY_TYPE_DSA:
+        start_tag = pem_dsa_key_begin;
+        end_tag = pem_dsa_key_end;
+        break;
+    default:
+        g_warning ("Unknown key type %d", key_type);
+        return;
+    }
+
+    b64 = g_base64_encode ((const unsigned char *) key, key_len);
+    if (!b64) {
+        g_warning ("Couldn't base64 encode the key.");
+        goto out;
+    }
+
+    str = g_string_new (NULL);
+
+    g_string_append (str, start_tag);
+    g_string_append_c (str, '\n');
+
+    for (p = b64; p < (b64 + strlen (b64)); p += 64) {
+        g_string_append_len (str, p, strnlen (p, 64));
+        g_string_append_c (str, '\n');
+    }
+
+    g_string_append (str, end_tag);
+    g_string_append_c (str, '\n');
+
+    g_message ("Decrypted private key:\n\n%s", str->str);
 
 out:
-	g_free (b64);
-	if (str)
-		g_string_free (str, TRUE);
+    g_free (b64);
+    if (str)
+        g_string_free (str, TRUE);
 }
 #endif
 
 static void
-test_cert (gconstpointer test_data)
+test_cert(gconstpointer test_data)
 {
-	gs_free char *path = NULL;
-	gs_unref_bytes GBytes *cert = NULL;
-	NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
-	GError *error = NULL;
-	gboolean success;
+    gs_free char * path           = NULL;
+    gs_unref_bytes GBytes *cert   = NULL;
+    NMCryptoFileFormat     format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+    GError *               error  = NULL;
+    gboolean               success;
 
-	path = g_build_filename (TEST_CERT_DIR, (const char *) test_data, NULL);
+    path = g_build_filename(TEST_CERT_DIR, (const char *) test_data, NULL);
 
-	success = nm_crypto_load_and_verify_certificate (path, &format, &cert, &error);
-	nmtst_assert_success (success, error);
-	g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_X509);
+    success = nm_crypto_load_and_verify_certificate(path, &format, &cert, &error);
+    nmtst_assert_success(success, error);
+    g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_X509);
 
-	g_assert (nm_utils_file_is_certificate (path));
+    g_assert(nm_utils_file_is_certificate(path));
 }
 
 static void
-test_load_private_key (const char *path,
-                       const char *password,
-                       const char *decrypted_path,
-                       int expected_error)
+test_load_private_key(const char *path,
+                      const char *password,
+                      const char *decrypted_path,
+                      int         expected_error)
 {
-	NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
-	gboolean is_encrypted = FALSE;
-	gs_unref_bytes GBytes *array = NULL;
-	GError *error = NULL;
-
-	g_assert (nm_utils_file_is_private_key (path, &is_encrypted));
-	g_assert (is_encrypted);
-
-	array = nmtst_crypto_decrypt_openssl_private_key (path, password, &key_type, &error);
-	/* Even if the password is wrong, we should determine the key type */
-	g_assert_cmpint (key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
-
-	if (expected_error != -1) {
-		g_assert (array == NULL);
-		g_assert_error (error, NM_CRYPTO_ERROR, expected_error);
-		g_clear_error (&error);
-		return;
-	}
-
-	if (password == NULL) {
-		g_assert (array == NULL);
-		g_assert_no_error (error);
-		return;
-	}
-
-	g_assert (array != NULL);
-
-	if (decrypted_path) {
-		gs_free char *contents = NULL;
-		gsize length;
-
-		/* Compare the crypto decrypted key against a known-good decryption */
-		if (!g_file_get_contents (decrypted_path, &contents, &length, NULL))
-			g_assert_not_reached ();
-		g_assert (nm_utils_gbytes_equal_mem (array, contents, length));
-	}
+    NMCryptoKeyType key_type     = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+    gboolean        is_encrypted = FALSE;
+    gs_unref_bytes GBytes *array = NULL;
+    GError *               error = NULL;
+
+    g_assert(nm_utils_file_is_private_key(path, &is_encrypted));
+    g_assert(is_encrypted);
+
+    array = nmtst_crypto_decrypt_openssl_private_key(path, password, &key_type, &error);
+    /* Even if the password is wrong, we should determine the key type */
+    g_assert_cmpint(key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
+
+    if (expected_error != -1) {
+        g_assert(array == NULL);
+        g_assert_error(error, NM_CRYPTO_ERROR, expected_error);
+        g_clear_error(&error);
+        return;
+    }
+
+    if (password == NULL) {
+        g_assert(array == NULL);
+        g_assert_no_error(error);
+        return;
+    }
+
+    g_assert(array != NULL);
+
+    if (decrypted_path) {
+        gs_free char *contents = NULL;
+        gsize         length;
+
+        /* Compare the crypto decrypted key against a known-good decryption */
+        if (!g_file_get_contents(decrypted_path, &contents, &length, NULL))
+            g_assert_not_reached();
+        g_assert(nm_utils_gbytes_equal_mem(array, contents, length));
+    }
 }
 
 static void
-test_load_pkcs12 (const char *path,
-                  const char *password,
-                  int expected_error)
+test_load_pkcs12(const char *path, const char *password, int expected_error)
 {
-	NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
-	gboolean is_encrypted = FALSE;
-	GError *error = NULL;
-
-	g_assert (nm_utils_file_is_private_key (path, NULL));
-
-	format = nm_crypto_verify_private_key (path, password, &is_encrypted, &error);
-	if (expected_error != -1) {
-		g_assert_error (error, NM_CRYPTO_ERROR, expected_error);
-		g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
-		g_clear_error (&error);
-	} else {
-		g_assert_no_error (error);
-		g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_PKCS12);
-		g_assert (is_encrypted);
-	}
+    NMCryptoFileFormat format       = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+    gboolean           is_encrypted = FALSE;
+    GError *           error        = NULL;
+
+    g_assert(nm_utils_file_is_private_key(path, NULL));
+
+    format = nm_crypto_verify_private_key(path, password, &is_encrypted, &error);
+    if (expected_error != -1) {
+        g_assert_error(error, NM_CRYPTO_ERROR, expected_error);
+        g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+        g_clear_error(&error);
+    } else {
+        g_assert_no_error(error);
+        g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_PKCS12);
+        g_assert(is_encrypted);
+    }
 }
 
 static void
-test_load_pkcs12_no_password (const char *path)
+test_load_pkcs12_no_password(const char *path)
 {
-	NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
-	gboolean is_encrypted = FALSE;
-	GError *error = NULL;
+    NMCryptoFileFormat format       = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+    gboolean           is_encrypted = FALSE;
+    GError *           error        = NULL;
 
-	g_assert (nm_utils_file_is_private_key (path, NULL));
+    g_assert(nm_utils_file_is_private_key(path, NULL));
 
-	/* We should still get a valid returned crypto file format */
-	format = nm_crypto_verify_private_key (path, NULL, &is_encrypted, &error);
-	g_assert_no_error (error);
-	g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_PKCS12);
-	g_assert (is_encrypted);
+    /* We should still get a valid returned crypto file format */
+    format = nm_crypto_verify_private_key(path, NULL, &is_encrypted, &error);
+    g_assert_no_error(error);
+    g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_PKCS12);
+    g_assert(is_encrypted);
 }
 
 static void
-test_is_pkcs12 (const char *path, gboolean expect_fail)
+test_is_pkcs12(const char *path, gboolean expect_fail)
 {
-	gboolean is_pkcs12;
-	GError *error = NULL;
-
-	is_pkcs12 = nm_crypto_is_pkcs12_file (path, &error);
-
-	if (expect_fail) {
-		g_assert_error (error, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_INVALID_DATA);
-		g_assert (!is_pkcs12);
-		g_clear_error (&error);
-	} else {
-		g_assert_no_error (error);
-		g_assert (is_pkcs12);
-	}
+    gboolean is_pkcs12;
+    GError * error = NULL;
+
+    is_pkcs12 = nm_crypto_is_pkcs12_file(path, &error);
+
+    if (expect_fail) {
+        g_assert_error(error, NM_CRYPTO_ERROR, NM_CRYPTO_ERROR_INVALID_DATA);
+        g_assert(!is_pkcs12);
+        g_clear_error(&error);
+    } else {
+        g_assert_no_error(error);
+        g_assert(is_pkcs12);
+    }
 }
 
 static void
-test_load_pkcs8 (const char *path,
-                 const char *password,
-                 int expected_error)
+test_load_pkcs8(const char *path, const char *password, int expected_error)
 {
-	NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
-	gboolean is_encrypted = FALSE;
-	GError *error = NULL;
-
-	g_assert (nm_utils_file_is_private_key (path, NULL));
-
-	format = nm_crypto_verify_private_key (path, password, &is_encrypted, &error);
-	if (expected_error != -1) {
-		g_assert_error (error, NM_CRYPTO_ERROR, expected_error);
-		g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
-		g_clear_error (&error);
-	} else {
-		g_assert_no_error (error);
-		g_assert_cmpint (format, ==, NM_CRYPTO_FILE_FORMAT_RAW_KEY);
-		g_assert (is_encrypted);
-	}
+    NMCryptoFileFormat format       = NM_CRYPTO_FILE_FORMAT_UNKNOWN;
+    gboolean           is_encrypted = FALSE;
+    GError *           error        = NULL;
+
+    g_assert(nm_utils_file_is_private_key(path, NULL));
+
+    format = nm_crypto_verify_private_key(path, password, &is_encrypted, &error);
+    if (expected_error != -1) {
+        g_assert_error(error, NM_CRYPTO_ERROR, expected_error);
+        g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_UNKNOWN);
+        g_clear_error(&error);
+    } else {
+        g_assert_no_error(error);
+        g_assert_cmpint(format, ==, NM_CRYPTO_FILE_FORMAT_RAW_KEY);
+        g_assert(is_encrypted);
+    }
 }
 
 static void
-test_encrypt_private_key (const char *path,
-                          const char *password)
+test_encrypt_private_key(const char *path, const char *password)
 {
-	NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
-	gs_unref_bytes GBytes *array = NULL;
-	gs_unref_bytes GBytes *encrypted = NULL;
-	gs_unref_bytes GBytes *re_decrypted = NULL;
-	GError *error = NULL;
-
-	array = nmtst_crypto_decrypt_openssl_private_key (path, password, &key_type, &error);
-	nmtst_assert_success (array, error);
-	g_assert_cmpint (key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
-
-	/* Now re-encrypt the private key */
-	encrypted = nmtst_crypto_rsa_key_encrypt (g_bytes_get_data (array, NULL),
-	                                          g_bytes_get_size (array),
-	                                          password,
-	                                          NULL,
-	                                          &error);
-	nmtst_assert_success (encrypted, error);
-
-	/* Then re-decrypt the private key */
-	key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN;
-	re_decrypted = nmtst_crypto_decrypt_openssl_private_key_data (g_bytes_get_data (encrypted, NULL),
-	                                                              g_bytes_get_size (encrypted),
-	                                                              password,
-	                                                              &key_type,
-	                                                              &error);
-	nmtst_assert_success (re_decrypted, error);
-	g_assert_cmpint (key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
-
-	/* Compare the original decrypted key with the re-decrypted key */
-	g_assert (g_bytes_equal (array, re_decrypted));
+    NMCryptoKeyType key_type            = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+    gs_unref_bytes GBytes *array        = NULL;
+    gs_unref_bytes GBytes *encrypted    = NULL;
+    gs_unref_bytes GBytes *re_decrypted = NULL;
+    GError *               error        = NULL;
+
+    array = nmtst_crypto_decrypt_openssl_private_key(path, password, &key_type, &error);
+    nmtst_assert_success(array, error);
+    g_assert_cmpint(key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
+
+    /* Now re-encrypt the private key */
+    encrypted = nmtst_crypto_rsa_key_encrypt(g_bytes_get_data(array, NULL),
+                                             g_bytes_get_size(array),
+                                             password,
+                                             NULL,
+                                             &error);
+    nmtst_assert_success(encrypted, error);
+
+    /* Then re-decrypt the private key */
+    key_type     = NM_CRYPTO_KEY_TYPE_UNKNOWN;
+    re_decrypted = nmtst_crypto_decrypt_openssl_private_key_data(g_bytes_get_data(encrypted, NULL),
+                                                                 g_bytes_get_size(encrypted),
+                                                                 password,
+                                                                 &key_type,
+                                                                 &error);
+    nmtst_assert_success(re_decrypted, error);
+    g_assert_cmpint(key_type, ==, NM_CRYPTO_KEY_TYPE_RSA);
+
+    /* Compare the original decrypted key with the re-decrypted key */
+    g_assert(g_bytes_equal(array, re_decrypted));
 }
 
 static void
-test_key (gconstpointer test_data)
+test_key(gconstpointer test_data)
 {
-	char **parts, *path, *password, *decrypted_path;
-	int len;
-
-	parts = g_strsplit ((const char *) test_data, ", ", -1);
-	len = g_strv_length (parts);
-	if (len != 2 && len != 3)
-		g_error ("wrong number of arguments (<key file>, <password>, [<decrypted key file>])");
-
-	path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
-	password = parts[1];
-	decrypted_path = parts[2] ? g_build_filename (TEST_CERT_DIR, parts[2], NULL) : NULL;
-
-	test_is_pkcs12 (path, TRUE);
-	test_load_private_key (path, password, decrypted_path, -1);
-	test_load_private_key (path, "blahblahblah", NULL, NM_CRYPTO_ERROR_DECRYPTION_FAILED);
-	test_load_private_key (path, NULL, NULL, -1);
-	test_encrypt_private_key (path, password);
-
-	g_free (path);
-	g_free (decrypted_path);
-	g_strfreev (parts);
+    char **parts, *path, *password, *decrypted_path;
+    int    len;
+
+    parts = g_strsplit((const char *) test_data, ", ", -1);
+    len   = g_strv_length(parts);
+    if (len != 2 && len != 3)
+        g_error("wrong number of arguments (<key file>, <password>, [<decrypted key file>])");
+
+    path           = g_build_filename(TEST_CERT_DIR, parts[0], NULL);
+    password       = parts[1];
+    decrypted_path = parts[2] ? g_build_filename(TEST_CERT_DIR, parts[2], NULL) : NULL;
+
+    test_is_pkcs12(path, TRUE);
+    test_load_private_key(path, password, decrypted_path, -1);
+    test_load_private_key(path, "blahblahblah", NULL, NM_CRYPTO_ERROR_DECRYPTION_FAILED);
+    test_load_private_key(path, NULL, NULL, -1);
+    test_encrypt_private_key(path, password);
+
+    g_free(path);
+    g_free(decrypted_path);
+    g_strfreev(parts);
 }
 
 static void
-test_key_decrypted (gconstpointer test_data)
+test_key_decrypted(gconstpointer test_data)
 {
-	const char *file = (const char *) test_data;
-	gboolean is_encrypted = FALSE;
-	char *path;
+    const char *file         = (const char *) test_data;
+    gboolean    is_encrypted = FALSE;
+    char *      path;
 
-	path = g_build_filename (TEST_CERT_DIR, file, NULL);
+    path = g_build_filename(TEST_CERT_DIR, file, NULL);
 
-	g_assert (nm_utils_file_is_private_key (path, &is_encrypted));
-	g_assert (!is_encrypted);
+    g_assert(nm_utils_file_is_private_key(path, &is_encrypted));
+    g_assert(!is_encrypted);
 
-	g_free (path);
+    g_free(path);
 }
 
 static void
-test_pkcs12 (gconstpointer test_data)
+test_pkcs12(gconstpointer test_data)
 {
-	char **parts, *path, *password;
+    char **parts, *path, *password;
 
-	parts = g_strsplit ((const char *) test_data, ", ", -1);
-	if (g_strv_length (parts) != 2)
-		g_error ("wrong number of arguments (<file>, <password>)");
+    parts = g_strsplit((const char *) test_data, ", ", -1);
+    if (g_strv_length(parts) != 2)
+        g_error("wrong number of arguments (<file>, <password>)");
 
-	path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
-	password = parts[1];
+    path     = g_build_filename(TEST_CERT_DIR, parts[0], NULL);
+    password = parts[1];
 
-	test_is_pkcs12 (path, FALSE);
-	test_load_pkcs12 (path, password, -1);
-	test_load_pkcs12 (path, "blahblahblah", NM_CRYPTO_ERROR_DECRYPTION_FAILED);
-	test_load_pkcs12_no_password (path);
+    test_is_pkcs12(path, FALSE);
+    test_load_pkcs12(path, password, -1);
+    test_load_pkcs12(path, "blahblahblah", NM_CRYPTO_ERROR_DECRYPTION_FAILED);
+    test_load_pkcs12_no_password(path);
 
-	g_free (path);
-	g_strfreev (parts);
+    g_free(path);
+    g_strfreev(parts);
 }
 
 static void
-test_pkcs8 (gconstpointer test_data)
+test_pkcs8(gconstpointer test_data)
 {
-	char **parts, *path, *password;
+    char **parts, *path, *password;
 
-	parts = g_strsplit ((const char *) test_data, ", ", -1);
-	if (g_strv_length (parts) != 2)
-		g_error ("wrong number of arguments (<file>, <password>)");
+    parts = g_strsplit((const char *) test_data, ", ", -1);
+    if (g_strv_length(parts) != 2)
+        g_error("wrong number of arguments (<file>, <password>)");
 
-	path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
-	password = parts[1];
+    path     = g_build_filename(TEST_CERT_DIR, parts[0], NULL);
+    password = parts[1];
 
-	test_is_pkcs12 (path, TRUE);
-	/* Note: NSS and gnutls < 3.5.4 don't support all the ciphers that openssl
-	 * can use with PKCS#8 and thus the password can't be actually verified with
-	 * such libraries.
-	 */
-	test_load_pkcs8 (path, password, -1);
+    test_is_pkcs12(path, TRUE);
+    /* Note: NSS and gnutls < 3.5.4 don't support all the ciphers that openssl
+     * can use with PKCS#8 and thus the password can't be actually verified with
+     * such libraries.
+     */
+    test_load_pkcs8(path, password, -1);
 
-	g_free (path);
-	g_strfreev (parts);
+    g_free(path);
+    g_strfreev(parts);
 }
 
-#define SALT "sodium chloride"
+#define SALT           "sodium chloride"
 #define SHORT_PASSWORD "short"
-#define LONG_PASSWORD "this is a longer password than the short one"
-#define SHORT_DIGEST 16
-#define LONG_DIGEST 57
+#define LONG_PASSWORD  "this is a longer password than the short one"
+#define SHORT_DIGEST   16
+#define LONG_DIGEST    57
 
 struct {
-	const char *salt, *password;
-	gsize digest_size;
-	const char *result;
+    const char *salt, *password;
+    gsize       digest_size;
+    const char *result;
 } md5_tests[] = {
-	{ NULL, SHORT_PASSWORD, SHORT_DIGEST,
-	  "4f09daa9d95bcb166a302407a0e0babe" },
-	{ NULL, SHORT_PASSWORD, LONG_DIGEST,
-	  "4f09daa9d95bcb166a302407a0e0babeb7d62e5baf706830d007c253f0fe7584ad7e92dc00a599ec277293c298ae70ee3904c348e23be61c91" },
-	{ SALT, SHORT_PASSWORD, SHORT_DIGEST,
-	  "774771f7292210233b5724991d1f9894" },
-	{ SALT, SHORT_PASSWORD, LONG_DIGEST,
-	  "774771f7292210233b5724991d1f98941a6ffdb45e4dc7fa04b1fa6aceed379c1ade0577bc8f261d109942ed5736921c052664d72e0d5bade9" },
-	{ NULL, LONG_PASSWORD, SHORT_DIGEST,
-	  "e9c03517f81ff29bb777dac21fb1699c" },
-	{ NULL, LONG_PASSWORD, LONG_DIGEST,
-	  "e9c03517f81ff29bb777dac21fb1699c50968c7ccd8db4f0a59d00ffd87b05876d45f25a927d51a8400c35af60fbd64584349a8b7435d62fd9" },
-	{ SALT, LONG_PASSWORD, SHORT_DIGEST,
-	  "4e5c076e2f85f5e03994acbf3a9e10d6" },
-	{ SALT, LONG_PASSWORD, LONG_DIGEST,
-	  "4e5c076e2f85f5e03994acbf3a9e10d61a6969c9fdf47ae8b1f7e2725b3767b05cc974bfcb5344b630c91761e015e09d7794b5065662533bc9" },
-	{ NULL, "", SHORT_DIGEST,
-	  "d41d8cd98f00b204e9800998ecf8427e" },
-	{ SALT, "", SHORT_DIGEST,
-	  "7df1e0494c977195005d82a1809685e4" },
+    {NULL, SHORT_PASSWORD, SHORT_DIGEST, "4f09daa9d95bcb166a302407a0e0babe"},
+    {NULL,
+     SHORT_PASSWORD,
+     LONG_DIGEST,
+     "4f09daa9d95bcb166a302407a0e0babeb7d62e5baf706830d007c253f0fe7584ad7e92dc00a599ec277293c298ae7"
+     "0ee3904c348e23be61c91"},
+    {SALT, SHORT_PASSWORD, SHORT_DIGEST, "774771f7292210233b5724991d1f9894"},
+    {SALT,
+     SHORT_PASSWORD,
+     LONG_DIGEST,
+     "774771f7292210233b5724991d1f98941a6ffdb45e4dc7fa04b1fa6aceed379c1ade0577bc8f261d109942ed57369"
+     "21c052664d72e0d5bade9"},
+    {NULL, LONG_PASSWORD, SHORT_DIGEST, "e9c03517f81ff29bb777dac21fb1699c"},
+    {NULL,
+     LONG_PASSWORD,
+     LONG_DIGEST,
+     "e9c03517f81ff29bb777dac21fb1699c50968c7ccd8db4f0a59d00ffd87b05876d45f25a927d51a8400c35af60fbd"
+     "64584349a8b7435d62fd9"},
+    {SALT, LONG_PASSWORD, SHORT_DIGEST, "4e5c076e2f85f5e03994acbf3a9e10d6"},
+    {SALT,
+     LONG_PASSWORD,
+     LONG_DIGEST,
+     "4e5c076e2f85f5e03994acbf3a9e10d61a6969c9fdf47ae8b1f7e2725b3767b05cc974bfcb5344b630c91761e015e"
+     "09d7794b5065662533bc9"},
+    {NULL, "", SHORT_DIGEST, "d41d8cd98f00b204e9800998ecf8427e"},
+    {SALT, "", SHORT_DIGEST, "7df1e0494c977195005d82a1809685e4"},
 };
 
 static void
-test_md5 (void)
+test_md5(void)
 {
-	char digest[LONG_DIGEST], *hex;
-	int i;
-
-	for (i = 0; i < G_N_ELEMENTS (md5_tests); i++) {
-		memset (digest, 0, sizeof (digest));
-		nm_crypto_md5_hash ((const guint8 *) md5_tests[i].salt,
-		                    /* nm_crypto_md5_hash() used to clamp salt_len to 8.  It
-		                     * doesn't any more, so we need to do it here now to
-		                     * get output that matches md5_tests[i].result.
-		                     */
-		                    md5_tests[i].salt ? 8 : 0,
-		                    (const guint8 *) md5_tests[i].password,
-		                    strlen (md5_tests[i].password),
-		                    (guint8 *) digest,
-		                    md5_tests[i].digest_size);
-
-		hex = nm_utils_bin2hexstr (digest, md5_tests[i].digest_size, -1);
-		g_assert_cmpstr (hex, ==, md5_tests[i].result);
-		g_free (hex);
-	}
+    char digest[LONG_DIGEST], *hex;
+    int  i;
+
+    for (i = 0; i < G_N_ELEMENTS(md5_tests); i++) {
+        memset(digest, 0, sizeof(digest));
+        nm_crypto_md5_hash((const guint8 *) md5_tests[i].salt,
+                           /* nm_crypto_md5_hash() used to clamp salt_len to 8.  It
+                            * doesn't any more, so we need to do it here now to
+                            * get output that matches md5_tests[i].result.
+                            */
+                           md5_tests[i].salt ? 8 : 0,
+                           (const guint8 *) md5_tests[i].password,
+                           strlen(md5_tests[i].password),
+                           (guint8 *) digest,
+                           md5_tests[i].digest_size);
+
+        hex = nm_utils_bin2hexstr(digest, md5_tests[i].digest_size, -1);
+        g_assert_cmpstr(hex, ==, md5_tests[i].result);
+        g_free(hex);
+    }
 }
 
-NMTST_DEFINE ();
+NMTST_DEFINE();
 
 int
-main (int argc, char **argv)
+main(int argc, char **argv)
 {
-	GError *error = NULL;
-	gboolean success;
-	int ret;
-
-	nmtst_init (&argc, &argv, TRUE);
-
-	success = _nm_crypto_init (&error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	g_test_add_data_func ("/libnm/crypto/cert/pem",
-	                      "test_ca_cert.pem",
-	                      test_cert);
-	g_test_add_data_func ("/libnm/crypto/cert/pem-2",
-	                      "test2_ca_cert.pem",
-	                      test_cert);
-	g_test_add_data_func ("/libnm/crypto/cert/der",
-	                      "test_ca_cert.der",
-	                      test_cert);
-	g_test_add_data_func ("/libnm/crypto/cert/pem-no-ending-newline",
-	                      "ca-no-ending-newline.pem",
-	                      test_cert);
-	g_test_add_data_func ("/libnm/crypto/cert/pem-combined",
-	                      "test_key_and_cert.pem",
-	                      test_cert);
-	g_test_add_data_func ("/libnm/crypto/cert/pem-combined-2",
-	                      "test2_key_and_cert.pem",
-	                      test_cert);
-
-	g_test_add_data_func ("/libnm/crypto/key/padding-6",
-	                      "test_key_and_cert.pem, test, test-key-only-decrypted.der",
-	                      test_key);
-	g_test_add_data_func ("/libnm/crypto/key/key-only",
-	                      "test-key-only.pem, test, test-key-only-decrypted.der",
-	                      test_key);
-	g_test_add_data_func ("/libnm/crypto/key/padding-8",
-	                      "test2_key_and_cert.pem, 12345testing",
-	                      test_key);
-	g_test_add_data_func ("/libnm/crypto/key/aes-128",
-	                      "test-aes-128-key.pem, test-aes-password",
-	                      test_key);
-	g_test_add_data_func ("/libnm/crypto/key/aes-256",
-	                      "test-aes-256-key.pem, test-aes-password",
-	                      test_key);
-	g_test_add_data_func ("/libnm/crypto/key/decrypted",
-	                      "test-key-only-decrypted.pem",
-	                      test_key_decrypted);
-
-	g_test_add_data_func ("/libnm/crypto/PKCS#12/1",
-	                      "test-cert.p12, test",
-	                      test_pkcs12);
-	g_test_add_data_func ("/libnm/crypto/PKCS#12/2",
-	                      "test2-cert.p12, 12345testing",
-	                      test_pkcs12);
-
-	g_test_add_data_func ("/libnm/crypto/PKCS#8",
-	                      "pkcs8-enc-key.pem, 1234567890",
-	                      test_pkcs8);
-
-	g_test_add_func ("/libnm/crypto/md5", test_md5);
-
-	ret = g_test_run ();
-
-	return ret;
+    GError * error = NULL;
+    gboolean success;
+    int      ret;
+
+    nmtst_init(&argc, &argv, TRUE);
+
+    success = _nm_crypto_init(&error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    g_test_add_data_func("/libnm/crypto/cert/pem", "test_ca_cert.pem", test_cert);
+    g_test_add_data_func("/libnm/crypto/cert/pem-2", "test2_ca_cert.pem", test_cert);
+    g_test_add_data_func("/libnm/crypto/cert/der", "test_ca_cert.der", test_cert);
+    g_test_add_data_func("/libnm/crypto/cert/pem-no-ending-newline",
+                         "ca-no-ending-newline.pem",
+                         test_cert);
+    g_test_add_data_func("/libnm/crypto/cert/pem-combined", "test_key_and_cert.pem", test_cert);
+    g_test_add_data_func("/libnm/crypto/cert/pem-combined-2", "test2_key_and_cert.pem", test_cert);
+
+    g_test_add_data_func("/libnm/crypto/key/padding-6",
+                         "test_key_and_cert.pem, test, test-key-only-decrypted.der",
+                         test_key);
+    g_test_add_data_func("/libnm/crypto/key/key-only",
+                         "test-key-only.pem, test, test-key-only-decrypted.der",
+                         test_key);
+    g_test_add_data_func("/libnm/crypto/key/padding-8",
+                         "test2_key_and_cert.pem, 12345testing",
+                         test_key);
+    g_test_add_data_func("/libnm/crypto/key/aes-128",
+                         "test-aes-128-key.pem, test-aes-password",
+                         test_key);
+    g_test_add_data_func("/libnm/crypto/key/aes-256",
+                         "test-aes-256-key.pem, test-aes-password",
+                         test_key);
+    g_test_add_data_func("/libnm/crypto/key/decrypted",
+                         "test-key-only-decrypted.pem",
+                         test_key_decrypted);
+
+    g_test_add_data_func("/libnm/crypto/PKCS#12/1", "test-cert.p12, test", test_pkcs12);
+    g_test_add_data_func("/libnm/crypto/PKCS#12/2", "test2-cert.p12, 12345testing", test_pkcs12);
+
+    g_test_add_data_func("/libnm/crypto/PKCS#8", "pkcs8-enc-key.pem, 1234567890", test_pkcs8);
+
+    g_test_add_func("/libnm/crypto/md5", test_md5);
+
+    ret = g_test_run();
+
+    return ret;
 }
-
diff --git a/libnm-core/tests/test-general-enums.h b/libnm-core/tests/test-general-enums.h
index 451f1b50..29b8823c 100644
--- a/libnm-core/tests/test-general-enums.h
+++ b/libnm-core/tests/test-general-enums.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: LGPL-2.1+
+/* SPDX-License-Identifier: LGPL-2.1+ */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
@@ -7,29 +7,29 @@
 #define _NM_TEST_GENERAL_ENUMS_H_
 
 typedef enum {
-	NM_TEST_GENERAL_BOOL_ENUM_NO       = 0,
-	NM_TEST_GENERAL_BOOL_ENUM_YES      = 1,
-	NM_TEST_GENERAL_BOOL_ENUM_MAYBE    = 2,
-	NM_TEST_GENERAL_BOOL_ENUM_UNKNOWN  = 3,
-	NM_TEST_GENERAL_BOOL_ENUM_INVALID  = 4, /*< skip >*/
-	NM_TEST_GENERAL_BOOL_ENUM_67       = 67,
-	NM_TEST_GENERAL_BOOL_ENUM_46       = 64,
+    NM_TEST_GENERAL_BOOL_ENUM_NO      = 0,
+    NM_TEST_GENERAL_BOOL_ENUM_YES     = 1,
+    NM_TEST_GENERAL_BOOL_ENUM_MAYBE   = 2,
+    NM_TEST_GENERAL_BOOL_ENUM_UNKNOWN = 3,
+    NM_TEST_GENERAL_BOOL_ENUM_INVALID = 4, /*< skip >*/
+    NM_TEST_GENERAL_BOOL_ENUM_67      = 67,
+    NM_TEST_GENERAL_BOOL_ENUM_46      = 64,
 } NMTestGeneralBoolEnum;
 
 typedef enum {
-	NM_TEST_GENERAL_META_FLAGS_NONE    = 0,
-	NM_TEST_GENERAL_META_FLAGS_FOO     = (1 << 0),
-	NM_TEST_GENERAL_META_FLAGS_BAR     = (1 << 1),
-	NM_TEST_GENERAL_META_FLAGS_BAZ     = (1 << 2),
-	NM_TEST_GENERAL_META_FLAGS_0x8     = (1 << 3),
-	NM_TEST_GENERAL_META_FLAGS_0x4     = (1 << 4),
+    NM_TEST_GENERAL_META_FLAGS_NONE = 0,
+    NM_TEST_GENERAL_META_FLAGS_FOO  = (1 << 0),
+    NM_TEST_GENERAL_META_FLAGS_BAR  = (1 << 1),
+    NM_TEST_GENERAL_META_FLAGS_BAZ  = (1 << 2),
+    NM_TEST_GENERAL_META_FLAGS_0x8  = (1 << 3),
+    NM_TEST_GENERAL_META_FLAGS_0x4  = (1 << 4),
 } NMTestGeneralMetaFlags;
 
-typedef enum {  /*< flags >*/
-	NM_TEST_GENERAL_COLOR_FLAGS_WHITE  = 1, /*< skip >*/
-	NM_TEST_GENERAL_COLOR_FLAGS_BLUE   = 2,
-	NM_TEST_GENERAL_COLOR_FLAGS_RED    = 4,
-	NM_TEST_GENERAL_COLOR_FLAGS_GREEN  = 8,
+typedef enum {                                        /*< flags >*/
+               NM_TEST_GENERAL_COLOR_FLAGS_WHITE = 1, /*< skip >*/
+               NM_TEST_GENERAL_COLOR_FLAGS_BLUE  = 2,
+               NM_TEST_GENERAL_COLOR_FLAGS_RED   = 4,
+               NM_TEST_GENERAL_COLOR_FLAGS_GREEN = 8,
 } NMTestGeneralColorFlags;
 
 #endif /* _NM_TEST_GENERAL_ENUMS_H_ */
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
index f70a7d5a..65717144 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2008 - 2018 Red Hat, Inc.
  */
@@ -14,6 +14,7 @@
 #include "nm-std-aux/c-list-util.h"
 #include "nm-glib-aux/nm-enum-utils.h"
 #include "nm-glib-aux/nm-str-buf.h"
+#include "nm-glib-aux/nm-json-aux.h"
 #include "systemd/nm-sd-utils-shared.h"
 
 #include "nm-utils.h"
@@ -66,626 +67,697 @@
  * to have at least size (int). That way:
  *   g_object_set (obj, PROP_BOOL, bool_val, NULL);
  * will just work correctly. */
-G_STATIC_ASSERT (sizeof (gboolean) == sizeof (int));
-G_STATIC_ASSERT (sizeof (bool) <= sizeof (int));
+G_STATIC_ASSERT(sizeof(gboolean) == sizeof(int));
+G_STATIC_ASSERT(sizeof(bool) <= sizeof(int));
 
 /*****************************************************************************/
 
 static void
-test_nm_ascii_spaces (void)
+test_nm_ascii_spaces(void)
 {
-	int i;
-	const char *const S = NM_ASCII_SPACES;
+    int               i;
+    const char *const S = NM_ASCII_SPACES;
 
-	for (i = 0; S[i]; i++)
-		g_assert (!strchr (&S[i + 1], S[i]));
+    for (i = 0; S[i]; i++)
+        g_assert(!strchr(&S[i + 1], S[i]));
 
-	for (i = 0; S[i] != '\0'; i++)
-		g_assert (g_ascii_isspace (S[i]));
+    for (i = 0; S[i] != '\0'; i++)
+        g_assert(g_ascii_isspace(S[i]));
 
-	g_assert (!g_ascii_isspace ((char) 0));
-	for (i = 1; i < 0x100; i++) {
-		if (g_ascii_isspace ((char) i))
-			g_assert (strchr (S, (char) i));
-		else
-			g_assert (!strchr (S, (char) i));
-	}
+    g_assert(!g_ascii_isspace((char) 0));
+    for (i = 1; i < 0x100; i++) {
+        if (g_ascii_isspace((char) i))
+            g_assert(strchr(S, (char) i));
+        else
+            g_assert(!strchr(S, (char) i));
+    }
 }
 
 /*****************************************************************************/
 
 typedef struct _nm_packed {
-	int v0;
-	char v1;
-	double v2;
-	guint8 v3;
+    int    v0;
+    char   v1;
+    double v2;
+    guint8 v3;
 } TestHashStruct;
 
 static void
-_test_hash_struct (int v0, char v1, double v2, guint8 v3)
+_test_hash_struct(int v0, char v1, double v2, guint8 v3)
 {
-	const TestHashStruct s = {
-		.v0 = v0,
-		.v1 = v1,
-		.v2 = v2,
-		.v3 = v3,
-	};
-	NMHashState h;
-	guint hh;
+    const TestHashStruct s = {
+        .v0 = v0,
+        .v1 = v1,
+        .v2 = v2,
+        .v3 = v3,
+    };
+    NMHashState h;
+    guint       hh;
 
-	nm_hash_init (&h, 100);
-	nm_hash_update (&h, &s, sizeof (s));
-	hh = nm_hash_complete (&h);
+    nm_hash_init(&h, 100);
+    nm_hash_update(&h, &s, sizeof(s));
+    hh = nm_hash_complete(&h);
 
-	nm_hash_init (&h, 100);
-	nm_hash_update_val (&h, v0);
-	nm_hash_update_val (&h, v1);
-	nm_hash_update_val (&h, v2);
-	nm_hash_update_val (&h, v3);
-	g_assert_cmpint (hh, ==, nm_hash_complete (&h));
+    nm_hash_init(&h, 100);
+    nm_hash_update_val(&h, v0);
+    nm_hash_update_val(&h, v1);
+    nm_hash_update_val(&h, v2);
+    nm_hash_update_val(&h, v3);
+    g_assert_cmpint(hh, ==, nm_hash_complete(&h));
 
-	nm_hash_init (&h, 100);
-	nm_hash_update_vals (&h, v0, v1, v2, v3);
-	g_assert_cmpint (hh, ==, nm_hash_complete (&h));
+    nm_hash_init(&h, 100);
+    nm_hash_update_vals(&h, v0, v1, v2, v3);
+    g_assert_cmpint(hh, ==, nm_hash_complete(&h));
 }
 
 static guint
-_test_hash_str (const char *str)
-{
-	NMHashState h;
-	guint v, v2;
-	const guint SEED = 10;
-
-	nm_hash_init (&h, SEED);
-	nm_hash_update_str0 (&h, str);
-	v = nm_hash_complete (&h);
-
-	/* assert that hashing a string and a buffer yields the
-	 * same result.
-	 *
-	 * I think that is a desirable property. */
-	nm_hash_init (&h, SEED);
-	nm_hash_update_mem (&h, str, strlen (str));
-	v2 = nm_hash_complete (&h);
-
-	g_assert (v == v2);
-	return v;
-}
-
-#define _test_hash_vals(type, ...) \
-	G_STMT_START { \
-		NMHashState h0, h1, h2, h3; \
-		const type v[] = { __VA_ARGS__ }; \
-		guint h; \
-		guint i; \
-		\
-		nm_hash_init (&h0, 10); \
-		nm_hash_init (&h1, 10); \
-		nm_hash_init (&h2, 10); \
-		nm_hash_init (&h3, 10); \
-		\
-		/* assert that it doesn't matter, whether we hash the values individually,
-		 * or all at once, or via the convenience macros nm_hash_update_val()
-		 * and nm_hash_update_vals(). */ \
-		for (i = 0; i < G_N_ELEMENTS (v); i++) { \
-			nm_hash_update (&h0, &v[i], sizeof (type)); \
-			nm_hash_update_val (&h1, v[i]); \
-		} \
-		nm_hash_update_vals (&h2, __VA_ARGS__); \
-		nm_hash_update (&h3, v, sizeof (v)); \
-		\
-		h = nm_hash_complete (&h0); \
-		g_assert_cmpint (h, ==, nm_hash_complete (&h1)); \
-		g_assert_cmpint (h, ==, nm_hash_complete (&h2)); \
-		g_assert_cmpint (h, ==, nm_hash_complete (&h3)); \
-	} G_STMT_END
-
-static void
-test_nm_hash (void)
-{
-	g_assert (nm_hash_static (0));
-	g_assert (nm_hash_static (777));
-
-	g_assert (nm_hash_str (NULL));
-	g_assert (nm_hash_str (""));
-	g_assert (nm_hash_str ("a"));
-
-	g_assert (nm_hash_ptr (NULL));
-	g_assert (nm_hash_ptr (""));
-	g_assert (nm_hash_ptr ("a"));
-
-	_test_hash_str ("");
-	_test_hash_str ("a");
-	_test_hash_str ("aa");
-	_test_hash_str ("diceros bicornis longipes");
-
-	/* assert that nm_hash_update_vals() is the same as calling nm_hash_update_val() multiple times. */
-	_test_hash_vals (int, 1);
-	_test_hash_vals (int, 1, 2);
-	_test_hash_vals (int, 1, 2, 3);
-	_test_hash_vals (int, 1, 2, 3, 4);
-	_test_hash_vals (long, 1l);
-	_test_hash_vals (long, 1l, 2l, 3l, 4l, 5l);
-
-	_test_hash_struct (10, 'a', 5.4, 7);
-	_test_hash_struct (-10, '\0', -5.4e49, 255);
-
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint8,                       1, 0), ==, 0x002);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint8,                       1, 1), ==, 0x003);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint8,           1, 1, 0, 0, 0, 0), ==, 0x030);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint8,           1, 1, 0, 0, 0, 1), ==, 0x031);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint8,     0, 0, 1, 1, 0, 0, 0, 1), ==, 0x031);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint16,    0, 0, 1, 1, 0, 0, 0, 1), ==, 0x031);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint16, 0, 0, 0, 1, 1, 0, 0, 0, 1), ==, 0x031);
-	g_assert_cmpint (NM_HASH_COMBINE_BOOLS (guint16, 1, 0, 0, 1, 1, 0, 0, 0, 1), ==, 0x131);
+_test_hash_str(const char *str)
+{
+    NMHashState h;
+    guint       v, v2;
+    const guint SEED = 10;
+
+    nm_hash_init(&h, SEED);
+    nm_hash_update_str0(&h, str);
+    v = nm_hash_complete(&h);
+
+    /* assert that hashing a string and a buffer yields the
+     * same result.
+     *
+     * I think that is a desirable property. */
+    nm_hash_init(&h, SEED);
+    nm_hash_update_mem(&h, str, strlen(str));
+    v2 = nm_hash_complete(&h);
+
+    g_assert(v == v2);
+    return v;
+}
+
+#define _test_hash_vals(type, ...)                                                 \
+    G_STMT_START                                                                   \
+    {                                                                              \
+        NMHashState h0, h1, h2, h3;                                                \
+        const type  v[] = {__VA_ARGS__};                                           \
+        guint       h;                                                             \
+        guint       i;                                                             \
+                                                                                   \
+        nm_hash_init(&h0, 10);                                                     \
+        nm_hash_init(&h1, 10);                                                     \
+        nm_hash_init(&h2, 10);                                                     \
+        nm_hash_init(&h3, 10);                                                     \
+                                                                                   \
+        /* assert that it doesn't matter, whether we hash the values individually,
+         * or all at once, or via the convenience macros nm_hash_update_val()
+         * and nm_hash_update_vals(). */ \
+        for (i = 0; i < G_N_ELEMENTS(v); i++) {                                    \
+            nm_hash_update(&h0, &v[i], sizeof(type));                              \
+            nm_hash_update_val(&h1, v[i]);                                         \
+        }                                                                          \
+        nm_hash_update_vals(&h2, __VA_ARGS__);                                     \
+        nm_hash_update(&h3, v, sizeof(v));                                         \
+                                                                                   \
+        h = nm_hash_complete(&h0);                                                 \
+        g_assert_cmpint(h, ==, nm_hash_complete(&h1));                             \
+        g_assert_cmpint(h, ==, nm_hash_complete(&h2));                             \
+        g_assert_cmpint(h, ==, nm_hash_complete(&h3));                             \
+    }                                                                              \
+    G_STMT_END
+
+static void
+test_nm_hash(void)
+{
+    g_assert(nm_hash_static(0));
+    g_assert(nm_hash_static(777));
+
+    g_assert(nm_hash_str(NULL));
+    g_assert(nm_hash_str(""));
+    g_assert(nm_hash_str("a"));
+
+    g_assert(nm_hash_ptr(NULL));
+    g_assert(nm_hash_ptr(""));
+    g_assert(nm_hash_ptr("a"));
+
+    _test_hash_str("");
+    _test_hash_str("a");
+    _test_hash_str("aa");
+    _test_hash_str("diceros bicornis longipes");
+
+    /* assert that nm_hash_update_vals() is the same as calling nm_hash_update_val() multiple times. */
+    _test_hash_vals(int, 1);
+    _test_hash_vals(int, 1, 2);
+    _test_hash_vals(int, 1, 2, 3);
+    _test_hash_vals(int, 1, 2, 3, 4);
+    _test_hash_vals(long, 1l);
+    _test_hash_vals(long, 1l, 2l, 3l, 4l, 5l);
+
+    _test_hash_struct(10, 'a', 5.4, 7);
+    _test_hash_struct(-10, '\0', -5.4e49, 255);
+
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint8, 1, 0), ==, 0x002);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint8, 1, 1), ==, 0x003);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint8, 1, 1, 0, 0, 0, 0), ==, 0x030);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint8, 1, 1, 0, 0, 0, 1), ==, 0x031);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint8, 0, 0, 1, 1, 0, 0, 0, 1), ==, 0x031);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint16, 0, 0, 1, 1, 0, 0, 0, 1), ==, 0x031);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint16, 0, 0, 0, 1, 1, 0, 0, 0, 1), ==, 0x031);
+    g_assert_cmpint(NM_HASH_COMBINE_BOOLS(guint16, 1, 0, 0, 1, 1, 0, 0, 0, 1), ==, 0x131);
 }
 
 /*****************************************************************************/
 
 static void
-test_nm_g_slice_free_fcn (void)
+test_nm_g_slice_free_fcn(void)
 {
-	gpointer p;
-	struct {
-		char a1;
-		char a2;
-	} xx;
+    gpointer p;
+    struct {
+        char a1;
+        char a2;
+    } xx;
 
-	p = g_slice_new (gint64);
-	(nm_g_slice_free_fcn (gint64)) (p);
+    p = g_slice_new(gint64);
+    (nm_g_slice_free_fcn(gint64))(p);
 
-	p = g_slice_new (gint32);
-	(nm_g_slice_free_fcn (gint32)) (p);
+    p = g_slice_new(gint32);
+    (nm_g_slice_free_fcn(gint32))(p);
 
-	p = g_slice_new (int);
-	(nm_g_slice_free_fcn (int)) (p);
+    p = g_slice_new(int);
+    (nm_g_slice_free_fcn(int))(p);
 
-	p = g_slice_new (gint64);
-	nm_g_slice_free_fcn_gint64 (p);
+    p = g_slice_new(gint64);
+    nm_g_slice_free_fcn_gint64(p);
 
-	p = g_slice_alloc (sizeof (xx));
-	(nm_g_slice_free_fcn (xx)) (p);
+    p = g_slice_alloc(sizeof(xx));
+    (nm_g_slice_free_fcn(xx))(p);
 }
 
 /*****************************************************************************/
 
 static void
-_do_test_nm_utils_strsplit_set_f_one (NMUtilsStrsplitSetFlags flags,
-                                      const char *str,
-                                      gsize words_len,
-                                      const char *const*exp_words)
-{
-#define DELIMITERS           " \n"
-#define DELIMITERS_C         ' ', '\n'
-
-	gs_free const char **words = NULL;
-	gsize i, j, k;
-	const gboolean f_allow_escaping = NM_FLAGS_HAS (flags, NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING);
-	const gboolean f_preserve_empty = NM_FLAGS_HAS (flags, NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY);
-	const char *s1;
-	gsize initial_offset;
-	gs_strfreev char **words_g = NULL;
-
-	g_assert (!NM_FLAGS_ANY (flags, ~(  NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING
-	                                  | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY)));
-
-	/* assert that the epected words are valid (and don't contain unescaped delimiters). */
-	for (i = 0; i < words_len; i++) {
-		const char *w = exp_words[i];
-
-		g_assert (w);
-		if (!f_preserve_empty)
-			g_assert (w[0]);
-		for (k = 0; w[k]; ) {
-			if (   f_allow_escaping
-			    && w[k] == '\\') {
-				k++;
-				if (w[k] == '\0')
-					break;
-				k++;
-				continue;
-			}
-			g_assert (!NM_IN_SET (w[k], DELIMITERS_C));
-			k++;
-		}
-		if (!f_allow_escaping)
-			g_assert (!NM_STRCHAR_ANY (w, ch, NM_IN_SET (ch, DELIMITERS_C)));
-	}
-
-	initial_offset = (f_preserve_empty || !str)
-	                 ? 0u
-	                 : strspn (str, DELIMITERS);
-
-	/* first compare our expected values with what g_strsplit_set() would
-	 * do. */
-	words_g = str ? g_strsplit_set (str, DELIMITERS, -1) : NULL;
-	if (str == NULL) {
-		g_assert_cmpint (words_len, ==, 0);
-		g_assert (!words_g);
-	} else if (nm_streq0 (str, "")) {
-		g_assert_cmpint (words_len, ==, 0);
-		g_assert (words_g);
-		g_assert (!words_g[0]);
-	} else {
-		g_assert (words_g);
-		g_assert (words_g[0]);
-		if (!f_allow_escaping) {
-			if (!f_preserve_empty) {
-				for (i = 0, j = 0; words_g[i]; i++) {
-					if (words_g[i][0] == '\0')
-						g_free (words_g[i]);
-					else
-						words_g[j++] = words_g[i];
-				}
-				words_g[j] = NULL;
-			}
-			if (f_preserve_empty)
-				g_assert_cmpint (words_len, >, 0);
-			for (i = 0; i < words_len; i++) {
-				g_assert (exp_words[i]);
-				g_assert_cmpstr (exp_words[i], ==, words_g[i]);
-			}
-			g_assert (words_g[words_len] == NULL);
-			g_assert_cmpint (NM_PTRARRAY_LEN (words_g), ==, words_len);
-			g_assert (_nm_utils_strv_cmp_n (exp_words, words_len, NM_CAST_STRV_CC (words_g), -1) == 0);
-		}
-	}
-
-	if (   flags == NM_UTILS_STRSPLIT_SET_FLAGS_NONE
-	    && nmtst_get_rand_bool ())
-		words = nm_utils_strsplit_set (str, DELIMITERS);
-	else if (   flags == NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY
-	         && nmtst_get_rand_bool ())
-		words = nm_utils_strsplit_set_with_empty (str, DELIMITERS);
-	else
-		words = nm_utils_strsplit_set_full (str, DELIMITERS, flags);
-
-	g_assert_cmpint (NM_PTRARRAY_LEN (words), ==, words_len);
-
-	if (words_len == 0) {
-		g_assert (!words);
-		g_assert (   !str
-		          || NM_STRCHAR_ALL (str, ch, NM_IN_SET (ch, DELIMITERS_C)));
-		return;
-	}
-
-	g_assert (words);
-	for (i = 0; i < words_len; i++)
-		g_assert_cmpstr (exp_words[i], ==, words[i]);
-	g_assert (words[words_len] == NULL);
-
-	g_assert (_nm_utils_strv_cmp_n (exp_words, words_len, words, -1) == 0);
-
-	s1 = words[0];
-	g_assert (s1 >= (char *) &words[words_len + 1]);
-	s1 = &s1[strlen (str)];
-	for (i = 1; i < words_len; i++) {
-		g_assert (&(words[i - 1])[strlen (words[i - 1])] < words[i]);
-		g_assert (words[i] <= s1);
-	}
-
-	/* while strsplit removes all delimiters, we can relatively easily find them
-	 * in the original string. Assert that the original string and the pointer offsets
-	 * of words correspond. In particular, find idx_delim_after and idx_delim_before
-	 * to determine which delimiter was after/before a word. */
-	{
-		gsize idx_word_start;
-		gsize idx_delim_after_old = G_MAXSIZE;
-
-		idx_word_start = initial_offset;
-		for (i = 0; i < words_len; i++) {
-			const gsize l_i = strlen (words[i]);
-			gsize idx_delim_after;
-			gsize idx_delim_before;
-
-			/* find the delimiter *after* words[i]. We can do that by looking at the next
-			 * word and calculating the pointer difference.
-			 *
-			 * The delimiter after the very last word is '\0' and requires strlen() to find. */
-			idx_delim_after = initial_offset + ((words[i] - words[0]) + l_i);
-			if (idx_delim_after != idx_word_start + l_i) {
-				g_assert (!f_preserve_empty);
-				g_assert_cmpint (idx_word_start + l_i, <, idx_delim_after);
-				idx_word_start = idx_delim_after - l_i;
-			}
-			if (i + 1 < words_len) {
-				gsize x = initial_offset + ((words[i + 1] - words[0]) - 1);
-
-				if (idx_delim_after != x) {
-					g_assert (!f_preserve_empty);
-					g_assert_cmpint (idx_delim_after, <, x);
-					for (k = idx_delim_after; k <= x; k++)
-						g_assert (NM_IN_SET (str[k], DELIMITERS_C));
-				}
-				g_assert (NM_IN_SET (str[idx_delim_after], DELIMITERS_C));
-			} else {
-				if (f_preserve_empty)
-					g_assert (NM_IN_SET (str[idx_delim_after], '\0'));
-				else
-					g_assert (NM_IN_SET (str[idx_delim_after], '\0', DELIMITERS_C));
-			}
-
-			/* find the delimiter *before* words[i]. */
-			if (i == 0) {
-				/* there is only a delimiter *before*, with !f_preserve_empty and leading
-				 * delimiters. */
-				idx_delim_before = G_MAXSIZE;
-				if (initial_offset > 0) {
-					g_assert (!f_preserve_empty);
-					idx_delim_before = initial_offset - 1;
-				}
-			} else
-				idx_delim_before = initial_offset + (words[i] - words[0]) - 1;
-			if (idx_delim_before != G_MAXSIZE)
-				g_assert (NM_IN_SET (str[idx_delim_before], DELIMITERS_C));
-			if (idx_delim_after_old != idx_delim_before) {
-				g_assert (!f_preserve_empty);
-				if (i == 0) {
-					g_assert_cmpint (initial_offset, >, 0);
-					g_assert_cmpint (idx_delim_before, !=, G_MAXSIZE);
-					g_assert_cmpint (idx_delim_before, ==, initial_offset - 1);
-				} else {
-					g_assert_cmpint (idx_delim_after_old, !=, G_MAXSIZE);
-					g_assert_cmpint (idx_delim_before, !=, G_MAXSIZE);
-					g_assert_cmpint (idx_delim_after_old, <, idx_delim_before);
-					for (k = idx_delim_after_old; k <= idx_delim_before; k++)
-						g_assert (NM_IN_SET (str[k], DELIMITERS_C));
-				}
-			}
-
-			for (k = 0; k < l_i; ) {
-				if (   f_allow_escaping
-				    && str[idx_word_start + k] == '\\') {
-					k++;
-					if (k >= l_i)
-						break;
-					k++;
-					continue;
-				}
-				g_assert (!NM_IN_SET (str[idx_word_start + k], DELIMITERS_C));
-				k++;
-			}
-			g_assert (strncmp (words[i], &str[idx_word_start], l_i) == 0);
-
-			if (i > 0) {
-				const char *s = &(words[i - 1])[strlen (words[i - 1]) + 1];
-
-				if (s != words[i]) {
-					g_assert (!f_preserve_empty);
-					g_assert (s < words[i]);
-				}
-			}
-
-			idx_word_start += l_i + 1;
-			idx_delim_after_old = idx_delim_after;
-		}
-	}
-}
-
-static void
-_do_test_nm_utils_strsplit_set_f (NMUtilsStrsplitSetFlags flags,
-                                  const char *str,
-                                  gsize words_len,
-                                  const char *const*exp_words)
-{
-	_do_test_nm_utils_strsplit_set_f_one (flags, str, words_len, exp_words);
-
-	if (NM_FLAGS_HAS (flags, NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY)) {
-		gs_unref_ptrarray GPtrArray *exp_words2 = NULL;
-		gsize k;
-
-		exp_words2 = g_ptr_array_new ();
-		for (k = 0; k < words_len; k++) {
-			if (exp_words[k][0] != '\0')
-				g_ptr_array_add (exp_words2, (gpointer) exp_words[k]);
-		}
-
-		_do_test_nm_utils_strsplit_set_f_one (flags & (~NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY),
-		                                      str,
-		                                      exp_words2->len,
-		                                      (const char *const*) exp_words2->pdata);
-	}
+_do_test_nm_utils_strsplit_set_f_one(NMUtilsStrsplitSetFlags flags,
+                                     const char *            str,
+                                     gsize                   words_len,
+                                     const char *const *     exp_words)
+{
+#define DELIMITERS   " \n"
+#define DELIMITERS_C ' ', '\n'
+
+    gs_free const char **words = NULL;
+    gsize                i, j, k;
+    const gboolean       f_allow_escaping =
+        NM_FLAGS_HAS(flags, NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING);
+    const gboolean f_preserve_empty =
+        NM_FLAGS_HAS(flags, NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY);
+    const char *       s1;
+    gsize              initial_offset;
+    gs_strfreev char **words_g = NULL;
+
+    g_assert(!NM_FLAGS_ANY(flags,
+                           ~(NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING
+                             | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY)));
+
+    /* assert that the expected words are valid (and don't contain unescaped delimiters). */
+    for (i = 0; i < words_len; i++) {
+        const char *w = exp_words[i];
+
+        g_assert(w);
+        if (!f_preserve_empty)
+            g_assert(w[0]);
+        for (k = 0; w[k];) {
+            if (f_allow_escaping && w[k] == '\\') {
+                k++;
+                if (w[k] == '\0')
+                    break;
+                k++;
+                continue;
+            }
+            g_assert(!NM_IN_SET(w[k], DELIMITERS_C));
+            k++;
+        }
+        if (!f_allow_escaping)
+            g_assert(!NM_STRCHAR_ANY(w, ch, NM_IN_SET(ch, DELIMITERS_C)));
+    }
+
+    initial_offset = (f_preserve_empty || !str) ? 0u : strspn(str, DELIMITERS);
+
+    /* first compare our expected values with what g_strsplit_set() would
+     * do. */
+    words_g = str ? g_strsplit_set(str, DELIMITERS, -1) : NULL;
+    if (str == NULL) {
+        g_assert_cmpint(words_len, ==, 0);
+        g_assert(!words_g);
+    } else if (nm_streq0(str, "")) {
+        g_assert_cmpint(words_len, ==, 0);
+        g_assert(words_g);
+        g_assert(!words_g[0]);
+    } else {
+        g_assert(words_g);
+        g_assert(words_g[0]);
+        if (!f_allow_escaping) {
+            if (!f_preserve_empty) {
+                for (i = 0, j = 0; words_g[i]; i++) {
+                    if (words_g[i][0] == '\0')
+                        g_free(words_g[i]);
+                    else
+                        words_g[j++] = words_g[i];
+                }
+                words_g[j] = NULL;
+            }
+            if (f_preserve_empty)
+                g_assert_cmpint(words_len, >, 0);
+            for (i = 0; i < words_len; i++) {
+                g_assert(exp_words[i]);
+                g_assert_cmpstr(exp_words[i], ==, words_g[i]);
+            }
+            g_assert(words_g[words_len] == NULL);
+            g_assert_cmpint(NM_PTRARRAY_LEN(words_g), ==, words_len);
+            g_assert(_nm_utils_strv_cmp_n(exp_words, words_len, NM_CAST_STRV_CC(words_g), -1) == 0);
+        }
+    }
+
+    if (flags == NM_UTILS_STRSPLIT_SET_FLAGS_NONE && nmtst_get_rand_bool())
+        words = nm_utils_strsplit_set(str, DELIMITERS);
+    else if (flags == NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY && nmtst_get_rand_bool())
+        words = nm_utils_strsplit_set_with_empty(str, DELIMITERS);
+    else
+        words = nm_utils_strsplit_set_full(str, DELIMITERS, flags);
+
+    g_assert_cmpint(NM_PTRARRAY_LEN(words), ==, words_len);
+
+    if (words_len == 0) {
+        g_assert(!words);
+        g_assert(!str || NM_STRCHAR_ALL(str, ch, NM_IN_SET(ch, DELIMITERS_C)));
+        return;
+    }
+
+    g_assert(words);
+    for (i = 0; i < words_len; i++)
+        g_assert_cmpstr(exp_words[i], ==, words[i]);
+    g_assert(words[words_len] == NULL);
+
+    g_assert(_nm_utils_strv_cmp_n(exp_words, words_len, words, -1) == 0);
+
+    s1 = words[0];
+    g_assert(s1 >= (char *) &words[words_len + 1]);
+    s1 = &s1[strlen(str)];
+    for (i = 1; i < words_len; i++) {
+        g_assert(&(words[i - 1])[strlen(words[i - 1])] < words[i]);
+        g_assert(words[i] <= s1);
+    }
+
+    /* while strsplit removes all delimiters, we can relatively easily find them
+     * in the original string. Assert that the original string and the pointer offsets
+     * of words correspond. In particular, find idx_delim_after and idx_delim_before
+     * to determine which delimiter was after/before a word. */
+    {
+        gsize idx_word_start;
+        gsize idx_delim_after_old = G_MAXSIZE;
+
+        idx_word_start = initial_offset;
+        for (i = 0; i < words_len; i++) {
+            const gsize l_i = strlen(words[i]);
+            gsize       idx_delim_after;
+            gsize       idx_delim_before;
+
+            /* find the delimiter *after* words[i]. We can do that by looking at the next
+             * word and calculating the pointer difference.
+             *
+             * The delimiter after the very last word is '\0' and requires strlen() to find. */
+            idx_delim_after = initial_offset + ((words[i] - words[0]) + l_i);
+            if (idx_delim_after != idx_word_start + l_i) {
+                g_assert(!f_preserve_empty);
+                g_assert_cmpint(idx_word_start + l_i, <, idx_delim_after);
+                idx_word_start = idx_delim_after - l_i;
+            }
+            if (i + 1 < words_len) {
+                gsize x = initial_offset + ((words[i + 1] - words[0]) - 1);
+
+                if (idx_delim_after != x) {
+                    g_assert(!f_preserve_empty);
+                    g_assert_cmpint(idx_delim_after, <, x);
+                    for (k = idx_delim_after; k <= x; k++)
+                        g_assert(NM_IN_SET(str[k], DELIMITERS_C));
+                }
+                g_assert(NM_IN_SET(str[idx_delim_after], DELIMITERS_C));
+            } else {
+                if (f_preserve_empty)
+                    g_assert(NM_IN_SET(str[idx_delim_after], '\0'));
+                else
+                    g_assert(NM_IN_SET(str[idx_delim_after], '\0', DELIMITERS_C));
+            }
+
+            /* find the delimiter *before* words[i]. */
+            if (i == 0) {
+                /* there is only a delimiter *before*, with !f_preserve_empty and leading
+                 * delimiters. */
+                idx_delim_before = G_MAXSIZE;
+                if (initial_offset > 0) {
+                    g_assert(!f_preserve_empty);
+                    idx_delim_before = initial_offset - 1;
+                }
+            } else
+                idx_delim_before = initial_offset + (words[i] - words[0]) - 1;
+            if (idx_delim_before != G_MAXSIZE)
+                g_assert(NM_IN_SET(str[idx_delim_before], DELIMITERS_C));
+            if (idx_delim_after_old != idx_delim_before) {
+                g_assert(!f_preserve_empty);
+                if (i == 0) {
+                    g_assert_cmpint(initial_offset, >, 0);
+                    g_assert_cmpint(idx_delim_before, !=, G_MAXSIZE);
+                    g_assert_cmpint(idx_delim_before, ==, initial_offset - 1);
+                } else {
+                    g_assert_cmpint(idx_delim_after_old, !=, G_MAXSIZE);
+                    g_assert_cmpint(idx_delim_before, !=, G_MAXSIZE);
+                    g_assert_cmpint(idx_delim_after_old, <, idx_delim_before);
+                    for (k = idx_delim_after_old; k <= idx_delim_before; k++)
+                        g_assert(NM_IN_SET(str[k], DELIMITERS_C));
+                }
+            }
+
+            for (k = 0; k < l_i;) {
+                if (f_allow_escaping && str[idx_word_start + k] == '\\') {
+                    k++;
+                    if (k >= l_i)
+                        break;
+                    k++;
+                    continue;
+                }
+                g_assert(!NM_IN_SET(str[idx_word_start + k], DELIMITERS_C));
+                k++;
+            }
+            g_assert(strncmp(words[i], &str[idx_word_start], l_i) == 0);
+
+            if (i > 0) {
+                const char *s = &(words[i - 1])[strlen(words[i - 1]) + 1];
+
+                if (s != words[i]) {
+                    g_assert(!f_preserve_empty);
+                    g_assert(s < words[i]);
+                }
+            }
+
+            idx_word_start += l_i + 1;
+            idx_delim_after_old = idx_delim_after;
+        }
+    }
+}
+
+static void
+_do_test_nm_utils_strsplit_set_f(NMUtilsStrsplitSetFlags flags,
+                                 const char *            str,
+                                 gsize                   words_len,
+                                 const char *const *     exp_words)
+{
+    _do_test_nm_utils_strsplit_set_f_one(flags, str, words_len, exp_words);
+
+    if (NM_FLAGS_HAS(flags, NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY)) {
+        gs_unref_ptrarray GPtrArray *exp_words2 = NULL;
+        gsize                        k;
+
+        exp_words2 = g_ptr_array_new();
+        for (k = 0; k < words_len; k++) {
+            if (exp_words[k][0] != '\0')
+                g_ptr_array_add(exp_words2, (gpointer) exp_words[k]);
+        }
+
+        _do_test_nm_utils_strsplit_set_f_one(flags & (~NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY),
+                                             str,
+                                             exp_words2->len,
+                                             (const char *const *) exp_words2->pdata);
+    }
 }
 
 #define do_test_nm_utils_strsplit_set_f(flags, str, ...) \
-	_do_test_nm_utils_strsplit_set_f (flags, \
-	                                  str, \
-	                                  NM_NARG (__VA_ARGS__), \
-	                                  NM_MAKE_STRV (__VA_ARGS__))
-
-#define do_test_nm_utils_strsplit_set(allow_escaping, str, ...) \
-	do_test_nm_utils_strsplit_set_f (  (allow_escaping) \
-	                                 ? NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING \
-	                                 : NM_UTILS_STRSPLIT_SET_FLAGS_NONE, \
-	                                 str, \
-	                                 ##__VA_ARGS__)
-
-static void
-_do_test_nm_utils_strsplit_set_simple (NMUtilsStrsplitSetFlags flags,
-                                       const char *str,
-                                       gsize words_len,
-                                       const char *const*exp_words)
-{
-	gs_free const char **tokens = NULL;
-	gsize n_tokens;
-
-	tokens = nm_utils_strsplit_set_full (str, DELIMITERS, flags);
-
-	if (!tokens) {
-		g_assert_cmpint (words_len, ==, 0);
-		return;
-	}
-
-	g_assert (str && str[0]);
-	g_assert_cmpint (words_len, >, 0);
-	n_tokens = NM_PTRARRAY_LEN (tokens);
-
-	if (_nm_utils_strv_cmp_n (exp_words, words_len, tokens, -1) != 0) {
-		gsize i;
-
-		g_print (">>> split \"%s\" (flags %x) got %zu tokens (%zu expected)\n", str, (guint) flags, n_tokens, words_len);
-		for (i = 0; i < NM_MAX (n_tokens, words_len); i++) {
-			const char *s1 = i < n_tokens  ? tokens[i]    : NULL;
-			const char *s2 = i < words_len ? exp_words[i] : NULL;
-
-			g_print (">>> [%zu]: %s - %s%s%s vs. %s%s%s\n",
-			         i,
-			         nm_streq0 (s1, s2) ? "same" : "diff",
-			         NM_PRINT_FMT_QUOTE_STRING (s1),
-			         NM_PRINT_FMT_QUOTE_STRING (s2));
-		}
-		g_assert_not_reached ();
-	}
-	g_assert_cmpint (words_len, ==, NM_PTRARRAY_LEN (tokens));
-}
-#define do_test_nm_utils_strsplit_set_simple(flags, str, ...) \
-	_do_test_nm_utils_strsplit_set_simple ((flags), (str), NM_NARG (__VA_ARGS__), NM_MAKE_STRV (__VA_ARGS__))
-
-static void
-test_nm_utils_strsplit_set (void)
-{
-	gs_unref_ptrarray GPtrArray *words_exp = NULL;
-	guint test_run;
-
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_NONE, NULL);
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_NONE, "");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_NONE, " ");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_NONE, "a  b", "a", "b");
-
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, NULL);
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, " ", "", "");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "  ", "", "", "");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "a  ", "a", "", "");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "a  b", "a", "", "b");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, " ab  b", "", "ab", "", "b");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "ab  b", "ab", "", "b");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "abb", "abb");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "abb  bb ", "abb", "", "bb", "");
-	do_test_nm_utils_strsplit_set_f (NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "abb bcb ", "abb", "bcb", "");
-
-	do_test_nm_utils_strsplit_set (FALSE, NULL);
-	do_test_nm_utils_strsplit_set (FALSE, "");
-	do_test_nm_utils_strsplit_set (FALSE, "\n");
-	do_test_nm_utils_strsplit_set (TRUE, " \t\n", "\t");
-	do_test_nm_utils_strsplit_set (FALSE, "a", "a");
-	do_test_nm_utils_strsplit_set (FALSE, "a b", "a", "b");
-	do_test_nm_utils_strsplit_set (FALSE, "a\rb", "a\rb");
-	do_test_nm_utils_strsplit_set (FALSE, "  a\rb  ", "a\rb");
-	do_test_nm_utils_strsplit_set (FALSE, "  a bbbd afds ere", "a", "bbbd", "afds", "ere");
-	do_test_nm_utils_strsplit_set (FALSE,
-	                               "1 2 3 4 5 6 7 8 9 0 "
-	                               "1 2 3 4 5 6 7 8 9 0 "
-	                               "1 2 3 4 5 6 7 8 9 0",
-	                               "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
-	                               "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
-	                               "1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
-	do_test_nm_utils_strsplit_set (TRUE, "\\", "\\");
-	do_test_nm_utils_strsplit_set (TRUE, "\\ ", "\\ ");
-	do_test_nm_utils_strsplit_set (TRUE, "\\\\", "\\\\");
-	do_test_nm_utils_strsplit_set (TRUE, "\\\t", "\\\t");
-	do_test_nm_utils_strsplit_set (TRUE, "foo\\", "foo\\");
-	do_test_nm_utils_strsplit_set (TRUE, "bar foo\\", "bar", "foo\\");
-	do_test_nm_utils_strsplit_set (TRUE, "\\ a b\\ \\  c", "\\ a", "b\\ \\ ", "c");
-
-	words_exp = g_ptr_array_new_with_free_func (g_free);
-	for (test_run = 0; test_run < 100; test_run++) {
-		gboolean f_allow_escaping = nmtst_get_rand_bool ();
-		guint words_len = nmtst_get_rand_uint32 () % 100;
-		gs_free char *str = NULL;
-		guint i;
-
-		g_ptr_array_set_size (words_exp, 0);
-		for (i = 0; i < words_len; i++) {
-			guint word_len;
-			char *word;
-			guint j;
-
-			word_len = nmtst_get_rand_uint32 ();
-			if ((word_len % 100) < 30)
-				word_len = 0;
-			else
-				word_len = (word_len >> 10) % 100;
-			word = g_new (char, word_len + 3);
-			for (j = 0; j < word_len; ) {
-				guint32 p = nmtst_get_rand_uint32 ();
-				static const char delimiters_arr[] = { DELIMITERS_C };
-				static const char regular_chars[] = "abcdefghijklmnopqrstuvwxyz";
-
-				if (   !f_allow_escaping
-				    || (p % 1000) < 700) {
-					if (((p >> 20) % 100) < 20)
-						word[j++] = '\\';
-					word[j++] = regular_chars[(p >> 11) % (G_N_ELEMENTS (regular_chars) - 1)];
-					continue;
-				}
-				word[j++] = '\\';
-				word[j++] = delimiters_arr[(p >> 11) % G_N_ELEMENTS (delimiters_arr)];
-			}
-			word[j] = '\0';
-			g_ptr_array_add (words_exp, word);
-		}
-		g_ptr_array_add (words_exp, NULL);
-
-		str = g_strjoinv (" ", (char **) words_exp->pdata);
-
-		if (   str[0] == '\0'
-		    && words_len > 0) {
-			g_assert (words_len == 1);
-			g_assert_cmpstr (words_exp->pdata[0], ==, "");
-			words_len = 0;
-		}
-
-		_do_test_nm_utils_strsplit_set_f (  (f_allow_escaping ? NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING : NM_UTILS_STRSPLIT_SET_FLAGS_NONE)
-		                                  | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
-		                                  str,
-		                                  words_len,
-		                                  (const char *const*) words_exp->pdata);
-	}
-
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "\t", "\t");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP, "\t");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
-	                                      "\t", "");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
-	                                      "\t\\\t\t\t\\\t", "\t\t\t\t");
-
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "\ta", "\ta");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP, "\ta", "a");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "\ta\\ b\t\\ ", "\ta b\t ");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP, "\ta\\ b\t\\ \t", "a b\t ");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "a\\  b", "a ", "b");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "\ta\\  b", "\ta ", "b");
-	do_test_nm_utils_strsplit_set_simple (NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP, "\ta\\  b", "a ", "b");
+    _do_test_nm_utils_strsplit_set_f(flags, str, NM_NARG(__VA_ARGS__), NM_MAKE_STRV(__VA_ARGS__))
+
+#define do_test_nm_utils_strsplit_set(allow_escaping, str, ...)                                   \
+    do_test_nm_utils_strsplit_set_f((allow_escaping) ? NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING \
+                                                     : NM_UTILS_STRSPLIT_SET_FLAGS_NONE,          \
+                                    str,                                                          \
+                                    ##__VA_ARGS__)
+
+static void
+_do_test_nm_utils_strsplit_set_simple(NMUtilsStrsplitSetFlags flags,
+                                      const char *            str,
+                                      gsize                   words_len,
+                                      const char *const *     exp_words)
+{
+    gs_free const char **tokens = NULL;
+    gsize                n_tokens;
+
+    tokens = nm_utils_strsplit_set_full(str, DELIMITERS, flags);
+
+    if (!tokens) {
+        g_assert_cmpint(words_len, ==, 0);
+        return;
+    }
+
+    g_assert(str && str[0]);
+    g_assert_cmpint(words_len, >, 0);
+    n_tokens = NM_PTRARRAY_LEN(tokens);
+
+    if (_nm_utils_strv_cmp_n(exp_words, words_len, tokens, -1) != 0) {
+        gsize i;
+
+        g_print(">>> split \"%s\" (flags %x) got %zu tokens (%zu expected)\n",
+                str,
+                (guint) flags,
+                n_tokens,
+                words_len);
+        for (i = 0; i < NM_MAX(n_tokens, words_len); i++) {
+            const char *s1 = i < n_tokens ? tokens[i] : NULL;
+            const char *s2 = i < words_len ? exp_words[i] : NULL;
+
+            g_print(">>> [%zu]: %s - %s%s%s vs. %s%s%s\n",
+                    i,
+                    nm_streq0(s1, s2) ? "same" : "diff",
+                    NM_PRINT_FMT_QUOTE_STRING(s1),
+                    NM_PRINT_FMT_QUOTE_STRING(s2));
+        }
+        g_assert_not_reached();
+    }
+    g_assert_cmpint(words_len, ==, NM_PTRARRAY_LEN(tokens));
+}
+#define do_test_nm_utils_strsplit_set_simple(flags, str, ...)   \
+    _do_test_nm_utils_strsplit_set_simple((flags),              \
+                                          (str),                \
+                                          NM_NARG(__VA_ARGS__), \
+                                          NM_MAKE_STRV(__VA_ARGS__))
+
+static void
+test_nm_utils_strsplit_set(void)
+{
+    gs_unref_ptrarray GPtrArray *words_exp = NULL;
+    guint                        test_run;
+
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_NONE, NULL);
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_NONE, "");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_NONE, " ");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_NONE, "a  b", "a", "b");
+
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, NULL);
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, " ", "", "");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "  ", "", "", "");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "a  ", "a", "", "");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                    "a  b",
+                                    "a",
+                                    "",
+                                    "b");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                    " ab  b",
+                                    "",
+                                    "ab",
+                                    "",
+                                    "b");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                    "ab  b",
+                                    "ab",
+                                    "",
+                                    "b");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY, "abb", "abb");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                    "abb  bb ",
+                                    "abb",
+                                    "",
+                                    "bb",
+                                    "");
+    do_test_nm_utils_strsplit_set_f(NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                    "abb bcb ",
+                                    "abb",
+                                    "bcb",
+                                    "");
+
+    do_test_nm_utils_strsplit_set(FALSE, NULL);
+    do_test_nm_utils_strsplit_set(FALSE, "");
+    do_test_nm_utils_strsplit_set(FALSE, "\n");
+    do_test_nm_utils_strsplit_set(TRUE, " \t\n", "\t");
+    do_test_nm_utils_strsplit_set(FALSE, "a", "a");
+    do_test_nm_utils_strsplit_set(FALSE, "a b", "a", "b");
+    do_test_nm_utils_strsplit_set(FALSE, "a\rb", "a\rb");
+    do_test_nm_utils_strsplit_set(FALSE, "  a\rb  ", "a\rb");
+    do_test_nm_utils_strsplit_set(FALSE, "  a bbbd afds ere", "a", "bbbd", "afds", "ere");
+    do_test_nm_utils_strsplit_set(FALSE,
+                                  "1 2 3 4 5 6 7 8 9 0 "
+                                  "1 2 3 4 5 6 7 8 9 0 "
+                                  "1 2 3 4 5 6 7 8 9 0",
+                                  "1",
+                                  "2",
+                                  "3",
+                                  "4",
+                                  "5",
+                                  "6",
+                                  "7",
+                                  "8",
+                                  "9",
+                                  "0",
+                                  "1",
+                                  "2",
+                                  "3",
+                                  "4",
+                                  "5",
+                                  "6",
+                                  "7",
+                                  "8",
+                                  "9",
+                                  "0",
+                                  "1",
+                                  "2",
+                                  "3",
+                                  "4",
+                                  "5",
+                                  "6",
+                                  "7",
+                                  "8",
+                                  "9",
+                                  "0");
+    do_test_nm_utils_strsplit_set(TRUE, "\\", "\\");
+    do_test_nm_utils_strsplit_set(TRUE, "\\ ", "\\ ");
+    do_test_nm_utils_strsplit_set(TRUE, "\\\\", "\\\\");
+    do_test_nm_utils_strsplit_set(TRUE, "\\\t", "\\\t");
+    do_test_nm_utils_strsplit_set(TRUE, "foo\\", "foo\\");
+    do_test_nm_utils_strsplit_set(TRUE, "bar foo\\", "bar", "foo\\");
+    do_test_nm_utils_strsplit_set(TRUE, "\\ a b\\ \\  c", "\\ a", "b\\ \\ ", "c");
+
+    words_exp = g_ptr_array_new_with_free_func(g_free);
+    for (test_run = 0; test_run < 100; test_run++) {
+        gboolean      f_allow_escaping = nmtst_get_rand_bool();
+        guint         words_len        = nmtst_get_rand_uint32() % 100;
+        gs_free char *str              = NULL;
+        guint         i;
+
+        g_ptr_array_set_size(words_exp, 0);
+        for (i = 0; i < words_len; i++) {
+            guint word_len;
+            char *word;
+            guint j;
+
+            word_len = nmtst_get_rand_uint32();
+            if ((word_len % 100) < 30)
+                word_len = 0;
+            else
+                word_len = (word_len >> 10) % 100;
+            word = g_new(char, word_len + 3);
+            for (j = 0; j < word_len;) {
+                guint32           p                = nmtst_get_rand_uint32();
+                static const char delimiters_arr[] = {DELIMITERS_C};
+                static const char regular_chars[]  = "abcdefghijklmnopqrstuvwxyz";
+
+                if (!f_allow_escaping || (p % 1000) < 700) {
+                    if (((p >> 20) % 100) < 20)
+                        word[j++] = '\\';
+                    word[j++] = regular_chars[(p >> 11) % (G_N_ELEMENTS(regular_chars) - 1)];
+                    continue;
+                }
+                word[j++] = '\\';
+                word[j++] = delimiters_arr[(p >> 11) % G_N_ELEMENTS(delimiters_arr)];
+            }
+            word[j] = '\0';
+            g_ptr_array_add(words_exp, word);
+        }
+        g_ptr_array_add(words_exp, NULL);
+
+        str = g_strjoinv(" ", (char **) words_exp->pdata);
+
+        if (str[0] == '\0' && words_len > 0) {
+            g_assert(words_len == 1);
+            g_assert_cmpstr(words_exp->pdata[0], ==, "");
+            words_len = 0;
+        }
+
+        _do_test_nm_utils_strsplit_set_f((f_allow_escaping
+                                              ? NM_UTILS_STRSPLIT_SET_FLAGS_ALLOW_ESCAPING
+                                              : NM_UTILS_STRSPLIT_SET_FLAGS_NONE)
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                         str,
+                                         words_len,
+                                         (const char *const *) words_exp->pdata);
+    }
+
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "\t", "\t");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP,
+                                         "\t");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                         "\t",
+                                         "");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_PRESERVE_EMPTY,
+                                         "\t\\\t\t\t\\\t",
+                                         "\t\t\t\t");
+
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "\ta", "\ta");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP,
+                                         "\ta",
+                                         "a");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED,
+                                         "\ta\\ b\t\\ ",
+                                         "\ta b\t ");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP,
+                                         "\ta\\ b\t\\ \t",
+                                         "a b\t ");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED, "a\\  b", "a ", "b");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED,
+                                         "\ta\\  b",
+                                         "\ta ",
+                                         "b");
+    do_test_nm_utils_strsplit_set_simple(NM_UTILS_STRSPLIT_SET_FLAGS_ESCAPED
+                                             | NM_UTILS_STRSPLIT_SET_FLAGS_STRSTRIP,
+                                         "\ta\\  b",
+                                         "a ",
+                                         "b");
 }
 
 /*****************************************************************************/
 
 static char *
-_escaped_tokens_create_random_word_full (const char *const*tokens,
-                                         gsize n_tokens,
-                                         gsize len)
+_escaped_tokens_create_random_word_full(const char *const *tokens, gsize n_tokens, gsize len)
 {
-	GString *gstr = g_string_new (NULL);
-	gsize i;
-	char random_token[2] = { 0 };
+    GString *gstr = g_string_new(NULL);
+    gsize    i;
+    char     random_token[2] = {0};
 
-	for (i = 0; i < len; i++) {
-		const char *token = tokens[nmtst_get_rand_uint32 () % n_tokens];
+    for (i = 0; i < len; i++) {
+        const char *token = tokens[nmtst_get_rand_uint32() % n_tokens];
 
-		if (!token[0]) {
-			do {
-				random_token[0] = nmtst_get_rand_uint32 ();
-			} while (random_token[0] == '\0');
-			token = random_token;
-		}
-		g_string_append (gstr, token);
-	}
+        if (!token[0]) {
+            do {
+                random_token[0] = nmtst_get_rand_uint32();
+            } while (random_token[0] == '\0');
+            token = random_token;
+        }
+        g_string_append(gstr, token);
+    }
 
-	/* reallocate the string, so that we don't have any excess memory from
-	 * the GString buffer. This is so that valgrind may better detect an out
-	 * or range access. */
-	return nm_str_realloc (g_string_free (gstr, FALSE));
+    /* reallocate the string, so that we don't have any excess memory from
+     * the GString buffer. This is so that valgrind may better detect an out
+     * or range access. */
+    return nm_str_realloc(g_string_free(gstr, FALSE));
 }
 
 /* set to 1 to exclude characters that are annoying to see in the debugger
@@ -693,4232 +765,4476 @@ _escaped_tokens_create_random_word_full (const char *const*tokens,
 #define ESCAPED_TOKENS_ONLY_NICE_CHARS 0
 
 static char *
-_escaped_tokens_create_random_whitespace (void)
+_escaped_tokens_create_random_whitespace(void)
 {
-	static const char *tokens[] = {
-		" ",
+    static const char *tokens[] = {
+        " ",
 #if !ESCAPED_TOKENS_ONLY_NICE_CHARS
-		"\n",
-		"\t",
-		"\r",
-		"\f",
+        "\n",
+        "\t",
+        "\r",
+        "\f",
 #endif
-	};
+    };
 
-	return _escaped_tokens_create_random_word_full (tokens, G_N_ELEMENTS (tokens), nmtst_get_rand_word_length (NULL) / 4u);
+    return _escaped_tokens_create_random_word_full(tokens,
+                                                   G_N_ELEMENTS(tokens),
+                                                   nmtst_get_rand_word_length(NULL) / 4u);
 }
 
 static char *
-_escaped_tokens_create_random_word (void)
-{
-	static const char *tokens[] = {
-		"a",
-		"b",
-		"c",
-		" ",
-		",",
-		"=",
-		"\\",
+_escaped_tokens_create_random_word(void)
+{
+    static const char *tokens[] = {
+        "a",
+        "b",
+        "c",
+        " ",
+        ",",
+        "=",
+        "\\",
 #if !ESCAPED_TOKENS_ONLY_NICE_CHARS
-		"\n",
-		"\f",
-		":",
-		"",
+        "\n",
+        "\f",
+        ":",
+        "",
 #endif
-	};
+    };
 
-	return _escaped_tokens_create_random_word_full (tokens, G_N_ELEMENTS (tokens), nmtst_get_rand_word_length (NULL));
+    return _escaped_tokens_create_random_word_full(tokens,
+                                                   G_N_ELEMENTS(tokens),
+                                                   nmtst_get_rand_word_length(NULL));
 }
 
 static void
-_escaped_tokens_str_append_delimiter (GString *str,
-                                      gboolean strict,
-                                      gboolean needs_delimiter)
+_escaped_tokens_str_append_delimiter(GString *str, gboolean strict, gboolean needs_delimiter)
 {
-	guint len = nmtst_get_rand_word_length (NULL) / 10u;
-	char *s;
+    guint len = nmtst_get_rand_word_length(NULL) / 10u;
+    char *s;
 
 again:
-	if (!strict) {
-		g_string_append (str, (s = _escaped_tokens_create_random_whitespace ()));
-		nm_clear_g_free (&s);
-	}
-
-	if (needs_delimiter)
-		g_string_append_c (str, ',');
-
-	if (!strict) {
-		g_string_append (str, (s = _escaped_tokens_create_random_whitespace ()));
-		nm_clear_g_free (&s);
-		if (len-- > 0) {
-			needs_delimiter = TRUE;
-			goto again;
-		}
-	}
-}
-
-static void
-_escaped_tokens_split (char *str, const char **out_key, const char **out_val)
-{
-	const char *key;
-	const char *val;
-	gsize len = strlen (str);
-
-	g_assert (str);
-
-	nm_utils_escaped_tokens_options_split (str, &key, &val);
-	g_assert (key);
-	g_assert (key == str);
-	if (val) {
-		g_assert (val > str);
-		g_assert (val > key);
-		g_assert (val <= &str[len]);
-	}
-	NM_SET_OUT (out_key, key);
-	NM_SET_OUT (out_val, val);
-}
-
-static void
-_escaped_tokens_combine (GString *combined,
-                         const char *key,
-                         const char *val,
-                         gboolean strict,
-                         gboolean allow_append_delimiter_before,
-                         gboolean needs_delimiter_after)
-{
-	gs_free char *escaped_key = NULL;
-	gs_free char *escaped_val = NULL;
-
-	if (allow_append_delimiter_before)
-		_escaped_tokens_str_append_delimiter (combined, strict, FALSE);
-	g_string_append (combined, nm_utils_escaped_tokens_options_escape_key (key, &escaped_key));
-	if (val) {
-		char *s;
-
-		if (!strict) {
-			g_string_append (combined, (s = _escaped_tokens_create_random_whitespace ()));
-			nm_clear_g_free (&s);
-		}
-		g_string_append_c (combined, '=');
-		if (!strict) {
-			g_string_append (combined, (s = _escaped_tokens_create_random_whitespace ()));
-			nm_clear_g_free (&s);
-		}
-		g_string_append (combined, nm_utils_escaped_tokens_options_escape_val (val, &escaped_val));
-	}
-	_escaped_tokens_str_append_delimiter (combined, strict, needs_delimiter_after);
-}
-
-static void
-_escaped_tokens_check_one_impl (const char *expected_key,
-                                const char *expected_val,
-                                const char *expected_combination,
-                                const char *const*other,
-                                gsize n_other)
-{
-	nm_auto_free_gstring GString *combined = g_string_new (NULL);
-	gsize i;
-
-	g_assert (expected_key);
-	g_assert (expected_combination);
-	g_assert (other);
-
-	_escaped_tokens_combine (combined,
-	                         expected_key,
-	                         expected_val,
-	                         TRUE,
-	                         TRUE,
-	                         FALSE);
-
-	g_assert_cmpstr (combined->str, ==, expected_combination);
-
-	for (i = 0; i < n_other + 2u; i++) {
-		nm_auto_free_gstring GString *str0 = NULL;
-		gs_free const char **strv_split = NULL;
-		gs_free char *strv_split0 = NULL;
-		const char *comb;
-		const char *key;
-		const char *val;
-
-		if (i == 0)
-			comb = expected_combination;
-		else if (i == 1) {
-			_escaped_tokens_combine (nm_gstring_prepare (&str0),
-			                         expected_key,
-			                         expected_val,
-			                         FALSE,
-			                         TRUE,
-			                         FALSE);
-			comb = str0->str;
-		} else
-			comb = other[i - 2];
-
-		strv_split = nm_utils_escaped_tokens_options_split_list (comb);
-		if (!strv_split) {
-			g_assert_cmpstr (expected_key, ==, "");
-			g_assert_cmpstr (expected_val, ==, NULL);
-			continue;
-		}
-		g_assert (expected_val || expected_key[0]);
-
-		g_assert_cmpuint (NM_PTRARRAY_LEN (strv_split), ==, 1u);
-
-		strv_split0 = g_strdup (strv_split[0]);
-
-		_escaped_tokens_split (strv_split0, &key, &val);
-		g_assert_cmpstr (key, ==, expected_key);
-		g_assert_cmpstr (val, ==, expected_val);
-	}
+    if (!strict) {
+        g_string_append(str, (s = _escaped_tokens_create_random_whitespace()));
+        nm_clear_g_free(&s);
+    }
+
+    if (needs_delimiter)
+        g_string_append_c(str, ',');
+
+    if (!strict) {
+        g_string_append(str, (s = _escaped_tokens_create_random_whitespace()));
+        nm_clear_g_free(&s);
+        if (len-- > 0) {
+            needs_delimiter = TRUE;
+            goto again;
+        }
+    }
+}
+
+static void
+_escaped_tokens_split(char *str, const char **out_key, const char **out_val)
+{
+    const char *key;
+    const char *val;
+    gsize       len = strlen(str);
+
+    g_assert(str);
+
+    nm_utils_escaped_tokens_options_split(str, &key, &val);
+    g_assert(key);
+    g_assert(key == str);
+    if (val) {
+        g_assert(val > str);
+        g_assert(val > key);
+        g_assert(val <= &str[len]);
+    }
+    NM_SET_OUT(out_key, key);
+    NM_SET_OUT(out_val, val);
+}
+
+static void
+_escaped_tokens_combine(GString *   combined,
+                        const char *key,
+                        const char *val,
+                        gboolean    strict,
+                        gboolean    allow_append_delimiter_before,
+                        gboolean    needs_delimiter_after)
+{
+    gs_free char *escaped_key = NULL;
+    gs_free char *escaped_val = NULL;
+
+    if (allow_append_delimiter_before)
+        _escaped_tokens_str_append_delimiter(combined, strict, FALSE);
+    g_string_append(combined, nm_utils_escaped_tokens_options_escape_key(key, &escaped_key));
+    if (val) {
+        char *s;
+
+        if (!strict) {
+            g_string_append(combined, (s = _escaped_tokens_create_random_whitespace()));
+            nm_clear_g_free(&s);
+        }
+        g_string_append_c(combined, '=');
+        if (!strict) {
+            g_string_append(combined, (s = _escaped_tokens_create_random_whitespace()));
+            nm_clear_g_free(&s);
+        }
+        g_string_append(combined, nm_utils_escaped_tokens_options_escape_val(val, &escaped_val));
+    }
+    _escaped_tokens_str_append_delimiter(combined, strict, needs_delimiter_after);
+}
+
+static void
+_escaped_tokens_check_one_impl(const char *       expected_key,
+                               const char *       expected_val,
+                               const char *       expected_combination,
+                               const char *const *other,
+                               gsize              n_other)
+{
+    nm_auto_free_gstring GString *combined = g_string_new(NULL);
+    gsize                         i;
+
+    g_assert(expected_key);
+    g_assert(expected_combination);
+    g_assert(other);
+
+    _escaped_tokens_combine(combined, expected_key, expected_val, TRUE, TRUE, FALSE);
+
+    g_assert_cmpstr(combined->str, ==, expected_combination);
+
+    for (i = 0; i < n_other + 2u; i++) {
+        nm_auto_free_gstring GString *str0        = NULL;
+        gs_free const char **         strv_split  = NULL;
+        gs_free char *                strv_split0 = NULL;
+        const char *                  comb;
+        const char *                  key;
+        const char *                  val;
+
+        if (i == 0)
+            comb = expected_combination;
+        else if (i == 1) {
+            _escaped_tokens_combine(nm_gstring_prepare(&str0),
+                                    expected_key,
+                                    expected_val,
+                                    FALSE,
+                                    TRUE,
+                                    FALSE);
+            comb = str0->str;
+        } else
+            comb = other[i - 2];
+
+        strv_split = nm_utils_escaped_tokens_options_split_list(comb);
+        if (!strv_split) {
+            g_assert_cmpstr(expected_key, ==, "");
+            g_assert_cmpstr(expected_val, ==, NULL);
+            continue;
+        }
+        g_assert(expected_val || expected_key[0]);
+
+        g_assert_cmpuint(NM_PTRARRAY_LEN(strv_split), ==, 1u);
+
+        strv_split0 = g_strdup(strv_split[0]);
+
+        _escaped_tokens_split(strv_split0, &key, &val);
+        g_assert_cmpstr(key, ==, expected_key);
+        g_assert_cmpstr(val, ==, expected_val);
+    }
 }
 
 #define _escaped_tokens_check_one(expected_key, expected_val, expected_combination, ...) \
-	_escaped_tokens_check_one_impl (expected_key, expected_val, expected_combination, NM_MAKE_STRV (__VA_ARGS__), NM_NARG (__VA_ARGS__))
-
-static void
-test_nm_utils_escaped_tokens (void)
-{
-	int i_run;
-
-	for (i_run = 0; i_run < 1000; i_run++) {
-		const guint num_options = nmtst_get_rand_word_length (NULL);
-		gs_unref_ptrarray GPtrArray *options = g_ptr_array_new_with_free_func (g_free);
-		nm_auto_free_gstring GString *combined = g_string_new (NULL);
-		gs_free const char **strv_split = NULL;
-		guint i_option;
-		guint i;
-
-		/* Generate a list of random words for option key-value pairs. */
-		for (i_option = 0; i_option < 2u * num_options; i_option++) {
-			char *word = NULL;
-
-			if (   i_option % 2u == 1
-			    && nmtst_get_rand_uint32 () % 5 == 0
-			    && strlen (options->pdata[options->len - 1]) > 0u) {
-				/* For some options, leave the value unset and only generate a key.
-				 *
-				 * If key is "", then we cannot do that, because the test below would try
-				 * to append "" to the combined list, which the parser then would drop.
-				 * Only test omitting the value, if strlen() of the key is positive. */
-			} else
-				word = _escaped_tokens_create_random_word ();
-			g_ptr_array_add (options, word);
-		}
-
-		/* Combine the options in one comma separated list, with proper escaping. */
-		for (i_option = 0; i_option < num_options; i_option++) {
-			_escaped_tokens_combine (combined,
-			                         options->pdata[2u*i_option + 0u],
-			                         options->pdata[2u*i_option + 1u],
-			                         FALSE,
-			                         i_option == 0,
-			                         i_option != num_options - 1);
-		}
-
-		/* ensure that we can split and parse the options without difference. */
-		strv_split = nm_utils_escaped_tokens_options_split_list (combined->str);
-		for (i_option = 0; i_option < num_options; i_option++) {
-			const char *expected_key = options->pdata[2u*i_option + 0u];
-			const char *expected_val = options->pdata[2u*i_option + 1u];
-			gs_free char *s_split = i_option < NM_PTRARRAY_LEN (strv_split) ? g_strdup (strv_split[i_option]) : NULL;
-			const char *key = NULL;
-			const char *val = NULL;
-
-			if (s_split)
-				_escaped_tokens_split (s_split, &key, &val);
-
-			if (   !nm_streq0 (key, expected_key)
-			    || !nm_streq0 (val, expected_val)) {
-				g_print (">>> ASSERTION IS ABOUT TO FAIL for item %5d of %5d\n", i_option, num_options);
-				g_print (">>> combined =  \"%s\"\n", combined->str);
-				g_print (">>> %c   parsed[%5d].key = \"%s\"\n", nm_streq (key, expected_key) ? ' ' : 'X', i_option, key);
-				g_print (">>> %c   parsed[%5d].val = %s%s%s\n", nm_streq0 (val, expected_val) ? ' ' : 'X', i_option, NM_PRINT_FMT_QUOTE_STRING (val));
-				for (i = 0; i < num_options; i++) {
-					g_print (">>> %c original[%5d].key = \"%s\"\n", i == i_option ? '*' : ' ', i, (char *) options->pdata[2u*i + 0u]);
-					g_print (">>> %c original[%5d].val = %s%s%s\n", i == i_option ? '*' : ' ', i, NM_PRINT_FMT_QUOTE_STRING ((char *) options->pdata[2u*i + 1u]));
-				}
-				for (i = 0; i < NM_PTRARRAY_LEN (strv_split); i++)
-					g_print (">>>      split[%5d]     = \"%s\"\n", i, strv_split[i]);
-			}
-
-			g_assert_cmpstr (key, ==, expected_key);
-			g_assert_cmpstr (val, ==, expected_val);
-		}
-		g_assert_cmpint (NM_PTRARRAY_LEN (strv_split), ==, num_options);
-
-		/* Above we show a full round-trip of random option key-value pairs, that they can
-		 * without loss escape, concatenate, split-list, and split. This proofed that every
-		 * option key-value pair can be represented as a combined string and parsed back.
-		 *
-		 * Now, just check that we can also parse arbitrary random words in nm_utils_escaped_tokens_options_split().
-		 * split() is a non-injective surjective function. As we check the round-trip above for random words, where
-		 * options-split() is the last step, we show that every random word can be the output of the function
-		 * (which shows, the surjective part).
-		 *
-		 * But multiple random input arguments, may map to the same output argument (non-injective).
-		 * Just test whether we can handle random input words without crashing. For that, just use the
-		 * above generate list of random words.
-		 */
-		for (i = 0; i < 1u + 2u * i_option; i++) {
-			gs_free char *str = NULL;
-			const char *cstr;
-
-			if (i == 0)
-				cstr = combined->str;
-			else
-				cstr = options->pdata[i - 1u];
-			if (!cstr)
-				continue;
-
-			str = g_strdup (cstr);
-			_escaped_tokens_split (str, NULL, NULL);
-		}
-	}
-
-	_escaped_tokens_check_one ("", NULL, "");
-	_escaped_tokens_check_one ("", "", "=", " =");
-	_escaped_tokens_check_one ("a", "b", "a=b", "a = b");
-	_escaped_tokens_check_one ("a\\=", "b\\=", "a\\\\\\==b\\\\=", "a\\\\\\==b\\\\\\=");
-	_escaped_tokens_check_one ("\\=", "\\=", "\\\\\\==\\\\=", "\\\\\\==\\\\\\=");
-	_escaped_tokens_check_one (" ", "bb=", "\\ =bb=", "\\ =bb\\=");
-	_escaped_tokens_check_one (" ", "bb\\=", "\\ =bb\\\\=", "\\ =bb\\\\\\=");
-	_escaped_tokens_check_one ("a b", "a  b", "a b=a  b");
-	_escaped_tokens_check_one ("a b", "a  b", "a b=a  b");
-	_escaped_tokens_check_one ("a = b", "a = b", "a \\= b=a = b", "a \\= b=a \\= b");
+    _escaped_tokens_check_one_impl(expected_key,                                         \
+                                   expected_val,                                         \
+                                   expected_combination,                                 \
+                                   NM_MAKE_STRV(__VA_ARGS__),                            \
+                                   NM_NARG(__VA_ARGS__))
+
+static void
+test_nm_utils_escaped_tokens(void)
+{
+    int i_run;
+
+    for (i_run = 0; i_run < 1000; i_run++) {
+        const guint       num_options            = nmtst_get_rand_word_length(NULL);
+        gs_unref_ptrarray GPtrArray *options     = g_ptr_array_new_with_free_func(g_free);
+        nm_auto_free_gstring GString *combined   = g_string_new(NULL);
+        gs_free const char **         strv_split = NULL;
+        guint                         i_option;
+        guint                         i;
+
+        /* Generate a list of random words for option key-value pairs. */
+        for (i_option = 0; i_option < 2u * num_options; i_option++) {
+            char *word = NULL;
+
+            if (i_option % 2u == 1 && nmtst_get_rand_uint32() % 5 == 0
+                && strlen(options->pdata[options->len - 1]) > 0u) {
+                /* For some options, leave the value unset and only generate a key.
+                 *
+                 * If key is "", then we cannot do that, because the test below would try
+                 * to append "" to the combined list, which the parser then would drop.
+                 * Only test omitting the value, if strlen() of the key is positive. */
+            } else
+                word = _escaped_tokens_create_random_word();
+            g_ptr_array_add(options, word);
+        }
+
+        /* Combine the options in one comma separated list, with proper escaping. */
+        for (i_option = 0; i_option < num_options; i_option++) {
+            _escaped_tokens_combine(combined,
+                                    options->pdata[2u * i_option + 0u],
+                                    options->pdata[2u * i_option + 1u],
+                                    FALSE,
+                                    i_option == 0,
+                                    i_option != num_options - 1);
+        }
+
+        /* ensure that we can split and parse the options without difference. */
+        strv_split = nm_utils_escaped_tokens_options_split_list(combined->str);
+        for (i_option = 0; i_option < num_options; i_option++) {
+            const char *  expected_key = options->pdata[2u * i_option + 0u];
+            const char *  expected_val = options->pdata[2u * i_option + 1u];
+            gs_free char *s_split =
+                i_option < NM_PTRARRAY_LEN(strv_split) ? g_strdup(strv_split[i_option]) : NULL;
+            const char *key = NULL;
+            const char *val = NULL;
+
+            if (s_split)
+                _escaped_tokens_split(s_split, &key, &val);
+
+            if (!nm_streq0(key, expected_key) || !nm_streq0(val, expected_val)) {
+                g_print(">>> ASSERTION IS ABOUT TO FAIL for item %5d of %5d\n",
+                        i_option,
+                        num_options);
+                g_print(">>> combined =  \"%s\"\n", combined->str);
+                g_print(">>> %c   parsed[%5d].key = \"%s\"\n",
+                        nm_streq(key, expected_key) ? ' ' : 'X',
+                        i_option,
+                        key);
+                g_print(">>> %c   parsed[%5d].val = %s%s%s\n",
+                        nm_streq0(val, expected_val) ? ' ' : 'X',
+                        i_option,
+                        NM_PRINT_FMT_QUOTE_STRING(val));
+                for (i = 0; i < num_options; i++) {
+                    g_print(">>> %c original[%5d].key = \"%s\"\n",
+                            i == i_option ? '*' : ' ',
+                            i,
+                            (char *) options->pdata[2u * i + 0u]);
+                    g_print(">>> %c original[%5d].val = %s%s%s\n",
+                            i == i_option ? '*' : ' ',
+                            i,
+                            NM_PRINT_FMT_QUOTE_STRING((char *) options->pdata[2u * i + 1u]));
+                }
+                for (i = 0; i < NM_PTRARRAY_LEN(strv_split); i++)
+                    g_print(">>>      split[%5d]     = \"%s\"\n", i, strv_split[i]);
+            }
+
+            g_assert_cmpstr(key, ==, expected_key);
+            g_assert_cmpstr(val, ==, expected_val);
+        }
+        g_assert_cmpint(NM_PTRARRAY_LEN(strv_split), ==, num_options);
+
+        /* Above we show a full round-trip of random option key-value pairs, that they can
+         * without loss escape, concatenate, split-list, and split. This proofed that every
+         * option key-value pair can be represented as a combined string and parsed back.
+         *
+         * Now, just check that we can also parse arbitrary random words in nm_utils_escaped_tokens_options_split().
+         * split() is a non-injective surjective function. As we check the round-trip above for random words, where
+         * options-split() is the last step, we show that every random word can be the output of the function
+         * (which shows, the surjective part).
+         *
+         * But multiple random input arguments, may map to the same output argument (non-injective).
+         * Just test whether we can handle random input words without crashing. For that, just use the
+         * above generate list of random words.
+         */
+        for (i = 0; i < 1u + 2u * i_option; i++) {
+            gs_free char *str = NULL;
+            const char *  cstr;
+
+            if (i == 0)
+                cstr = combined->str;
+            else
+                cstr = options->pdata[i - 1u];
+            if (!cstr)
+                continue;
+
+            str = g_strdup(cstr);
+            _escaped_tokens_split(str, NULL, NULL);
+        }
+    }
+
+    _escaped_tokens_check_one("", NULL, "");
+    _escaped_tokens_check_one("", "", "=", " =");
+    _escaped_tokens_check_one("a", "b", "a=b", "a = b");
+    _escaped_tokens_check_one("a\\=", "b\\=", "a\\\\\\==b\\\\=", "a\\\\\\==b\\\\\\=");
+    _escaped_tokens_check_one("\\=", "\\=", "\\\\\\==\\\\=", "\\\\\\==\\\\\\=");
+    _escaped_tokens_check_one(" ", "bb=", "\\ =bb=", "\\ =bb\\=");
+    _escaped_tokens_check_one(" ", "bb\\=", "\\ =bb\\\\=", "\\ =bb\\\\\\=");
+    _escaped_tokens_check_one("a b", "a  b", "a b=a  b");
+    _escaped_tokens_check_one("a b", "a  b", "a b=a  b");
+    _escaped_tokens_check_one("a = b", "a = b", "a \\= b=a = b", "a \\= b=a \\= b");
 }
 
 /*****************************************************************************/
 
 typedef struct {
-	int val;
-	CList lst;
+    int   val;
+    CList lst;
 } CListSort;
 
 static int
-_c_list_sort_cmp (const CList *lst_a, const CList *lst_b, const void *user_data)
-{
-	const CListSort *a, *b;
-
-	g_assert (lst_a);
-	g_assert (lst_b);
-	g_assert (lst_a != lst_b);
-
-	a = c_list_entry (lst_a, CListSort, lst);
-	b = c_list_entry (lst_b, CListSort, lst);
-
-	if (a->val < b->val)
-		return -1;
-	if (a->val > b->val)
-		return 1;
-	return 0;
-}
-
-static void
-_do_test_c_list_sort (CListSort *elements, guint n_list, gboolean headless)
-{
-	CList head, *iter, *iter_prev, *lst;
-	guint i;
-	const CListSort *el_prev;
-	CListSort *el;
-
-	c_list_init (&head);
-	for (i = 0; i < n_list; i++) {
-		el = &elements[i];
-		el->val = nmtst_get_rand_uint32 () % (2*n_list);
-		c_list_link_tail (&head, &el->lst);
-	}
-
-	if (headless) {
-		lst = head.next;
-		c_list_unlink_stale (&head);
-		lst = c_list_sort_headless (lst, _c_list_sort_cmp, NULL);
-		g_assert (lst);
-		g_assert (lst->next);
-		g_assert (lst->prev);
-		g_assert (c_list_length (lst) == n_list - 1);
-		iter_prev = lst->prev;
-		for (iter = lst; iter != lst; iter = iter->next) {
-			g_assert (iter);
-			g_assert (iter->next);
-			g_assert (iter->prev == iter_prev);
-		}
-		c_list_link_before (lst, &head);
-	} else
-		c_list_sort (&head, _c_list_sort_cmp, NULL);
-
-	g_assert (!c_list_is_empty (&head));
-	g_assert (c_list_length (&head) == n_list);
-
-	el_prev = NULL;
-	c_list_for_each (iter, &head) {
-		el = c_list_entry (iter, CListSort, lst);
-		g_assert (el >= elements && el < &elements[n_list]);
-		if (el_prev) {
-			if (el_prev->val == el->val)
-				g_assert (el_prev < el);
-			else
-				g_assert (el_prev->val < el->val);
-			g_assert (iter->prev == &el_prev->lst);
-			g_assert (el_prev->lst.next == iter);
-		}
-		el_prev = el;
-	}
-	g_assert (head.prev == &el_prev->lst);
-}
-
-static void
-test_c_list_sort (void)
-{
-	const guint N_ELEMENTS = 10000;
-	guint n_list, repeat;
-	gs_free CListSort *elements = NULL;
-
-	{
-		CList head;
-
-		c_list_init (&head);
-		c_list_sort (&head, _c_list_sort_cmp, NULL);
-		g_assert (c_list_length (&head) == 0);
-		g_assert (c_list_is_empty (&head));
-	}
-
-	elements = g_new0 (CListSort, N_ELEMENTS);
-	for (n_list = 1; n_list < N_ELEMENTS; n_list++) {
-		if (n_list > 150) {
-			n_list += nmtst_get_rand_uint32 () % n_list;
-			if (n_list >= N_ELEMENTS)
-				break;
-		}
-		{
-			const guint N_REPEAT = n_list > 50 ? 1 : 5;
-
-			for (repeat = 0; repeat < N_REPEAT; repeat++)
-				_do_test_c_list_sort (elements, n_list, nmtst_get_rand_uint32 () % 2);
-		}
-	}
+_c_list_sort_cmp(const CList *lst_a, const CList *lst_b, const void *user_data)
+{
+    const CListSort *a, *b;
+
+    g_assert(lst_a);
+    g_assert(lst_b);
+    g_assert(lst_a != lst_b);
+
+    a = c_list_entry(lst_a, CListSort, lst);
+    b = c_list_entry(lst_b, CListSort, lst);
+
+    if (a->val < b->val)
+        return -1;
+    if (a->val > b->val)
+        return 1;
+    return 0;
+}
+
+static void
+_do_test_c_list_sort(CListSort *elements, guint n_list, gboolean headless)
+{
+    CList            head, *iter, *iter_prev, *lst;
+    guint            i;
+    const CListSort *el_prev;
+    CListSort *      el;
+
+    c_list_init(&head);
+    for (i = 0; i < n_list; i++) {
+        el      = &elements[i];
+        el->val = nmtst_get_rand_uint32() % (2 * n_list);
+        c_list_link_tail(&head, &el->lst);
+    }
+
+    if (headless) {
+        lst = head.next;
+        c_list_unlink_stale(&head);
+        lst = c_list_sort_headless(lst, _c_list_sort_cmp, NULL);
+        g_assert(lst);
+        g_assert(lst->next);
+        g_assert(lst->prev);
+        g_assert(c_list_length(lst) == n_list - 1);
+        iter_prev = lst->prev;
+        for (iter = lst; iter != lst; iter = iter->next) {
+            g_assert(iter);
+            g_assert(iter->next);
+            g_assert(iter->prev == iter_prev);
+        }
+        c_list_link_before(lst, &head);
+    } else
+        c_list_sort(&head, _c_list_sort_cmp, NULL);
+
+    g_assert(!c_list_is_empty(&head));
+    g_assert(c_list_length(&head) == n_list);
+
+    el_prev = NULL;
+    c_list_for_each (iter, &head) {
+        el = c_list_entry(iter, CListSort, lst);
+        g_assert(el >= elements && el < &elements[n_list]);
+        if (el_prev) {
+            if (el_prev->val == el->val)
+                g_assert(el_prev < el);
+            else
+                g_assert(el_prev->val < el->val);
+            g_assert(iter->prev == &el_prev->lst);
+            g_assert(el_prev->lst.next == iter);
+        }
+        el_prev = el;
+    }
+    g_assert(head.prev == &el_prev->lst);
+}
+
+static void
+test_c_list_sort(void)
+{
+    const guint N_ELEMENTS = 10000;
+    guint       n_list, repeat;
+    gs_free CListSort *elements = NULL;
+
+    {
+        CList head;
+
+        c_list_init(&head);
+        c_list_sort(&head, _c_list_sort_cmp, NULL);
+        g_assert(c_list_length(&head) == 0);
+        g_assert(c_list_is_empty(&head));
+    }
+
+    elements = g_new0(CListSort, N_ELEMENTS);
+    for (n_list = 1; n_list < N_ELEMENTS; n_list++) {
+        if (n_list > 150) {
+            n_list += nmtst_get_rand_uint32() % n_list;
+            if (n_list >= N_ELEMENTS)
+                break;
+        }
+        {
+            const guint N_REPEAT = n_list > 50 ? 1 : 5;
+
+            for (repeat = 0; repeat < N_REPEAT; repeat++)
+                _do_test_c_list_sort(elements, n_list, nmtst_get_rand_uint32() % 2);
+        }
+    }
 }
 
 /*****************************************************************************/
 
 typedef struct {
-	NMDedupMultiObj parent;
-	guint val;
-	guint other;
+    NMDedupMultiObj parent;
+    guint           val;
+    guint           other;
 } DedupObj;
 
 static const NMDedupMultiObjClass dedup_obj_class;
 
 static DedupObj *
-_dedup_obj_assert (const NMDedupMultiObj *obj)
+_dedup_obj_assert(const NMDedupMultiObj *obj)
 {
-	DedupObj *o;
+    DedupObj *o;
 
-	g_assert (obj);
-	o = (DedupObj *) obj;
-	g_assert (o->parent.klass == &dedup_obj_class);
-	g_assert (o->parent._ref_count > 0);
-	g_assert (o->val > 0);
-	return o;
+    g_assert(obj);
+    o = (DedupObj *) obj;
+    g_assert(o->parent.klass == &dedup_obj_class);
+    g_assert(o->parent._ref_count > 0);
+    g_assert(o->val > 0);
+    return o;
 }
 
 static const NMDedupMultiObj *
-_dedup_obj_clone (const NMDedupMultiObj *obj)
+_dedup_obj_clone(const NMDedupMultiObj *obj)
 {
-	DedupObj *o, *o2;
+    DedupObj *o, *o2;
 
-	o = _dedup_obj_assert (obj);
-	o2 = g_slice_new0 (DedupObj);
-	o2->parent.klass = &dedup_obj_class;
-	o2->parent._ref_count = 1;
-	o2->val = o->val;
-	o2->other = o->other;
-	return (NMDedupMultiObj *) o2;
+    o                     = _dedup_obj_assert(obj);
+    o2                    = g_slice_new0(DedupObj);
+    o2->parent.klass      = &dedup_obj_class;
+    o2->parent._ref_count = 1;
+    o2->val               = o->val;
+    o2->other             = o->other;
+    return (NMDedupMultiObj *) o2;
 }
 
 static void
-_dedup_obj_destroy (NMDedupMultiObj *obj)
+_dedup_obj_destroy(NMDedupMultiObj *obj)
 {
-	DedupObj *o = (DedupObj *) obj;
+    DedupObj *o = (DedupObj *) obj;
 
-	nm_assert (o->parent._ref_count == 0);
-	o->parent._ref_count = 1;
-	o = _dedup_obj_assert (obj);
-	g_slice_free (DedupObj, o);
+    nm_assert(o->parent._ref_count == 0);
+    o->parent._ref_count = 1;
+    o                    = _dedup_obj_assert(obj);
+    g_slice_free(DedupObj, o);
 }
 
 static void
-_dedup_obj_full_hash_update (const NMDedupMultiObj *obj, NMHashState *h)
+_dedup_obj_full_hash_update(const NMDedupMultiObj *obj, NMHashState *h)
 {
-	const DedupObj *o;
+    const DedupObj *o;
 
-	o = _dedup_obj_assert (obj);
-	nm_hash_update_vals (h,
-	                     o->val,
-	                     o->other);
+    o = _dedup_obj_assert(obj);
+    nm_hash_update_vals(h, o->val, o->other);
 }
 
 static gboolean
-_dedup_obj_full_equal (const NMDedupMultiObj *obj_a,
-                       const NMDedupMultiObj *obj_b)
+_dedup_obj_full_equal(const NMDedupMultiObj *obj_a, const NMDedupMultiObj *obj_b)
 {
-	const DedupObj *o_a = _dedup_obj_assert (obj_a);
-	const DedupObj *o_b = _dedup_obj_assert (obj_b);
+    const DedupObj *o_a = _dedup_obj_assert(obj_a);
+    const DedupObj *o_b = _dedup_obj_assert(obj_b);
 
-	return    o_a->val == o_b->val
-	       && o_a->other == o_b->other;
+    return o_a->val == o_b->val && o_a->other == o_b->other;
 }
 
 static const NMDedupMultiObjClass dedup_obj_class = {
-	.obj_clone = _dedup_obj_clone,
-	.obj_destroy = _dedup_obj_destroy,
-	.obj_full_hash_update = _dedup_obj_full_hash_update,
-	.obj_full_equal = _dedup_obj_full_equal,
+    .obj_clone            = _dedup_obj_clone,
+    .obj_destroy          = _dedup_obj_destroy,
+    .obj_full_hash_update = _dedup_obj_full_hash_update,
+    .obj_full_equal       = _dedup_obj_full_equal,
 };
 
-#define DEDUP_OBJ_INIT(val_val, other_other) \
-	(&((DedupObj) { \
-		.parent = { \
-			.klass = &dedup_obj_class, \
-			._ref_count = NM_OBJ_REF_COUNT_STACKINIT, \
-		}, \
-		.val = (val_val), \
-		.other = (other_other), \
-	}))
+#define DEDUP_OBJ_INIT(val_val, other_other)              \
+    (&((DedupObj){                                        \
+        .parent =                                         \
+            {                                             \
+                .klass      = &dedup_obj_class,           \
+                ._ref_count = NM_OBJ_REF_COUNT_STACKINIT, \
+            },                                            \
+        .val   = (val_val),                               \
+        .other = (other_other),                           \
+    }))
 
 typedef struct {
-	NMDedupMultiIdxType parent;
-	guint partition_size;
-	guint val_mod;
+    NMDedupMultiIdxType parent;
+    guint               partition_size;
+    guint               val_mod;
 } DedupIdxType;
 
 static const NMDedupMultiIdxTypeClass dedup_idx_type_class;
 
 static const DedupIdxType *
-_dedup_idx_assert (const NMDedupMultiIdxType *idx_type)
+_dedup_idx_assert(const NMDedupMultiIdxType *idx_type)
 {
-	DedupIdxType *t;
+    DedupIdxType *t;
 
-	g_assert (idx_type);
-	t = (DedupIdxType *) idx_type;
-	g_assert (t->parent.klass == &dedup_idx_type_class);
-	g_assert (t->partition_size > 0);
-	g_assert (t->val_mod > 0);
-	return t;
+    g_assert(idx_type);
+    t = (DedupIdxType *) idx_type;
+    g_assert(t->parent.klass == &dedup_idx_type_class);
+    g_assert(t->partition_size > 0);
+    g_assert(t->val_mod > 0);
+    return t;
 }
 
 static void
-_dedup_idx_obj_id_hash_update (const NMDedupMultiIdxType *idx_type,
-                               const NMDedupMultiObj *obj,
-                               NMHashState *h)
+_dedup_idx_obj_id_hash_update(const NMDedupMultiIdxType *idx_type,
+                              const NMDedupMultiObj *    obj,
+                              NMHashState *              h)
 {
-	const DedupIdxType *t;
-	const DedupObj *o;
+    const DedupIdxType *t;
+    const DedupObj *    o;
 
-	t = _dedup_idx_assert (idx_type);
-	o = _dedup_obj_assert (obj);
+    t = _dedup_idx_assert(idx_type);
+    o = _dedup_obj_assert(obj);
 
-	nm_hash_update_val (h, o->val / t->partition_size);
-	nm_hash_update_val (h, o->val % t->val_mod);
+    nm_hash_update_val(h, o->val / t->partition_size);
+    nm_hash_update_val(h, o->val % t->val_mod);
 }
 
 static gboolean
-_dedup_idx_obj_id_equal (const NMDedupMultiIdxType *idx_type,
-                         const NMDedupMultiObj *obj_a,
-                         const NMDedupMultiObj *obj_b)
+_dedup_idx_obj_id_equal(const NMDedupMultiIdxType *idx_type,
+                        const NMDedupMultiObj *    obj_a,
+                        const NMDedupMultiObj *    obj_b)
 {
-	const DedupIdxType *t;
-	const DedupObj *o_a;
-	const DedupObj *o_b;
+    const DedupIdxType *t;
+    const DedupObj *    o_a;
+    const DedupObj *    o_b;
 
-	t = _dedup_idx_assert (idx_type);
-	o_a = _dedup_obj_assert (obj_a);
-	o_b = _dedup_obj_assert (obj_b);
+    t   = _dedup_idx_assert(idx_type);
+    o_a = _dedup_obj_assert(obj_a);
+    o_b = _dedup_obj_assert(obj_b);
 
-	return    (o_a->val / t->partition_size) == (o_b->val / t->partition_size)
-	       && (o_a->val % t->val_mod) == (o_b->val % t->val_mod);
+    return (o_a->val / t->partition_size) == (o_b->val / t->partition_size)
+           && (o_a->val % t->val_mod) == (o_b->val % t->val_mod);
 }
 
 static void
-_dedup_idx_obj_partition_hash_update (const NMDedupMultiIdxType *idx_type,
-                                      const NMDedupMultiObj *obj,
-                                      NMHashState *h)
+_dedup_idx_obj_partition_hash_update(const NMDedupMultiIdxType *idx_type,
+                                     const NMDedupMultiObj *    obj,
+                                     NMHashState *              h)
 {
-	const DedupIdxType *t;
-	const DedupObj *o;
+    const DedupIdxType *t;
+    const DedupObj *    o;
 
-	t = _dedup_idx_assert (idx_type);
-	o = _dedup_obj_assert (obj);
+    t = _dedup_idx_assert(idx_type);
+    o = _dedup_obj_assert(obj);
 
-	nm_hash_update_val (h, o->val / t->partition_size);
+    nm_hash_update_val(h, o->val / t->partition_size);
 }
 
 static gboolean
-_dedup_idx_obj_partition_equal (const NMDedupMultiIdxType *idx_type,
-                                const NMDedupMultiObj *obj_a,
-                                const NMDedupMultiObj *obj_b)
+_dedup_idx_obj_partition_equal(const NMDedupMultiIdxType *idx_type,
+                               const NMDedupMultiObj *    obj_a,
+                               const NMDedupMultiObj *    obj_b)
 {
-	const DedupIdxType *t;
-	const DedupObj *o_a;
-	const DedupObj *o_b;
+    const DedupIdxType *t;
+    const DedupObj *    o_a;
+    const DedupObj *    o_b;
 
-	t = _dedup_idx_assert (idx_type);
-	o_a = _dedup_obj_assert (obj_a);
-	o_b = _dedup_obj_assert (obj_b);
+    t   = _dedup_idx_assert(idx_type);
+    o_a = _dedup_obj_assert(obj_a);
+    o_b = _dedup_obj_assert(obj_b);
 
-	return (o_a->val / t->partition_size) == (o_b->val / t->partition_size);
+    return (o_a->val / t->partition_size) == (o_b->val / t->partition_size);
 }
 
 static const NMDedupMultiIdxTypeClass dedup_idx_type_class = {
-	.idx_obj_id_hash_update = _dedup_idx_obj_id_hash_update,
-	.idx_obj_id_equal = _dedup_idx_obj_id_equal,
-	.idx_obj_partition_hash_update = _dedup_idx_obj_partition_hash_update,
-	.idx_obj_partition_equal = _dedup_idx_obj_partition_equal,
+    .idx_obj_id_hash_update        = _dedup_idx_obj_id_hash_update,
+    .idx_obj_id_equal              = _dedup_idx_obj_id_equal,
+    .idx_obj_partition_hash_update = _dedup_idx_obj_partition_hash_update,
+    .idx_obj_partition_equal       = _dedup_idx_obj_partition_equal,
 };
 
 static const DedupIdxType *
-DEDUP_IDX_TYPE_INIT (DedupIdxType *idx_type, guint partition_size, guint val_mod)
+DEDUP_IDX_TYPE_INIT(DedupIdxType *idx_type, guint partition_size, guint val_mod)
 {
-	nm_dedup_multi_idx_type_init ((NMDedupMultiIdxType *) idx_type, &dedup_idx_type_class);
-	idx_type->val_mod = val_mod;
-	idx_type->partition_size = partition_size;
-	return idx_type;
+    nm_dedup_multi_idx_type_init((NMDedupMultiIdxType *) idx_type, &dedup_idx_type_class);
+    idx_type->val_mod        = val_mod;
+    idx_type->partition_size = partition_size;
+    return idx_type;
 }
 
 static gboolean
-_dedup_idx_add (NMDedupMultiIndex *idx, const DedupIdxType *idx_type, const DedupObj *obj, NMDedupMultiIdxMode mode, const NMDedupMultiEntry **out_entry)
+_dedup_idx_add(NMDedupMultiIndex *       idx,
+               const DedupIdxType *      idx_type,
+               const DedupObj *          obj,
+               NMDedupMultiIdxMode       mode,
+               const NMDedupMultiEntry **out_entry)
 {
-	g_assert (idx);
-	_dedup_idx_assert ((NMDedupMultiIdxType *) idx_type);
-	if (obj)
-		_dedup_obj_assert ((NMDedupMultiObj *) obj);
-	return nm_dedup_multi_index_add (idx, (NMDedupMultiIdxType *) idx_type,
-	                                 obj, mode, out_entry, NULL);
+    g_assert(idx);
+    _dedup_idx_assert((NMDedupMultiIdxType *) idx_type);
+    if (obj)
+        _dedup_obj_assert((NMDedupMultiObj *) obj);
+    return nm_dedup_multi_index_add(idx,
+                                    (NMDedupMultiIdxType *) idx_type,
+                                    obj,
+                                    mode,
+                                    out_entry,
+                                    NULL);
 }
 
 static void
-_dedup_head_entry_assert (const NMDedupMultiHeadEntry *entry)
+_dedup_head_entry_assert(const NMDedupMultiHeadEntry *entry)
 {
-	g_assert (entry);
-	g_assert (entry->len > 0);
-	g_assert (entry->len == c_list_length (&entry->lst_entries_head));
-	g_assert (entry->idx_type);
-	g_assert (entry->is_head);
+    g_assert(entry);
+    g_assert(entry->len > 0);
+    g_assert(entry->len == c_list_length(&entry->lst_entries_head));
+    g_assert(entry->idx_type);
+    g_assert(entry->is_head);
 }
 
 static const DedupObj *
-_dedup_entry_assert (const NMDedupMultiEntry *entry)
+_dedup_entry_assert(const NMDedupMultiEntry *entry)
 {
-	g_assert (entry);
-	g_assert (!c_list_is_empty (&entry->lst_entries));
-	g_assert (entry->head);
-	g_assert (!entry->is_head);
-	g_assert (entry->head != (gpointer) entry);
-	_dedup_head_entry_assert (entry->head);
-	return _dedup_obj_assert (entry->obj);
+    g_assert(entry);
+    g_assert(!c_list_is_empty(&entry->lst_entries));
+    g_assert(entry->head);
+    g_assert(!entry->is_head);
+    g_assert(entry->head != (gpointer) entry);
+    _dedup_head_entry_assert(entry->head);
+    return _dedup_obj_assert(entry->obj);
 }
 
 static const DedupIdxType *
-_dedup_entry_get_idx_type (const NMDedupMultiEntry *entry)
+_dedup_entry_get_idx_type(const NMDedupMultiEntry *entry)
 {
-	_dedup_entry_assert (entry);
+    _dedup_entry_assert(entry);
 
-	g_assert (entry->head);
-	g_assert (entry->head->idx_type);
-	return _dedup_idx_assert (entry->head->idx_type);
+    g_assert(entry->head);
+    g_assert(entry->head->idx_type);
+    return _dedup_idx_assert(entry->head->idx_type);
 }
 
 static void
-_dedup_entry_assert_all (const NMDedupMultiEntry *entry, gssize expected_idx, const DedupObj *const*expected_obj)
+_dedup_entry_assert_all(const NMDedupMultiEntry *entry,
+                        gssize                   expected_idx,
+                        const DedupObj *const *  expected_obj)
 {
-	gsize n, i;
-	CList *iter;
+    gsize  n, i;
+    CList *iter;
 
-	g_assert (entry);
-	_dedup_entry_assert (entry);
+    g_assert(entry);
+    _dedup_entry_assert(entry);
 
-	g_assert (expected_obj);
-	n = NM_PTRARRAY_LEN (expected_obj);
+    g_assert(expected_obj);
+    n = NM_PTRARRAY_LEN(expected_obj);
 
-	g_assert (n == c_list_length (&entry->lst_entries));
+    g_assert(n == c_list_length(&entry->lst_entries));
 
-	g_assert (expected_idx >= -1 && expected_idx < n);
-	g_assert (entry->head);
-	if (expected_idx == -1)
-		g_assert (entry->head == (gpointer) entry);
-	else
-		g_assert (entry->head != (gpointer) entry);
+    g_assert(expected_idx >= -1 && expected_idx < n);
+    g_assert(entry->head);
+    if (expected_idx == -1)
+        g_assert(entry->head == (gpointer) entry);
+    else
+        g_assert(entry->head != (gpointer) entry);
 
-	i = 0;
-	c_list_for_each (iter, &entry->head->lst_entries_head) {
-		const NMDedupMultiEntry *entry_current = c_list_entry (iter, NMDedupMultiEntry, lst_entries);
-		const DedupObj *obj_current;
-		const DedupIdxType *idx_type = _dedup_entry_get_idx_type (entry_current);
+    i = 0;
+    c_list_for_each (iter, &entry->head->lst_entries_head) {
+        const NMDedupMultiEntry *entry_current = c_list_entry(iter, NMDedupMultiEntry, lst_entries);
+        const DedupObj *         obj_current;
+        const DedupIdxType *     idx_type = _dedup_entry_get_idx_type(entry_current);
 
-		obj_current = _dedup_entry_assert (entry_current);
-		g_assert (obj_current);
-		g_assert (i < n);
-		if (expected_idx == i)
-			g_assert (entry_current == entry);
-		g_assert (idx_type->parent.klass->idx_obj_partition_equal (&idx_type->parent,
-		                                                           entry_current->obj,
-		                                                           c_list_entry (entry->head->lst_entries_head.next, NMDedupMultiEntry, lst_entries)->obj));
-		i++;
-	}
+        obj_current = _dedup_entry_assert(entry_current);
+        g_assert(obj_current);
+        g_assert(i < n);
+        if (expected_idx == i)
+            g_assert(entry_current == entry);
+        g_assert(idx_type->parent.klass->idx_obj_partition_equal(
+            &idx_type->parent,
+            entry_current->obj,
+            c_list_entry(entry->head->lst_entries_head.next, NMDedupMultiEntry, lst_entries)->obj));
+        i++;
+    }
 }
-#define _dedup_entry_assert_all(entry, expected_idx, ...) _dedup_entry_assert_all (entry, expected_idx, (const DedupObj *const[]) { __VA_ARGS__, NULL })
+#define _dedup_entry_assert_all(entry, expected_idx, ...) \
+    _dedup_entry_assert_all(entry, expected_idx, (const DedupObj *const[]){__VA_ARGS__, NULL})
 
 static void
-test_dedup_multi (void)
+test_dedup_multi(void)
 {
-	NMDedupMultiIndex *idx;
-	DedupIdxType IDX_20_3_a_stack;
-	const DedupIdxType *const IDX_20_3_a = DEDUP_IDX_TYPE_INIT (&IDX_20_3_a_stack, 20, 3);
-	const NMDedupMultiEntry *entry1;
+    NMDedupMultiIndex *       idx;
+    DedupIdxType              IDX_20_3_a_stack;
+    const DedupIdxType *const IDX_20_3_a = DEDUP_IDX_TYPE_INIT(&IDX_20_3_a_stack, 20, 3);
+    const NMDedupMultiEntry * entry1;
 
-	idx = nm_dedup_multi_index_new ();
+    idx = nm_dedup_multi_index_new();
 
-	g_assert (_dedup_idx_add (idx, IDX_20_3_a, DEDUP_OBJ_INIT (1, 1), NM_DEDUP_MULTI_IDX_MODE_APPEND, &entry1));
-	_dedup_entry_assert_all (entry1, 0, DEDUP_OBJ_INIT (1, 1));
+    g_assert(_dedup_idx_add(idx,
+                            IDX_20_3_a,
+                            DEDUP_OBJ_INIT(1, 1),
+                            NM_DEDUP_MULTI_IDX_MODE_APPEND,
+                            &entry1));
+    _dedup_entry_assert_all(entry1, 0, DEDUP_OBJ_INIT(1, 1));
 
-	g_assert (nm_dedup_multi_index_obj_find (idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT (1, 1)));
-	g_assert (!nm_dedup_multi_index_obj_find (idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT (1, 2)));
+    g_assert(nm_dedup_multi_index_obj_find(idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT(1, 1)));
+    g_assert(!nm_dedup_multi_index_obj_find(idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT(1, 2)));
 
-	g_assert (_dedup_idx_add (idx, IDX_20_3_a, DEDUP_OBJ_INIT (1, 2), NM_DEDUP_MULTI_IDX_MODE_APPEND, &entry1));
-	_dedup_entry_assert_all (entry1, 0, DEDUP_OBJ_INIT (1, 2));
+    g_assert(_dedup_idx_add(idx,
+                            IDX_20_3_a,
+                            DEDUP_OBJ_INIT(1, 2),
+                            NM_DEDUP_MULTI_IDX_MODE_APPEND,
+                            &entry1));
+    _dedup_entry_assert_all(entry1, 0, DEDUP_OBJ_INIT(1, 2));
 
-	g_assert (!nm_dedup_multi_index_obj_find (idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT (1, 1)));
-	g_assert (nm_dedup_multi_index_obj_find (idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT (1, 2)));
+    g_assert(!nm_dedup_multi_index_obj_find(idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT(1, 1)));
+    g_assert(nm_dedup_multi_index_obj_find(idx, (NMDedupMultiObj *) DEDUP_OBJ_INIT(1, 2)));
 
-	g_assert (_dedup_idx_add (idx, IDX_20_3_a, DEDUP_OBJ_INIT (2, 2), NM_DEDUP_MULTI_IDX_MODE_APPEND, &entry1));
-	_dedup_entry_assert_all (entry1, 1, DEDUP_OBJ_INIT (1, 2), DEDUP_OBJ_INIT (2, 2));
+    g_assert(_dedup_idx_add(idx,
+                            IDX_20_3_a,
+                            DEDUP_OBJ_INIT(2, 2),
+                            NM_DEDUP_MULTI_IDX_MODE_APPEND,
+                            &entry1));
+    _dedup_entry_assert_all(entry1, 1, DEDUP_OBJ_INIT(1, 2), DEDUP_OBJ_INIT(2, 2));
 
-	nm_dedup_multi_index_unref (idx);
+    nm_dedup_multi_index_unref(idx);
 }
 
 /*****************************************************************************/
 
 static NMConnection *
-_connection_new_from_dbus (GVariant *dict, GError **error)
+_connection_new_from_dbus(GVariant *dict, GError **error)
 {
-	return _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, error);
+    return _nm_simple_connection_new_from_dbus(dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, error);
 }
 
 static void
-vpn_check_func (const char *key, const char *value, gpointer user_data)
+vpn_check_func(const char *key, const char *value, gpointer user_data)
 {
-	if (!strcmp (key, "foobar1")) {
-		g_assert_cmpstr (value, ==, "blahblah1");
-		return;
-	}
+    if (!strcmp(key, "foobar1")) {
+        g_assert_cmpstr(value, ==, "blahblah1");
+        return;
+    }
 
-	if (!strcmp (key, "foobar2")) {
-		g_assert_cmpstr (value, ==, "blahblah2");
-		return;
-	}
+    if (!strcmp(key, "foobar2")) {
+        g_assert_cmpstr(value, ==, "blahblah2");
+        return;
+    }
 
-	if (!strcmp (key, "foobar3")) {
-		g_assert_cmpstr (value, ==, "blahblah3");
-		return;
-	}
+    if (!strcmp(key, "foobar3")) {
+        g_assert_cmpstr(value, ==, "blahblah3");
+        return;
+    }
 
-	if (!strcmp (key, "foobar4")) {
-		g_assert_cmpstr (value, ==, "blahblah4");
-		return;
-	}
+    if (!strcmp(key, "foobar4")) {
+        g_assert_cmpstr(value, ==, "blahblah4");
+        return;
+    }
 
-	g_assert_not_reached ();
+    g_assert_not_reached();
 }
 
 static void
-vpn_check_empty_func (const char *key, const char *value, gpointer user_data)
+vpn_check_empty_func(const char *key, const char *value, gpointer user_data)
 {
-	g_assert_not_reached ();
+    g_assert_not_reached();
 }
 
 static void
-test_setting_vpn_items (void)
+test_setting_vpn_items(void)
 {
-	gs_unref_object NMConnection *connection = NULL;
-	NMSettingVpn *s_vpn;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVpn *                s_vpn;
 
-	connection = nmtst_create_minimal_connection ("vpn-items", NULL, NM_SETTING_VPN_SETTING_NAME, NULL);
+    connection =
+        nmtst_create_minimal_connection("vpn-items", NULL, NM_SETTING_VPN_SETTING_NAME, NULL);
 
-	s_vpn = nm_connection_get_setting_vpn (connection);
+    s_vpn = nm_connection_get_setting_vpn(connection);
 
-	nm_setting_vpn_add_data_item (s_vpn, "foobar1", "blahblah1");
-	nm_setting_vpn_add_data_item (s_vpn, "foobar2", "blahblah2");
-	nm_setting_vpn_add_data_item (s_vpn, "foobar3", "blahblah3");
-	nm_setting_vpn_add_data_item (s_vpn, "foobar4", "blahblah4");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar1", "blahblah1");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar2", "blahblah2");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar3", "blahblah3");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar4", "blahblah4");
 
-	/* Ensure that added values are all present */
-	nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_func, NULL);
-	nm_setting_vpn_remove_data_item (s_vpn, "foobar1");
-	nm_setting_vpn_remove_data_item (s_vpn, "foobar2");
-	nm_setting_vpn_remove_data_item (s_vpn, "foobar3");
-	nm_setting_vpn_remove_data_item (s_vpn, "foobar4");
+    /* Ensure that added values are all present */
+    nm_setting_vpn_foreach_data_item(s_vpn, vpn_check_func, NULL);
+    nm_setting_vpn_remove_data_item(s_vpn, "foobar1");
+    nm_setting_vpn_remove_data_item(s_vpn, "foobar2");
+    nm_setting_vpn_remove_data_item(s_vpn, "foobar3");
+    nm_setting_vpn_remove_data_item(s_vpn, "foobar4");
 
-	g_assert (!_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (!_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    g_assert(!_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(!_nm_connection_aggregate(connection,
+                                       NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                       NULL));
 
-	nm_setting_vpn_add_secret (s_vpn, "foobar1", "blahblah1");
+    nm_setting_vpn_add_secret(s_vpn, "foobar1", "blahblah1");
 
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    g_assert(_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(_nm_connection_aggregate(connection,
+                                      NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                      NULL));
 
-	nm_setting_vpn_add_secret (s_vpn, "foobar2", "blahblah2");
-	nm_setting_vpn_add_secret (s_vpn, "foobar3", "blahblah3");
-	nm_setting_vpn_add_secret (s_vpn, "foobar4", "blahblah4");
+    nm_setting_vpn_add_secret(s_vpn, "foobar2", "blahblah2");
+    nm_setting_vpn_add_secret(s_vpn, "foobar3", "blahblah3");
+    nm_setting_vpn_add_secret(s_vpn, "foobar4", "blahblah4");
 
-	/* Ensure that added values are all present */
-	nm_setting_vpn_foreach_secret (s_vpn, vpn_check_func, NULL);
-	nm_setting_vpn_remove_secret (s_vpn, "foobar1");
-	nm_setting_vpn_remove_secret (s_vpn, "foobar2");
-	nm_setting_vpn_remove_secret (s_vpn, "foobar3");
+    /* Ensure that added values are all present */
+    nm_setting_vpn_foreach_secret(s_vpn, vpn_check_func, NULL);
+    nm_setting_vpn_remove_secret(s_vpn, "foobar1");
+    nm_setting_vpn_remove_secret(s_vpn, "foobar2");
+    nm_setting_vpn_remove_secret(s_vpn, "foobar3");
 
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    g_assert(_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(_nm_connection_aggregate(connection,
+                                      NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                      NULL));
 
-	nm_setting_vpn_add_data_item (s_vpn, "foobar4-flags", "blahblah4");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar4-flags", "blahblah4");
 
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    g_assert(_nm_connection_aggregate(connection,
+                                      NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                      NULL));
 
-	nm_setting_vpn_add_data_item (s_vpn, "foobar4-flags", "2");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar4-flags", "2");
 
-	g_assert (!_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    g_assert(!_nm_connection_aggregate(connection,
+                                       NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                       NULL));
 
-	nm_setting_vpn_remove_secret (s_vpn, "foobar4");
+    nm_setting_vpn_remove_secret(s_vpn, "foobar4");
 
-	g_assert (!_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (!_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    g_assert(!_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(!_nm_connection_aggregate(connection,
+                                       NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                       NULL));
 
-	nm_setting_vpn_remove_data_item (s_vpn, "foobar4-flags");
+    nm_setting_vpn_remove_data_item(s_vpn, "foobar4-flags");
 
-	/* Try to add some blank values and make sure they are rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_data_item (s_vpn, NULL, NULL);
-	g_test_assert_expected_messages ();
+    /* Try to add some blank values and make sure they are rejected */
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_data_item(s_vpn, NULL, NULL);
+    g_test_assert_expected_messages();
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_data_item (s_vpn, "", "");
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_data_item(s_vpn, "", "");
+    g_test_assert_expected_messages();
 
-	nm_setting_vpn_add_data_item (s_vpn, "foobar1", "");
-	g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, "foobar1"), ==, "");
+    nm_setting_vpn_add_data_item(s_vpn, "foobar1", "");
+    g_assert_cmpstr(nm_setting_vpn_get_data_item(s_vpn, "foobar1"), ==, "");
 
-	nm_setting_vpn_add_data_item (s_vpn, "foobar1", NULL);
-	g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, "foobar1"), ==, NULL);
+    nm_setting_vpn_add_data_item(s_vpn, "foobar1", NULL);
+    g_assert_cmpstr(nm_setting_vpn_get_data_item(s_vpn, "foobar1"), ==, NULL);
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_data_item (s_vpn, NULL, "blahblah1");
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_data_item(s_vpn, NULL, "blahblah1");
+    g_test_assert_expected_messages();
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_data_item (s_vpn, "", "blahblah1");
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_data_item(s_vpn, "", "blahblah1");
+    g_test_assert_expected_messages();
 
-	nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_empty_func, NULL);
+    nm_setting_vpn_foreach_data_item(s_vpn, vpn_check_empty_func, NULL);
 
-	/* Try to add some blank secrets and make sure they are rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_secret (s_vpn, NULL, NULL);
-	g_test_assert_expected_messages ();
+    /* Try to add some blank secrets and make sure they are rejected */
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_secret(s_vpn, NULL, NULL);
+    g_test_assert_expected_messages();
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_secret (s_vpn, "", "");
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_secret(s_vpn, "", "");
+    g_test_assert_expected_messages();
 
-	nm_setting_vpn_add_secret (s_vpn, "foobar1", "");
+    nm_setting_vpn_add_secret(s_vpn, "foobar1", "");
 
-	nm_setting_vpn_add_secret (s_vpn, "foobar1", NULL);
+    nm_setting_vpn_add_secret(s_vpn, "foobar1", NULL);
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_secret (s_vpn, NULL, "blahblah1");
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_secret(s_vpn, NULL, "blahblah1");
+    g_test_assert_expected_messages();
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (key && key[0]));
-	nm_setting_vpn_add_secret (s_vpn, "", "blahblah1");
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(key && key[0]));
+    nm_setting_vpn_add_secret(s_vpn, "", "blahblah1");
+    g_test_assert_expected_messages();
 
-	nm_setting_vpn_foreach_secret (s_vpn, vpn_check_empty_func, NULL);
+    nm_setting_vpn_foreach_secret(s_vpn, vpn_check_empty_func, NULL);
 }
 
 static void
-test_setting_vpn_update_secrets (void)
+test_setting_vpn_update_secrets(void)
 {
-	NMConnection *connection;
-	NMSettingVpn *s_vpn;
-	GVariantBuilder settings_builder, vpn_builder, secrets_builder;
-	GVariant *settings;
-	gboolean success;
-	GError *error = NULL;
-	const char *tmp;
-	const char *key1 = "foobar";
-	const char *key2 = "blahblah";
-	const char *val1 = "value1";
-	const char *val2 = "value2";
+    NMConnection *  connection;
+    NMSettingVpn *  s_vpn;
+    GVariantBuilder settings_builder, vpn_builder, secrets_builder;
+    GVariant *      settings;
+    gboolean        success;
+    GError *        error = NULL;
+    const char *    tmp;
+    const char *    key1 = "foobar";
+    const char *    key2 = "blahblah";
+    const char *    val1 = "value1";
+    const char *    val2 = "value2";
 
-	connection = nm_simple_connection_new ();
-	s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_vpn));
+    connection = nm_simple_connection_new();
+    s_vpn      = (NMSettingVpn *) nm_setting_vpn_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_vpn));
 
-	g_variant_builder_init (&settings_builder, NM_VARIANT_TYPE_CONNECTION);
-	g_variant_builder_init (&vpn_builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_init (&secrets_builder, G_VARIANT_TYPE ("a{ss}"));
+    g_variant_builder_init(&settings_builder, NM_VARIANT_TYPE_CONNECTION);
+    g_variant_builder_init(&vpn_builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_init(&secrets_builder, G_VARIANT_TYPE("a{ss}"));
 
-	g_variant_builder_add (&secrets_builder, "{ss}", key1, val1);
-	g_variant_builder_add (&secrets_builder, "{ss}", key2, val2);
+    g_variant_builder_add(&secrets_builder, "{ss}", key1, val1);
+    g_variant_builder_add(&secrets_builder, "{ss}", key2, val2);
 
-	g_variant_builder_add (&vpn_builder, "{sv}",
-	                       NM_SETTING_VPN_SECRETS,
-	                       g_variant_builder_end (&secrets_builder));
-	g_variant_builder_add (&settings_builder, "{sa{sv}}",
-	                       NM_SETTING_VPN_SETTING_NAME,
-	                       &vpn_builder);
-	settings = g_variant_builder_end (&settings_builder);
+    g_variant_builder_add(&vpn_builder,
+                          "{sv}",
+                          NM_SETTING_VPN_SECRETS,
+                          g_variant_builder_end(&secrets_builder));
+    g_variant_builder_add(&settings_builder, "{sa{sv}}", NM_SETTING_VPN_SETTING_NAME, &vpn_builder);
+    settings = g_variant_builder_end(&settings_builder);
 
-	success = nm_connection_update_secrets (connection, NM_SETTING_VPN_SETTING_NAME, settings, &error);
-	g_assert_no_error (error);
-	g_assert (success);
+    success =
+        nm_connection_update_secrets(connection, NM_SETTING_VPN_SETTING_NAME, settings, &error);
+    g_assert_no_error(error);
+    g_assert(success);
 
-	/* Read the secrets back out */
-	tmp = nm_setting_vpn_get_secret (s_vpn, key1);
-	g_assert (tmp);
-	g_assert_cmpstr (tmp, ==, val1);
+    /* Read the secrets back out */
+    tmp = nm_setting_vpn_get_secret(s_vpn, key1);
+    g_assert(tmp);
+    g_assert_cmpstr(tmp, ==, val1);
 
-	tmp = nm_setting_vpn_get_secret (s_vpn, key2);
-	g_assert (tmp);
-	g_assert_cmpstr (tmp, ==, val2);
+    tmp = nm_setting_vpn_get_secret(s_vpn, key2);
+    g_assert(tmp);
+    g_assert_cmpstr(tmp, ==, val2);
 
-	g_variant_unref (settings);
-	g_object_unref (connection);
+    g_variant_unref(settings);
+    g_object_unref(connection);
 }
 
 #define TO_DEL_NUM 50
 typedef struct {
-	NMSettingVpn *s_vpn;
-	char *to_del[TO_DEL_NUM];
-	guint called;
+    NMSettingVpn *s_vpn;
+    char *        to_del[TO_DEL_NUM];
+    guint         called;
 } IterInfo;
 
 static void
-del_iter_func (const char *key, const char *value, gpointer user_data)
+del_iter_func(const char *key, const char *value, gpointer user_data)
 {
-	IterInfo *info = user_data;
-	int i;
+    IterInfo *info = user_data;
+    int       i;
 
-	/* Record how many times this function gets called; it should get called
-	 * exactly as many times as there are keys in the hash table, regardless
-	 * of what keys we delete from the table.
-	 */
-	info->called++;
+    /* Record how many times this function gets called; it should get called
+     * exactly as many times as there are keys in the hash table, regardless
+     * of what keys we delete from the table.
+     */
+    info->called++;
 
-	/* During the iteration, remove a bunch of stuff from the table */
-	if (info->called == 1) {
-		for (i = 0; i < TO_DEL_NUM; i++)
-			nm_setting_vpn_remove_data_item (info->s_vpn, info->to_del[i]);
-	}
+    /* During the iteration, remove a bunch of stuff from the table */
+    if (info->called == 1) {
+        for (i = 0; i < TO_DEL_NUM; i++)
+            nm_setting_vpn_remove_data_item(info->s_vpn, info->to_del[i]);
+    }
 }
 
 static void
-test_setting_vpn_modify_during_foreach (void)
+test_setting_vpn_modify_during_foreach(void)
 {
-	NMSettingVpn *s_vpn;
-	IterInfo info;
-	char *key, *val;
-	int i, u = 0;
+    NMSettingVpn *s_vpn;
+    IterInfo      info;
+    char *        key, *val;
+    int           i, u = 0;
 
-	s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
-	g_assert (s_vpn);
+    s_vpn = (NMSettingVpn *) nm_setting_vpn_new();
+    g_assert(s_vpn);
 
-	for (i = 0; i < TO_DEL_NUM * 2; i++) {
-		key = g_strdup_printf ("adsfasdfadf%d", i);
-		val = g_strdup_printf ("42263236236awt%d", i);
-		nm_setting_vpn_add_data_item (s_vpn, key, val);
+    for (i = 0; i < TO_DEL_NUM * 2; i++) {
+        key = g_strdup_printf("adsfasdfadf%d", i);
+        val = g_strdup_printf("42263236236awt%d", i);
+        nm_setting_vpn_add_data_item(s_vpn, key, val);
 
-		/* Cache some keys to delete */
-		if (i % 2)
-			info.to_del[u++] = g_strdup (key);
+        /* Cache some keys to delete */
+        if (i % 2)
+            info.to_del[u++] = g_strdup(key);
 
-		g_free (key);
-		g_free (val);
-	}
+        g_free(key);
+        g_free(val);
+    }
 
-	/* Iterate over current table keys */
-	info.s_vpn = s_vpn;
-	info.called = 0;
-	nm_setting_vpn_foreach_data_item (s_vpn, del_iter_func, &info);
+    /* Iterate over current table keys */
+    info.s_vpn  = s_vpn;
+    info.called = 0;
+    nm_setting_vpn_foreach_data_item(s_vpn, del_iter_func, &info);
 
-	/* Make sure all the things we removed during iteration are really gone */
-	for (i = 0; i < TO_DEL_NUM; i++) {
-		g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, info.to_del[i]), ==, NULL);
-		g_free (info.to_del[i]);
-	}
+    /* Make sure all the things we removed during iteration are really gone */
+    for (i = 0; i < TO_DEL_NUM; i++) {
+        g_assert_cmpstr(nm_setting_vpn_get_data_item(s_vpn, info.to_del[i]), ==, NULL);
+        g_free(info.to_del[i]);
+    }
 
-	/* And make sure the foreach callback was called the same number of times
-	 * as there were keys in the table at the beginning of the foreach.
-	 */
-	g_assert_cmpint (info.called, ==, TO_DEL_NUM * 2);
+    /* And make sure the foreach callback was called the same number of times
+     * as there were keys in the table at the beginning of the foreach.
+     */
+    g_assert_cmpint(info.called, ==, TO_DEL_NUM * 2);
 
-	g_object_unref (s_vpn);
+    g_object_unref(s_vpn);
 }
 
-static void
-test_setting_ip4_config_labels (void)
-{
-	NMSettingIPConfig *s_ip4;
-	NMIPAddress *addr;
-	GVariant *label;
-	GPtrArray *addrs;
-	char **labels;
-	NMConnection *conn;
-	GVariant *dict, *dict2, *setting_dict, *value;
-	GError *error = NULL;
-
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
-	              NULL);
-
-	/* addr 1 */
-	addr = nm_ip_address_new (AF_INET, "1.2.3.4", 24, &error);
-	g_assert_no_error (error);
-
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-
-	/* The 'address-labels' property should be omitted from the serialization if
-	 * there are no non-NULL labels.
-	 */
-	conn = nmtst_create_minimal_connection ("label test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nm_connection_add_setting (conn, nm_setting_duplicate (NM_SETTING (s_ip4)));
-	dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-	g_object_unref (conn);
-
-	setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (setting_dict != NULL);
-
-	value = g_variant_lookup_value (setting_dict, "address-labels", NULL);
-	g_assert (value == NULL);
-
-	g_variant_unref (setting_dict);
-	g_variant_unref (dict);
-
-	/* Now back to constructing the original s_ip4... */
-
-	/* addr 2 */
-	addr = nm_ip_address_new (AF_INET, "2.3.4.5", 24, &error);
-	g_assert_no_error (error);
-	nm_ip_address_set_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string ("eth0:1"));
-
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 1);
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label != NULL);
-	g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
-
-	/* addr 3 */
-	addr = nm_ip_address_new (AF_INET, "3.4.5.6", 24, &error);
-	g_assert_no_error (error);
-	nm_ip_address_set_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL, NULL);
-
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 2);
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-
-	/* Remove addr 1 and re-verify remaining addresses */
-	nm_setting_ip_config_remove_address (s_ip4, 0);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label != NULL);
-	g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 1);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-
-	/* If we serialize as the daemon, the labels should appear in the D-Bus
-	 * serialization under both 'address-labels' and 'address-data'.
-	 */
-	conn = nmtst_create_minimal_connection ("label test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nm_connection_add_setting (conn, NM_SETTING (s_ip4));
-	_nm_utils_is_manager_process = TRUE;
-	dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-	_nm_utils_is_manager_process = FALSE;
-	g_object_unref (conn);
-
-	setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (setting_dict != NULL);
-
-	value = g_variant_lookup_value (setting_dict, "address-labels", G_VARIANT_TYPE_STRING_ARRAY);
-	g_assert (value != NULL);
-	g_variant_get (value, "^as", &labels);
-	g_assert_cmpint (g_strv_length (labels), ==, 2);
-	g_assert_cmpstr (labels[0], ==, "eth0:1");
-	g_assert_cmpstr (labels[1], ==, "");
-	g_variant_unref (value);
-	g_strfreev (labels);
-
-	value = g_variant_lookup_value (setting_dict, "address-data", G_VARIANT_TYPE ("aa{sv}"));
-	addrs = nm_utils_ip_addresses_from_variant (value, AF_INET);
-	g_variant_unref (value);
-	g_assert (addrs != NULL);
-	g_assert_cmpint (addrs->len, ==, 2);
-	addr = addrs->pdata[0];
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label != NULL);
-	g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
-	addr = addrs->pdata[1];
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-	g_ptr_array_unref (addrs);
-
-	g_variant_unref (setting_dict);
-
-	/* We should be able to deserialize the labels from either 'address-labels'
-	 * or 'address-data'.
-	 */
-	dict2 = g_variant_ref (dict);
-
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
-	                                                   "address-data");
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_no_error (error);
-	g_variant_unref (dict);
-
-	s_ip4 = nm_connection_get_setting_ip4_config (conn);
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label != NULL);
-	g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 1);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-
-	g_object_unref (conn);
-
-	NMTST_VARIANT_EDITOR (dict2,
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
-	                                                   "address-labels");
-	                      );
-	conn = _connection_new_from_dbus (dict2, &error);
-	g_assert_no_error (error);
-	g_variant_unref (dict2);
-
-	s_ip4 = nm_connection_get_setting_ip4_config (conn);
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 1);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-
-	/* Test explicit property assignment */
-	g_object_get (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_ADDRESSES, &addrs,
-	              NULL);
-
-	nm_setting_ip_config_clear_addresses (s_ip4);
-	g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 0);
-
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_ADDRESSES, addrs,
-	              NULL);
-	g_ptr_array_unref (addrs);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-	g_assert_cmpint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 2);
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "2.3.4.5");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label != NULL);
-	g_assert_cmpstr (g_variant_get_string (label, NULL), ==, "eth0:1");
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 1);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "3.4.5.6");
-	label = nm_ip_address_get_attribute (addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
-	g_assert (label == NULL);
-
-	g_object_unref (conn);
-}
-
-static void
-test_setting_ip4_config_address_data (void)
-{
-	NMSettingIPConfig *s_ip4;
-	NMIPAddress *addr;
-	GPtrArray *addrs;
-	NMConnection *conn;
-	GVariant *dict, *setting_dict, *value;
-	GError *error = NULL;
-
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
-	              NULL);
-
-	/* addr 1 */
-	addr = nm_ip_address_new (AF_INET, "1.2.3.4", 24, &error);
-	g_assert_no_error (error);
-	nm_ip_address_set_attribute (addr, "one", g_variant_new_string ("foo"));
-	nm_ip_address_set_attribute (addr, "two", g_variant_new_int32 (42));
-
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-
-	/* addr 2 */
-	addr = nm_ip_address_new (AF_INET, "2.3.4.5", 24, &error);
-	g_assert_no_error (error);
-
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-	nmtst_assert_setting_verifies (NM_SETTING (s_ip4));
-
-	/* The client-side D-Bus serialization should include the attributes in
-	 * "address-data", and should not have an "addresses" property.
-	 */
-	conn = nmtst_create_minimal_connection ("address-data test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nm_connection_add_setting (conn, NM_SETTING (s_ip4));
-	dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-
-	setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (setting_dict != NULL);
-
-	value = g_variant_lookup_value (setting_dict, "addresses", NULL);
-	g_assert (value == NULL);
-
-	value = g_variant_lookup_value (setting_dict, "address-data", G_VARIANT_TYPE ("aa{sv}"));
-	addrs = nm_utils_ip_addresses_from_variant (value, AF_INET);
-	g_variant_unref (value);
-	g_assert (addrs != NULL);
-	g_assert_cmpint (addrs->len, ==, 2);
-
-	addr = addrs->pdata[0];
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.2.3.4");
-	value = nm_ip_address_get_attribute (addr, "one");
-	g_assert (value != NULL);
-	g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "foo");
-	value = nm_ip_address_get_attribute (addr, "two");
-	g_assert (value != NULL);
-	g_assert_cmpint (g_variant_get_int32 (value), ==, 42);
-
-	g_ptr_array_unref (addrs);
-	g_variant_unref (setting_dict);
-	g_variant_unref (dict);
-
-	/* The daemon-side serialization should include both 'addresses' and 'address-data' */
-	_nm_utils_is_manager_process = TRUE;
-	dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-	_nm_utils_is_manager_process = FALSE;
-
-	setting_dict = g_variant_lookup_value (dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (setting_dict != NULL);
-
-	value = g_variant_lookup_value (setting_dict, "addresses", G_VARIANT_TYPE ("aau"));
-	g_assert (value != NULL);
-	g_variant_unref (value);
-
-	value = g_variant_lookup_value (setting_dict, "address-data", G_VARIANT_TYPE ("aa{sv}"));
-	g_assert (value != NULL);
-	g_variant_unref (value);
-
-	g_variant_unref (setting_dict);
-	g_object_unref (conn);
-
-	/* When we reserialize that dictionary as a client, 'address-data' will be preferred. */
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_no_error (error);
-
-	s_ip4 = nm_connection_get_setting_ip4_config (conn);
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.2.3.4");
-	value = nm_ip_address_get_attribute (addr, "one");
-	g_assert (value != NULL);
-	g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "foo");
-	value = nm_ip_address_get_attribute (addr, "two");
-	g_assert (value != NULL);
-	g_assert_cmpint (g_variant_get_int32 (value), ==, 42);
-
-	/* But on the server side, 'addresses' will have precedence. */
-	_nm_utils_is_manager_process = TRUE;
-	conn = _connection_new_from_dbus (dict, &error);
-	_nm_utils_is_manager_process = FALSE;
-	g_assert_no_error (error);
-	g_variant_unref (dict);
-
-	s_ip4 = nm_connection_get_setting_ip4_config (conn);
-
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.2.3.4");
-	value = nm_ip_address_get_attribute (addr, "one");
-	g_assert (value == NULL);
-	value = nm_ip_address_get_attribute (addr, "two");
-	g_assert (value == NULL);
-
-	g_object_unref (conn);
-}
-
-static void
-test_setting_ip_route_attributes (void)
-{
-	GVariant *variant;
-	gboolean res, known;
-
-#define TEST_ATTR(name, type, value, family, exp_res, exp_known) \
-	variant = g_variant_new_ ## type (value); \
-	res = nm_ip_route_attribute_validate (name, variant, family, &known, NULL); \
-	g_assert (res == exp_res); \
-	g_assert (known == exp_known); \
-	g_variant_unref (variant);
-
-	TEST_ATTR ("foo", uint32, 12, AF_INET, FALSE, FALSE);
-
-	TEST_ATTR ("tos", byte,   127, AF_INET, TRUE, TRUE);
-	TEST_ATTR ("tos", string, "0x28", AF_INET, FALSE, TRUE);
-
-	TEST_ATTR ("cwnd",  uint32, 10,    AF_INET, TRUE,  TRUE);
-	TEST_ATTR ("cwnd",  string, "11",  AF_INET, FALSE, TRUE);
+static void
+test_setting_ip4_config_labels(void)
+{
+    NMSettingIPConfig *s_ip4;
+    NMIPAddress *      addr;
+    GVariant *         label;
+    GPtrArray *        addrs;
+    char **            labels;
+    NMConnection *     conn;
+    GVariant *         dict, *dict2, *setting_dict, *value;
+    GError *           error = NULL;
+
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    g_object_set(G_OBJECT(s_ip4),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+                 NULL);
+
+    /* addr 1 */
+    addr = nm_ip_address_new(AF_INET, "1.2.3.4", 24, &error);
+    g_assert_no_error(error);
+
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+
+    addr  = nm_setting_ip_config_get_address(s_ip4, 0);
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+
+    /* The 'address-labels' property should be omitted from the serialization if
+     * there are no non-NULL labels.
+     */
+    conn = nmtst_create_minimal_connection("label test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    nm_connection_add_setting(conn, nm_setting_duplicate(NM_SETTING(s_ip4)));
+    dict = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+    g_object_unref(conn);
+
+    setting_dict =
+        g_variant_lookup_value(dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+    g_assert(setting_dict != NULL);
+
+    value = g_variant_lookup_value(setting_dict, "address-labels", NULL);
+    g_assert(value == NULL);
+
+    g_variant_unref(setting_dict);
+    g_variant_unref(dict);
+
+    /* Now back to constructing the original s_ip4... */
+
+    /* addr 2 */
+    addr = nm_ip_address_new(AF_INET, "2.3.4.5", 24, &error);
+    g_assert_no_error(error);
+    nm_ip_address_set_attribute(addr,
+                                NM_IP_ADDRESS_ATTRIBUTE_LABEL,
+                                g_variant_new_string("eth0:1"));
+
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+
+    addr  = nm_setting_ip_config_get_address(s_ip4, 1);
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label != NULL);
+    g_assert_cmpstr(g_variant_get_string(label, NULL), ==, "eth0:1");
+
+    /* addr 3 */
+    addr = nm_ip_address_new(AF_INET, "3.4.5.6", 24, &error);
+    g_assert_no_error(error);
+    nm_ip_address_set_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL, NULL);
+
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+
+    addr  = nm_setting_ip_config_get_address(s_ip4, 2);
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+
+    /* Remove addr 1 and re-verify remaining addresses */
+    nm_setting_ip_config_remove_address(s_ip4, 0);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "2.3.4.5");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label != NULL);
+    g_assert_cmpstr(g_variant_get_string(label, NULL), ==, "eth0:1");
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 1);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "3.4.5.6");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+
+    /* If we serialize as the daemon, the labels should appear in the D-Bus
+     * serialization under both 'address-labels' and 'address-data'.
+     */
+    conn = nmtst_create_minimal_connection("label test", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    nm_connection_add_setting(conn, NM_SETTING(s_ip4));
+    _nm_utils_is_manager_process = TRUE;
+    dict                         = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+    _nm_utils_is_manager_process = FALSE;
+    g_object_unref(conn);
+
+    setting_dict =
+        g_variant_lookup_value(dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+    g_assert(setting_dict != NULL);
+
+    value = g_variant_lookup_value(setting_dict, "address-labels", G_VARIANT_TYPE_STRING_ARRAY);
+    g_assert(value != NULL);
+    g_variant_get(value, "^as", &labels);
+    g_assert_cmpint(g_strv_length(labels), ==, 2);
+    g_assert_cmpstr(labels[0], ==, "eth0:1");
+    g_assert_cmpstr(labels[1], ==, "");
+    g_variant_unref(value);
+    g_strfreev(labels);
+
+    value = g_variant_lookup_value(setting_dict, "address-data", G_VARIANT_TYPE("aa{sv}"));
+    addrs = nm_utils_ip_addresses_from_variant(value, AF_INET);
+    g_variant_unref(value);
+    g_assert(addrs != NULL);
+    g_assert_cmpint(addrs->len, ==, 2);
+    addr  = addrs->pdata[0];
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label != NULL);
+    g_assert_cmpstr(g_variant_get_string(label, NULL), ==, "eth0:1");
+    addr  = addrs->pdata[1];
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+    g_ptr_array_unref(addrs);
+
+    g_variant_unref(setting_dict);
+
+    /* We should be able to deserialize the labels from either 'address-labels'
+     * or 'address-data'.
+     */
+    dict2 = g_variant_ref(dict);
+
+    NMTST_VARIANT_EDITOR(
+        dict, NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_IP4_CONFIG_SETTING_NAME, "address-data"););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_no_error(error);
+    g_variant_unref(dict);
+
+    s_ip4 = nm_connection_get_setting_ip4_config(conn);
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "2.3.4.5");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label != NULL);
+    g_assert_cmpstr(g_variant_get_string(label, NULL), ==, "eth0:1");
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 1);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "3.4.5.6");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+
+    g_object_unref(conn);
+
+    NMTST_VARIANT_EDITOR(
+        dict2, NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_IP4_CONFIG_SETTING_NAME, "address-labels"););
+    conn = _connection_new_from_dbus(dict2, &error);
+    g_assert_no_error(error);
+    g_variant_unref(dict2);
+
+    s_ip4 = nm_connection_get_setting_ip4_config(conn);
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "2.3.4.5");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert_cmpstr(g_variant_get_string(label, NULL), ==, "eth0:1");
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 1);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "3.4.5.6");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+
+    /* Test explicit property assignment */
+    g_object_get(G_OBJECT(s_ip4), NM_SETTING_IP_CONFIG_ADDRESSES, &addrs, NULL);
+
+    nm_setting_ip_config_clear_addresses(s_ip4);
+    g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 0);
+
+    g_object_set(G_OBJECT(s_ip4), NM_SETTING_IP_CONFIG_ADDRESSES, addrs, NULL);
+    g_ptr_array_unref(addrs);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+    g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 2);
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "2.3.4.5");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label != NULL);
+    g_assert_cmpstr(g_variant_get_string(label, NULL), ==, "eth0:1");
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 1);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "3.4.5.6");
+    label = nm_ip_address_get_attribute(addr, NM_IP_ADDRESS_ATTRIBUTE_LABEL);
+    g_assert(label == NULL);
+
+    g_object_unref(conn);
+}
+
+static void
+test_setting_ip4_config_address_data(void)
+{
+    NMSettingIPConfig *s_ip4;
+    NMIPAddress *      addr;
+    GPtrArray *        addrs;
+    NMConnection *     conn;
+    GVariant *         dict, *setting_dict, *value;
+    GError *           error = NULL;
+
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    g_object_set(G_OBJECT(s_ip4),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+                 NULL);
+
+    /* addr 1 */
+    addr = nm_ip_address_new(AF_INET, "1.2.3.4", 24, &error);
+    g_assert_no_error(error);
+    nm_ip_address_set_attribute(addr, "one", g_variant_new_string("foo"));
+    nm_ip_address_set_attribute(addr, "two", g_variant_new_int32(42));
+
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+
+    /* addr 2 */
+    addr = nm_ip_address_new(AF_INET, "2.3.4.5", 24, &error);
+    g_assert_no_error(error);
+
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+    nmtst_assert_setting_verifies(NM_SETTING(s_ip4));
+
+    /* The client-side D-Bus serialization should include the attributes in
+     * "address-data", and should not have an "addresses" property.
+     */
+    conn = nmtst_create_minimal_connection("address-data test",
+                                           NULL,
+                                           NM_SETTING_WIRED_SETTING_NAME,
+                                           NULL);
+    nm_connection_add_setting(conn, NM_SETTING(s_ip4));
+    dict = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+
+    setting_dict =
+        g_variant_lookup_value(dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+    g_assert(setting_dict != NULL);
+
+    value = g_variant_lookup_value(setting_dict, "addresses", NULL);
+    g_assert(value == NULL);
+
+    value = g_variant_lookup_value(setting_dict, "address-data", G_VARIANT_TYPE("aa{sv}"));
+    addrs = nm_utils_ip_addresses_from_variant(value, AF_INET);
+    g_variant_unref(value);
+    g_assert(addrs != NULL);
+    g_assert_cmpint(addrs->len, ==, 2);
+
+    addr = addrs->pdata[0];
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "1.2.3.4");
+    value = nm_ip_address_get_attribute(addr, "one");
+    g_assert(value != NULL);
+    g_assert_cmpstr(g_variant_get_string(value, NULL), ==, "foo");
+    value = nm_ip_address_get_attribute(addr, "two");
+    g_assert(value != NULL);
+    g_assert_cmpint(g_variant_get_int32(value), ==, 42);
+
+    g_ptr_array_unref(addrs);
+    g_variant_unref(setting_dict);
+    g_variant_unref(dict);
+
+    /* The daemon-side serialization should include both 'addresses' and 'address-data' */
+    _nm_utils_is_manager_process = TRUE;
+    dict                         = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+    _nm_utils_is_manager_process = FALSE;
+
+    setting_dict =
+        g_variant_lookup_value(dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+    g_assert(setting_dict != NULL);
+
+    value = g_variant_lookup_value(setting_dict, "addresses", G_VARIANT_TYPE("aau"));
+    g_assert(value != NULL);
+    g_variant_unref(value);
+
+    value = g_variant_lookup_value(setting_dict, "address-data", G_VARIANT_TYPE("aa{sv}"));
+    g_assert(value != NULL);
+    g_variant_unref(value);
+
+    g_variant_unref(setting_dict);
+    g_object_unref(conn);
+
+    /* When we reserialize that dictionary as a client, 'address-data' will be preferred. */
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_no_error(error);
+
+    s_ip4 = nm_connection_get_setting_ip4_config(conn);
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "1.2.3.4");
+    value = nm_ip_address_get_attribute(addr, "one");
+    g_assert(value != NULL);
+    g_assert_cmpstr(g_variant_get_string(value, NULL), ==, "foo");
+    value = nm_ip_address_get_attribute(addr, "two");
+    g_assert(value != NULL);
+    g_assert_cmpint(g_variant_get_int32(value), ==, 42);
+
+    /* But on the server side, 'addresses' will have precedence. */
+    _nm_utils_is_manager_process = TRUE;
+    conn                         = _connection_new_from_dbus(dict, &error);
+    _nm_utils_is_manager_process = FALSE;
+    g_assert_no_error(error);
+    g_variant_unref(dict);
+
+    s_ip4 = nm_connection_get_setting_ip4_config(conn);
+
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "1.2.3.4");
+    value = nm_ip_address_get_attribute(addr, "one");
+    g_assert(value == NULL);
+    value = nm_ip_address_get_attribute(addr, "two");
+    g_assert(value == NULL);
+
+    g_object_unref(conn);
+}
+
+static void
+test_setting_ip_route_attributes(void)
+{
+    GVariant *variant;
+    gboolean  res, known;
+
+#define TEST_ATTR(name, type, value, family, exp_res, exp_known)                   \
+    variant = g_variant_new_##type(value);                                         \
+    res     = nm_ip_route_attribute_validate(name, variant, family, &known, NULL); \
+    g_assert(res == exp_res);                                                      \
+    g_assert(known == exp_known);                                                  \
+    g_variant_unref(variant);
+
+    TEST_ATTR("foo", uint32, 12, AF_INET, FALSE, FALSE);
+
+    TEST_ATTR("tos", byte, 127, AF_INET, TRUE, TRUE);
+    TEST_ATTR("tos", string, "0x28", AF_INET, FALSE, TRUE);
+
+    TEST_ATTR("cwnd", uint32, 10, AF_INET, TRUE, TRUE);
+    TEST_ATTR("cwnd", string, "11", AF_INET, FALSE, TRUE);
+
+    TEST_ATTR("lock-mtu", boolean, TRUE, AF_INET, TRUE, TRUE);
+    TEST_ATTR("lock-mtu", uint32, 1, AF_INET, FALSE, TRUE);
+
+    TEST_ATTR("from", string, "fd01::1", AF_INET6, TRUE, TRUE);
+    TEST_ATTR("from", string, "fd01::1/64", AF_INET6, TRUE, TRUE);
+    TEST_ATTR("from", string, "fd01::1/128", AF_INET6, TRUE, TRUE);
+    TEST_ATTR("from", string, "fd01::1/129", AF_INET6, FALSE, TRUE);
+    TEST_ATTR("from", string, "fd01::1/a", AF_INET6, FALSE, TRUE);
+    TEST_ATTR("from", string, "abc/64", AF_INET6, FALSE, TRUE);
+    TEST_ATTR("from", string, "1.2.3.4", AF_INET, FALSE, TRUE);
+    TEST_ATTR("from", string, "1.2.3.4", AF_INET6, FALSE, TRUE);
 
-	TEST_ATTR ("lock-mtu", boolean, TRUE, AF_INET, TRUE,  TRUE);
-	TEST_ATTR ("lock-mtu", uint32,  1,    AF_INET, FALSE, TRUE);
-
-	TEST_ATTR ("from", string, "fd01::1",     AF_INET6, TRUE,  TRUE);
-	TEST_ATTR ("from", string, "fd01::1/64",  AF_INET6, TRUE,  TRUE);
-	TEST_ATTR ("from", string, "fd01::1/128", AF_INET6, TRUE,  TRUE);
-	TEST_ATTR ("from", string, "fd01::1/129", AF_INET6, FALSE, TRUE);
-	TEST_ATTR ("from", string, "fd01::1/a",   AF_INET6, FALSE, TRUE);
-	TEST_ATTR ("from", string, "abc/64",      AF_INET6, FALSE, TRUE);
-	TEST_ATTR ("from", string, "1.2.3.4",     AF_INET,  FALSE, TRUE);
-	TEST_ATTR ("from", string, "1.2.3.4",     AF_INET6, FALSE, TRUE);
+    TEST_ATTR("src", string, "1.2.3.4", AF_INET, TRUE, TRUE);
+    TEST_ATTR("src", string, "1.2.3.4", AF_INET6, FALSE, TRUE);
+    TEST_ATTR("src", string, "1.2.3.0/24", AF_INET, FALSE, TRUE);
+    TEST_ATTR("src", string, "fd01::12", AF_INET6, TRUE, TRUE);
 
-	TEST_ATTR ("src", string, "1.2.3.4",    AF_INET,  TRUE,  TRUE);
-	TEST_ATTR ("src", string, "1.2.3.4",    AF_INET6, FALSE, TRUE);
-	TEST_ATTR ("src", string, "1.2.3.0/24", AF_INET,  FALSE, TRUE);
-	TEST_ATTR ("src", string, "fd01::12",   AF_INET6, TRUE,  TRUE);
-
-	TEST_ATTR ("type", string, "local", AF_INET, TRUE, TRUE);
-	TEST_ATTR ("type", string, "local", AF_INET6, TRUE, TRUE);
-	TEST_ATTR ("type", string, "unicast", AF_INET, TRUE, TRUE);
-	TEST_ATTR ("type", string, "unicast", AF_INET6, TRUE, TRUE);
+    TEST_ATTR("type", string, "local", AF_INET, TRUE, TRUE);
+    TEST_ATTR("type", string, "local", AF_INET6, TRUE, TRUE);
+    TEST_ATTR("type", string, "unicast", AF_INET, TRUE, TRUE);
+    TEST_ATTR("type", string, "unicast", AF_INET6, TRUE, TRUE);
 
 #undef TEST_ATTR
 }
 
 static void
-test_setting_gsm_apn_spaces (void)
+test_setting_gsm_apn_spaces(void)
 {
-	gs_unref_object NMSettingGsm *s_gsm = NULL;
-	const char *tmp;
+    gs_unref_object NMSettingGsm *s_gsm = NULL;
+    const char *                  tmp;
 
-	s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
-	g_assert (s_gsm);
+    s_gsm = (NMSettingGsm *) nm_setting_gsm_new();
+    g_assert(s_gsm);
 
-	/* Trailing space */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar ", NULL);
-	tmp = nm_setting_gsm_get_apn (s_gsm);
-	g_assert_cmpstr (tmp, ==, "foobar");
+    /* Trailing space */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, "foobar ", NULL);
+    tmp = nm_setting_gsm_get_apn(s_gsm);
+    g_assert_cmpstr(tmp, ==, "foobar");
 
-	/* Leading space */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, " foobar", NULL);
-	tmp = nm_setting_gsm_get_apn (s_gsm);
-	g_assert_cmpstr (tmp, ==, "foobar");
+    /* Leading space */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, " foobar", NULL);
+    tmp = nm_setting_gsm_get_apn(s_gsm);
+    g_assert_cmpstr(tmp, ==, "foobar");
 }
 
 static void
-test_setting_gsm_apn_bad_chars (void)
+test_setting_gsm_apn_bad_chars(void)
 {
-	gs_unref_object NMSettingGsm *s_gsm = NULL;
+    gs_unref_object NMSettingGsm *s_gsm = NULL;
 
-	s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
-	g_assert (s_gsm);
+    s_gsm = (NMSettingGsm *) nm_setting_gsm_new();
+    g_assert(s_gsm);
 
-	/* Make sure a valid APN works */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar123.-baz", NULL);
-	g_assert (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL));
+    /* Make sure a valid APN works */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, "foobar123.-baz", NULL);
+    g_assert(nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL));
 
-	/* Random invalid chars */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "@#%$@#%@#%", NULL);
-	g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL));
+    /* Random invalid chars */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, "@#%$@#%@#%", NULL);
+    g_assert(!nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL));
 
-	/* Spaces */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar baz", NULL);
-	g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL));
+    /* Spaces */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, "foobar baz", NULL);
+    g_assert(!nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL));
 
-	/* 0 characters long */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "", NULL);
-	g_assert (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL));
+    /* 0 characters long */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, "", NULL);
+    g_assert(nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL));
 
-	/* 65-character long */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl1", NULL);
-	g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL));
+    /* 65-character long */
+    g_object_set(s_gsm,
+                 NM_SETTING_GSM_APN,
+                 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl1",
+                 NULL);
+    g_assert(!nm_setting_verify(NM_SETTING(s_gsm), NULL, NULL));
 }
 
 static void
-test_setting_gsm_apn_underscore (void)
+test_setting_gsm_apn_underscore(void)
 {
-	gs_unref_object NMSettingGsm *s_gsm = NULL;
+    gs_unref_object NMSettingGsm *s_gsm = NULL;
 
-	s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
-	g_assert (s_gsm);
+    s_gsm = (NMSettingGsm *) nm_setting_gsm_new();
+    g_assert(s_gsm);
 
-	/* 65-character long */
-	g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar_baz", NULL);
-	nmtst_assert_setting_verifies (NM_SETTING (s_gsm));
+    /* 65-character long */
+    g_object_set(s_gsm, NM_SETTING_GSM_APN, "foobar_baz", NULL);
+    nmtst_assert_setting_verifies(NM_SETTING(s_gsm));
 }
 
 static void
-test_setting_gsm_without_number (void)
+test_setting_gsm_without_number(void)
 {
-	gs_unref_object NMSettingGsm *s_gsm = NULL;
+    gs_unref_object NMSettingGsm *s_gsm = NULL;
 
-	s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
-	g_assert (s_gsm);
+    s_gsm = (NMSettingGsm *) nm_setting_gsm_new();
+    g_assert(s_gsm);
 
-	g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, NULL, NULL);
-	nmtst_assert_setting_verifies (NM_SETTING (s_gsm));
+    g_object_set(s_gsm, NM_SETTING_GSM_NUMBER, NULL, NULL);
+    nmtst_assert_setting_verifies(NM_SETTING(s_gsm));
 
-	g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "", NULL);
-	nmtst_assert_setting_verify_fails (NM_SETTING (s_gsm), NM_CONNECTION_ERROR,
-	                                   NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_object_set(s_gsm, NM_SETTING_GSM_NUMBER, "", NULL);
+    nmtst_assert_setting_verify_fails(NM_SETTING(s_gsm),
+                                      NM_CONNECTION_ERROR,
+                                      NM_CONNECTION_ERROR_INVALID_PROPERTY);
 }
 
 static void
-test_setting_gsm_sim_operator_id (void)
+test_setting_gsm_sim_operator_id(void)
 {
-	gs_unref_object NMSettingGsm *s_gsm = NULL;
+    gs_unref_object NMSettingGsm *s_gsm = NULL;
 
-	s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
-	g_assert (s_gsm);
+    s_gsm = (NMSettingGsm *) nm_setting_gsm_new();
+    g_assert(s_gsm);
 
-	/* Valid */
-	g_object_set (s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "12345", NULL);
-	nmtst_assert_setting_verifies (NM_SETTING (s_gsm));
+    /* Valid */
+    g_object_set(s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "12345", NULL);
+    nmtst_assert_setting_verifies(NM_SETTING(s_gsm));
 
-	g_object_set (s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "123456", NULL);
-	nmtst_assert_setting_verifies (NM_SETTING (s_gsm));
+    g_object_set(s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "123456", NULL);
+    nmtst_assert_setting_verifies(NM_SETTING(s_gsm));
 
-	/* Invalid */
-	g_object_set (s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "", NULL);
-	nmtst_assert_setting_verify_fails (NM_SETTING (s_gsm), NM_CONNECTION_ERROR,
-	                                   NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    /* Invalid */
+    g_object_set(s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "", NULL);
+    nmtst_assert_setting_verify_fails(NM_SETTING(s_gsm),
+                                      NM_CONNECTION_ERROR,
+                                      NM_CONNECTION_ERROR_INVALID_PROPERTY);
 
-	g_object_set (s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "     ", NULL);
-	nmtst_assert_setting_verify_fails (NM_SETTING (s_gsm), NM_CONNECTION_ERROR,
-	                                   NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_object_set(s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "     ", NULL);
+    nmtst_assert_setting_verify_fails(NM_SETTING(s_gsm),
+                                      NM_CONNECTION_ERROR,
+                                      NM_CONNECTION_ERROR_INVALID_PROPERTY);
 
-	g_object_set (s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "abcdef", NULL);
-	nmtst_assert_setting_verify_fails (NM_SETTING (s_gsm), NM_CONNECTION_ERROR,
-	                                   NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_object_set(s_gsm, NM_SETTING_GSM_SIM_OPERATOR_ID, "abcdef", NULL);
+    nmtst_assert_setting_verify_fails(NM_SETTING(s_gsm),
+                                      NM_CONNECTION_ERROR,
+                                      NM_CONNECTION_ERROR_INVALID_PROPERTY);
 }
 
 static NMSettingWirelessSecurity *
-make_test_wsec_setting (const char *detail)
+make_test_wsec_setting(const char *detail)
 {
-	NMSettingWirelessSecurity *s_wsec;
+    NMSettingWirelessSecurity *s_wsec;
 
-	s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
-	g_assert (s_wsec);
+    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
+    g_assert(s_wsec);
 
-	g_object_set (s_wsec,
-	              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
-	              NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "foobarbaz",
-	              NM_SETTING_WIRELESS_SECURITY_PSK, "random psk",
-	              NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
-	              NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "aaaaaaaaaa",
-	              NULL);
-	return s_wsec;
+    g_object_set(s_wsec,
+                 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+                 "wpa-psk",
+                 NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME,
+                 "foobarbaz",
+                 NM_SETTING_WIRELESS_SECURITY_PSK,
+                 "random psk",
+                 NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS,
+                 NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+                 "aaaaaaaaaa",
+                 NULL);
+    return s_wsec;
 }
 
 static gboolean
-_variant_contains (GVariant *vardict, const char *key)
+_variant_contains(GVariant *vardict, const char *key)
 {
-	gs_unref_variant GVariant *value = NULL;
+    gs_unref_variant GVariant *value = NULL;
 
-	value = g_variant_lookup_value (vardict, key, NULL);
-	return !!value;
+    value = g_variant_lookup_value(vardict, key, NULL);
+    return !!value;
 }
 
 static void
-test_setting_to_dbus_all (void)
+test_setting_to_dbus_all(void)
 {
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *dict;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 dict;
 
-	s_wsec = make_test_wsec_setting ("setting-to-dbus-all");
+    s_wsec = make_test_wsec_setting("setting-to-dbus-all");
 
-	dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    dict = _nm_setting_to_dbus(NM_SETTING(s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
 
-	/* Make sure all keys are there */
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT));
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME));
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_PSK));
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0));
+    /* Make sure all keys are there */
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT));
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME));
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_PSK));
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0));
 
-	g_variant_unref (dict);
-	g_object_unref (s_wsec);
+    g_variant_unref(dict);
+    g_object_unref(s_wsec);
 }
 
 static void
-test_setting_to_dbus_no_secrets (void)
+test_setting_to_dbus_no_secrets(void)
 {
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *dict;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 dict;
 
-	s_wsec = make_test_wsec_setting ("setting-to-dbus-no-secrets");
+    s_wsec = make_test_wsec_setting("setting-to-dbus-no-secrets");
 
-	dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_NO_SECRETS, NULL);
+    dict = _nm_setting_to_dbus(NM_SETTING(s_wsec), NULL, NM_CONNECTION_SERIALIZE_NO_SECRETS, NULL);
 
-	/* Make sure non-secret keys are there */
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT));
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME));
+    /* Make sure non-secret keys are there */
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT));
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME));
 
-	/* Make sure secrets are not there */
-	g_assert (!_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_PSK));
-	g_assert (!_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0));
+    /* Make sure secrets are not there */
+    g_assert(!_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_PSK));
+    g_assert(!_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0));
 
-	g_variant_unref (dict);
-	g_object_unref (s_wsec);
+    g_variant_unref(dict);
+    g_object_unref(s_wsec);
 }
 
 static void
-test_setting_to_dbus_only_secrets (void)
+test_setting_to_dbus_only_secrets(void)
 {
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *dict;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 dict;
 
-	s_wsec = make_test_wsec_setting ("setting-to-dbus-only-secrets");
+    s_wsec = make_test_wsec_setting("setting-to-dbus-only-secrets");
 
-	dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ONLY_SECRETS, NULL);
+    dict =
+        _nm_setting_to_dbus(NM_SETTING(s_wsec), NULL, NM_CONNECTION_SERIALIZE_ONLY_SECRETS, NULL);
 
-	/* Make sure non-secret keys are not there */
-	g_assert (!_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT));
-	g_assert (!_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME));
+    /* Make sure non-secret keys are not there */
+    g_assert(!_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT));
+    g_assert(!_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME));
 
-	/* Make sure secrets are there */
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_PSK));
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0));
+    /* Make sure secrets are there */
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_PSK));
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0));
 
-	g_variant_unref (dict);
-	g_object_unref (s_wsec);
+    g_variant_unref(dict);
+    g_object_unref(s_wsec);
 }
 
 static void
-test_setting_to_dbus_transform (void)
+test_setting_to_dbus_transform(void)
 {
-	NMSetting *s_wired;
-	GVariant *dict, *val;
-	const char *test_mac_address = "11:22:33:44:55:66";
-	const guint8 *dbus_mac_address;
-	guint8 cmp_mac_address[ETH_ALEN];
-	gsize len;
+    NMSetting *   s_wired;
+    GVariant *    dict, *val;
+    const char *  test_mac_address = "11:22:33:44:55:66";
+    const guint8 *dbus_mac_address;
+    guint8        cmp_mac_address[ETH_ALEN];
+    gsize         len;
 
-	s_wired = nm_setting_wired_new ();
-	g_object_set (s_wired,
-	              NM_SETTING_WIRED_MAC_ADDRESS, test_mac_address,
-	              NULL);
+    s_wired = nm_setting_wired_new();
+    g_object_set(s_wired, NM_SETTING_WIRED_MAC_ADDRESS, test_mac_address, NULL);
 
-	g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address);
+    g_assert_cmpstr(nm_setting_wired_get_mac_address(NM_SETTING_WIRED(s_wired)),
+                    ==,
+                    test_mac_address);
 
-	dict = _nm_setting_to_dbus (s_wired, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
-	g_assert (dict != NULL);
+    dict = _nm_setting_to_dbus(s_wired, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    g_assert(dict != NULL);
 
-	val = g_variant_lookup_value (dict, NM_SETTING_WIRED_MAC_ADDRESS, G_VARIANT_TYPE_BYTESTRING);
-	g_assert (val != NULL);
+    val = g_variant_lookup_value(dict, NM_SETTING_WIRED_MAC_ADDRESS, G_VARIANT_TYPE_BYTESTRING);
+    g_assert(val != NULL);
 
-	dbus_mac_address = g_variant_get_fixed_array (val, &len, 1);
-	g_assert_cmpint (len, ==, ETH_ALEN);
+    dbus_mac_address = g_variant_get_fixed_array(val, &len, 1);
+    g_assert_cmpint(len, ==, ETH_ALEN);
 
-	nm_utils_hwaddr_aton (test_mac_address, cmp_mac_address, ETH_ALEN);
-	g_assert (memcmp (dbus_mac_address, cmp_mac_address, ETH_ALEN) == 0);
+    nm_utils_hwaddr_aton(test_mac_address, cmp_mac_address, ETH_ALEN);
+    g_assert(memcmp(dbus_mac_address, cmp_mac_address, ETH_ALEN) == 0);
 
-	g_variant_unref (val);
-	g_variant_unref (dict);
-	g_object_unref (s_wired);
+    g_variant_unref(val);
+    g_variant_unref(dict);
+    g_object_unref(s_wired);
 }
 
 static void
-test_setting_to_dbus_enum (void)
+test_setting_to_dbus_enum(void)
 {
-	NMSetting *s_ip6, *s_wsec, *s_serial;
-	GVariant *dict, *val;
-
-	/* enum */
-	s_ip6 = nm_setting_ip6_config_new ();
-	g_object_set (s_ip6,
-	              NM_SETTING_IP6_CONFIG_IP6_PRIVACY, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR,
-	              NULL);
-
-	dict = _nm_setting_to_dbus (s_ip6, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
-	g_assert (dict != NULL);
-
-	val = g_variant_lookup_value (dict, NM_SETTING_IP6_CONFIG_IP6_PRIVACY, G_VARIANT_TYPE_INT32);
-	g_assert (val != NULL);
-	g_assert_cmpint (g_variant_get_int32 (val), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
-	g_variant_unref (val);
-
-	g_variant_unref (dict);
-	g_object_unref (s_ip6);
+    NMSetting *s_ip6, *s_wsec, *s_serial;
+    GVariant * dict, *val;
 
-	/* flags (and a transformed enum) */
-	s_wsec = nm_setting_wireless_security_new ();
-	g_object_set (s_wsec,
-	              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_KEY,
-	              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
-	                                                           NM_SETTING_SECRET_FLAG_NOT_SAVED),
-	              NULL);
+    /* enum */
+    s_ip6 = nm_setting_ip6_config_new();
+    g_object_set(s_ip6,
+                 NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
+                 NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR,
+                 NULL);
 
-	dict = _nm_setting_to_dbus (s_wsec, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
-	g_assert (dict != NULL);
+    dict = _nm_setting_to_dbus(s_ip6, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    g_assert(dict != NULL);
 
-	val = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, G_VARIANT_TYPE_UINT32);
-	g_assert (val != NULL);
-	g_assert_cmpint (g_variant_get_uint32 (val), ==, NM_WEP_KEY_TYPE_KEY);
-	g_variant_unref (val);
+    val = g_variant_lookup_value(dict, NM_SETTING_IP6_CONFIG_IP6_PRIVACY, G_VARIANT_TYPE_INT32);
+    g_assert(val != NULL);
+    g_assert_cmpint(g_variant_get_int32(val), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+    g_variant_unref(val);
 
-	val = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, G_VARIANT_TYPE_UINT32);
-	g_assert (val != NULL);
-	g_assert_cmpint (g_variant_get_uint32 (val), ==, (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
-	                                                  NM_SETTING_SECRET_FLAG_NOT_SAVED));
-	g_variant_unref (val);
+    g_variant_unref(dict);
+    g_object_unref(s_ip6);
 
-	g_variant_unref (dict);
-	g_object_unref (s_wsec);
+    /* flags (and a transformed enum) */
+    s_wsec = nm_setting_wireless_security_new();
+    g_object_set(s_wsec,
+                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+                 NM_WEP_KEY_TYPE_KEY,
+                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
+                 (NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED),
+                 NULL);
 
-	/* another transformed enum */
-	s_serial = nm_setting_serial_new ();
-	g_object_set (s_serial,
-	              NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_ODD,
-	              NULL);
+    dict = _nm_setting_to_dbus(s_wsec, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    g_assert(dict != NULL);
 
-	dict = _nm_setting_to_dbus (s_serial, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
-	g_assert (dict != NULL);
+    val = g_variant_lookup_value(dict,
+                                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+                                 G_VARIANT_TYPE_UINT32);
+    g_assert(val != NULL);
+    g_assert_cmpint(g_variant_get_uint32(val), ==, NM_WEP_KEY_TYPE_KEY);
+    g_variant_unref(val);
 
-	val = g_variant_lookup_value (dict, NM_SETTING_SERIAL_PARITY, G_VARIANT_TYPE_BYTE);
-	g_assert (val != NULL);
-	g_assert_cmpint (g_variant_get_byte (val), ==, 'o');
-	g_variant_unref (val);
+    val = g_variant_lookup_value(dict,
+                                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
+                                 G_VARIANT_TYPE_UINT32);
+    g_assert(val != NULL);
+    g_assert_cmpint(g_variant_get_uint32(val),
+                    ==,
+                    (NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED));
+    g_variant_unref(val);
 
-	g_variant_unref (dict);
-	g_object_unref (s_serial);
-}
-
-static void
-test_connection_to_dbus_setting_name (void)
-{
-	NMConnection *connection;
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *dict;
-
-	connection = nm_simple_connection_new ();
-	s_wsec = make_test_wsec_setting ("connection-to-dbus-setting-name");
-	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+    g_variant_unref(dict);
+    g_object_unref(s_wsec);
 
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    /* another transformed enum */
+    s_serial = nm_setting_serial_new();
+    g_object_set(s_serial, NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_ODD, NULL);
 
-	g_object_set (s_wsec,
-	              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
-	              NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED,
-	              NULL);
+    dict = _nm_setting_to_dbus(s_serial, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    g_assert(dict != NULL);
 
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (!_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
+    val = g_variant_lookup_value(dict, NM_SETTING_SERIAL_PARITY, G_VARIANT_TYPE_BYTE);
+    g_assert(val != NULL);
+    g_assert_cmpint(g_variant_get_byte(val), ==, 'o');
+    g_variant_unref(val);
 
-	g_object_set (s_wsec,
-	              NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, NM_SETTING_SECRET_FLAG_NONE,
-	              NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, NM_SETTING_SECRET_FLAG_NONE,
-	              NULL);
-
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
-	g_assert (_nm_connection_aggregate (connection, NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS, NULL));
-
-	dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
-
-	/* Make sure the keys of the first level dict are setting names, not
-	 * the GType name of the setting objects.
-	 */
-	g_assert (_variant_contains (dict, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME));
-
-	g_variant_unref (dict);
-	g_object_unref (connection);
+    g_variant_unref(dict);
+    g_object_unref(s_serial);
 }
 
 static void
-test_connection_to_dbus_deprecated_props (void)
+test_connection_to_dbus_setting_name(void)
 {
-	NMConnection *connection;
-	NMSetting *s_wireless;
-	GBytes *ssid;
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *dict, *wireless_dict, *sec_val;
-
-	connection = nmtst_create_minimal_connection ("test-connection-to-dbus-deprecated-props",
-	                                              NULL,
-	                                              NM_SETTING_WIRELESS_SETTING_NAME,
-	                                              NULL);
+    NMConnection *             connection;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 dict;
 
-	s_wireless = nm_setting_wireless_new ();
-	ssid = g_bytes_new ("1234567", 7);
-	g_object_set (s_wireless,
-	              NM_SETTING_WIRELESS_SSID, ssid,
-	              NULL);
-	g_bytes_unref (ssid);
-	nm_connection_add_setting (connection, s_wireless);
+    connection = nm_simple_connection_new();
+    s_wsec     = make_test_wsec_setting("connection-to-dbus-setting-name");
+    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
 
-	/* Serialization should not have an 802-11-wireless.security property */
-	dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
-	g_assert (dict != NULL);
+    g_assert(_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(_nm_connection_aggregate(connection,
+                                      NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                      NULL));
 
-	wireless_dict = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (wireless_dict != NULL);
+    g_object_set(s_wsec,
+                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
+                 NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS,
+                 NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                 NULL);
 
-	sec_val = g_variant_lookup_value (wireless_dict, "security", NULL);
-	g_assert (sec_val == NULL);
+    g_assert(_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(!_nm_connection_aggregate(connection,
+                                       NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                       NULL));
 
-	g_variant_unref (wireless_dict);
-	g_variant_unref (dict);
+    g_object_set(s_wsec,
+                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
+                 NM_SETTING_SECRET_FLAG_NONE,
+                 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS,
+                 NM_SETTING_SECRET_FLAG_NONE,
+                 NULL);
 
-	/* Now add an NMSettingWirelessSecurity and try again */
-	s_wsec = make_test_wsec_setting ("test-connection-to-dbus-deprecated-props");
-	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+    g_assert(_nm_connection_aggregate(connection, NM_CONNECTION_AGGREGATE_ANY_SECRETS, NULL));
+    g_assert(_nm_connection_aggregate(connection,
+                                      NM_CONNECTION_AGGREGATE_ANY_SYSTEM_SECRET_FLAGS,
+                                      NULL));
 
-	dict = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
-	g_assert (dict != NULL);
+    dict = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL);
 
-	wireless_dict = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (wireless_dict != NULL);
+    /* Make sure the keys of the first level dict are setting names, not
+     * the GType name of the setting objects.
+     */
+    g_assert(_variant_contains(dict, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME));
 
-	sec_val = g_variant_lookup_value (wireless_dict, "security", NULL);
-	g_assert (g_variant_is_of_type (sec_val, G_VARIANT_TYPE_STRING));
-	g_assert_cmpstr (g_variant_get_string (sec_val, NULL), ==, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
-
-	g_variant_unref (sec_val);
-	g_variant_unref (wireless_dict);
-	g_variant_unref (dict);
-	g_object_unref (connection);
+    g_variant_unref(dict);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_new_from_dbus (void)
+test_connection_to_dbus_deprecated_props(void)
 {
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *dict;
-
-	s_wsec = make_test_wsec_setting ("setting-new-from-dbus");
-	dict = _nm_setting_to_dbus (NM_SETTING (s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
-	g_object_unref (s_wsec);
-
-	s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, NULL);
-	g_variant_unref (dict);
-
-	g_assert (s_wsec);
-	g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "wpa-psk");
-	g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, "foobarbaz");
-	g_assert_cmpstr (nm_setting_wireless_security_get_psk (s_wsec), ==, "random psk");
-	g_object_unref (s_wsec);
-}
+    NMConnection *             connection;
+    NMSetting *                s_wireless;
+    GBytes *                   ssid;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 dict, *wireless_dict, *sec_val;
 
-static void
-test_setting_new_from_dbus_transform (void)
-{
-	NMSetting *s_wired;
-	GVariant *dict;
-	GVariantBuilder builder;
-	const char *test_mac_address = "11:22:33:44:55:66";
-	guint8 dbus_mac_address[ETH_ALEN];
-	GError *error = NULL;
+    connection = nmtst_create_minimal_connection("test-connection-to-dbus-deprecated-props",
+                                                 NULL,
+                                                 NM_SETTING_WIRELESS_SETTING_NAME,
+                                                 NULL);
 
-	nm_utils_hwaddr_aton (test_mac_address, dbus_mac_address, ETH_ALEN);
+    s_wireless = nm_setting_wireless_new();
+    ssid       = g_bytes_new("1234567", 7);
+    g_object_set(s_wireless, NM_SETTING_WIRELESS_SSID, ssid, NULL);
+    g_bytes_unref(ssid);
+    nm_connection_add_setting(connection, s_wireless);
 
-	g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_WIRED_MAC_ADDRESS,
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                  dbus_mac_address, ETH_ALEN, 1));
-	dict = g_variant_builder_end (&builder);
+    /* Serialization should not have an 802-11-wireless.security property */
+    dict = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL);
+    g_assert(dict != NULL);
 
-	s_wired = _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRED, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error);
-	g_assert_no_error (error);
+    wireless_dict =
+        g_variant_lookup_value(dict, NM_SETTING_WIRELESS_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+    g_assert(wireless_dict != NULL);
 
-	g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address);
+    sec_val = g_variant_lookup_value(wireless_dict, "security", NULL);
+    g_assert(sec_val == NULL);
 
-	g_variant_unref (dict);
-	g_object_unref (s_wired);
-}
+    g_variant_unref(wireless_dict);
+    g_variant_unref(dict);
 
-static void
-test_setting_new_from_dbus_enum (void)
-{
-	NMSettingIP6Config *s_ip6;
-	NMSettingWirelessSecurity *s_wsec;
-	NMSettingSerial *s_serial;
-	GVariant *dict;
-	GVariantBuilder builder;
-	GError *error = NULL;
+    /* Now add an NMSettingWirelessSecurity and try again */
+    s_wsec = make_test_wsec_setting("test-connection-to-dbus-deprecated-props");
+    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
 
-	/* enum */
-	g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
-	                       g_variant_new_int32 (NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR));
-	dict = g_variant_builder_end (&builder);
+    dict = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL);
+    g_assert(dict != NULL);
 
-	s_ip6 = (NMSettingIP6Config *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_IP6_CONFIG, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error);
-	g_assert_no_error (error);
-
-	g_assert_cmpint (nm_setting_ip6_config_get_ip6_privacy (s_ip6), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+    wireless_dict =
+        g_variant_lookup_value(dict, NM_SETTING_WIRELESS_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
+    g_assert(wireless_dict != NULL);
 
-	g_variant_unref (dict);
-	g_object_unref (s_ip6);
+    sec_val = g_variant_lookup_value(wireless_dict, "security", NULL);
+    g_assert(g_variant_is_of_type(sec_val, G_VARIANT_TYPE_STRING));
+    g_assert_cmpstr(g_variant_get_string(sec_val, NULL),
+                    ==,
+                    NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
 
-	/* flags (and a transformed enum) */
-	g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
-	                       g_variant_new_uint32 (NM_WEP_KEY_TYPE_KEY));
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
-	                       g_variant_new_uint32 (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
-	                                             NM_SETTING_SECRET_FLAG_NOT_SAVED));
-	dict = g_variant_builder_end (&builder);
-
-	s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error);
-	g_assert_no_error (error);
-
-	g_assert_cmpint (nm_setting_wireless_security_get_wep_key_type (s_wsec), ==, NM_WEP_KEY_TYPE_KEY);
-	g_assert_cmpint (nm_setting_wireless_security_get_wep_key_flags (s_wsec), ==, (NM_SETTING_SECRET_FLAG_AGENT_OWNED |
-	                                                                               NM_SETTING_SECRET_FLAG_NOT_SAVED));
-
-	g_variant_unref (dict);
-	g_object_unref (s_wsec);
-
-	/* another transformed enum */
-	g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_SERIAL_PARITY,
-	                       g_variant_new_byte ('E'));
-	dict = g_variant_builder_end (&builder);
-
-	s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_SERIAL, dict, NULL, NM_SETTING_PARSE_FLAGS_NONE, &error);
-	g_assert_no_error (error);
-
-	g_assert_cmpint (nm_setting_serial_get_parity (s_serial), ==, NM_SETTING_SERIAL_PARITY_EVEN);
-
-	g_variant_unref (dict);
-	g_object_unref (s_serial);
-}
-
-static void
-test_setting_new_from_dbus_bad (void)
-{
-	NMSetting *setting;
-	NMConnection *conn;
-	GBytes *ssid;
-	GPtrArray *addrs;
-	GVariant *orig_dict, *dict;
-	GError *error = NULL;
-
-	/* We want to test:
-	 * - ordinary scalar properties
-	 * - string properties
-	 * - GBytes-valued properties (which are handled specially by set_property_from_dbus())
-	 * - enum/flags-valued properties
-	 * - overridden properties
-	 * - transformed properties
-	 *
-	 * No single setting class has examples of all of these, so we need two settings.
-	 */
-
-	conn = nm_simple_connection_new ();
-
-	setting = nm_setting_connection_new ();
-	g_object_set (setting,
-	              NM_SETTING_CONNECTION_ID, "test",
-	              NM_SETTING_CONNECTION_UUID, "83c5a841-1759-4cdb-bfce-8d4087956497",
-	              NULL);
-	nm_connection_add_setting (conn, setting);
-
-	setting = nm_setting_wireless_new ();
-	ssid = g_bytes_new ("my-ssid", 7);
-	g_object_set (setting,
-	              /* scalar */
-	              NM_SETTING_WIRELESS_RATE, 100,
-	              /* string */
-	              NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA,
-	              /* GBytes */
-	              NM_SETTING_WIRELESS_SSID, ssid,
-	              /* transformed */
-	              NM_SETTING_WIRELESS_BSSID, "00:11:22:33:44:55",
-	              NULL);
-	g_bytes_unref (ssid);
-	nm_connection_add_setting (conn, setting);
-
-	setting = nm_setting_ip6_config_new ();
-	addrs = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_ip_address_unref);
-	g_ptr_array_add (addrs, nm_ip_address_new (AF_INET6, "1234::5678", 64, NULL));
-	g_object_set (setting,
-	              /* enum */
-	              NM_SETTING_IP6_CONFIG_IP6_PRIVACY, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR,
-	              /* overridden */
-	              NM_SETTING_IP_CONFIG_ADDRESSES, addrs,
-	              /* (needed in order to verify()) */
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
-	              NULL);
-	g_ptr_array_unref (addrs);
-	nm_connection_add_setting (conn, setting);
-
-	orig_dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-	g_object_unref (conn);
-
-	/* sanity-check */
-	conn = _connection_new_from_dbus (orig_dict, &error);
-	g_assert_no_error (error);
-	g_assert (conn);
-	g_object_unref (conn);
-
-	/* Compatible mismatches */
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_WIRELESS_SETTING_NAME,
-	                                                     NM_SETTING_WIRELESS_RATE,
-	                                                     "i", 10);
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert (conn);
-	g_assert_no_error (error);
-	setting = nm_connection_get_setting (conn, NM_TYPE_SETTING_WIRELESS);
-	g_assert (setting);
-	g_assert_cmpint (nm_setting_wireless_get_rate (NM_SETTING_WIRELESS (setting)), ==, 10);
-	g_object_unref (conn);
-	g_variant_unref (dict);
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                                                     NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
-	                                                     "i", NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert (conn);
-	g_assert_no_error (error);
-	setting = nm_connection_get_setting (conn, NM_TYPE_SETTING_IP6_CONFIG);
-	g_assert (setting);
-	g_assert_cmpint (nm_setting_ip6_config_get_ip6_privacy (NM_SETTING_IP6_CONFIG (setting)), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
-	g_object_unref (conn);
-	g_variant_unref (dict);
-
-	/* Incompatible mismatches */
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_WIRELESS_SETTING_NAME,
-	                                                     NM_SETTING_WIRELESS_RATE,
-	                                                     "s", "ten");
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "802-11-wireless.rate:"));
-	g_clear_error (&error);
-	g_variant_unref (dict);
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_WIRELESS_SETTING_NAME,
-	                                                     NM_SETTING_WIRELESS_MODE,
-	                                                     "b", FALSE);
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "802-11-wireless.mode:"));
-	g_clear_error (&error);
-	g_variant_unref (dict);
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_WIRELESS_SETTING_NAME,
-	                                                     NM_SETTING_WIRELESS_SSID,
-	                                                     "s", "fred");
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "802-11-wireless.ssid:"));
-	g_clear_error (&error);
-	g_variant_unref (dict);
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_WIRELESS_SETTING_NAME,
-	                                                     NM_SETTING_WIRELESS_BSSID,
-	                                                     "i", 42);
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "802-11-wireless.bssid:"));
-	g_clear_error (&error);
-	g_variant_unref (dict);
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                                                     NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
-	                                                     "s", "private");
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "ipv6.ip6-privacy:"));
-	g_clear_error (&error);
-	g_variant_unref (dict);
-
-	dict = g_variant_ref (orig_dict);
-	NMTST_VARIANT_EDITOR (dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                                                     NM_SETTING_IP_CONFIG_ADDRESSES,
-	                                                     "s", "1234::5678");
-	                      );
-	conn = _connection_new_from_dbus (dict, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "ipv6.addresses:"));
-	g_clear_error (&error);
-	g_variant_unref (dict);
-
-	g_variant_unref (orig_dict);
+    g_variant_unref(sec_val);
+    g_variant_unref(wireless_dict);
+    g_variant_unref(dict);
+    g_object_unref(connection);
+}
+
+static void
+test_setting_new_from_dbus(void)
+{
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 dict;
+
+    s_wsec = make_test_wsec_setting("setting-new-from-dbus");
+    dict   = _nm_setting_to_dbus(NM_SETTING(s_wsec), NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    g_object_unref(s_wsec);
+
+    s_wsec =
+        (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus(NM_TYPE_SETTING_WIRELESS_SECURITY,
+                                                                dict,
+                                                                NULL,
+                                                                NM_SETTING_PARSE_FLAGS_NONE,
+                                                                NULL);
+    g_variant_unref(dict);
+
+    g_assert(s_wsec);
+    g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "wpa-psk");
+    g_assert_cmpstr(nm_setting_wireless_security_get_leap_username(s_wsec), ==, "foobarbaz");
+    g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec), ==, "random psk");
+    g_object_unref(s_wsec);
+}
+
+static void
+test_setting_new_from_dbus_transform(void)
+{
+    NMSetting *     s_wired;
+    GVariant *      dict;
+    GVariantBuilder builder;
+    const char *    test_mac_address = "11:22:33:44:55:66";
+    guint8          dbus_mac_address[ETH_ALEN];
+    GError *        error = NULL;
+
+    nm_utils_hwaddr_aton(test_mac_address, dbus_mac_address, ETH_ALEN);
+
+    g_variant_builder_init(&builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(
+        &builder,
+        "{sv}",
+        NM_SETTING_WIRED_MAC_ADDRESS,
+        g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, dbus_mac_address, ETH_ALEN, 1));
+    dict = g_variant_builder_end(&builder);
+
+    s_wired = _nm_setting_new_from_dbus(NM_TYPE_SETTING_WIRED,
+                                        dict,
+                                        NULL,
+                                        NM_SETTING_PARSE_FLAGS_NONE,
+                                        &error);
+    g_assert_no_error(error);
+
+    g_assert_cmpstr(nm_setting_wired_get_mac_address(NM_SETTING_WIRED(s_wired)),
+                    ==,
+                    test_mac_address);
+
+    g_variant_unref(dict);
+    g_object_unref(s_wired);
+}
+
+static void
+test_setting_new_from_dbus_enum(void)
+{
+    NMSettingIP6Config *       s_ip6;
+    NMSettingWirelessSecurity *s_wsec;
+    NMSettingSerial *          s_serial;
+    GVariant *                 dict;
+    GVariantBuilder            builder;
+    GError *                   error = NULL;
+
+    /* enum */
+    g_variant_builder_init(&builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&builder,
+                          "{sv}",
+                          NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
+                          g_variant_new_int32(NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR));
+    dict = g_variant_builder_end(&builder);
+
+    s_ip6 = (NMSettingIP6Config *) _nm_setting_new_from_dbus(NM_TYPE_SETTING_IP6_CONFIG,
+                                                             dict,
+                                                             NULL,
+                                                             NM_SETTING_PARSE_FLAGS_NONE,
+                                                             &error);
+    g_assert_no_error(error);
+
+    g_assert_cmpint(nm_setting_ip6_config_get_ip6_privacy(s_ip6),
+                    ==,
+                    NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+
+    g_variant_unref(dict);
+    g_object_unref(s_ip6);
+
+    /* flags (and a transformed enum) */
+    g_variant_builder_init(&builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&builder,
+                          "{sv}",
+                          NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+                          g_variant_new_uint32(NM_WEP_KEY_TYPE_KEY));
+    g_variant_builder_add(&builder,
+                          "{sv}",
+                          NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS,
+                          g_variant_new_uint32(NM_SETTING_SECRET_FLAG_AGENT_OWNED
+                                               | NM_SETTING_SECRET_FLAG_NOT_SAVED));
+    dict = g_variant_builder_end(&builder);
+
+    s_wsec =
+        (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus(NM_TYPE_SETTING_WIRELESS_SECURITY,
+                                                                dict,
+                                                                NULL,
+                                                                NM_SETTING_PARSE_FLAGS_NONE,
+                                                                &error);
+    g_assert_no_error(error);
+
+    g_assert_cmpint(nm_setting_wireless_security_get_wep_key_type(s_wsec), ==, NM_WEP_KEY_TYPE_KEY);
+    g_assert_cmpint(nm_setting_wireless_security_get_wep_key_flags(s_wsec),
+                    ==,
+                    (NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED));
+
+    g_variant_unref(dict);
+    g_object_unref(s_wsec);
+
+    /* another transformed enum */
+    g_variant_builder_init(&builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&builder, "{sv}", NM_SETTING_SERIAL_PARITY, g_variant_new_byte('E'));
+    dict = g_variant_builder_end(&builder);
+
+    s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus(NM_TYPE_SETTING_SERIAL,
+                                                             dict,
+                                                             NULL,
+                                                             NM_SETTING_PARSE_FLAGS_NONE,
+                                                             &error);
+    g_assert_no_error(error);
+
+    g_assert_cmpint(nm_setting_serial_get_parity(s_serial), ==, NM_SETTING_SERIAL_PARITY_EVEN);
+
+    g_variant_unref(dict);
+    g_object_unref(s_serial);
+}
+
+static void
+test_setting_new_from_dbus_bad(void)
+{
+    NMSetting *   setting;
+    NMConnection *conn;
+    GBytes *      ssid;
+    GPtrArray *   addrs;
+    GVariant *    orig_dict, *dict;
+    GError *      error = NULL;
+
+    /* We want to test:
+     * - ordinary scalar properties
+     * - string properties
+     * - GBytes-valued properties (which are handled specially by set_property_from_dbus())
+     * - enum/flags-valued properties
+     * - overridden properties
+     * - transformed properties
+     *
+     * No single setting class has examples of all of these, so we need two settings.
+     */
+
+    conn = nm_simple_connection_new();
+
+    setting = nm_setting_connection_new();
+    g_object_set(setting,
+                 NM_SETTING_CONNECTION_ID,
+                 "test",
+                 NM_SETTING_CONNECTION_UUID,
+                 "83c5a841-1759-4cdb-bfce-8d4087956497",
+                 NULL);
+    nm_connection_add_setting(conn, setting);
+
+    setting = nm_setting_wireless_new();
+    ssid    = g_bytes_new("my-ssid", 7);
+    g_object_set(setting,
+                 /* scalar */
+                 NM_SETTING_WIRELESS_RATE,
+                 100,
+                 /* string */
+                 NM_SETTING_WIRELESS_MODE,
+                 NM_SETTING_WIRELESS_MODE_INFRA,
+                 /* GBytes */
+                 NM_SETTING_WIRELESS_SSID,
+                 ssid,
+                 /* transformed */
+                 NM_SETTING_WIRELESS_BSSID,
+                 "00:11:22:33:44:55",
+                 NULL);
+    g_bytes_unref(ssid);
+    nm_connection_add_setting(conn, setting);
+
+    setting = nm_setting_ip6_config_new();
+    addrs   = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref);
+    g_ptr_array_add(addrs, nm_ip_address_new(AF_INET6, "1234::5678", 64, NULL));
+    g_object_set(setting,
+                 /* enum */
+                 NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
+                 NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR,
+                 /* overridden */
+                 NM_SETTING_IP_CONFIG_ADDRESSES,
+                 addrs,
+                 /* (needed in order to verify()) */
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+                 NULL);
+    g_ptr_array_unref(addrs);
+    nm_connection_add_setting(conn, setting);
+
+    orig_dict = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+    g_object_unref(conn);
+
+    /* sanity-check */
+    conn = _connection_new_from_dbus(orig_dict, &error);
+    g_assert_no_error(error);
+    g_assert(conn);
+    g_object_unref(conn);
+
+    /* Compatible mismatches */
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_WIRELESS_SETTING_NAME,
+                                                       NM_SETTING_WIRELESS_RATE,
+                                                       "i",
+                                                       10););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert(conn);
+    g_assert_no_error(error);
+    setting = nm_connection_get_setting(conn, NM_TYPE_SETTING_WIRELESS);
+    g_assert(setting);
+    g_assert_cmpint(nm_setting_wireless_get_rate(NM_SETTING_WIRELESS(setting)), ==, 10);
+    g_object_unref(conn);
+    g_variant_unref(dict);
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(
+        dict,
+        NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                      NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
+                                      "i",
+                                      NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert(conn);
+    g_assert_no_error(error);
+    setting = nm_connection_get_setting(conn, NM_TYPE_SETTING_IP6_CONFIG);
+    g_assert(setting);
+    g_assert_cmpint(nm_setting_ip6_config_get_ip6_privacy(NM_SETTING_IP6_CONFIG(setting)),
+                    ==,
+                    NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR);
+    g_object_unref(conn);
+    g_variant_unref(dict);
+
+    /* Incompatible mismatches */
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_WIRELESS_SETTING_NAME,
+                                                       NM_SETTING_WIRELESS_RATE,
+                                                       "s",
+                                                       "ten"););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "802-11-wireless.rate:"));
+    g_clear_error(&error);
+    g_variant_unref(dict);
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_WIRELESS_SETTING_NAME,
+                                                       NM_SETTING_WIRELESS_MODE,
+                                                       "b",
+                                                       FALSE););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "802-11-wireless.mode:"));
+    g_clear_error(&error);
+    g_variant_unref(dict);
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_WIRELESS_SETTING_NAME,
+                                                       NM_SETTING_WIRELESS_SSID,
+                                                       "s",
+                                                       "fred"););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "802-11-wireless.ssid:"));
+    g_clear_error(&error);
+    g_variant_unref(dict);
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_WIRELESS_SETTING_NAME,
+                                                       NM_SETTING_WIRELESS_BSSID,
+                                                       "i",
+                                                       42););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "802-11-wireless.bssid:"));
+    g_clear_error(&error);
+    g_variant_unref(dict);
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                                       NM_SETTING_IP6_CONFIG_IP6_PRIVACY,
+                                                       "s",
+                                                       "private"););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "ipv6.ip6-privacy:"));
+    g_clear_error(&error);
+    g_variant_unref(dict);
+
+    dict = g_variant_ref(orig_dict);
+    NMTST_VARIANT_EDITOR(dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                                       NM_SETTING_IP_CONFIG_ADDRESSES,
+                                                       "s",
+                                                       "1234::5678"););
+    conn = _connection_new_from_dbus(dict, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "ipv6.addresses:"));
+    g_clear_error(&error);
+    g_variant_unref(dict);
+
+    g_variant_unref(orig_dict);
 }
 
 static NMConnection *
-new_test_connection (void)
-{
-	NMConnection *connection;
-	NMSetting *setting;
-	char *uuid;
-	guint64 timestamp = time (NULL);
-
-	connection = nm_simple_connection_new ();
-
-	setting = nm_setting_connection_new ();
-	uuid = nm_utils_uuid_generate ();
-	g_object_set (G_OBJECT (setting),
-	              NM_SETTING_CONNECTION_ID, "foobar",
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
-	              NM_SETTING_CONNECTION_TIMESTAMP, timestamp,
-	              NULL);
-	g_free (uuid);
-	nm_connection_add_setting (connection, setting);
-
-	setting = nm_setting_wired_new ();
-	g_object_set (G_OBJECT (setting),
-	              NM_SETTING_WIRED_MTU, 1592,
-	              NULL);
-	nm_connection_add_setting (connection, setting);
-
-	setting = nm_setting_ip4_config_new ();
-	g_object_set (G_OBJECT (setting),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
-	              NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, "eyeofthetiger",
-	              NULL);
-	nm_connection_add_setting (connection, setting);
-
-	return connection;
+new_test_connection(void)
+{
+    NMConnection *connection;
+    NMSetting *   setting;
+    char *        uuid;
+    guint64       timestamp = time(NULL);
+
+    connection = nm_simple_connection_new();
+
+    setting = nm_setting_connection_new();
+    uuid    = nm_utils_uuid_generate();
+    g_object_set(G_OBJECT(setting),
+                 NM_SETTING_CONNECTION_ID,
+                 "foobar",
+                 NM_SETTING_CONNECTION_UUID,
+                 uuid,
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_WIRED_SETTING_NAME,
+                 NM_SETTING_CONNECTION_TIMESTAMP,
+                 timestamp,
+                 NULL);
+    g_free(uuid);
+    nm_connection_add_setting(connection, setting);
+
+    setting = nm_setting_wired_new();
+    g_object_set(G_OBJECT(setting), NM_SETTING_WIRED_MTU, 1592, NULL);
+    nm_connection_add_setting(connection, setting);
+
+    setting = nm_setting_ip4_config_new();
+    g_object_set(G_OBJECT(setting),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+                 NM_SETTING_IP_CONFIG_DHCP_HOSTNAME,
+                 "eyeofthetiger",
+                 NULL);
+    nm_connection_add_setting(connection, setting);
+
+    return connection;
 }
 
 static GVariant *
-new_connection_dict (char **out_uuid,
-                     const char **out_expected_id,
-                     const char **out_expected_ip6_method)
-{
-	GVariantBuilder conn_builder, setting_builder;
-
-	g_variant_builder_init (&conn_builder, NM_VARIANT_TYPE_CONNECTION);
-
-	*out_uuid = nm_utils_uuid_generate ();
-	*out_expected_id = "My happy connection";
-	*out_expected_ip6_method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL;
-
-	/* Connection setting */
-	g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&setting_builder, "{sv}",
-	                       NM_SETTING_NAME,
-	                       g_variant_new_string (NM_SETTING_CONNECTION_SETTING_NAME));
-	g_variant_builder_add (&setting_builder, "{sv}",
-	                       NM_SETTING_CONNECTION_ID,
-	                       g_variant_new_string (*out_expected_id));
-	g_variant_builder_add (&setting_builder, "{sv}",
-	                       NM_SETTING_CONNECTION_UUID,
-	                       g_variant_new_string (*out_uuid));
-	g_variant_builder_add (&setting_builder, "{sv}",
-	                       NM_SETTING_CONNECTION_TYPE,
-	                       g_variant_new_string (NM_SETTING_WIRED_SETTING_NAME));
-
-	g_variant_builder_add (&conn_builder, "{sa{sv}}",
-	                       NM_SETTING_CONNECTION_SETTING_NAME,
-	                       &setting_builder);
-
-	/* Wired setting */
-	g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&conn_builder, "{sa{sv}}",
-	                       NM_SETTING_WIRED_SETTING_NAME,
-	                       &setting_builder);
-
-	/* IP6 */
-	g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&setting_builder, "{sv}",
-	                       NM_SETTING_IP_CONFIG_METHOD,
-	                       g_variant_new_string (*out_expected_ip6_method));
-	g_variant_builder_add (&conn_builder, "{sa{sv}}",
-	                       NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                       &setting_builder);
-
-	return g_variant_builder_end (&conn_builder);
-}
-
-static void
-test_connection_replace_settings (void)
-{
-	NMConnection *connection;
-	GVariant *new_settings;
-	GError *error = NULL;
-	gboolean success;
-	NMSettingConnection *s_con;
-	NMSettingIPConfig *s_ip6;
-	char *uuid = NULL;
-	const char *expected_id = NULL, *expected_method = NULL;
-
-	connection = new_test_connection ();
-
-	new_settings = new_connection_dict (&uuid, &expected_id, &expected_method);
-	g_assert (new_settings);
-
-	/* Replace settings and test */
-	success = nm_connection_replace_settings (connection, new_settings, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	s_con = nm_connection_get_setting_connection (connection);
-	g_assert (s_con);
-	g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
-	g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid);
-
-	g_assert (nm_connection_get_setting_wired (connection));
-	g_assert (!nm_connection_get_setting_ip4_config (connection));
-
-	s_ip6 = nm_connection_get_setting_ip6_config (connection);
-	g_assert (s_ip6);
-	g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, expected_method);
-
-	g_free (uuid);
-	g_variant_unref (new_settings);
-	g_object_unref (connection);
-}
-
-static void
-test_connection_replace_settings_from_connection (void)
-{
-	NMConnection *connection, *replacement;
-	NMSettingConnection *s_con;
-	NMSetting *setting;
-	GBytes *ssid;
-	char *uuid = NULL;
-	const char *expected_id = "Awesome connection";
-
-	connection = new_test_connection ();
-	g_assert (connection);
-
-	replacement = nm_simple_connection_new ();
-	g_assert (replacement);
-
-	/* New connection setting */
-	setting = nm_setting_connection_new ();
-	g_assert (setting);
-
-	uuid = nm_utils_uuid_generate ();
-	g_object_set (setting,
-	              NM_SETTING_CONNECTION_ID, expected_id,
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
-	              NULL);
-	nm_connection_add_setting (replacement, setting);
-
-	/* New wifi setting */
-	setting = nm_setting_wireless_new ();
-	g_assert (setting);
-
-	ssid = g_bytes_new ("1234567", 7);
-	g_object_set (setting,
-	              NM_SETTING_WIRELESS_SSID, ssid,
-	              NM_SETTING_WIRELESS_MODE, "infrastructure",
-	              NULL);
-	g_bytes_unref (ssid);
-	nm_connection_add_setting (replacement, setting);
-
-	/* Replace settings and test */
-	nm_connection_replace_settings_from_connection (connection, replacement);
-
-	s_con = nm_connection_get_setting_connection (connection);
-	g_assert (s_con);
-	g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
-	g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid);
-
-	g_assert (!nm_connection_get_setting_wired (connection));
-	g_assert (!nm_connection_get_setting_ip6_config (connection));
-	g_assert (nm_connection_get_setting_wireless (connection));
-
-	g_free (uuid);
-	g_object_unref (replacement);
-	g_object_unref (connection);
+new_connection_dict(char **      out_uuid,
+                    const char **out_expected_id,
+                    const char **out_expected_ip6_method)
+{
+    GVariantBuilder conn_builder, setting_builder;
+
+    g_variant_builder_init(&conn_builder, NM_VARIANT_TYPE_CONNECTION);
+
+    *out_uuid                = nm_utils_uuid_generate();
+    *out_expected_id         = "My happy connection";
+    *out_expected_ip6_method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL;
+
+    /* Connection setting */
+    g_variant_builder_init(&setting_builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&setting_builder,
+                          "{sv}",
+                          NM_SETTING_NAME,
+                          g_variant_new_string(NM_SETTING_CONNECTION_SETTING_NAME));
+    g_variant_builder_add(&setting_builder,
+                          "{sv}",
+                          NM_SETTING_CONNECTION_ID,
+                          g_variant_new_string(*out_expected_id));
+    g_variant_builder_add(&setting_builder,
+                          "{sv}",
+                          NM_SETTING_CONNECTION_UUID,
+                          g_variant_new_string(*out_uuid));
+    g_variant_builder_add(&setting_builder,
+                          "{sv}",
+                          NM_SETTING_CONNECTION_TYPE,
+                          g_variant_new_string(NM_SETTING_WIRED_SETTING_NAME));
+
+    g_variant_builder_add(&conn_builder,
+                          "{sa{sv}}",
+                          NM_SETTING_CONNECTION_SETTING_NAME,
+                          &setting_builder);
+
+    /* Wired setting */
+    g_variant_builder_init(&setting_builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&conn_builder,
+                          "{sa{sv}}",
+                          NM_SETTING_WIRED_SETTING_NAME,
+                          &setting_builder);
+
+    /* IP6 */
+    g_variant_builder_init(&setting_builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&setting_builder,
+                          "{sv}",
+                          NM_SETTING_IP_CONFIG_METHOD,
+                          g_variant_new_string(*out_expected_ip6_method));
+    g_variant_builder_add(&conn_builder,
+                          "{sa{sv}}",
+                          NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                          &setting_builder);
+
+    return g_variant_builder_end(&conn_builder);
+}
+
+static void
+test_connection_replace_settings(void)
+{
+    NMConnection *       connection;
+    GVariant *           new_settings;
+    GError *             error = NULL;
+    gboolean             success;
+    NMSettingConnection *s_con;
+    NMSettingIPConfig *  s_ip6;
+    char *               uuid        = NULL;
+    const char *         expected_id = NULL, *expected_method = NULL;
+
+    connection = new_test_connection();
+
+    new_settings = new_connection_dict(&uuid, &expected_id, &expected_method);
+    g_assert(new_settings);
+
+    /* Replace settings and test */
+    success = nm_connection_replace_settings(connection, new_settings, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    s_con = nm_connection_get_setting_connection(connection);
+    g_assert(s_con);
+    g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
+    g_assert_cmpstr(nm_setting_connection_get_uuid(s_con), ==, uuid);
+
+    g_assert(nm_connection_get_setting_wired(connection));
+    g_assert(!nm_connection_get_setting_ip4_config(connection));
+
+    s_ip6 = nm_connection_get_setting_ip6_config(connection);
+    g_assert(s_ip6);
+    g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, expected_method);
+
+    g_free(uuid);
+    g_variant_unref(new_settings);
+    g_object_unref(connection);
+}
+
+static void
+test_connection_replace_settings_from_connection(void)
+{
+    NMConnection *       connection, *replacement;
+    NMSettingConnection *s_con;
+    NMSetting *          setting;
+    GBytes *             ssid;
+    char *               uuid        = NULL;
+    const char *         expected_id = "Awesome connection";
+
+    connection = new_test_connection();
+    g_assert(connection);
+
+    replacement = nm_simple_connection_new();
+    g_assert(replacement);
+
+    /* New connection setting */
+    setting = nm_setting_connection_new();
+    g_assert(setting);
+
+    uuid = nm_utils_uuid_generate();
+    g_object_set(setting,
+                 NM_SETTING_CONNECTION_ID,
+                 expected_id,
+                 NM_SETTING_CONNECTION_UUID,
+                 uuid,
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_WIRELESS_SETTING_NAME,
+                 NULL);
+    nm_connection_add_setting(replacement, setting);
+
+    /* New wifi setting */
+    setting = nm_setting_wireless_new();
+    g_assert(setting);
+
+    ssid = g_bytes_new("1234567", 7);
+    g_object_set(setting,
+                 NM_SETTING_WIRELESS_SSID,
+                 ssid,
+                 NM_SETTING_WIRELESS_MODE,
+                 "infrastructure",
+                 NULL);
+    g_bytes_unref(ssid);
+    nm_connection_add_setting(replacement, setting);
+
+    /* Replace settings and test */
+    nm_connection_replace_settings_from_connection(connection, replacement);
+
+    s_con = nm_connection_get_setting_connection(connection);
+    g_assert(s_con);
+    g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
+    g_assert_cmpstr(nm_setting_connection_get_uuid(s_con), ==, uuid);
+
+    g_assert(!nm_connection_get_setting_wired(connection));
+    g_assert(!nm_connection_get_setting_ip6_config(connection));
+    g_assert(nm_connection_get_setting_wireless(connection));
+
+    g_free(uuid);
+    g_object_unref(replacement);
+    g_object_unref(connection);
 }
 
-static void
-test_connection_replace_settings_bad (void)
-{
-	NMConnection *connection, *new_connection;
-	GVariant *new_settings;
-	GVariantBuilder builder, setting_builder;
-	GError *error = NULL;
-	gboolean success;
-	NMSettingConnection *s_con;
+static void
+test_connection_replace_settings_bad(void)
+{
+    NMConnection *       connection, *new_connection;
+    GVariant *           new_settings;
+    GVariantBuilder      builder, setting_builder;
+    GError *             error = NULL;
+    gboolean             success;
+    NMSettingConnection *s_con;
 
-	new_connection = new_test_connection ();
-	g_assert (nm_connection_verify (new_connection, NULL));
-	s_con = nm_connection_get_setting_connection (new_connection);
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_UUID, NULL,
-	              NM_SETTING_CONNECTION_ID, "bad-connection",
-	              NULL);
-	g_assert (!nm_connection_verify (new_connection, NULL));
+    new_connection = new_test_connection();
+    g_assert(nm_connection_verify(new_connection, NULL));
+    s_con = nm_connection_get_setting_connection(new_connection);
+    g_object_set(s_con,
+                 NM_SETTING_CONNECTION_UUID,
+                 NULL,
+                 NM_SETTING_CONNECTION_ID,
+                 "bad-connection",
+                 NULL);
+    g_assert(!nm_connection_verify(new_connection, NULL));
 
-	/* nm_connection_replace_settings_from_connection() should succeed */
-	connection = new_test_connection ();
-	nm_connection_replace_settings_from_connection (connection, new_connection);
-	g_assert_cmpstr (nm_connection_get_id (connection), ==, "bad-connection");
-	g_assert (!nm_connection_verify (connection, NULL));
-	g_object_unref (connection);
+    /* nm_connection_replace_settings_from_connection() should succeed */
+    connection = new_test_connection();
+    nm_connection_replace_settings_from_connection(connection, new_connection);
+    g_assert_cmpstr(nm_connection_get_id(connection), ==, "bad-connection");
+    g_assert(!nm_connection_verify(connection, NULL));
+    g_object_unref(connection);
 
-	/* nm_connection_replace_settings() should succeed */
-	new_settings = nm_connection_to_dbus (new_connection, NM_CONNECTION_SERIALIZE_ALL);
-	g_assert (new_settings != NULL);
+    /* nm_connection_replace_settings() should succeed */
+    new_settings = nm_connection_to_dbus(new_connection, NM_CONNECTION_SERIALIZE_ALL);
+    g_assert(new_settings != NULL);
 
-	connection = new_test_connection ();
-	success = nm_connection_replace_settings (connection, new_settings, &error);
-	g_assert_no_error (error);
-	g_assert (success);
+    connection = new_test_connection();
+    success    = nm_connection_replace_settings(connection, new_settings, &error);
+    g_assert_no_error(error);
+    g_assert(success);
 
-	g_assert_cmpstr (nm_connection_get_id (connection), ==, "bad-connection");
-	g_assert (!nm_connection_verify (connection, NULL));
-	g_object_unref (connection);
-	g_variant_unref (new_settings);
+    g_assert_cmpstr(nm_connection_get_id(connection), ==, "bad-connection");
+    g_assert(!nm_connection_verify(connection, NULL));
+    g_object_unref(connection);
+    g_variant_unref(new_settings);
 
-	/* But given an invalid dict, it should fail */
-	g_variant_builder_init (&builder, NM_VARIANT_TYPE_CONNECTION);
-	g_variant_builder_init (&setting_builder, NM_VARIANT_TYPE_SETTING);
-	g_variant_builder_add (&builder, "{sa{sv}}",
-	                       "ip-over-avian-carrier",
-	                       &setting_builder);
-	new_settings = g_variant_builder_end (&builder);
+    /* But given an invalid dict, it should fail */
+    g_variant_builder_init(&builder, NM_VARIANT_TYPE_CONNECTION);
+    g_variant_builder_init(&setting_builder, NM_VARIANT_TYPE_SETTING);
+    g_variant_builder_add(&builder, "{sa{sv}}", "ip-over-avian-carrier", &setting_builder);
+    new_settings = g_variant_builder_end(&builder);
 
-	connection = new_test_connection ();
-	success = nm_connection_replace_settings (connection, new_settings, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
-	g_clear_error (&error);
-	g_assert (!success);
+    connection = new_test_connection();
+    success    = nm_connection_replace_settings(connection, new_settings, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING);
+    g_clear_error(&error);
+    g_assert(!success);
 
-	g_assert (nm_connection_verify (connection, NULL));
-	g_object_unref (connection);
+    g_assert(nm_connection_verify(connection, NULL));
+    g_object_unref(connection);
 
-	g_variant_unref (new_settings);
-	g_object_unref (new_connection);
+    g_variant_unref(new_settings);
+    g_object_unref(new_connection);
 }
 
 static void
-test_connection_new_from_dbus (void)
+test_connection_new_from_dbus(void)
 {
-	NMConnection *connection;
-	GVariant *new_settings;
-	GError *error = NULL;
-	NMSettingConnection *s_con;
-	NMSettingIPConfig *s_ip6;
-	char *uuid = NULL;
-	const char *expected_id = NULL, *expected_method = NULL;
+    NMConnection *       connection;
+    GVariant *           new_settings;
+    GError *             error = NULL;
+    NMSettingConnection *s_con;
+    NMSettingIPConfig *  s_ip6;
+    char *               uuid        = NULL;
+    const char *         expected_id = NULL, *expected_method = NULL;
 
-	new_settings = new_connection_dict (&uuid, &expected_id, &expected_method);
-	g_assert (new_settings);
+    new_settings = new_connection_dict(&uuid, &expected_id, &expected_method);
+    g_assert(new_settings);
 
-	/* Replace settings and test */
-	connection = _connection_new_from_dbus (new_settings, &error);
-	g_assert_no_error (error);
-	g_assert (connection);
+    /* Replace settings and test */
+    connection = _connection_new_from_dbus(new_settings, &error);
+    g_assert_no_error(error);
+    g_assert(connection);
 
-	s_con = nm_connection_get_setting_connection (connection);
-	g_assert (s_con);
-	g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
-	g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid);
+    s_con = nm_connection_get_setting_connection(connection);
+    g_assert(s_con);
+    g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
+    g_assert_cmpstr(nm_setting_connection_get_uuid(s_con), ==, uuid);
 
-	g_assert (nm_connection_get_setting_wired (connection));
-	g_assert (nm_connection_get_setting_ip4_config (connection));
+    g_assert(nm_connection_get_setting_wired(connection));
+    g_assert(nm_connection_get_setting_ip4_config(connection));
 
-	s_ip6 = nm_connection_get_setting_ip6_config (connection);
-	g_assert (s_ip6);
-	g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, expected_method);
+    s_ip6 = nm_connection_get_setting_ip6_config(connection);
+    g_assert(s_ip6);
+    g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, expected_method);
 
-	g_free (uuid);
-	g_variant_unref (new_settings);
-	g_object_unref (connection);
+    g_free(uuid);
+    g_variant_unref(new_settings);
+    g_object_unref(connection);
 }
 
 static void
-check_permission (NMSettingConnection *s_con,
-                  guint32 idx,
-                  const char *expected_uname)
+check_permission(NMSettingConnection *s_con, guint32 idx, const char *expected_uname)
 {
-	gboolean success;
-	const char *ptype = NULL, *pitem = NULL, *detail = NULL;
+    gboolean    success;
+    const char *ptype = NULL, *pitem = NULL, *detail = NULL;
 
-	success = nm_setting_connection_get_permission (s_con, 0, &ptype, &pitem, &detail);
-	g_assert (success);
+    success = nm_setting_connection_get_permission(s_con, idx, &ptype, &pitem, &detail);
+    g_assert(success);
 
-	g_assert_cmpstr (ptype, ==, "user");
+    g_assert_cmpstr(ptype, ==, "user");
 
-	g_assert (pitem);
-	g_assert_cmpstr (pitem, ==, expected_uname);
+    g_assert(pitem);
+    g_assert_cmpstr(pitem, ==, expected_uname);
 
-	g_assert (!detail);
+    g_assert(!detail);
 }
 
 #define TEST_UNAME "asdfasfasdf"
 
 static void
-test_setting_connection_permissions_helpers (void)
-{
-	NMSettingConnection *s_con;
-	gboolean success;
-	char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 };
-	char **perms;
-	const char *expected_perm = "user:" TEST_UNAME ":";
-
-	s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
-
-	/* Ensure a bad [type] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (strcmp (ptype, "user") == 0));
-	success = nm_setting_connection_add_permission (s_con, "foobar", "blah", NULL);
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure a bad [type] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (ptype && ptype[0]));
-	success = nm_setting_connection_add_permission (s_con, NULL, "blah", NULL);
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure a bad [item] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (uname));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (p != NULL));
-	success = nm_setting_connection_add_permission (s_con, "user", NULL, NULL);
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure a bad [item] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (uname[0] != '\0'));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (p != NULL));
-	success = nm_setting_connection_add_permission (s_con, "user", "", NULL);
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure an [item] with ':' is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (strchr (uname, ':') == NULL));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (p != NULL));
-	success = nm_setting_connection_add_permission (s_con, "user", "ad:asdf", NULL);
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure a non-UTF-8 [item] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (g_utf8_validate (uname, -1, NULL) == TRUE));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (p != NULL));
-	success = nm_setting_connection_add_permission (s_con, "user", buf, NULL);
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure a non-NULL [detail] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (detail == NULL));
-	success = nm_setting_connection_add_permission (s_con, "user", "dafasdf", "asdf");
-	g_test_assert_expected_messages ();
-	g_assert (!success);
-
-	/* Ensure a valid call results in success */
-	success = nm_setting_connection_add_permission (s_con, "user", TEST_UNAME, NULL);
-	g_assert (success);
-
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 1);
-
-	check_permission (s_con, 0, TEST_UNAME);
-
-	/* Check the actual GObject property just to be paranoid */
-	g_object_get (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, &perms, NULL);
-	g_assert (perms);
-	g_assert_cmpint (g_strv_length (perms), ==, 1);
-	g_assert_cmpstr (perms[0], ==, expected_perm);
-	g_strfreev (perms);
-
-	/* Now remove that permission and ensure we have 0 permissions */
-	nm_setting_connection_remove_permission (s_con, 0);
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
-
-	g_object_unref (s_con);
-}
-
-static void
-add_permission_property (NMSettingConnection *s_con,
-                         const char *ptype,
-                         const char *pitem,
-                         int pitem_len,
-                         const char *detail)
+test_setting_connection_permissions_helpers(void)
 {
-	GString *str;
-	char *perms[2];
-
-	str = g_string_sized_new (50);
-	if (ptype)
-		g_string_append (str, ptype);
-	g_string_append_c (str, ':');
+    NMSettingConnection *s_con;
+    gboolean             success;
+    char                 buf[9] = {0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00};
+    char **              perms;
+    const char *         expected_perm = "user:" TEST_UNAME ":";
 
-	if (pitem) {
-		if (pitem_len >= 0)
-			g_string_append_len (str, pitem, pitem_len);
-		else
-			g_string_append (str, pitem);
-	}
-
-	g_string_append_c (str, ':');
-
-	if (detail)
-		g_string_append (str, detail);
-
-	perms[0] = str->str;
-	perms[1] = NULL;
-	g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, perms, NULL);
-
-	g_string_free (str, TRUE);
-}
+    s_con = NM_SETTING_CONNECTION(nm_setting_connection_new());
 
-static void
-test_setting_connection_permissions_property (void)
-{
-	NMSettingConnection *s_con;
-	gboolean success;
-	char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 };
+    /* Ensure a bad [type] is rejected */
+    success = nm_setting_connection_add_permission(s_con, "foobar", "blah", NULL);
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
 
-	s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ());
+    /* Ensure a bad [type] is rejected */
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(ptype));
+    success = nm_setting_connection_add_permission(s_con, NULL, "blah", NULL);
+    g_test_assert_expected_messages();
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
 
-	/* Ensure a bad [type] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0));
-	add_permission_property (s_con, "foobar", "blah", -1, NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a bad [item] is rejected */
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(pitem));
+    success = nm_setting_connection_add_permission(s_con, "user", NULL, NULL);
+    g_test_assert_expected_messages();
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
 
-	/* Ensure a bad [type] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0));
-	add_permission_property (s_con, NULL, "blah", -1, NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a bad [item] is rejected */
+    success = nm_setting_connection_add_permission(s_con, "user", "", NULL);
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
+
+    /* Ensure an [item] with ':' is rejected */
+    success = nm_setting_connection_add_permission(s_con, "user", "ad:asdf", NULL);
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
+
+    /* Ensure a non-UTF-8 [item] is rejected */
+    success = nm_setting_connection_add_permission(s_con, "user", buf, NULL);
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
+
+    /* Ensure a non-NULL [detail] is rejected */
+    success = nm_setting_connection_add_permission(s_con, "user", "dafasdf", "asdf");
+    g_assert(!success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
+
+    /* Ensure a valid call results in success */
+    success = nm_setting_connection_add_permission(s_con, "user", TEST_UNAME, NULL);
+    g_assert(success);
+
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+
+    check_permission(s_con, 0, TEST_UNAME);
+
+    /* Check the actual GObject property just to be paranoid */
+    g_object_get(G_OBJECT(s_con), NM_SETTING_CONNECTION_PERMISSIONS, &perms, NULL);
+    g_assert(perms);
+    g_assert_cmpint(g_strv_length(perms), ==, 1);
+    g_assert_cmpstr(perms[0], ==, expected_perm);
+    g_strfreev(perms);
+
+    /* Now remove that permission and ensure we have 0 permissions */
+    nm_setting_connection_remove_permission(s_con, 0);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 0);
+
+    g_object_unref(s_con);
+}
+
+static void
+add_permission_property(NMSettingConnection *s_con,
+                        const char *         ptype,
+                        const char *         pitem,
+                        int                  pitem_len,
+                        const char *         detail)
+{
+    GString *str;
+    char *   perms[2];
+
+    str = g_string_sized_new(50);
+    if (ptype)
+        g_string_append(str, ptype);
+    g_string_append_c(str, ':');
+
+    if (pitem) {
+        if (pitem_len >= 0)
+            g_string_append_len(str, pitem, pitem_len);
+        else
+            g_string_append(str, pitem);
+    }
+
+    g_string_append_c(str, ':');
+
+    if (detail)
+        g_string_append(str, detail);
+
+    perms[0] = str->str;
+    perms[1] = NULL;
+    g_object_set(G_OBJECT(s_con), NM_SETTING_CONNECTION_PERMISSIONS, perms, NULL);
+
+    g_string_free(str, TRUE);
+}
+
+static void
+test_setting_connection_permissions_property(void)
+{
+    gs_unref_object NMSettingConnection *s_con = NULL;
+    gboolean                             success;
+    char buf[9] = {0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00};
+
+    s_con = NM_SETTING_CONNECTION(nm_setting_connection_new());
+
+#define _assert_permission_invalid_at_idx(s_con, idx, expected_item)                            \
+    G_STMT_START                                                                                \
+    {                                                                                           \
+        NMSettingConnection *_s_con = (s_con);                                                  \
+        guint                _idx   = (idx);                                                    \
+        const char *         _ptype;                                                            \
+        const char *         _pitem;                                                            \
+        const char *         _detail;                                                           \
+        const char **        _p_ptype  = nmtst_get_rand_bool() ? &_ptype : NULL;                \
+        const char **        _p_pitem  = nmtst_get_rand_bool() ? &_pitem : NULL;                \
+        const char **        _p_detail = nmtst_get_rand_bool() ? &_detail : NULL;               \
+                                                                                                \
+        g_assert_cmpint(_idx, <, nm_setting_connection_get_num_permissions(_s_con));            \
+        g_assert(                                                                               \
+            nm_setting_connection_get_permission(_s_con, _idx, _p_ptype, _p_pitem, _p_detail)); \
+        if (_p_ptype)                                                                           \
+            g_assert_cmpstr(_ptype, ==, "invalid");                                             \
+        if (_p_pitem) {                                                                         \
+            const char *_expected_item = (expected_item);                                       \
+                                                                                                \
+            if (!_expected_item)                                                                \
+                g_assert_cmpstr(_pitem, !=, NULL);                                              \
+            else                                                                                \
+                g_assert_cmpstr(_pitem, ==, _expected_item);                                    \
+        }                                                                                       \
+        if (_p_detail)                                                                          \
+            g_assert_cmpstr(_detail, ==, NULL);                                                 \
+    }                                                                                           \
+    G_STMT_END
 
-	/* Ensure a bad [item] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (last_colon > str));
-	add_permission_property (s_con, "user", NULL, -1, NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a bad [type] is rejected */
+    add_permission_property(s_con, "foobar", "blah", -1, NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, "foobar:blah:");
 
-	/* Ensure a bad [item] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (last_colon > str));
-	add_permission_property (s_con, "user", "", -1, NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a bad [type] is rejected */
+    add_permission_property(s_con, NULL, "blah", -1, NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, ":blah:");
 
-	/* Ensure an [item] with ':' in the middle is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (str[i] != ':'));
-	add_permission_property (s_con, "user", "ad:asdf", -1, NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a bad [item] is rejected */
+    add_permission_property(s_con, "user", NULL, -1, NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, "user::");
 
-	/* Ensure an [item] with ':' at the end is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (str[i] != ':'));
-	add_permission_property (s_con, "user", "adasdfaf:", -1, NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a bad [item] is rejected */
+    add_permission_property(s_con, "user", "", -1, NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, "user::");
 
-	/* Ensure a non-UTF-8 [item] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (g_utf8_validate (str, -1, NULL) == TRUE));
-	add_permission_property (s_con, "user", buf, (int) sizeof (buf), NULL);
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure an [item] with ':' in the middle is rejected */
+    add_permission_property(s_con, "user", "ad:asdf", -1, NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, "user:ad:asdf:");
 
-	/* Ensure a non-NULL [detail] is rejected */
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (*(last_colon + 1) == '\0'));
-	add_permission_property (s_con, "user", "dafasdf", -1, "asdf");
-	g_test_assert_expected_messages ();
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure an [item] with ':' at the end is rejected */
+    add_permission_property(s_con, "user", "adasdfaf:", -1, NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, "user:adasdfaf::");
 
-	/* Ensure a valid call results in success */
-	success = nm_setting_connection_add_permission (s_con, "user", TEST_UNAME, NULL);
-	g_assert (success);
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 1);
+    /* Ensure a non-UTF-8 [item] is rejected */
+    add_permission_property(s_con, "user", buf, (int) sizeof(buf), NULL);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, NULL);
 
-	check_permission (s_con, 0, TEST_UNAME);
+    /* Ensure a non-NULL [detail] is rejected */
+    add_permission_property(s_con, "user", "dafasdf", -1, "asdf");
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
+    _assert_permission_invalid_at_idx(s_con, 0, "user:dafasdf:asdf");
 
-	/* Now remove that permission and ensure we have 0 permissions */
-	nm_setting_connection_remove_permission (s_con, 0);
-	g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0);
+    /* Ensure a valid call results in success */
+    success = nm_setting_connection_add_permission(s_con, "user", TEST_UNAME, NULL);
+    g_assert(success);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 2);
+    _assert_permission_invalid_at_idx(s_con, 0, "user:dafasdf:asdf");
+    check_permission(s_con, 1, TEST_UNAME);
 
-	g_object_unref (s_con);
+    /* Now remove that permission and ensure we have 0 permissions */
+    nm_setting_connection_remove_permission(s_con, 0);
+    g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
 }
 
 static void
-test_connection_compare_same (void)
+test_connection_compare_same(void)
 {
-	NMConnection *a, *b;
+    NMConnection *a, *b;
 
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-	g_assert (nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_object_unref (a);
-	g_object_unref (b);
+    a = new_test_connection();
+    b = nm_simple_connection_new_clone(a);
+    g_assert(nm_connection_compare(a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_object_unref(a);
+    g_object_unref(b);
 }
 
 static void
-test_connection_compare_key_only_in_a (void)
+test_connection_compare_key_only_in_a(void)
 {
-	NMConnection *a, *b;
-	NMSettingConnection *s_con;
+    NMConnection *       a, *b;
+    NMSettingConnection *s_con;
 
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-	s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION);
-	g_assert (s_con);
-	g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL);
+    a     = new_test_connection();
+    b     = nm_simple_connection_new_clone(a);
+    s_con = (NMSettingConnection *) nm_connection_get_setting(b, NM_TYPE_SETTING_CONNECTION);
+    g_assert(s_con);
+    g_object_set(s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL);
 
-	g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_object_unref (a);
-	g_object_unref (b);
+    g_assert(!nm_connection_compare(a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_object_unref(a);
+    g_object_unref(b);
 }
 
 static void
-test_connection_compare_setting_only_in_a (void)
+test_connection_compare_setting_only_in_a(void)
 {
-	NMConnection *a, *b;
+    NMConnection *a, *b;
 
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-	nm_connection_remove_setting (b, NM_TYPE_SETTING_IP4_CONFIG);
-	g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_object_unref (a);
-	g_object_unref (b);
+    a = new_test_connection();
+    b = nm_simple_connection_new_clone(a);
+    nm_connection_remove_setting(b, NM_TYPE_SETTING_IP4_CONFIG);
+    g_assert(!nm_connection_compare(a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_object_unref(a);
+    g_object_unref(b);
 }
 
 static void
-test_connection_compare_key_only_in_b (void)
+test_connection_compare_key_only_in_b(void)
 {
-	NMConnection *a, *b;
-	NMSettingConnection *s_con;
+    NMConnection *       a, *b;
+    NMSettingConnection *s_con;
 
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-	s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION);
-	g_assert (s_con);
-	g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL);
+    a     = new_test_connection();
+    b     = nm_simple_connection_new_clone(a);
+    s_con = (NMSettingConnection *) nm_connection_get_setting(b, NM_TYPE_SETTING_CONNECTION);
+    g_assert(s_con);
+    g_object_set(s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL);
 
-	g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_object_unref (a);
-	g_object_unref (b);
+    g_assert(!nm_connection_compare(a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_object_unref(a);
+    g_object_unref(b);
 }
 
 static void
-test_connection_compare_setting_only_in_b (void)
+test_connection_compare_setting_only_in_b(void)
 {
-	NMConnection *a, *b;
+    NMConnection *a, *b;
 
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-	nm_connection_remove_setting (a, NM_TYPE_SETTING_IP4_CONFIG);
-	g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_object_unref (a);
-	g_object_unref (b);
+    a = new_test_connection();
+    b = nm_simple_connection_new_clone(a);
+    nm_connection_remove_setting(a, NM_TYPE_SETTING_IP4_CONFIG);
+    g_assert(!nm_connection_compare(a, b, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_object_unref(a);
+    g_object_unref(b);
 }
 
 typedef struct {
-	const char *key_name;
-	guint32 result;
+    const char *key_name;
+    guint32     result;
 } DiffKey;
 
 typedef struct {
-	const char *name;
-	DiffKey keys[30];
+    const char *name;
+    DiffKey     keys[30];
 } DiffSetting;
 
-#define ARRAY_LEN(a)  (sizeof (a) / sizeof (a[0]))
-
-static void
-ensure_diffs (GHashTable *diffs, const DiffSetting *check, gsize n_check)
-{
-	guint i;
-
-	g_assert (g_hash_table_size (diffs) == n_check);
-
-	/* Loop through the settings */
-	for (i = 0; i < n_check; i++) {
-		GHashTable *setting_hash;
-		guint z = 0;
-
-		setting_hash = g_hash_table_lookup (diffs, check[i].name);
-		g_assert (setting_hash);
-
-		/* Get the number of keys to check */
-		while (check[i].keys[z].key_name)
-			z++;
-		g_assert (g_hash_table_size (setting_hash) == z);
-
-		/* Now compare the actual keys */
-		for (z = 0; check[i].keys[z].key_name; z++) {
-			NMSettingDiffResult result;
-
-			result = GPOINTER_TO_UINT (g_hash_table_lookup (setting_hash, check[i].keys[z].key_name));
-			g_assert (result == check[i].keys[z].result);
-		}
-	}
-}
-
-static void
-test_connection_diff_a_only (void)
-{
-	NMConnection *connection;
-	GHashTable *out_diffs = NULL;
-	gboolean same;
-	const DiffSetting settings[] = {
-		{ NM_SETTING_CONNECTION_SETTING_NAME, {
-			{ NM_SETTING_CONNECTION_ID,                   NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_UUID,                 NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_STABLE_ID,            NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_INTERFACE_NAME,       NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_TYPE,                 NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_TIMESTAMP,            NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_AUTOCONNECT,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES,  NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_MULTI_CONNECT,        NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_READ_ONLY,            NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_PERMISSIONS,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_ZONE,                 NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_MASTER,               NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_SLAVE_TYPE,           NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES,   NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_SECONDARIES,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_METERED,              NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_LLDP,                 NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_AUTH_RETRIES,         NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_MDNS,                 NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_LLMNR,                NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_MUD_URL,              NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT,  NM_SETTING_DIFF_RESULT_IN_A },
-			{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }
-		} },
-		{ NM_SETTING_WIRED_SETTING_NAME, {
-			{ NM_SETTING_WIRED_PORT,                  NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_SPEED,                 NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_DUPLEX,                NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_AUTO_NEGOTIATE,        NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_MAC_ADDRESS,           NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_CLONED_MAC_ADDRESS,    NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_MTU,                   NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_S390_SUBCHANNELS,      NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_S390_NETTYPE,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_S390_OPTIONS,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_WAKE_ON_LAN,           NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD,  NM_SETTING_DIFF_RESULT_IN_A },
-			{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
-		} },
-		{ NM_SETTING_IP4_CONFIG_SETTING_NAME, {
-			{ NM_SETTING_IP_CONFIG_METHOD,             NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DNS,                NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DNS_SEARCH,         NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DNS_OPTIONS,        NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_ADDRESSES,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_GATEWAY,            NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_ROUTES,             NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_ROUTE_METRIC,       NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_ROUTE_TABLE,        NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_ROUTING_RULES,      NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS,    NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID,    NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DHCP_TIMEOUT,       NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME,      NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS,NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP4_CONFIG_DHCP_FQDN,         NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_NEVER_DEFAULT,      NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_MAY_FAIL,           NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DAD_TIMEOUT,        NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DNS_PRIORITY,       NM_SETTING_DIFF_RESULT_IN_A },
-			{ NM_SETTING_IP_CONFIG_DHCP_IAID,          NM_SETTING_DIFF_RESULT_IN_A },
-			{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
-		} },
-	};
-
-	connection = new_test_connection ();
-
-	same = nm_connection_diff (connection, NULL, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
-	g_assert (same == FALSE);
-	g_assert (out_diffs != NULL);
-	g_assert (g_hash_table_size (out_diffs) > 0);
-
-	ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
-
-	g_hash_table_destroy (out_diffs);
-	g_object_unref (connection);
-}
-
-static void
-test_connection_diff_same (void)
-{
-	NMConnection *a, *b;
-	GHashTable *out_diffs = NULL;
-	gboolean same;
-
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-
-	same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
-	g_assert (same == TRUE);
-	g_assert (out_diffs == NULL);
-	g_object_unref (a);
-	g_object_unref (b);
-}
-
-static void
-test_connection_diff_different (void)
-{
-	NMConnection *a, *b;
-	GHashTable *out_diffs = NULL;
-	NMSettingIPConfig *s_ip4;
-	gboolean same;
-	const DiffSetting settings[] = {
-		{ NM_SETTING_IP4_CONFIG_SETTING_NAME, {
-			{ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B },
-			{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
-		} },
-	};
-
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-	s_ip4 = nm_connection_get_setting_ip4_config (a);
-	g_assert (s_ip4);
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
-	              NULL);
-
-	same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
-	g_assert (same == FALSE);
-	g_assert (out_diffs != NULL);
-	g_assert (g_hash_table_size (out_diffs) > 0);
-
-	ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
-
-	g_hash_table_destroy (out_diffs);
-	g_object_unref (a);
-	g_object_unref (b);
-}
-
-static void
-test_connection_diff_no_secrets (void)
-{
-	NMConnection *a, *b;
-	GHashTable *out_diffs = NULL;
-	NMSetting *s_pppoe;
-	gboolean same;
-	const DiffSetting settings[] = {
-		{ NM_SETTING_PPPOE_SETTING_NAME, {
-			{ NM_SETTING_PPPOE_PASSWORD, NM_SETTING_DIFF_RESULT_IN_B },
-			{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
-		} },
-	};
-
-	a = new_test_connection ();
-	s_pppoe = nm_setting_pppoe_new ();
-	g_object_set (G_OBJECT (s_pppoe),
-	              NM_SETTING_PPPOE_USERNAME, "thomas",
-	              NULL);
-	nm_connection_add_setting (a, s_pppoe);
-
-	b = nm_simple_connection_new_clone (a);
-
-	/* Add a secret to B */
-	s_pppoe = NM_SETTING (nm_connection_get_setting_pppoe (b));
-	g_assert (s_pppoe);
-	g_object_set (G_OBJECT (s_pppoe),
-	              NM_SETTING_PPPOE_PASSWORD, "secretpassword",
-	              NULL);
-
-	/* Make sure the diff returns no results as secrets are ignored */
-	same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, &out_diffs);
-	g_assert (same == TRUE);
-	g_assert (out_diffs == NULL);
+#define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0]))
+
+static void
+ensure_diffs(GHashTable *diffs, const DiffSetting *check, gsize n_check)
+{
+    guint i;
+
+    g_assert(g_hash_table_size(diffs) == n_check);
+
+    /* Loop through the settings */
+    for (i = 0; i < n_check; i++) {
+        GHashTable *setting_hash;
+        guint       z = 0;
+
+        setting_hash = g_hash_table_lookup(diffs, check[i].name);
+        g_assert(setting_hash);
+
+        /* Get the number of keys to check */
+        while (check[i].keys[z].key_name)
+            z++;
+        g_assert(g_hash_table_size(setting_hash) == z);
+
+        /* Now compare the actual keys */
+        for (z = 0; check[i].keys[z].key_name; z++) {
+            NMSettingDiffResult result;
+
+            result = GPOINTER_TO_UINT(g_hash_table_lookup(setting_hash, check[i].keys[z].key_name));
+            g_assert(result == check[i].keys[z].result);
+        }
+    }
+}
+
+static void
+test_connection_diff_a_only(void)
+{
+    NMConnection *    connection;
+    GHashTable *      out_diffs = NULL;
+    gboolean          same;
+    const DiffSetting settings[] = {
+        {NM_SETTING_CONNECTION_SETTING_NAME,
+         {{NM_SETTING_CONNECTION_ID, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_UUID, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_STABLE_ID, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_TYPE, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_TIMESTAMP, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_AUTOCONNECT, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_MULTI_CONNECT, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_READ_ONLY, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_PERMISSIONS, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_ZONE, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_MASTER, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_SECONDARIES, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_METERED, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_LLDP, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_AUTH_RETRIES, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_MDNS, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_LLMNR, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_MUD_URL, NM_SETTING_DIFF_RESULT_IN_A},
+          {NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A},
+          {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}}},
+        {NM_SETTING_WIRED_SETTING_NAME,
+         {
+             {NM_SETTING_WIRED_PORT, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_SPEED, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_DUPLEX, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_AUTO_NEGOTIATE, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_CLONED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_GENERATE_MAC_ADDRESS_MASK, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_MTU, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_S390_SUBCHANNELS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_S390_NETTYPE, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_S390_OPTIONS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_WAKE_ON_LAN, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD, NM_SETTING_DIFF_RESULT_IN_A},
+             {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN},
+         }},
+        {NM_SETTING_IP4_CONFIG_SETTING_NAME,
+         {
+             {NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DNS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DNS_SEARCH, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DNS_OPTIONS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_ADDRESSES, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_GATEWAY, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_ROUTES, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_ROUTE_METRIC, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_ROUTE_TABLE, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_ROUTING_RULES, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP4_CONFIG_DHCP_FQDN, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_NEVER_DEFAULT, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_MAY_FAIL, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DAD_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DNS_PRIORITY, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DHCP_IAID, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER, NM_SETTING_DIFF_RESULT_IN_A},
+             {NM_SETTING_IP_CONFIG_DHCP_REJECT_SERVERS, NM_SETTING_DIFF_RESULT_IN_A},
+             {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN},
+         }},
+    };
+
+    connection = new_test_connection();
+
+    same = nm_connection_diff(connection, NULL, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
+    g_assert(same == FALSE);
+    g_assert(out_diffs != NULL);
+    g_assert(g_hash_table_size(out_diffs) > 0);
+
+    ensure_diffs(out_diffs, settings, ARRAY_LEN(settings));
+
+    g_hash_table_destroy(out_diffs);
+    g_object_unref(connection);
+}
+
+static void
+test_connection_diff_same(void)
+{
+    NMConnection *a, *b;
+    GHashTable *  out_diffs = NULL;
+    gboolean      same;
+
+    a = new_test_connection();
+    b = nm_simple_connection_new_clone(a);
+
+    same = nm_connection_diff(a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
+    g_assert(same == TRUE);
+    g_assert(out_diffs == NULL);
+    g_object_unref(a);
+    g_object_unref(b);
+}
+
+static void
+test_connection_diff_different(void)
+{
+    NMConnection *     a, *b;
+    GHashTable *       out_diffs = NULL;
+    NMSettingIPConfig *s_ip4;
+    gboolean           same;
+    const DiffSetting  settings[] = {
+        {NM_SETTING_IP4_CONFIG_SETTING_NAME,
+         {
+             {NM_SETTING_IP_CONFIG_METHOD,
+              NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B},
+             {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN},
+         }},
+    };
+
+    a     = new_test_connection();
+    b     = nm_simple_connection_new_clone(a);
+    s_ip4 = nm_connection_get_setting_ip4_config(a);
+    g_assert(s_ip4);
+    g_object_set(G_OBJECT(s_ip4),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+                 NULL);
+
+    same = nm_connection_diff(a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
+    g_assert(same == FALSE);
+    g_assert(out_diffs != NULL);
+    g_assert(g_hash_table_size(out_diffs) > 0);
+
+    ensure_diffs(out_diffs, settings, ARRAY_LEN(settings));
+
+    g_hash_table_destroy(out_diffs);
+    g_object_unref(a);
+    g_object_unref(b);
+}
+
+static void
+test_connection_diff_no_secrets(void)
+{
+    NMConnection *    a, *b;
+    GHashTable *      out_diffs = NULL;
+    NMSetting *       s_pppoe;
+    gboolean          same;
+    const DiffSetting settings[] = {
+        {NM_SETTING_PPPOE_SETTING_NAME,
+         {
+             {NM_SETTING_PPPOE_PASSWORD, NM_SETTING_DIFF_RESULT_IN_B},
+             {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN},
+         }},
+    };
+
+    a       = new_test_connection();
+    s_pppoe = nm_setting_pppoe_new();
+    g_object_set(G_OBJECT(s_pppoe), NM_SETTING_PPPOE_USERNAME, "thomas", NULL);
+    nm_connection_add_setting(a, s_pppoe);
+
+    b = nm_simple_connection_new_clone(a);
+
+    /* Add a secret to B */
+    s_pppoe = NM_SETTING(nm_connection_get_setting_pppoe(b));
+    g_assert(s_pppoe);
+    g_object_set(G_OBJECT(s_pppoe), NM_SETTING_PPPOE_PASSWORD, "secretpassword", NULL);
+
+    /* Make sure the diff returns no results as secrets are ignored */
+    same = nm_connection_diff(a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, &out_diffs);
+    g_assert(same == TRUE);
+    g_assert(out_diffs == NULL);
 
-	/* Now make sure the diff returns results if secrets are not ignored */
-	same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
-	g_assert (same == FALSE);
-	g_assert (out_diffs != NULL);
-	g_assert (g_hash_table_size (out_diffs) > 0);
+    /* Now make sure the diff returns results if secrets are not ignored */
+    same = nm_connection_diff(a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs);
+    g_assert(same == FALSE);
+    g_assert(out_diffs != NULL);
+    g_assert(g_hash_table_size(out_diffs) > 0);
 
-	ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
+    ensure_diffs(out_diffs, settings, ARRAY_LEN(settings));
 
-	g_hash_table_destroy (out_diffs);
-	g_object_unref (a);
-	g_object_unref (b);
+    g_hash_table_destroy(out_diffs);
+    g_object_unref(a);
+    g_object_unref(b);
 }
 
 static void
-test_connection_diff_inferrable (void)
-{
-	NMConnection *a, *b;
-	GHashTable *out_diffs = NULL;
-	gboolean same;
-	NMSettingConnection *s_con;
-	NMSettingWired *s_wired;
-	NMSettingIPConfig *s_ip4;
-	char *uuid;
-	const DiffSetting settings[] = {
-		{ NM_SETTING_CONNECTION_SETTING_NAME, {
-			{ NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A },
-			{ NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
-		} },
-	};
-
-	a = new_test_connection ();
-	b = nm_simple_connection_new_clone (a);
-
-	/* Change the UUID, wired MTU, and set ignore-auto-dns */
-	s_con = nm_connection_get_setting_connection (a);
-	g_assert (s_con);
-	uuid = nm_utils_uuid_generate ();
-	g_object_set (G_OBJECT (s_con),
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_ID, "really neat connection",
-	              NULL);
-	g_free (uuid);
-
-	s_wired = nm_connection_get_setting_wired (a);
-	g_assert (s_wired);
-	g_object_set (G_OBJECT (s_wired), NM_SETTING_WIRED_MTU, 300, NULL);
-
-	s_ip4 = nm_connection_get_setting_ip4_config (a);
-	g_assert (s_ip4);
-	g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE, NULL);
-
-	/* Make sure the diff returns no results as secrets are ignored */
-	same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs);
-	g_assert (same == TRUE);
-	g_assert (out_diffs == NULL);
-
-	/* And change a INFERRABLE property to ensure that it shows up in the diff results */
-	g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, "usb0", NULL);
-
-	/* Make sure the diff returns no results as secrets are ignored */
-	same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs);
-	g_assert (same == FALSE);
-	g_assert (out_diffs != NULL);
-	g_assert (g_hash_table_size (out_diffs) > 0);
-
-	ensure_diffs (out_diffs, settings, ARRAY_LEN (settings));
-
-	g_hash_table_destroy (out_diffs);
-	g_object_unref (a);
-	g_object_unref (b);
-}
-
-static void
-add_generic_settings (NMConnection *connection, const char *ctype)
-{
-	NMSetting *setting;
-	char *uuid;
-
-	uuid = nm_utils_uuid_generate ();
-
-	setting = nm_setting_connection_new ();
-	g_object_set (setting,
-	              NM_SETTING_CONNECTION_ID, "asdfasdfadf",
-	              NM_SETTING_CONNECTION_TYPE, ctype,
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NULL);
-	nm_connection_add_setting (connection, setting);
-
-	g_free (uuid);
-
-	setting = nm_setting_ip4_config_new ();
-	g_object_set (setting, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
-	nm_connection_add_setting (connection, setting);
-
-	setting = nm_setting_ip6_config_new ();
-	g_object_set (setting, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
-	nm_connection_add_setting (connection, setting);
-}
-
-static void
-test_connection_good_base_types (void)
-{
-	NMConnection *connection;
-	NMSetting *setting;
-	gboolean success;
-	GError *error = NULL;
-	GBytes *ssid;
-	const char *bdaddr = "11:22:33:44:55:66";
-
-	/* Try a basic wired connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_WIRED_SETTING_NAME);
-	setting = nm_setting_wired_new ();
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	g_object_unref (connection);
-
-	/* Try a wired PPPoE connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_PPPOE_SETTING_NAME);
-	setting = nm_setting_pppoe_new ();
-	g_object_set (setting, NM_SETTING_PPPOE_USERNAME, "bob smith", NULL);
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	g_object_unref (connection);
-
-	/* Wifi connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_WIRELESS_SETTING_NAME);
-
-	setting = nm_setting_wireless_new ();
-	ssid = g_bytes_new ("1234567", 7);
-	g_object_set (setting,
-	              NM_SETTING_WIRELESS_SSID, ssid,
-	              NM_SETTING_WIRELESS_MODE, "infrastructure",
-	              NULL);
-	g_bytes_unref (ssid);
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	g_object_unref (connection);
-
-	/* Bluetooth connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_BLUETOOTH_SETTING_NAME);
-
-	setting = nm_setting_bluetooth_new ();
-	g_object_set (setting,
-	              NM_SETTING_BLUETOOTH_BDADDR, bdaddr,
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU,
-	              NULL);
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	g_object_unref (connection);
-
-	/* WiMAX connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_WIMAX_SETTING_NAME);
-	setting = nm_setting_wimax_new ();
-	g_object_set (setting, NM_SETTING_WIMAX_NETWORK_NAME, "CLEAR", NULL);
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	g_object_unref (connection);
-
-	/* GSM connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_GSM_SETTING_NAME);
-
-	setting = nm_setting_gsm_new ();
-	g_object_set (setting,
-	              NM_SETTING_GSM_APN, "metered.billing.sucks",
-	              NULL);
-	nm_connection_add_setting (connection, setting);
-
-	/* CDMA connection */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_CDMA_SETTING_NAME);
-
-	setting = nm_setting_cdma_new ();
-	g_object_set (setting,
-	              NM_SETTING_CDMA_NUMBER, "#777",
-	              NM_SETTING_CDMA_USERNAME, "foobar@vzw.com",
-	              NULL);
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	g_object_unref (connection);
-}
-
-static void
-test_connection_bad_base_types (void)
-{
-	NMConnection *connection;
-	NMSetting *setting;
-	gboolean success;
-	GError *error = NULL;
-
-	/* Test various non-base connection types to make sure they are rejected;
-	 * using a fake 'wired' connection so the rest of it verifies
-	 */
-
-	/* Connection setting */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_CONNECTION_SETTING_NAME);
-	setting = nm_setting_wired_new ();
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "connection.type: "));
-	g_assert (success == FALSE);
-	g_object_unref (connection);
-	g_clear_error (&error);
-
-	/* PPP setting */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_PPP_SETTING_NAME);
-	setting = nm_setting_wired_new ();
-	nm_connection_add_setting (connection, setting);
-	setting = nm_setting_ppp_new ();
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "connection.type: "));
-	g_assert (success == FALSE);
-	g_object_unref (connection);
-	g_clear_error (&error);
-
-	/* Serial setting */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_SERIAL_SETTING_NAME);
-	setting = nm_setting_wired_new ();
-	nm_connection_add_setting (connection, setting);
-	setting = nm_setting_serial_new ();
-	nm_connection_add_setting (connection, setting);
-
-	success = nm_connection_verify (connection, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "connection.type: "));
-	g_assert (success == FALSE);
-	g_object_unref (connection);
-	g_clear_error (&error);
+test_connection_diff_inferrable(void)
+{
+    NMConnection *       a, *b;
+    GHashTable *         out_diffs = NULL;
+    gboolean             same;
+    NMSettingConnection *s_con;
+    NMSettingWired *     s_wired;
+    NMSettingIPConfig *  s_ip4;
+    char *               uuid;
+    const DiffSetting    settings[] = {
+        {NM_SETTING_CONNECTION_SETTING_NAME,
+         {
+             {NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A},
+             {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN},
+         }},
+    };
+
+    a = new_test_connection();
+    b = nm_simple_connection_new_clone(a);
+
+    /* Change the UUID, wired MTU, and set ignore-auto-dns */
+    s_con = nm_connection_get_setting_connection(a);
+    g_assert(s_con);
+    uuid = nm_utils_uuid_generate();
+    g_object_set(G_OBJECT(s_con),
+                 NM_SETTING_CONNECTION_UUID,
+                 uuid,
+                 NM_SETTING_CONNECTION_ID,
+                 "really neat connection",
+                 NULL);
+    g_free(uuid);
+
+    s_wired = nm_connection_get_setting_wired(a);
+    g_assert(s_wired);
+    g_object_set(G_OBJECT(s_wired), NM_SETTING_WIRED_MTU, 300, NULL);
+
+    s_ip4 = nm_connection_get_setting_ip4_config(a);
+    g_assert(s_ip4);
+    g_object_set(G_OBJECT(s_ip4), NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE, NULL);
+
+    /* Make sure the diff returns no results as secrets are ignored */
+    same = nm_connection_diff(a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs);
+    g_assert(same == TRUE);
+    g_assert(out_diffs == NULL);
+
+    /* And change a INFERRABLE property to ensure that it shows up in the diff results */
+    g_object_set(G_OBJECT(s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, "usb0", NULL);
+
+    /* Make sure the diff returns no results as secrets are ignored */
+    same = nm_connection_diff(a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs);
+    g_assert(same == FALSE);
+    g_assert(out_diffs != NULL);
+    g_assert(g_hash_table_size(out_diffs) > 0);
+
+    ensure_diffs(out_diffs, settings, ARRAY_LEN(settings));
+
+    g_hash_table_destroy(out_diffs);
+    g_object_unref(a);
+    g_object_unref(b);
+}
+
+static void
+add_generic_settings(NMConnection *connection, const char *ctype)
+{
+    NMSetting *setting;
+    char *     uuid;
+
+    uuid = nm_utils_uuid_generate();
+
+    setting = nm_setting_connection_new();
+    g_object_set(setting,
+                 NM_SETTING_CONNECTION_ID,
+                 "asdfasdfadf",
+                 NM_SETTING_CONNECTION_TYPE,
+                 ctype,
+                 NM_SETTING_CONNECTION_UUID,
+                 uuid,
+                 NULL);
+    nm_connection_add_setting(connection, setting);
+
+    g_free(uuid);
+
+    setting = nm_setting_ip4_config_new();
+    g_object_set(setting, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
+    nm_connection_add_setting(connection, setting);
+
+    setting = nm_setting_ip6_config_new();
+    g_object_set(setting, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+    nm_connection_add_setting(connection, setting);
+}
+
+static void
+test_connection_good_base_types(void)
+{
+    NMConnection *connection;
+    NMSetting *   setting;
+    gboolean      success;
+    GError *      error = NULL;
+    GBytes *      ssid;
+    const char *  bdaddr = "11:22:33:44:55:66";
+
+    /* Try a basic wired connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_WIRED_SETTING_NAME);
+    setting = nm_setting_wired_new();
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    g_object_unref(connection);
+
+    /* Try a wired PPPoE connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_PPPOE_SETTING_NAME);
+    setting = nm_setting_pppoe_new();
+    g_object_set(setting, NM_SETTING_PPPOE_USERNAME, "bob smith", NULL);
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    g_object_unref(connection);
+
+    /* Wifi connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_WIRELESS_SETTING_NAME);
+
+    setting = nm_setting_wireless_new();
+    ssid    = g_bytes_new("1234567", 7);
+    g_object_set(setting,
+                 NM_SETTING_WIRELESS_SSID,
+                 ssid,
+                 NM_SETTING_WIRELESS_MODE,
+                 "infrastructure",
+                 NULL);
+    g_bytes_unref(ssid);
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    g_object_unref(connection);
+
+    /* Bluetooth connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_BLUETOOTH_SETTING_NAME);
+
+    setting = nm_setting_bluetooth_new();
+    g_object_set(setting,
+                 NM_SETTING_BLUETOOTH_BDADDR,
+                 bdaddr,
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_BLUETOOTH_TYPE_PANU,
+                 NULL);
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    g_object_unref(connection);
+
+    /* WiMAX connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_WIMAX_SETTING_NAME);
+    setting = nm_setting_wimax_new();
+    g_object_set(setting, NM_SETTING_WIMAX_NETWORK_NAME, "CLEAR", NULL);
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    g_object_unref(connection);
+
+    /* GSM connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_GSM_SETTING_NAME);
+
+    setting = nm_setting_gsm_new();
+    g_object_set(setting, NM_SETTING_GSM_APN, "metered.billing.sucks", NULL);
+    nm_connection_add_setting(connection, setting);
+
+    /* CDMA connection */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_CDMA_SETTING_NAME);
+
+    setting = nm_setting_cdma_new();
+    g_object_set(setting,
+                 NM_SETTING_CDMA_NUMBER,
+                 "#777",
+                 NM_SETTING_CDMA_USERNAME,
+                 "foobar@vzw.com",
+                 NULL);
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    g_object_unref(connection);
+}
+
+static void
+test_connection_bad_base_types(void)
+{
+    NMConnection *connection;
+    NMSetting *   setting;
+    gboolean      success;
+    GError *      error = NULL;
+
+    /* Test various non-base connection types to make sure they are rejected;
+     * using a fake 'wired' connection so the rest of it verifies
+     */
+
+    /* Connection setting */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_CONNECTION_SETTING_NAME);
+    setting = nm_setting_wired_new();
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "connection.type: "));
+    g_assert(success == FALSE);
+    g_object_unref(connection);
+    g_clear_error(&error);
+
+    /* PPP setting */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_PPP_SETTING_NAME);
+    setting = nm_setting_wired_new();
+    nm_connection_add_setting(connection, setting);
+    setting = nm_setting_ppp_new();
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "connection.type: "));
+    g_assert(success == FALSE);
+    g_object_unref(connection);
+    g_clear_error(&error);
+
+    /* Serial setting */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_SERIAL_SETTING_NAME);
+    setting = nm_setting_wired_new();
+    nm_connection_add_setting(connection, setting);
+    setting = nm_setting_serial_new();
+    nm_connection_add_setting(connection, setting);
+
+    success = nm_connection_verify(connection, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "connection.type: "));
+    g_assert(success == FALSE);
+    g_object_unref(connection);
+    g_clear_error(&error);
 
-	/* IP4 setting */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_IP4_CONFIG_SETTING_NAME);
-	setting = nm_setting_wired_new ();
-	nm_connection_add_setting (connection, setting);
+    /* IP4 setting */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_IP4_CONFIG_SETTING_NAME);
+    setting = nm_setting_wired_new();
+    nm_connection_add_setting(connection, setting);
 
-	success = nm_connection_verify (connection, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "connection.type: "));
-	g_assert (success == FALSE);
-	g_object_unref (connection);
-	g_clear_error (&error);
+    success = nm_connection_verify(connection, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "connection.type: "));
+    g_assert(success == FALSE);
+    g_object_unref(connection);
+    g_clear_error(&error);
 
-	/* IP6 setting */
-	connection = nm_simple_connection_new ();
-	add_generic_settings (connection, NM_SETTING_IP6_CONFIG_SETTING_NAME);
-	setting = nm_setting_wired_new ();
-	nm_connection_add_setting (connection, setting);
+    /* IP6 setting */
+    connection = nm_simple_connection_new();
+    add_generic_settings(connection, NM_SETTING_IP6_CONFIG_SETTING_NAME);
+    setting = nm_setting_wired_new();
+    nm_connection_add_setting(connection, setting);
 
-	success = nm_connection_verify (connection, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (g_str_has_prefix (error->message, "connection.type: "));
-	g_assert (success == FALSE);
-	g_object_unref (connection);
-	g_clear_error (&error);
+    success = nm_connection_verify(connection, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(g_str_has_prefix(error->message, "connection.type: "));
+    g_assert(success == FALSE);
+    g_object_unref(connection);
+    g_clear_error(&error);
 }
 
 static void
-test_setting_compare_id (void)
+test_setting_compare_id(void)
 {
-	gs_unref_object NMSetting *old = NULL, *new = NULL;
-	gboolean success;
+    gs_unref_object NMSetting *old = NULL, *new = NULL;
+    gboolean                   success;
 
-	old = nm_setting_connection_new ();
-	g_object_set (old,
-	              NM_SETTING_CONNECTION_ID, "really awesome cool connection",
-	              NM_SETTING_CONNECTION_UUID, "fbbd59d5-acab-4e30-8f86-258d272617e7",
-	              NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
-	              NULL);
+    old = nm_setting_connection_new();
+    g_object_set(old,
+                 NM_SETTING_CONNECTION_ID,
+                 "really awesome cool connection",
+                 NM_SETTING_CONNECTION_UUID,
+                 "fbbd59d5-acab-4e30-8f86-258d272617e7",
+                 NM_SETTING_CONNECTION_AUTOCONNECT,
+                 FALSE,
+                 NULL);
 
-	new = nm_setting_duplicate (old);
-	g_object_set (new, NM_SETTING_CONNECTION_ID, "some different connection id", NULL);
+    new = nm_setting_duplicate(old);
+    g_object_set(new, NM_SETTING_CONNECTION_ID, "some different connection id", NULL);
 
-	/* First make sure they are different */
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (success == FALSE);
+    /* First make sure they are different */
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(success == FALSE);
 
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_IGNORE_ID);
-	g_assert (success);
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_IGNORE_ID);
+    g_assert(success);
 }
 
 static void
-test_setting_compare_addresses (void)
+test_setting_compare_addresses(void)
 {
-	gs_unref_object NMSetting *s1 = NULL, *s2 = NULL;
-	gboolean success;
-	NMIPAddress *a;
-	GHashTable *result = NULL;
+    gs_unref_object NMSetting *s1 = NULL, *s2 = NULL;
+    gboolean                   success;
+    NMIPAddress *              a;
+    GHashTable *               result = NULL;
 
-	s1 = nm_setting_ip4_config_new ();
-	s2 = nm_setting_ip4_config_new ();
+    s1 = nm_setting_ip4_config_new();
+    s2 = nm_setting_ip4_config_new();
 
-	a = nm_ip_address_new (AF_INET, "192.168.7.5", 24, NULL);
+    a = nm_ip_address_new(AF_INET, "192.168.7.5", 24, NULL);
 
-	nm_ip_address_set_attribute (a, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string ("xoxoxo"));
-	nm_setting_ip_config_add_address ((NMSettingIPConfig *) s1, a);
+    nm_ip_address_set_attribute(a, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string("xoxoxo"));
+    nm_setting_ip_config_add_address((NMSettingIPConfig *) s1, a);
 
-	nm_ip_address_set_attribute (a, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string ("hello"));
-	nm_setting_ip_config_add_address ((NMSettingIPConfig *) s2, a);
+    nm_ip_address_set_attribute(a, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string("hello"));
+    nm_setting_ip_config_add_address((NMSettingIPConfig *) s2, a);
 
-	nm_ip_address_unref (a);
+    nm_ip_address_unref(a);
 
-	if (nmtst_get_rand_uint32 () % 2)
-		NM_SWAP (s1, s2);
+    if (nmtst_get_rand_uint32() % 2)
+        NM_SWAP(&s1, &s2);
 
-	success = nm_setting_compare (s1, s2, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (!success);
+    success = nm_setting_compare(s1, s2, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(!success);
 
-	success = nm_setting_diff (s1, s2, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, &result);
-	g_assert (!success);
-	nm_clear_pointer (&result, g_hash_table_unref);
+    success = nm_setting_diff(s1, s2, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, &result);
+    g_assert(!success);
+    nm_clear_pointer(&result, g_hash_table_unref);
 }
 
 static void
-test_setting_compare_routes (void)
+test_setting_compare_routes(void)
 {
-	gs_unref_object NMSetting *s1 = NULL, *s2 = NULL;
-	gboolean success;
-	NMIPRoute *r;
-	GHashTable *result = NULL;
+    gs_unref_object NMSetting *s1 = NULL, *s2 = NULL;
+    gboolean                   success;
+    NMIPRoute *                r;
+    GHashTable *               result = NULL;
 
-	s1 = nm_setting_ip4_config_new ();
-	s2 = nm_setting_ip4_config_new ();
+    s1 = nm_setting_ip4_config_new();
+    s2 = nm_setting_ip4_config_new();
 
-	r = nm_ip_route_new (AF_INET, "192.168.12.0", 24, "192.168.11.1", 473, NULL);
+    r = nm_ip_route_new(AF_INET, "192.168.12.0", 24, "192.168.11.1", 473, NULL);
 
-	nm_ip_route_set_attribute (r, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string ("xoxoxo"));
-	nm_setting_ip_config_add_route ((NMSettingIPConfig *) s1, r);
+    nm_ip_route_set_attribute(r, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string("xoxoxo"));
+    nm_setting_ip_config_add_route((NMSettingIPConfig *) s1, r);
 
-	nm_ip_route_set_attribute (r, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string ("hello"));
-	nm_setting_ip_config_add_route ((NMSettingIPConfig *) s2, r);
+    nm_ip_route_set_attribute(r, NM_IP_ADDRESS_ATTRIBUTE_LABEL, g_variant_new_string("hello"));
+    nm_setting_ip_config_add_route((NMSettingIPConfig *) s2, r);
 
-	nm_ip_route_unref (r);
+    nm_ip_route_unref(r);
 
-	if (nmtst_get_rand_uint32 () % 2)
-		NM_SWAP (s1, s2);
+    if (nmtst_get_rand_uint32() % 2)
+        NM_SWAP(&s1, &s2);
 
-	success = nm_setting_compare (s1, s2, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (!success);
+    success = nm_setting_compare(s1, s2, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(!success);
 
-	success = nm_setting_diff (s1, s2, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, &result);
-	g_assert (!success);
-	nm_clear_pointer (&result, g_hash_table_unref);
+    success = nm_setting_diff(s1, s2, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, &result);
+    g_assert(!success);
+    nm_clear_pointer(&result, g_hash_table_unref);
 }
 
 static void
-test_setting_compare_wired_cloned_mac_address (void)
+test_setting_compare_wired_cloned_mac_address(void)
 {
-	gs_unref_object NMSetting *old = NULL, *new = NULL;
-	gboolean success;
-	gs_free char *str1 = NULL;
+    gs_unref_object NMSetting *old = NULL, *new = NULL;
+    gboolean                   success;
+    gs_free char *             str1 = NULL;
 
-	old = nm_setting_wired_new ();
-	g_object_set (old,
-	              NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "stable",
-	              NULL);
+    old = nm_setting_wired_new();
+    g_object_set(old, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "stable", NULL);
 
-	g_assert_cmpstr ("stable", ==, nm_setting_wired_get_cloned_mac_address ((NMSettingWired *) old));
-	g_object_get (old, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, &str1, NULL);
-	g_assert_cmpstr ("stable", ==, str1);
-	nm_clear_g_free (&str1);
+    g_assert_cmpstr("stable", ==, nm_setting_wired_get_cloned_mac_address((NMSettingWired *) old));
+    g_object_get(old, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, &str1, NULL);
+    g_assert_cmpstr("stable", ==, str1);
+    nm_clear_g_free(&str1);
 
-	new = nm_setting_duplicate (old);
-	g_object_set (new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "11:22:33:44:55:66", NULL);
+    new = nm_setting_duplicate(old);
+    g_object_set(new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "11:22:33:44:55:66", NULL);
 
-	g_assert_cmpstr ("11:22:33:44:55:66", ==, nm_setting_wired_get_cloned_mac_address ((NMSettingWired *) new));
-	g_object_get (new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, &str1, NULL);
-	g_assert_cmpstr ("11:22:33:44:55:66", ==, str1);
-	nm_clear_g_free (&str1);
+    g_assert_cmpstr("11:22:33:44:55:66",
+                    ==,
+                    nm_setting_wired_get_cloned_mac_address((NMSettingWired *) new));
+    g_object_get(new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, &str1, NULL);
+    g_assert_cmpstr("11:22:33:44:55:66", ==, str1);
+    nm_clear_g_free(&str1);
 
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (!success);
-	g_clear_object (&new);
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(!success);
+    g_clear_object(&new);
 
-	new = nm_setting_duplicate (old);
-	g_object_set (new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "stable-bia", NULL);
+    new = nm_setting_duplicate(old);
+    g_object_set(new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "stable-bia", NULL);
 
-	g_assert_cmpstr ("stable-bia", ==, nm_setting_wired_get_cloned_mac_address ((NMSettingWired *) new));
-	g_object_get (new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, &str1, NULL);
-	g_assert_cmpstr ("stable-bia", ==, str1);
-	nm_clear_g_free (&str1);
+    g_assert_cmpstr("stable-bia",
+                    ==,
+                    nm_setting_wired_get_cloned_mac_address((NMSettingWired *) new));
+    g_object_get(new, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, &str1, NULL);
+    g_assert_cmpstr("stable-bia", ==, str1);
+    nm_clear_g_free(&str1);
 
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (!success);
-	g_clear_object (&new);
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(!success);
+    g_clear_object(&new);
 }
 
 static void
-test_setting_compare_wireless_cloned_mac_address (void)
+test_setting_compare_wireless_cloned_mac_address(void)
 {
-	gs_unref_object NMSetting *old = NULL, *new = NULL;
-	gboolean success;
-	gs_free char *str1 = NULL;
+    gs_unref_object NMSetting *old = NULL, *new = NULL;
+    gboolean                   success;
+    gs_free char *             str1 = NULL;
 
-	old = nm_setting_wireless_new ();
-	g_object_set (old,
-	              NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "stable",
-	              NULL);
+    old = nm_setting_wireless_new();
+    g_object_set(old, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "stable", NULL);
 
-	g_assert_cmpstr ("stable", ==, nm_setting_wireless_get_cloned_mac_address ((NMSettingWireless *) old));
-	g_object_get (old, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, &str1, NULL);
-	g_assert_cmpstr ("stable", ==, str1);
-	nm_clear_g_free (&str1);
+    g_assert_cmpstr("stable",
+                    ==,
+                    nm_setting_wireless_get_cloned_mac_address((NMSettingWireless *) old));
+    g_object_get(old, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, &str1, NULL);
+    g_assert_cmpstr("stable", ==, str1);
+    nm_clear_g_free(&str1);
 
-	new = nm_setting_duplicate (old);
-	g_object_set (new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "11:22:33:44:55:66", NULL);
+    new = nm_setting_duplicate(old);
+    g_object_set(new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "11:22:33:44:55:66", NULL);
 
-	g_assert_cmpstr ("11:22:33:44:55:66", ==, nm_setting_wireless_get_cloned_mac_address ((NMSettingWireless *) new));
-	g_object_get (new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, &str1, NULL);
-	g_assert_cmpstr ("11:22:33:44:55:66", ==, str1);
-	nm_clear_g_free (&str1);
+    g_assert_cmpstr("11:22:33:44:55:66",
+                    ==,
+                    nm_setting_wireless_get_cloned_mac_address((NMSettingWireless *) new));
+    g_object_get(new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, &str1, NULL);
+    g_assert_cmpstr("11:22:33:44:55:66", ==, str1);
+    nm_clear_g_free(&str1);
 
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (!success);
-	g_clear_object (&new);
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(!success);
+    g_clear_object(&new);
 
-	new = nm_setting_duplicate (old);
-	g_object_set (new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "stable-bia", NULL);
+    new = nm_setting_duplicate(old);
+    g_object_set(new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "stable-bia", NULL);
 
-	g_assert_cmpstr ("stable-bia", ==, nm_setting_wireless_get_cloned_mac_address ((NMSettingWireless *) new));
-	g_object_get (new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, &str1, NULL);
-	g_assert_cmpstr ("stable-bia", ==, str1);
-	nm_clear_g_free (&str1);
+    g_assert_cmpstr("stable-bia",
+                    ==,
+                    nm_setting_wireless_get_cloned_mac_address((NMSettingWireless *) new));
+    g_object_get(new, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, &str1, NULL);
+    g_assert_cmpstr("stable-bia", ==, str1);
+    nm_clear_g_free(&str1);
 
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (!success);
-	g_clear_object (&new);
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(!success);
+    g_clear_object(&new);
 }
 
 static void
-test_setting_compare_timestamp (void)
+test_setting_compare_timestamp(void)
 {
-	gs_unref_object NMSetting *old = NULL, *new = NULL;
-	gboolean success;
+    gs_unref_object NMSetting *old = NULL, *new = NULL;
+    gboolean                   success;
 
-	old = nm_setting_connection_new ();
-	g_object_set (old,
-	              NM_SETTING_CONNECTION_ID, "ignore timestamp connection",
-	              NM_SETTING_CONNECTION_UUID, "b047a198-0e0a-4f0e-a653-eea09bb35e40",
-	              NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
-	              NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 1234567890,
-	              NULL);
+    old = nm_setting_connection_new();
+    g_object_set(old,
+                 NM_SETTING_CONNECTION_ID,
+                 "ignore timestamp connection",
+                 NM_SETTING_CONNECTION_UUID,
+                 "b047a198-0e0a-4f0e-a653-eea09bb35e40",
+                 NM_SETTING_CONNECTION_AUTOCONNECT,
+                 FALSE,
+                 NM_SETTING_CONNECTION_TIMESTAMP,
+                 (guint64) 1234567890,
+                 NULL);
 
-	new = nm_setting_duplicate (old);
-	g_object_set (new, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 1416316539, NULL);
+    new = nm_setting_duplicate(old);
+    g_object_set(new, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 1416316539, NULL);
 
-	/* First make sure they are different */
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-	g_assert (success == FALSE);
+    /* First make sure they are different */
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+    g_assert(success == FALSE);
 
-	success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP);
-	g_assert (success);
+    success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_IGNORE_TIMESTAMP);
+    g_assert(success);
 }
 
 typedef struct {
-	NMSettingSecretFlags secret_flags;
-	NMSettingCompareFlags comp_flags;
-	gboolean remove_secret;
+    NMSettingSecretFlags  secret_flags;
+    NMSettingCompareFlags comp_flags;
+    gboolean              remove_secret;
 } TestDataCompareSecrets;
 
 static TestDataCompareSecrets *
-test_data_compare_secrets_new (NMSettingSecretFlags secret_flags,
-                               NMSettingCompareFlags comp_flags,
-                               gboolean remove_secret)
-{
-	TestDataCompareSecrets *data = g_new0 (TestDataCompareSecrets, 1);
-
-	data->secret_flags = secret_flags;
-	data->comp_flags = comp_flags;
-	data->remove_secret = remove_secret;
-	return data;
-}
-
-static void
-_test_compare_secrets_check_diff (NMSetting *a,
-                                  NMSetting *b,
-                                  NMSettingCompareFlags flags,
-                                  gboolean exp_same_psk,
-                                  gboolean exp_same_psk_flags)
-{
-	gs_unref_hashtable GHashTable *h = NULL;
-	NMSettingDiffResult _RESULT_IN_A = NM_SETTING_DIFF_RESULT_IN_A;
-	NMSettingDiffResult _RESULT_IN_B = NM_SETTING_DIFF_RESULT_IN_B;
-	gboolean invert_results;
-	gboolean diff_result;
-	NMSettingSecretFlags a_psk_flags = nm_setting_wireless_security_get_psk_flags (NM_SETTING_WIRELESS_SECURITY (a));
-	NMSettingSecretFlags b_psk_flags = nm_setting_wireless_security_get_psk_flags (NM_SETTING_WIRELESS_SECURITY (b));
-	const char *a_psk = nm_setting_wireless_security_get_psk (NM_SETTING_WIRELESS_SECURITY (a));
-	const char *b_psk = nm_setting_wireless_security_get_psk (NM_SETTING_WIRELESS_SECURITY (b));
-
-	g_assert (NM_IS_SETTING_WIRELESS_SECURITY (a));
-	g_assert (NM_IS_SETTING_WIRELESS_SECURITY (b));
-
-	invert_results = nmtst_get_rand_bool ();
-	if (invert_results) {
-		_RESULT_IN_A = NM_SETTING_DIFF_RESULT_IN_B;
-		_RESULT_IN_B = NM_SETTING_DIFF_RESULT_IN_A;
-	}
-
-	diff_result = nm_setting_diff (a, b, flags, invert_results, &h);
-
-	g_assert (exp_same_psk_flags == (a_psk_flags == b_psk_flags));
-
-	if (nm_streq0 (a_psk, b_psk))
-		g_assert (exp_same_psk);
-	else {
-		if (flags == NM_SETTING_COMPARE_FLAG_EXACT)
-			g_assert (!exp_same_psk);
-		else if (flags == NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS) {
-			if (   !NM_FLAGS_HAS (a_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED)
-			    && !NM_FLAGS_HAS (b_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
-				g_assert (!exp_same_psk);
-			else if (   !NM_FLAGS_HAS (a_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED)
-			         && NM_FLAGS_HAS (b_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
-				g_assert (!exp_same_psk);
-			else
-				g_assert (exp_same_psk);
-		} else if (flags == NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS) {
-			if (   !NM_FLAGS_HAS (a_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED)
-			    && !NM_FLAGS_HAS (b_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED))
-				g_assert (!exp_same_psk);
-			else if (   !NM_FLAGS_HAS (a_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED)
-			         && NM_FLAGS_HAS (b_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED))
-				g_assert (!exp_same_psk);
-			else
-				g_assert (exp_same_psk);
-		} else if (flags == NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS)
-			g_assert (exp_same_psk);
-		else
-			g_assert_not_reached ();
-	}
-
-	g_assert (diff_result == (exp_same_psk && exp_same_psk_flags));
-	g_assert (diff_result == (!h));
-
-	if (!diff_result) {
-		if (flags == NM_SETTING_COMPARE_FLAG_EXACT)
-			g_assert (!exp_same_psk);
-		else if (   NM_IN_SET (flags, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS,
-		                              NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
-		         && (a_psk_flags != b_psk_flags)
-		         && nm_setting_wireless_security_get_psk_flags (NM_SETTING_WIRELESS_SECURITY (a)) == NM_SETTING_SECRET_FLAG_NONE)
-			g_assert (!exp_same_psk);
-		else
-			g_assert (exp_same_psk);
-
-		g_assert ((!exp_same_psk) == g_hash_table_contains (h, NM_SETTING_WIRELESS_SECURITY_PSK));
-		if (!exp_same_psk) {
-			if (nm_setting_wireless_security_get_psk (NM_SETTING_WIRELESS_SECURITY (a)))
-				g_assert_cmpint (GPOINTER_TO_UINT (g_hash_table_lookup (h, NM_SETTING_WIRELESS_SECURITY_PSK)), ==, _RESULT_IN_A);
-			else
-				g_assert_cmpint (GPOINTER_TO_UINT (g_hash_table_lookup (h, NM_SETTING_WIRELESS_SECURITY_PSK)), ==, _RESULT_IN_B);
-		}
-
-		g_assert ((!exp_same_psk_flags) == g_hash_table_contains (h, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS));
-		if (!exp_same_psk_flags) {
-			if (nm_setting_wireless_security_get_psk_flags (NM_SETTING_WIRELESS_SECURITY (a)) != NM_SETTING_SECRET_FLAG_NONE)
-				g_assert_cmpint (GPOINTER_TO_UINT (g_hash_table_lookup (h, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS)), ==, _RESULT_IN_A);
-			else
-				g_assert_cmpint (GPOINTER_TO_UINT (g_hash_table_lookup (h, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS)), ==, _RESULT_IN_B);
-		}
-
-		g_assert_cmpint (g_hash_table_size (h), ==, (!exp_same_psk) + (!exp_same_psk_flags));
-	}
-
-	g_assert (diff_result == nm_setting_compare (a, b, flags));
-	g_assert (diff_result == nm_setting_compare (b, a, flags));
-
-}
-
-static void
-test_setting_compare_secrets (gconstpointer test_data)
-{
-	const TestDataCompareSecrets *data = test_data;
-	gs_unref_object NMConnection *conn_old = NULL;
-	gs_unref_object NMConnection *conn_new = NULL;
-	gs_unref_object NMSetting *old = NULL;
-	gs_unref_object NMSetting *new = NULL;
-
-	/* Make sure that a connection with transient/unsaved secrets compares
-	 * successfully to the same connection without those secrets.
-	 */
-
-	old = nm_setting_wireless_security_new ();
-	g_object_set (old,
-	              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
-	              NM_SETTING_WIRELESS_SECURITY_PSK, "really cool psk",
-	              NULL);
-	nm_setting_set_secret_flags (old, NM_SETTING_WIRELESS_SECURITY_PSK, data->secret_flags, NULL);
-
-	new = nm_setting_duplicate (old);
-	if (data->remove_secret)
-		g_object_set (new, NM_SETTING_WIRELESS_SECURITY_PSK, NULL, NULL);
-
-	g_assert ((!data->remove_secret) == nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_assert ((!data->remove_secret) == nm_setting_compare (new, old, NM_SETTING_COMPARE_FLAG_EXACT));
-
-	_test_compare_secrets_check_diff (old, new, NM_SETTING_COMPARE_FLAG_EXACT, !data->remove_secret, TRUE);
-	_test_compare_secrets_check_diff (new, old, NM_SETTING_COMPARE_FLAG_EXACT, !data->remove_secret, TRUE);
-
-	g_assert (nm_setting_compare (old, new, data->comp_flags));
-	g_assert (nm_setting_compare (new, old, data->comp_flags));
-
-	_test_compare_secrets_check_diff (old, new, data->comp_flags, TRUE, TRUE);
-	_test_compare_secrets_check_diff (new, old, data->comp_flags, TRUE, TRUE);
-
-	/* OK. Try again, but this time not only change the secret, also let the secret flags differ... */
-	if (data->secret_flags != NM_SETTING_SECRET_FLAG_NONE) {
-		nm_setting_set_secret_flags (new, NM_SETTING_WIRELESS_SECURITY_PSK, NM_SETTING_SECRET_FLAG_NONE, NULL);
+test_data_compare_secrets_new(NMSettingSecretFlags  secret_flags,
+                              NMSettingCompareFlags comp_flags,
+                              gboolean              remove_secret)
+{
+    TestDataCompareSecrets *data = g_new0(TestDataCompareSecrets, 1);
+
+    data->secret_flags  = secret_flags;
+    data->comp_flags    = comp_flags;
+    data->remove_secret = remove_secret;
+    return data;
+}
+
+static void
+_test_compare_secrets_check_diff(NMSetting *           a,
+                                 NMSetting *           b,
+                                 NMSettingCompareFlags flags,
+                                 gboolean              exp_same_psk,
+                                 gboolean              exp_same_psk_flags)
+{
+    gs_unref_hashtable GHashTable *h            = NULL;
+    NMSettingDiffResult            _RESULT_IN_A = NM_SETTING_DIFF_RESULT_IN_A;
+    NMSettingDiffResult            _RESULT_IN_B = NM_SETTING_DIFF_RESULT_IN_B;
+    gboolean                       invert_results;
+    gboolean                       diff_result;
+    NMSettingSecretFlags           a_psk_flags =
+        nm_setting_wireless_security_get_psk_flags(NM_SETTING_WIRELESS_SECURITY(a));
+    NMSettingSecretFlags b_psk_flags =
+        nm_setting_wireless_security_get_psk_flags(NM_SETTING_WIRELESS_SECURITY(b));
+    const char *a_psk = nm_setting_wireless_security_get_psk(NM_SETTING_WIRELESS_SECURITY(a));
+    const char *b_psk = nm_setting_wireless_security_get_psk(NM_SETTING_WIRELESS_SECURITY(b));
+
+    g_assert(NM_IS_SETTING_WIRELESS_SECURITY(a));
+    g_assert(NM_IS_SETTING_WIRELESS_SECURITY(b));
+
+    invert_results = nmtst_get_rand_bool();
+    if (invert_results) {
+        _RESULT_IN_A = NM_SETTING_DIFF_RESULT_IN_B;
+        _RESULT_IN_B = NM_SETTING_DIFF_RESULT_IN_A;
+    }
+
+    diff_result = nm_setting_diff(a, b, flags, invert_results, &h);
+
+    g_assert(exp_same_psk_flags == (a_psk_flags == b_psk_flags));
+
+    if (nm_streq0(a_psk, b_psk))
+        g_assert(exp_same_psk);
+    else {
+        if (flags == NM_SETTING_COMPARE_FLAG_EXACT)
+            g_assert(!exp_same_psk);
+        else if (flags == NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS) {
+            if (!NM_FLAGS_HAS(a_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED)
+                && !NM_FLAGS_HAS(b_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
+                g_assert(!exp_same_psk);
+            else if (!NM_FLAGS_HAS(a_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED)
+                     && NM_FLAGS_HAS(b_psk_flags, NM_SETTING_SECRET_FLAG_AGENT_OWNED))
+                g_assert(!exp_same_psk);
+            else
+                g_assert(exp_same_psk);
+        } else if (flags == NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS) {
+            if (!NM_FLAGS_HAS(a_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED)
+                && !NM_FLAGS_HAS(b_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED))
+                g_assert(!exp_same_psk);
+            else if (!NM_FLAGS_HAS(a_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED)
+                     && NM_FLAGS_HAS(b_psk_flags, NM_SETTING_SECRET_FLAG_NOT_SAVED))
+                g_assert(!exp_same_psk);
+            else
+                g_assert(exp_same_psk);
+        } else if (flags == NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS)
+            g_assert(exp_same_psk);
+        else
+            g_assert_not_reached();
+    }
+
+    g_assert(diff_result == (exp_same_psk && exp_same_psk_flags));
+    g_assert(diff_result == (!h));
+
+    if (!diff_result) {
+        if (flags == NM_SETTING_COMPARE_FLAG_EXACT)
+            g_assert(!exp_same_psk);
+        else if (NM_IN_SET(flags,
+                           NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS,
+                           NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
+                 && (a_psk_flags != b_psk_flags)
+                 && nm_setting_wireless_security_get_psk_flags(NM_SETTING_WIRELESS_SECURITY(a))
+                        == NM_SETTING_SECRET_FLAG_NONE)
+            g_assert(!exp_same_psk);
+        else
+            g_assert(exp_same_psk);
+
+        g_assert((!exp_same_psk) == g_hash_table_contains(h, NM_SETTING_WIRELESS_SECURITY_PSK));
+        if (!exp_same_psk) {
+            if (nm_setting_wireless_security_get_psk(NM_SETTING_WIRELESS_SECURITY(a)))
+                g_assert_cmpint(
+                    GPOINTER_TO_UINT(g_hash_table_lookup(h, NM_SETTING_WIRELESS_SECURITY_PSK)),
+                    ==,
+                    _RESULT_IN_A);
+            else
+                g_assert_cmpint(
+                    GPOINTER_TO_UINT(g_hash_table_lookup(h, NM_SETTING_WIRELESS_SECURITY_PSK)),
+                    ==,
+                    _RESULT_IN_B);
+        }
+
+        g_assert((!exp_same_psk_flags)
+                 == g_hash_table_contains(h, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS));
+        if (!exp_same_psk_flags) {
+            if (nm_setting_wireless_security_get_psk_flags(NM_SETTING_WIRELESS_SECURITY(a))
+                != NM_SETTING_SECRET_FLAG_NONE)
+                g_assert_cmpint(GPOINTER_TO_UINT(
+                                    g_hash_table_lookup(h, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS)),
+                                ==,
+                                _RESULT_IN_A);
+            else
+                g_assert_cmpint(GPOINTER_TO_UINT(
+                                    g_hash_table_lookup(h, NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS)),
+                                ==,
+                                _RESULT_IN_B);
+        }
+
+        g_assert_cmpint(g_hash_table_size(h), ==, (!exp_same_psk) + (!exp_same_psk_flags));
+    }
+
+    g_assert(diff_result == nm_setting_compare(a, b, flags));
+    g_assert(diff_result == nm_setting_compare(b, a, flags));
+}
+
+static void
+test_setting_compare_secrets(gconstpointer test_data)
+{
+    const TestDataCompareSecrets *data        = test_data;
+    gs_unref_object NMConnection *conn_old    = NULL;
+    gs_unref_object NMConnection *conn_new    = NULL;
+    gs_unref_object NMSetting *old            = NULL;
+    gs_unref_object            NMSetting *new = NULL;
+
+    /* Make sure that a connection with transient/unsaved secrets compares
+     * successfully to the same connection without those secrets.
+     */
+
+    old = nm_setting_wireless_security_new();
+    g_object_set(old,
+                 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
+                 "wpa-psk",
+                 NM_SETTING_WIRELESS_SECURITY_PSK,
+                 "really cool psk",
+                 NULL);
+    nm_setting_set_secret_flags(old, NM_SETTING_WIRELESS_SECURITY_PSK, data->secret_flags, NULL);
+
+    new = nm_setting_duplicate(old);
+    if (data->remove_secret)
+        g_object_set(new, NM_SETTING_WIRELESS_SECURITY_PSK, NULL, NULL);
+
+    g_assert((!data->remove_secret) == nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_assert((!data->remove_secret) == nm_setting_compare(new, old, NM_SETTING_COMPARE_FLAG_EXACT));
+
+    _test_compare_secrets_check_diff(old,
+                                     new,
+                                     NM_SETTING_COMPARE_FLAG_EXACT,
+                                     !data->remove_secret,
+                                     TRUE);
+    _test_compare_secrets_check_diff(new,
+                                     old,
+                                     NM_SETTING_COMPARE_FLAG_EXACT,
+                                     !data->remove_secret,
+                                     TRUE);
+
+    g_assert(nm_setting_compare(old, new, data->comp_flags));
+    g_assert(nm_setting_compare(new, old, data->comp_flags));
+
+    _test_compare_secrets_check_diff(old, new, data->comp_flags, TRUE, TRUE);
+    _test_compare_secrets_check_diff(new, old, data->comp_flags, TRUE, TRUE);
+
+    /* OK. Try again, but this time not only change the secret, also let the secret flags differ... */
+    if (data->secret_flags != NM_SETTING_SECRET_FLAG_NONE) {
+        nm_setting_set_secret_flags(new,
+                                    NM_SETTING_WIRELESS_SECURITY_PSK,
+                                    NM_SETTING_SECRET_FLAG_NONE,
+                                    NULL);
 
-		_test_compare_secrets_check_diff (old, new, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, FALSE);
-		_test_compare_secrets_check_diff (new, old, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, FALSE);
+        _test_compare_secrets_check_diff(old, new, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, FALSE);
+        _test_compare_secrets_check_diff(new, old, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, FALSE);
 
-		_test_compare_secrets_check_diff (old, new, data->comp_flags, TRUE, FALSE);
-		_test_compare_secrets_check_diff (new, old, data->comp_flags, FALSE, FALSE);
+        _test_compare_secrets_check_diff(old, new, data->comp_flags, TRUE, FALSE);
+        _test_compare_secrets_check_diff(new, old, data->comp_flags, FALSE, FALSE);
 
-		nm_setting_set_secret_flags (new, NM_SETTING_WIRELESS_SECURITY_PSK, data->secret_flags, NULL);
-	}
+        nm_setting_set_secret_flags(new,
+                                    NM_SETTING_WIRELESS_SECURITY_PSK,
+                                    data->secret_flags,
+                                    NULL);
+    }
 
-	conn_old = nmtst_create_minimal_connection ("test-compare-secrets", NULL, NM_SETTING_WIRELESS_SETTING_NAME, NULL);
-	nm_connection_add_setting (conn_old, nm_setting_duplicate (old));
-	conn_new = nm_simple_connection_new_clone (conn_old);
-	nm_connection_add_setting (conn_new, nm_setting_duplicate (new));
+    conn_old = nmtst_create_minimal_connection("test-compare-secrets",
+                                               NULL,
+                                               NM_SETTING_WIRELESS_SETTING_NAME,
+                                               NULL);
+    nm_connection_add_setting(conn_old, nm_setting_duplicate(old));
+    conn_new = nm_simple_connection_new_clone(conn_old);
+    nm_connection_add_setting(conn_new, nm_setting_duplicate(new));
 
-	g_assert ((!data->remove_secret) == nm_connection_compare (conn_old, conn_new, NM_SETTING_COMPARE_FLAG_EXACT));
-	g_assert ((!data->remove_secret) == nm_connection_compare (conn_new, conn_old, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_assert((!data->remove_secret)
+             == nm_connection_compare(conn_old, conn_new, NM_SETTING_COMPARE_FLAG_EXACT));
+    g_assert((!data->remove_secret)
+             == nm_connection_compare(conn_new, conn_old, NM_SETTING_COMPARE_FLAG_EXACT));
 
-	g_assert (nm_connection_compare (conn_old, conn_new, data->comp_flags));
-	g_assert (nm_connection_compare (conn_new, conn_old, data->comp_flags));
+    g_assert(nm_connection_compare(conn_old, conn_new, data->comp_flags));
+    g_assert(nm_connection_compare(conn_new, conn_old, data->comp_flags));
 }
 
 static void
-test_setting_compare_vpn_secrets (gconstpointer test_data)
+test_setting_compare_vpn_secrets(gconstpointer test_data)
 {
-	const TestDataCompareSecrets *data = test_data;
-	gs_unref_object NMSetting *old = NULL, *new = NULL;
-	gboolean success;
+    const TestDataCompareSecrets *data = test_data;
+    gs_unref_object NMSetting *old = NULL, *new = NULL;
+    gboolean                   success;
 
-	/* Make sure that a connection with transient/unsaved secrets compares
-	 * successfully to the same connection without those secrets.
-	 */
+    /* Make sure that a connection with transient/unsaved secrets compares
+     * successfully to the same connection without those secrets.
+     */
 
-	old = nm_setting_vpn_new ();
-	nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "foobarbaz", "really secret password");
-	nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "asdfasdfasdf", "really adfasdfasdfasdf");
-	nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "0123456778", "abcdefghijklmnpqrstuvqxyz");
-	nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "borkbork", "yet another really secret password");
-	nm_setting_set_secret_flags (old, "borkbork", data->secret_flags, NULL);
+    old = nm_setting_vpn_new();
+    nm_setting_vpn_add_secret(NM_SETTING_VPN(old), "foobarbaz", "really secret password");
+    nm_setting_vpn_add_secret(NM_SETTING_VPN(old), "asdfasdfasdf", "really adfasdfasdfasdf");
+    nm_setting_vpn_add_secret(NM_SETTING_VPN(old), "0123456778", "abcdefghijklmnpqrstuvqxyz");
+    nm_setting_vpn_add_secret(NM_SETTING_VPN(old),
+                              "borkbork",
+                              "yet another really secret password");
+    nm_setting_set_secret_flags(old, "borkbork", data->secret_flags, NULL);
 
-	/* Clear "borkbork" from the duplicated setting */
-	new = nm_setting_duplicate (old);
-	if (data->remove_secret) {
-		nm_setting_vpn_remove_secret (NM_SETTING_VPN (new), "borkbork");
+    /* Clear "borkbork" from the duplicated setting */
+    new = nm_setting_duplicate(old);
+    if (data->remove_secret) {
+        nm_setting_vpn_remove_secret(NM_SETTING_VPN(new), "borkbork");
 
-		/* First make sure they are different */
-		success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT);
-		g_assert (success == FALSE);
-	}
-
-	success = nm_setting_compare (old, new, data->comp_flags);
-	g_assert (success);
-}
+        /* First make sure they are different */
+        success = nm_setting_compare(old, new, NM_SETTING_COMPARE_FLAG_EXACT);
+        g_assert(success == FALSE);
+    }
+
+    success = nm_setting_compare(old, new, data->comp_flags);
+    g_assert(success);
+}
+
+static void
+test_hwaddr_aton_ether_normal(void)
+{
+    guint8 buf[100];
+    guint8 expected[ETH_ALEN] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
+
+    g_assert(nm_utils_hwaddr_aton("00:11:22:33:44:55", buf, ETH_ALEN) != NULL);
+    g_assert(memcmp(buf, expected, sizeof(expected)) == 0);
+}
+
+static void
+test_hwaddr_aton_ib_normal(void)
+{
+    guint8      buf[100];
+    const char *source = "00:11:22:33:44:55:66:77:88:99:01:12:23:34:45:56:67:78:89:90";
+    guint8 expected[INFINIBAND_ALEN] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
+                                        0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x90};
+
+    g_assert(nm_utils_hwaddr_aton(source, buf, INFINIBAND_ALEN) != NULL);
+    g_assert(memcmp(buf, expected, sizeof(expected)) == 0);
+}
 
 static void
-test_hwaddr_aton_ether_normal (void)
+test_hwaddr_aton_no_leading_zeros(void)
 {
-	guint8 buf[100];
-	guint8 expected[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
+    guint8 buf[100];
+    guint8 expected[ETH_ALEN] = {0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05};
+
+    g_assert(nm_utils_hwaddr_aton("0:1a:2B:3:44:5", buf, ETH_ALEN) != NULL);
+    g_assert(memcmp(buf, expected, sizeof(expected)) == 0);
+}
+
+static void
+test_hwaddr_aton_malformed(void)
+{
+    guint8 buf[100];
 
-	g_assert (nm_utils_hwaddr_aton ("00:11:22:33:44:55", buf, ETH_ALEN) != NULL);
-	g_assert (memcmp (buf, expected, sizeof (expected)) == 0);
-}
+    g_assert(nm_utils_hwaddr_aton("0:1a:2B:3:a@%%", buf, ETH_ALEN) == NULL);
+}
 
-static void
-test_hwaddr_aton_ib_normal (void)
-{
-	guint8 buf[100];
-	const char *source = "00:11:22:33:44:55:66:77:88:99:01:12:23:34:45:56:67:78:89:90";
-	guint8 expected[INFINIBAND_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
-		0x77, 0x88, 0x99, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89,
-		0x90 };
+static void
+test_hwaddr_equal(void)
+{
+    const char * string                 = "00:1a:2b:03:44:05";
+    const char * upper_string           = "00:1A:2B:03:44:05";
+    const char * bad_string             = "0:1a:2b:3:44:5";
+    const guint8 binary[ETH_ALEN]       = {0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05};
+    const char * other_string           = "1a:2b:03:44:05:00";
+    const guint8 other_binary[ETH_ALEN] = {0x1A, 0x2B, 0x03, 0x44, 0x05, 0x00};
+    const char * long_string            = "00:1a:2b:03:44:05:06:07";
+    const guint8 long_binary[8]         = {0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05, 0x06, 0x07};
+    const char * null_string            = "00:00:00:00:00:00";
+    const guint8 null_binary[ETH_ALEN]  = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
-	g_assert (nm_utils_hwaddr_aton (source, buf, INFINIBAND_ALEN) != NULL);
-	g_assert (memcmp (buf, expected, sizeof (expected)) == 0);
-}
+    g_assert(nm_utils_hwaddr_matches(string, -1, string, -1));
+    g_assert(nm_utils_hwaddr_matches(string, -1, upper_string, -1));
+    g_assert(nm_utils_hwaddr_matches(string, -1, bad_string, -1));
+    g_assert(nm_utils_hwaddr_matches(string, -1, binary, sizeof(binary)));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, other_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, other_binary, sizeof(other_binary)));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, long_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, long_binary, sizeof(long_binary)));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, null_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, null_binary, sizeof(null_binary)));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, NULL, ETH_ALEN));
 
-static void
-test_hwaddr_aton_no_leading_zeros (void)
-{
-	guint8 buf[100];
-	guint8 expected[ETH_ALEN] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05 };
+    g_assert(nm_utils_hwaddr_matches(binary, sizeof(binary), string, -1));
+    g_assert(nm_utils_hwaddr_matches(binary, sizeof(binary), upper_string, -1));
+    g_assert(nm_utils_hwaddr_matches(binary, sizeof(binary), bad_string, -1));
+    g_assert(nm_utils_hwaddr_matches(binary, sizeof(binary), binary, sizeof(binary)));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), other_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), other_binary, sizeof(other_binary)));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), long_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), long_binary, sizeof(long_binary)));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), null_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), null_binary, sizeof(null_binary)));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), NULL, ETH_ALEN));
 
-	g_assert (nm_utils_hwaddr_aton ("0:1a:2B:3:44:5", buf, ETH_ALEN) != NULL);
-	g_assert (memcmp (buf, expected, sizeof (expected)) == 0);
-}
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, upper_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, bad_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, binary, sizeof(binary)));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, other_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, other_binary, sizeof(other_binary)));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, long_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, long_binary, sizeof(long_binary)));
+    g_assert(nm_utils_hwaddr_matches(null_string, -1, null_string, -1));
+    g_assert(nm_utils_hwaddr_matches(null_string, -1, null_binary, sizeof(null_binary)));
+    g_assert(nm_utils_hwaddr_matches(null_string, -1, NULL, ETH_ALEN));
 
-static void
-test_hwaddr_aton_malformed (void)
-{
-	guint8 buf[100];
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), upper_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), bad_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), binary, sizeof(binary)));
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), other_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_binary,
+                                      sizeof(null_binary),
+                                      other_binary,
+                                      sizeof(other_binary)));
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), long_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_binary,
+                                      sizeof(null_binary),
+                                      long_binary,
+                                      sizeof(long_binary)));
+    g_assert(nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), null_string, -1));
+    g_assert(nm_utils_hwaddr_matches(null_binary,
+                                     sizeof(null_binary),
+                                     null_binary,
+                                     sizeof(null_binary)));
+    g_assert(nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), NULL, ETH_ALEN));
 
-	g_assert (nm_utils_hwaddr_aton ("0:1a:2B:3:a@%%", buf, ETH_ALEN) == NULL);
+    g_assert(!nm_utils_hwaddr_matches(NULL, -1, NULL, -1));
+    g_assert(!nm_utils_hwaddr_matches(NULL, -1, string, -1));
+    g_assert(!nm_utils_hwaddr_matches(string, -1, NULL, -1));
+    g_assert(!nm_utils_hwaddr_matches(NULL, -1, null_string, -1));
+    g_assert(!nm_utils_hwaddr_matches(null_string, -1, NULL, -1));
+    g_assert(!nm_utils_hwaddr_matches(NULL, -1, binary, sizeof(binary)));
+    g_assert(!nm_utils_hwaddr_matches(binary, sizeof(binary), NULL, -1));
+    g_assert(!nm_utils_hwaddr_matches(NULL, -1, null_binary, sizeof(null_binary)));
+    g_assert(!nm_utils_hwaddr_matches(null_binary, sizeof(null_binary), NULL, -1));
 }
-
-static void
-test_hwaddr_equal (void)
-{
-	const char *string = "00:1a:2b:03:44:05";
-	const char *upper_string = "00:1A:2B:03:44:05";
-	const char *bad_string = "0:1a:2b:3:44:5";
-	const guint8 binary[ETH_ALEN] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05 };
-	const char *other_string = "1a:2b:03:44:05:00";
-	const guint8 other_binary[ETH_ALEN] = { 0x1A, 0x2B, 0x03, 0x44, 0x05, 0x00 };
-	const char *long_string = "00:1a:2b:03:44:05:06:07";
-	const guint8 long_binary[8] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05, 0x06, 0x07 };
-	const char *null_string = "00:00:00:00:00:00";
-	const guint8 null_binary[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-	g_assert (nm_utils_hwaddr_matches (string, -1, string, -1));
-	g_assert (nm_utils_hwaddr_matches (string, -1, upper_string, -1));
-	g_assert (nm_utils_hwaddr_matches (string, -1, bad_string, -1));
-	g_assert (nm_utils_hwaddr_matches (string, -1, binary, sizeof (binary)));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, other_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, other_binary, sizeof (other_binary)));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, long_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, long_binary, sizeof (long_binary)));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, null_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, null_binary, sizeof (null_binary)));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, NULL, ETH_ALEN));
-
-	g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), string, -1));
-	g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), upper_string, -1));
-	g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), bad_string, -1));
-	g_assert (nm_utils_hwaddr_matches (binary, sizeof (binary), binary, sizeof (binary)));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), other_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), other_binary, sizeof (other_binary)));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), long_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), long_binary, sizeof (long_binary)));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), null_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), null_binary, sizeof (null_binary)));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), NULL, ETH_ALEN));
-
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, upper_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, bad_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, binary, sizeof (binary)));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, other_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, other_binary, sizeof (other_binary)));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, long_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, long_binary, sizeof (long_binary)));
-	g_assert (nm_utils_hwaddr_matches (null_string, -1, null_string, -1));
-	g_assert (nm_utils_hwaddr_matches (null_string, -1, null_binary, sizeof (null_binary)));
-	g_assert (nm_utils_hwaddr_matches (null_string, -1, NULL, ETH_ALEN));
-
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), upper_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), bad_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), binary, sizeof (binary)));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), other_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), other_binary, sizeof (other_binary)));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), long_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), long_binary, sizeof (long_binary)));
-	g_assert (nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), null_string, -1));
-	g_assert (nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), null_binary, sizeof (null_binary)));
-	g_assert (nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), NULL, ETH_ALEN));
-
-	g_assert (!nm_utils_hwaddr_matches (NULL, -1, NULL, -1));
-	g_assert (!nm_utils_hwaddr_matches (NULL, -1, string, -1));
-	g_assert (!nm_utils_hwaddr_matches (string, -1, NULL, -1));
-	g_assert (!nm_utils_hwaddr_matches (NULL, -1, null_string, -1));
-	g_assert (!nm_utils_hwaddr_matches (null_string, -1, NULL, -1));
-	g_assert (!nm_utils_hwaddr_matches (NULL, -1, binary, sizeof (binary)));
-	g_assert (!nm_utils_hwaddr_matches (binary, sizeof (binary), NULL, -1));
-	g_assert (!nm_utils_hwaddr_matches (NULL, -1, null_binary, sizeof (null_binary)));
-	g_assert (!nm_utils_hwaddr_matches (null_binary, sizeof (null_binary), NULL, -1));
-}
-
-static void
-test_hwaddr_canonical (void)
-{
-	const char *string = "00:1A:2B:03:44:05";
-	const char *lower_string = "00:1a:2b:03:44:05";
-	const char *short_string = "0:1a:2b:3:44:5";
-	const char *hyphen_string = "00-1a-2b-03-44-05";
-	const char *invalid_string = "00:1A:2B";
-	char *canonical;
-
-	canonical = nm_utils_hwaddr_canonical (string, ETH_ALEN);
-	g_assert_cmpstr (canonical, ==, string);
-	g_free (canonical);
-
-	canonical = nm_utils_hwaddr_canonical (lower_string, ETH_ALEN);
-	g_assert_cmpstr (canonical, ==, string);
-	g_free (canonical);
-
-	canonical = nm_utils_hwaddr_canonical (short_string, ETH_ALEN);
-	g_assert_cmpstr (canonical, ==, string);
-	g_free (canonical);
-
-	canonical = nm_utils_hwaddr_canonical (hyphen_string, ETH_ALEN);
-	g_assert_cmpstr (canonical, ==, string);
-	g_free (canonical);
-
-	canonical = nm_utils_hwaddr_canonical (invalid_string, ETH_ALEN);
-	g_assert_cmpstr (canonical, ==, NULL);
-
-	canonical = nm_utils_hwaddr_canonical (invalid_string, -1);
-	g_assert_cmpstr (canonical, ==, invalid_string);
-	g_free (canonical);
-}
-
-static void
-test_connection_changed_cb (NMConnection *connection, gboolean *data)
-{
-	*data = TRUE;
+
+static void
+test_hwaddr_canonical(void)
+{
+    const char *string         = "00:1A:2B:03:44:05";
+    const char *lower_string   = "00:1a:2b:03:44:05";
+    const char *short_string   = "0:1a:2b:3:44:5";
+    const char *hyphen_string  = "00-1a-2b-03-44-05";
+    const char *invalid_string = "00:1A:2B";
+    char *      canonical;
+
+    canonical = nm_utils_hwaddr_canonical(string, ETH_ALEN);
+    g_assert_cmpstr(canonical, ==, string);
+    g_free(canonical);
+
+    canonical = nm_utils_hwaddr_canonical(lower_string, ETH_ALEN);
+    g_assert_cmpstr(canonical, ==, string);
+    g_free(canonical);
+
+    canonical = nm_utils_hwaddr_canonical(short_string, ETH_ALEN);
+    g_assert_cmpstr(canonical, ==, string);
+    g_free(canonical);
+
+    canonical = nm_utils_hwaddr_canonical(hyphen_string, ETH_ALEN);
+    g_assert_cmpstr(canonical, ==, string);
+    g_free(canonical);
+
+    canonical = nm_utils_hwaddr_canonical(invalid_string, ETH_ALEN);
+    g_assert_cmpstr(canonical, ==, NULL);
+
+    canonical = nm_utils_hwaddr_canonical(invalid_string, -1);
+    g_assert_cmpstr(canonical, ==, invalid_string);
+    g_free(canonical);
+}
+
+static void
+test_connection_changed_cb(NMConnection *connection, gboolean *data)
+{
+    *data = TRUE;
 }
 
 static guint32
-_netmask_to_prefix (guint32 netmask)
+_netmask_to_prefix(guint32 netmask)
 {
-	guint32 prefix;
-	guint8 v;
-	const guint8 *p = (guint8 *) &netmask;
+    guint32       prefix;
+    guint8        v;
+    const guint8 *p = (guint8 *) &netmask;
 
-	if (p[3]) {
-		prefix = 24;
-		v = p[3];
-	} else if (p[2]) {
-		prefix = 16;
-		v = p[2];
-	} else if (p[1]) {
-		prefix = 8;
-		v = p[1];
-	} else {
-		prefix = 0;
-		v = p[0];
-	}
+    if (p[3]) {
+        prefix = 24;
+        v      = p[3];
+    } else if (p[2]) {
+        prefix = 16;
+        v      = p[2];
+    } else if (p[1]) {
+        prefix = 8;
+        v      = p[1];
+    } else {
+        prefix = 0;
+        v      = p[0];
+    }
 
-	while (v) {
-		prefix++;
-		v <<= 1;
-	}
+    while (v) {
+        prefix++;
+        v <<= 1;
+    }
 
-	g_assert_cmpint (prefix, <=, 32);
+    g_assert_cmpint(prefix, <=, 32);
 
-	/* we re-implemented the netmask-to-prefix code differently. Check
-	 * that they agree. */
-	g_assert_cmpint (prefix, ==, nm_utils_ip4_netmask_to_prefix (netmask));
+    /* we re-implemented the netmask-to-prefix code differently. Check
+     * that they agree. */
+    g_assert_cmpint(prefix, ==, nm_utils_ip4_netmask_to_prefix(netmask));
 
-	return prefix;
+    return prefix;
 }
 
 static void
-test_ip4_prefix_to_netmask (void)
+test_ip4_prefix_to_netmask(void)
 {
-	int i;
+    int i;
 
-	for (i = 0; i<=32; i++) {
-		guint32 netmask = _nm_utils_ip4_prefix_to_netmask (i);
-		int plen = _netmask_to_prefix (netmask);
+    for (i = 0; i <= 32; i++) {
+        guint32 netmask = _nm_utils_ip4_prefix_to_netmask(i);
+        int     plen    = _netmask_to_prefix(netmask);
 
-		g_assert_cmpint (i, ==, plen);
-		{
-			guint32 msk = 0x80000000;
-			guint32 netmask2 = 0;
-			guint32 prefix = i;
-			while (prefix > 0) {
-				netmask2 |= msk;
-				msk >>= 1;
-				prefix--;
-			}
-			g_assert_cmpint (netmask, ==, (guint32) htonl (netmask2));
-		}
-	}
+        g_assert_cmpint(i, ==, plen);
+        {
+            guint32 msk      = 0x80000000;
+            guint32 netmask2 = 0;
+            guint32 prefix   = i;
+            while (prefix > 0) {
+                netmask2 |= msk;
+                msk >>= 1;
+                prefix--;
+            }
+            g_assert_cmpint(netmask, ==, (guint32) htonl(netmask2));
+        }
+    }
 }
 
 static void
-test_ip4_netmask_to_prefix (void)
+test_ip4_netmask_to_prefix(void)
 {
-	int i, j;
+    int i, j;
 
-	GRand *rand = g_rand_new ();
+    GRand *rand = g_rand_new();
 
-	g_rand_set_seed (rand, 1);
+    g_rand_set_seed(rand, 1);
 
-	for (i = 2; i<=32; i++) {
-		guint32 netmask = _nm_utils_ip4_prefix_to_netmask (i);
-		guint32 netmask_lowest_bit = netmask & ~_nm_utils_ip4_prefix_to_netmask (i-1);
+    for (i = 2; i <= 32; i++) {
+        guint32 netmask            = _nm_utils_ip4_prefix_to_netmask(i);
+        guint32 netmask_lowest_bit = netmask & ~_nm_utils_ip4_prefix_to_netmask(i - 1);
 
-		g_assert_cmpint (i, ==, _netmask_to_prefix (netmask));
+        g_assert_cmpint(i, ==, _netmask_to_prefix(netmask));
 
-		for (j = 0; j < 2*i; j++) {
-			guint32 r = g_rand_int (rand);
-			guint32 netmask_holey;
-			guint32 prefix_holey;
+        for (j = 0; j < 2 * i; j++) {
+            guint32 r = g_rand_int(rand);
+            guint32 netmask_holey;
+            guint32 prefix_holey;
 
-			netmask_holey = (netmask & r) | netmask_lowest_bit;
+            netmask_holey = (netmask & r) | netmask_lowest_bit;
 
-			if (netmask_holey == netmask)
-				continue;
+            if (netmask_holey == netmask)
+                continue;
 
-			/* create an invalid netmask with holes and check that the function
-			 * returns the longest prefix. */
-			prefix_holey = _netmask_to_prefix (netmask_holey);
+            /* create an invalid netmask with holes and check that the function
+             * returns the longest prefix. */
+            prefix_holey = _netmask_to_prefix(netmask_holey);
 
-			g_assert_cmpint (i, ==, prefix_holey);
-		}
-	}
+            g_assert_cmpint(i, ==, prefix_holey);
+        }
+    }
 
-	g_rand_free (rand);
+    g_rand_free(rand);
 }
 
 #define ASSERT_CHANGED(statement) \
-G_STMT_START { \
-	changed = FALSE; \
-	statement; \
-	g_assert (changed); \
-} G_STMT_END
+    G_STMT_START                  \
+    {                             \
+        changed = FALSE;          \
+        statement;                \
+        g_assert(changed);        \
+    }                             \
+    G_STMT_END
 
 #define ASSERT_UNCHANGED(statement) \
-G_STMT_START { \
-	changed = FALSE; \
-	statement; \
-	g_assert (!changed); \
-} G_STMT_END
+    G_STMT_START                    \
+    {                               \
+        changed = FALSE;            \
+        statement;                  \
+        g_assert(!changed);         \
+    }                               \
+    G_STMT_END
 
 static void
-test_connection_changed_signal (void)
+test_connection_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
+    NMConnection *connection;
+    gboolean      changed = FALSE;
 
-	connection = new_test_connection ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = new_test_connection();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	/* Add new setting */
-	ASSERT_CHANGED (nm_connection_add_setting (connection, nm_setting_vlan_new ()));
+    /* Add new setting */
+    ASSERT_CHANGED(nm_connection_add_setting(connection, nm_setting_vlan_new()));
 
-	/* Remove existing setting */
-	ASSERT_CHANGED (nm_connection_remove_setting (connection, NM_TYPE_SETTING_VLAN));
+    /* Remove existing setting */
+    ASSERT_CHANGED(nm_connection_remove_setting(connection, NM_TYPE_SETTING_VLAN));
 
-	/* Remove non-existing setting */
-	ASSERT_UNCHANGED (nm_connection_remove_setting (connection, NM_TYPE_SETTING_VLAN));
+    /* Remove non-existing setting */
+    ASSERT_UNCHANGED(nm_connection_remove_setting(connection, NM_TYPE_SETTING_VLAN));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_connection_changed_signal (void)
+test_setting_connection_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingConnection *s_con;
-	gs_free char *uuid = NULL;
+    NMConnection *       connection;
+    gboolean             changed = FALSE;
+    NMSettingConnection *s_con;
+    gs_free char *       uuid = NULL;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_con = (NMSettingConnection *) nm_setting_connection_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_con));
+    s_con = (NMSettingConnection *) nm_setting_connection_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_con));
 
-	ASSERT_CHANGED (g_object_set (s_con, NM_SETTING_CONNECTION_ID, "adfadfasdfaf", NULL));
+    ASSERT_CHANGED(g_object_set(s_con, NM_SETTING_CONNECTION_ID, "adfadfasdfaf", NULL));
 
-	ASSERT_CHANGED (nm_setting_connection_add_permission (s_con, "user", "billsmith", NULL));
-	ASSERT_CHANGED (nm_setting_connection_remove_permission (s_con, 0));
+    ASSERT_CHANGED(nm_setting_connection_add_permission(s_con, "user", "billsmith", NULL));
+    ASSERT_CHANGED(nm_setting_connection_remove_permission(s_con, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (iter != NULL));
-	ASSERT_UNCHANGED (nm_setting_connection_remove_permission (s_con, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx < nm_g_array_len(priv->permissions)));
+    ASSERT_UNCHANGED(nm_setting_connection_remove_permission(s_con, 1));
+    g_test_assert_expected_messages();
 
-	uuid = nm_utils_uuid_generate ();
-	ASSERT_CHANGED (nm_setting_connection_add_secondary (s_con, uuid));
-	ASSERT_CHANGED (nm_setting_connection_remove_secondary (s_con, 0));
+    uuid = nm_utils_uuid_generate();
+    ASSERT_CHANGED(nm_setting_connection_add_secondary(s_con, uuid));
+    ASSERT_CHANGED(nm_setting_connection_remove_secondary(s_con, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_connection_remove_secondary (s_con, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_connection_remove_secondary(s_con, 1));
+    g_test_assert_expected_messages();
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_bond_changed_signal (void)
+test_setting_bond_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingBond *s_bond;
+    NMConnection * connection;
+    gboolean       changed = FALSE;
+    NMSettingBond *s_bond;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_bond = (NMSettingBond *) nm_setting_bond_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_bond));
+    s_bond = (NMSettingBond *) nm_setting_bond_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_bond));
 
-	ASSERT_CHANGED (nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY, "10"));
-	ASSERT_CHANGED (nm_setting_bond_remove_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY));
-	ASSERT_UNCHANGED (nm_setting_bond_remove_option (s_bond, NM_SETTING_BOND_OPTION_UPDELAY));
+    ASSERT_CHANGED(nm_setting_bond_add_option(s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY, "10"));
+    ASSERT_CHANGED(nm_setting_bond_remove_option(s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY));
+    ASSERT_UNCHANGED(nm_setting_bond_remove_option(s_bond, NM_SETTING_BOND_OPTION_UPDELAY));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_ip4_changed_signal (void)
+test_setting_ip4_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingIPConfig *s_ip4;
-	NMIPAddress *addr;
-	NMIPRoute *route;
-	GError *error = NULL;
+    NMConnection *     connection;
+    gboolean           changed = FALSE;
+    NMSettingIPConfig *s_ip4;
+    NMIPAddress *      addr;
+    NMIPRoute *        route;
+    GError *           error = NULL;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_dns (s_ip4, "11.22.0.0"));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_dns (s_ip4, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_dns(s_ip4, "11.22.0.0"));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_dns(s_ip4, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->dns->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns (s_ip4, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns(s_ip4, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_dns (s_ip4, "33.44.0.0");
-	ASSERT_CHANGED (nm_setting_ip_config_clear_dns (s_ip4));
+    nm_setting_ip_config_add_dns(s_ip4, "33.44.0.0");
+    ASSERT_CHANGED(nm_setting_ip_config_clear_dns(s_ip4));
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_dns_search (s_ip4, "foobar.com"));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_dns_search (s_ip4, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_dns_search(s_ip4, "foobar.com"));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_dns_search(s_ip4, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->dns_search->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns_search (s_ip4, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns_search->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns_search(s_ip4, 1));
+    g_test_assert_expected_messages();
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_dns_search (s_ip4, "foobar.com"));
-	ASSERT_CHANGED (nm_setting_ip_config_clear_dns_searches (s_ip4));
+    ASSERT_CHANGED(nm_setting_ip_config_add_dns_search(s_ip4, "foobar.com"));
+    ASSERT_CHANGED(nm_setting_ip_config_clear_dns_searches(s_ip4));
 
-	addr = nm_ip_address_new (AF_INET, "22.33.0.0", 24, &error);
-	g_assert_no_error (error);
-	ASSERT_CHANGED (nm_setting_ip_config_add_address (s_ip4, addr));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_address (s_ip4, 0));
+    addr = nm_ip_address_new(AF_INET, "22.33.0.0", 24, &error);
+    g_assert_no_error(error);
+    ASSERT_CHANGED(nm_setting_ip_config_add_address(s_ip4, addr));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_address(s_ip4, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->addresses->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_address (s_ip4, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->addresses->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_address(s_ip4, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	ASSERT_CHANGED (nm_setting_ip_config_clear_addresses (s_ip4));
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    ASSERT_CHANGED(nm_setting_ip_config_clear_addresses(s_ip4));
 
-	route = nm_ip_route_new (AF_INET, "22.33.0.0", 24, NULL, 0, &error);
-	g_assert_no_error (error);
+    route = nm_ip_route_new(AF_INET, "22.33.0.0", 24, NULL, 0, &error);
+    g_assert_no_error(error);
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_route (s_ip4, route));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_route (s_ip4, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_route(s_ip4, route));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_route(s_ip4, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->routes->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_route (s_ip4, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->routes->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_route(s_ip4, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_route (s_ip4, route);
-	ASSERT_CHANGED (nm_setting_ip_config_clear_routes (s_ip4));
+    nm_setting_ip_config_add_route(s_ip4, route);
+    ASSERT_CHANGED(nm_setting_ip_config_clear_routes(s_ip4));
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_dns_option (s_ip4, "debug"));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_dns_option (s_ip4, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_dns_option(s_ip4, "debug"));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_dns_option(s_ip4, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->dns_options->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns_option (s_ip4, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns_options->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns_option(s_ip4, 1));
+    g_test_assert_expected_messages();
 
-	nm_ip_address_unref (addr);
-	nm_ip_route_unref (route);
-	g_object_unref (connection);
+    nm_ip_address_unref(addr);
+    nm_ip_route_unref(route);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_ip6_changed_signal (void)
+test_setting_ip6_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingIPConfig *s_ip6;
-	NMIPAddress *addr;
-	NMIPRoute *route;
-	GError *error = NULL;
+    NMConnection *     connection;
+    gboolean           changed = FALSE;
+    NMSettingIPConfig *s_ip6;
+    NMIPAddress *      addr;
+    NMIPRoute *        route;
+    GError *           error = NULL;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_ip6));
+    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_dns (s_ip6, "1:2:3::4:5:6"));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_dns (s_ip6, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_dns(s_ip6, "1:2:3::4:5:6"));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_dns(s_ip6, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->dns->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns (s_ip6, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns(s_ip6, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_dns (s_ip6, "1:2:3::4:5:6");
-	ASSERT_CHANGED (nm_setting_ip_config_clear_dns (s_ip6));
+    nm_setting_ip_config_add_dns(s_ip6, "1:2:3::4:5:6");
+    ASSERT_CHANGED(nm_setting_ip_config_clear_dns(s_ip6));
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_dns_search (s_ip6, "foobar.com"));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_dns_search (s_ip6, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_dns_search(s_ip6, "foobar.com"));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_dns_search(s_ip6, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->dns_search->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_dns_search (s_ip6, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->dns_search->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_dns_search(s_ip6, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_dns_search (s_ip6, "foobar.com");
-	ASSERT_CHANGED (nm_setting_ip_config_clear_dns_searches (s_ip6));
+    nm_setting_ip_config_add_dns_search(s_ip6, "foobar.com");
+    ASSERT_CHANGED(nm_setting_ip_config_clear_dns_searches(s_ip6));
 
-	addr = nm_ip_address_new (AF_INET6, "1:2:3::4:5:6", 64, &error);
-	g_assert_no_error (error);
+    addr = nm_ip_address_new(AF_INET6, "1:2:3::4:5:6", 64, &error);
+    g_assert_no_error(error);
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_address (s_ip6, addr));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_address (s_ip6, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_address(s_ip6, addr));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_address(s_ip6, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->addresses->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_address (s_ip6, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->addresses->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_address(s_ip6, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_address (s_ip6, addr);
-	ASSERT_CHANGED (nm_setting_ip_config_clear_addresses (s_ip6));
+    nm_setting_ip_config_add_address(s_ip6, addr);
+    ASSERT_CHANGED(nm_setting_ip_config_clear_addresses(s_ip6));
 
-	route = nm_ip_route_new (AF_INET6, "1:2:3::4:5:6", 128, NULL, 0, &error);
-	g_assert_no_error (error);
+    route = nm_ip_route_new(AF_INET6, "1:2:3::4:5:6", 128, NULL, 0, &error);
+    g_assert_no_error(error);
 
-	ASSERT_CHANGED (nm_setting_ip_config_add_route (s_ip6, route));
-	ASSERT_CHANGED (nm_setting_ip_config_remove_route (s_ip6, 0));
+    ASSERT_CHANGED(nm_setting_ip_config_add_route(s_ip6, route));
+    ASSERT_CHANGED(nm_setting_ip_config_remove_route(s_ip6, 0));
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx >= 0 && idx < priv->routes->len));
-	ASSERT_UNCHANGED (nm_setting_ip_config_remove_route (s_ip6, 1));
-	g_test_assert_expected_messages ();
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx >= 0 && idx < priv->routes->len));
+    ASSERT_UNCHANGED(nm_setting_ip_config_remove_route(s_ip6, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_ip_config_add_route (s_ip6, route);
-	ASSERT_CHANGED (nm_setting_ip_config_clear_routes (s_ip6));
+    nm_setting_ip_config_add_route(s_ip6, route);
+    ASSERT_CHANGED(nm_setting_ip_config_clear_routes(s_ip6));
 
-	nm_ip_address_unref (addr);
-	nm_ip_route_unref (route);
-	g_object_unref (connection);
+    nm_ip_address_unref(addr);
+    nm_ip_route_unref(route);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_vlan_changed_signal (void)
+test_setting_vlan_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingVlan *s_vlan;
+    NMConnection * connection;
+    gboolean       changed = FALSE;
+    NMSettingVlan *s_vlan;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_vlan = (NMSettingVlan *) nm_setting_vlan_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_vlan));
+    s_vlan = (NMSettingVlan *) nm_setting_vlan_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_vlan));
 
-	ASSERT_CHANGED (nm_setting_vlan_add_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1, 3));
-	ASSERT_CHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_INGRESS_MAP, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx < g_slist_length (list)));
-	ASSERT_UNCHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1));
-	g_test_assert_expected_messages ();
-	ASSERT_CHANGED (nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_INGRESS_MAP, "1:3"));
-	ASSERT_CHANGED (nm_setting_vlan_clear_priorities (s_vlan, NM_VLAN_INGRESS_MAP));
+    ASSERT_CHANGED(nm_setting_vlan_add_priority(s_vlan, NM_VLAN_INGRESS_MAP, 1, 3));
+    ASSERT_CHANGED(nm_setting_vlan_remove_priority(s_vlan, NM_VLAN_INGRESS_MAP, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx < g_slist_length(list)));
+    ASSERT_UNCHANGED(nm_setting_vlan_remove_priority(s_vlan, NM_VLAN_INGRESS_MAP, 1));
+    g_test_assert_expected_messages();
+    ASSERT_CHANGED(nm_setting_vlan_add_priority_str(s_vlan, NM_VLAN_INGRESS_MAP, "1:3"));
+    ASSERT_CHANGED(nm_setting_vlan_clear_priorities(s_vlan, NM_VLAN_INGRESS_MAP));
 
-	ASSERT_CHANGED (nm_setting_vlan_add_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1, 3));
-	ASSERT_CHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_EGRESS_MAP, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (idx < g_slist_length (list)));
-	ASSERT_UNCHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1));
-	g_test_assert_expected_messages ();
-	ASSERT_CHANGED (nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_EGRESS_MAP, "1:3"));
-	ASSERT_CHANGED (nm_setting_vlan_clear_priorities (s_vlan, NM_VLAN_EGRESS_MAP));
+    ASSERT_CHANGED(nm_setting_vlan_add_priority(s_vlan, NM_VLAN_EGRESS_MAP, 1, 3));
+    ASSERT_CHANGED(nm_setting_vlan_remove_priority(s_vlan, NM_VLAN_EGRESS_MAP, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(idx < g_slist_length(list)));
+    ASSERT_UNCHANGED(nm_setting_vlan_remove_priority(s_vlan, NM_VLAN_EGRESS_MAP, 1));
+    g_test_assert_expected_messages();
+    ASSERT_CHANGED(nm_setting_vlan_add_priority_str(s_vlan, NM_VLAN_EGRESS_MAP, "1:3"));
+    ASSERT_CHANGED(nm_setting_vlan_clear_priorities(s_vlan, NM_VLAN_EGRESS_MAP));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_vpn_changed_signal (void)
+test_setting_vpn_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingVpn *s_vpn;
+    NMConnection *connection;
+    gboolean      changed = FALSE;
+    NMSettingVpn *s_vpn;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_vpn = (NMSettingVpn *) nm_setting_vpn_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_vpn));
+    s_vpn = (NMSettingVpn *) nm_setting_vpn_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_vpn));
 
-	ASSERT_CHANGED (nm_setting_vpn_add_data_item (s_vpn, "foobar", "baz"));
-	ASSERT_CHANGED (nm_setting_vpn_remove_data_item (s_vpn, "foobar"));
-	ASSERT_UNCHANGED (nm_setting_vpn_remove_data_item (s_vpn, "not added"));
+    ASSERT_CHANGED(nm_setting_vpn_add_data_item(s_vpn, "foobar", "baz"));
+    ASSERT_CHANGED(nm_setting_vpn_remove_data_item(s_vpn, "foobar"));
+    ASSERT_UNCHANGED(nm_setting_vpn_remove_data_item(s_vpn, "not added"));
 
-	ASSERT_CHANGED (nm_setting_vpn_add_secret (s_vpn, "foobar", "baz"));
-	ASSERT_CHANGED (nm_setting_vpn_remove_secret (s_vpn, "foobar"));
-	ASSERT_UNCHANGED (nm_setting_vpn_remove_secret (s_vpn, "not added"));
+    ASSERT_CHANGED(nm_setting_vpn_add_secret(s_vpn, "foobar", "baz"));
+    ASSERT_CHANGED(nm_setting_vpn_remove_secret(s_vpn, "foobar"));
+    ASSERT_UNCHANGED(nm_setting_vpn_remove_secret(s_vpn, "not added"));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_wired_changed_signal (void)
+test_setting_wired_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingWired *s_wired;
+    NMConnection *  connection;
+    gboolean        changed = FALSE;
+    NMSettingWired *s_wired;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_wired = (NMSettingWired *) nm_setting_wired_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_wired));
+    s_wired = (NMSettingWired *) nm_setting_wired_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_wired));
 
-	ASSERT_CHANGED (nm_setting_wired_add_s390_option (s_wired, "portno", "1"));
-	ASSERT_CHANGED (nm_setting_wired_remove_s390_option (s_wired, "portno"));
-	ASSERT_UNCHANGED (nm_setting_wired_remove_s390_option (s_wired, "layer2"));
+    ASSERT_CHANGED(nm_setting_wired_add_s390_option(s_wired, "portno", "1"));
+    ASSERT_CHANGED(nm_setting_wired_remove_s390_option(s_wired, "portno"));
+    ASSERT_UNCHANGED(nm_setting_wired_remove_s390_option(s_wired, "layer2"));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_wireless_changed_signal (void)
+test_setting_wireless_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingWireless *s_wifi;
+    NMConnection *     connection;
+    gboolean           changed = FALSE;
+    NMSettingWireless *s_wifi;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_wifi));
+    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
 
-	ASSERT_CHANGED (nm_setting_wireless_add_seen_bssid (s_wifi, "00:11:22:33:44:55"));
+    ASSERT_CHANGED(nm_setting_wireless_add_seen_bssid(s_wifi, "00:11:22:33:44:55"));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_wireless_security_changed_signal (void)
+test_setting_wireless_security_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSettingWirelessSecurity *s_wsec;
+    NMConnection *             connection;
+    gboolean                   changed = FALSE;
+    NMSettingWirelessSecurity *s_wsec;
 
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
+    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
 
-	/* Protos */
-	ASSERT_CHANGED (nm_setting_wireless_security_add_proto (s_wsec, "wpa"));
-	ASSERT_CHANGED (nm_setting_wireless_security_remove_proto (s_wsec, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_wireless_security_remove_proto (s_wsec, 1));
-	g_test_assert_expected_messages ();
+    /* Protos */
+    ASSERT_CHANGED(nm_setting_wireless_security_add_proto(s_wsec, "wpa"));
+    ASSERT_CHANGED(nm_setting_wireless_security_remove_proto(s_wsec, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_wireless_security_remove_proto(s_wsec, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_wireless_security_add_proto (s_wsec, "wep");
-	ASSERT_CHANGED (nm_setting_wireless_security_clear_protos (s_wsec));
+    nm_setting_wireless_security_add_proto(s_wsec, "wep");
+    ASSERT_CHANGED(nm_setting_wireless_security_clear_protos(s_wsec));
 
-	/* Pairwise ciphers */
-	ASSERT_CHANGED (nm_setting_wireless_security_add_pairwise (s_wsec, "tkip"));
-	ASSERT_CHANGED (nm_setting_wireless_security_remove_pairwise (s_wsec, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_wireless_security_remove_pairwise (s_wsec, 1));
-	g_test_assert_expected_messages ();
+    /* Pairwise ciphers */
+    ASSERT_CHANGED(nm_setting_wireless_security_add_pairwise(s_wsec, "tkip"));
+    ASSERT_CHANGED(nm_setting_wireless_security_remove_pairwise(s_wsec, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_wireless_security_remove_pairwise(s_wsec, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
-	ASSERT_CHANGED (nm_setting_wireless_security_clear_pairwise (s_wsec));
+    nm_setting_wireless_security_add_pairwise(s_wsec, "tkip");
+    ASSERT_CHANGED(nm_setting_wireless_security_clear_pairwise(s_wsec));
 
-	/* Group ciphers */
-	ASSERT_CHANGED (nm_setting_wireless_security_add_group (s_wsec, "ccmp"));
-	ASSERT_CHANGED (nm_setting_wireless_security_remove_group (s_wsec, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_wireless_security_remove_group (s_wsec, 1));
-	g_test_assert_expected_messages ();
+    /* Group ciphers */
+    ASSERT_CHANGED(nm_setting_wireless_security_add_group(s_wsec, "ccmp"));
+    ASSERT_CHANGED(nm_setting_wireless_security_remove_group(s_wsec, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_wireless_security_remove_group(s_wsec, 1));
+    g_test_assert_expected_messages();
 
-	nm_setting_wireless_security_add_group (s_wsec, "tkip");
-	ASSERT_CHANGED (nm_setting_wireless_security_clear_groups (s_wsec));
+    nm_setting_wireless_security_add_group(s_wsec, "tkip");
+    ASSERT_CHANGED(nm_setting_wireless_security_clear_groups(s_wsec));
 
-	/* WEP key secret flags */
-	ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key0", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
-	ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key1", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
-	ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key2", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
-	ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key3", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL)));
+    /* WEP key secret flags */
+    ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec),
+                                                        "wep-key0",
+                                                        NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                                        NULL)));
+    ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec),
+                                                        "wep-key1",
+                                                        NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                                        NULL)));
+    ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec),
+                                                        "wep-key2",
+                                                        NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                                        NULL)));
+    ASSERT_CHANGED(g_assert(nm_setting_set_secret_flags(NM_SETTING(s_wsec),
+                                                        "wep-key3",
+                                                        NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                                        NULL)));
 
-	g_object_unref (connection);
+    g_object_unref(connection);
 }
 
 static void
-test_setting_802_1x_changed_signal (void)
+test_setting_802_1x_changed_signal(void)
 {
-	NMConnection *connection;
-	gboolean changed = FALSE;
-	NMSetting8021x *s_8021x;
-
-	connection = nm_simple_connection_new ();
-	g_signal_connect (connection,
-	                  NM_CONNECTION_CHANGED,
-	                  (GCallback) test_connection_changed_cb,
-	                  &changed);
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_8021x));
-
-	/* EAP methods */
-	ASSERT_CHANGED (nm_setting_802_1x_add_eap_method (s_8021x, "tls"));
-	ASSERT_CHANGED (nm_setting_802_1x_remove_eap_method (s_8021x, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_802_1x_remove_eap_method (s_8021x, 1));
-	g_test_assert_expected_messages ();
+    NMConnection *  connection;
+    gboolean        changed = FALSE;
+    NMSetting8021x *s_8021x;
 
-	nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
-	ASSERT_CHANGED (nm_setting_802_1x_clear_eap_methods (s_8021x));
+    connection = nm_simple_connection_new();
+    g_signal_connect(connection,
+                     NM_CONNECTION_CHANGED,
+                     (GCallback) test_connection_changed_cb,
+                     &changed);
 
-	/* alternate subject matches */
-	ASSERT_CHANGED (nm_setting_802_1x_add_altsubject_match (s_8021x, "EMAIL:server@example.com"));
-	ASSERT_CHANGED (nm_setting_802_1x_remove_altsubject_match (s_8021x, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_802_1x_remove_altsubject_match (s_8021x, 1));
-	g_test_assert_expected_messages ();
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
 
-	nm_setting_802_1x_add_altsubject_match (s_8021x, "EMAIL:server@example.com");
-	ASSERT_CHANGED (nm_setting_802_1x_clear_altsubject_matches (s_8021x));
+    /* EAP methods */
+    ASSERT_CHANGED(nm_setting_802_1x_add_eap_method(s_8021x, "tls"));
+    ASSERT_CHANGED(nm_setting_802_1x_remove_eap_method(s_8021x, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_802_1x_remove_eap_method(s_8021x, 1));
+    g_test_assert_expected_messages();
 
-	/* phase2 alternate subject matches */
-	ASSERT_CHANGED (nm_setting_802_1x_add_phase2_altsubject_match (s_8021x, "EMAIL:server@example.com"));
-	ASSERT_CHANGED (nm_setting_802_1x_remove_phase2_altsubject_match (s_8021x, 0));
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL));
-	ASSERT_UNCHANGED (nm_setting_802_1x_remove_phase2_altsubject_match (s_8021x, 1));
-	g_test_assert_expected_messages ();
+    nm_setting_802_1x_add_eap_method(s_8021x, "ttls");
+    ASSERT_CHANGED(nm_setting_802_1x_clear_eap_methods(s_8021x));
 
-	nm_setting_802_1x_add_phase2_altsubject_match (s_8021x, "EMAIL:server@example.com");
-	ASSERT_CHANGED (nm_setting_802_1x_clear_phase2_altsubject_matches (s_8021x));
+    /* alternate subject matches */
+    ASSERT_CHANGED(nm_setting_802_1x_add_altsubject_match(s_8021x, "EMAIL:server@example.com"));
+    ASSERT_CHANGED(nm_setting_802_1x_remove_altsubject_match(s_8021x, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_802_1x_remove_altsubject_match(s_8021x, 1));
+    g_test_assert_expected_messages();
 
-	g_object_unref (connection);
-}
+    nm_setting_802_1x_add_altsubject_match(s_8021x, "EMAIL:server@example.com");
+    ASSERT_CHANGED(nm_setting_802_1x_clear_altsubject_matches(s_8021x));
+
+    /* phase2 alternate subject matches */
+    ASSERT_CHANGED(
+        nm_setting_802_1x_add_phase2_altsubject_match(s_8021x, "EMAIL:server@example.com"));
+    ASSERT_CHANGED(nm_setting_802_1x_remove_phase2_altsubject_match(s_8021x, 0));
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(elt != NULL));
+    ASSERT_UNCHANGED(nm_setting_802_1x_remove_phase2_altsubject_match(s_8021x, 1));
+    g_test_assert_expected_messages();
+
+    nm_setting_802_1x_add_phase2_altsubject_match(s_8021x, "EMAIL:server@example.com");
+    ASSERT_CHANGED(nm_setting_802_1x_clear_phase2_altsubject_matches(s_8021x));
+
+    g_object_unref(connection);
+}
+
+static void
+test_setting_old_uuid(void)
+{
+    gs_unref_object NMSetting *setting = NULL;
 
-static void
-test_setting_old_uuid (void)
-{
-	gs_unref_object NMSetting *setting = NULL;
+    /* NetworkManager-0.9.4.0 generated 40-character UUIDs with no dashes,
+     * like this one. Test that we maintain compatibility. */
+    const char *uuid = "f43bec2cdd60e5da381ebb1eb1fa39f3cc52660c";
 
-	/* NetworkManager-0.9.4.0 generated 40-character UUIDs with no dashes,
-	 * like this one. Test that we maintain compatibility. */
-	const char *uuid = "f43bec2cdd60e5da381ebb1eb1fa39f3cc52660c";
+    setting = nm_setting_connection_new();
+    g_object_set(G_OBJECT(setting),
+                 NM_SETTING_CONNECTION_ID,
+                 "uuidtest",
+                 NM_SETTING_CONNECTION_UUID,
+                 uuid,
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_WIRED_SETTING_NAME,
+                 NULL);
 
-	setting = nm_setting_connection_new ();
-	g_object_set (G_OBJECT (setting),
-	              NM_SETTING_CONNECTION_ID, "uuidtest",
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
-	              NULL);
-
-	nmtst_assert_setting_verifies (NM_SETTING (setting));
+    nmtst_assert_setting_verifies(NM_SETTING(setting));
 }
 
 /*****************************************************************************/
 
 static void
-test_connection_normalize_uuid (void)
+test_connection_normalize_uuid(void)
 {
-	gs_unref_object NMConnection *con = NULL;
+    gs_unref_object NMConnection *con = NULL;
 
-	con = nmtst_create_minimal_connection ("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    con = nmtst_create_minimal_connection("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
 
-	nmtst_assert_connection_verifies_and_normalizable (con);
+    nmtst_assert_connection_verifies_and_normalizable(con);
 
-	g_object_set (nm_connection_get_setting_connection (con),
-	              NM_SETTING_CONNECTION_UUID, NULL,
-	              NULL);
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+    g_object_set(nm_connection_get_setting_connection(con), NM_SETTING_CONNECTION_UUID, NULL, NULL);
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_MISSING_PROPERTY);
 }
 
 /*****************************************************************************/
@@ -4927,2585 +5243,3249 @@ test_connection_normalize_uuid (void)
  * Test normalization of interface-name
  */
 static void
-test_connection_normalize_virtual_iface_name (void)
+test_connection_normalize_virtual_iface_name(void)
 {
-	NMConnection *con = NULL;
-	NMSettingConnection *s_con;
-	NMSettingVlan *s_vlan;
-	GVariant *connection_dict, *setting_dict, *var;
-	GError *error = NULL;
-	const char *IFACE_NAME = "iface";
-	const char *IFACE_VIRT = "iface-X";
-
-	con = nmtst_create_minimal_connection ("test1",
-	                                       "22001632-bbb4-4616-b277-363dce3dfb5b",
-	                                       NM_SETTING_VLAN_SETTING_NAME,
-	                                       &s_con);
-
-	nm_connection_add_setting (con,
-	    g_object_new (NM_TYPE_SETTING_IP4_CONFIG,
-	                  NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
-	                  NULL));
+    NMConnection *       con = NULL;
+    NMSettingConnection *s_con;
+    NMSettingVlan *      s_vlan;
+    GVariant *           connection_dict, *setting_dict, *var;
+    GError *             error      = NULL;
+    const char *         IFACE_NAME = "iface";
+    const char *         IFACE_VIRT = "iface-X";
+
+    con = nmtst_create_minimal_connection("test1",
+                                          "22001632-bbb4-4616-b277-363dce3dfb5b",
+                                          NM_SETTING_VLAN_SETTING_NAME,
+                                          &s_con);
+
+    nm_connection_add_setting(con,
+                              g_object_new(NM_TYPE_SETTING_IP4_CONFIG,
+                                           NM_SETTING_IP_CONFIG_METHOD,
+                                           NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+                                           NULL));
 
-	nm_connection_add_setting (con,
-	    g_object_new (NM_TYPE_SETTING_IP6_CONFIG,
-	                  NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
-	                  NULL));
+    nm_connection_add_setting(con,
+                              g_object_new(NM_TYPE_SETTING_IP6_CONFIG,
+                                           NM_SETTING_IP_CONFIG_METHOD,
+                                           NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+                                           NULL));
+
+    s_vlan = nm_connection_get_setting_vlan(con);
 
-	s_vlan = nm_connection_get_setting_vlan (con);
+    g_object_set(G_OBJECT(s_vlan), NM_SETTING_VLAN_PARENT, "eth0", NULL);
+
+    g_object_set(G_OBJECT(s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, IFACE_NAME, NULL);
 
-	g_object_set (G_OBJECT (s_vlan),
-	              NM_SETTING_VLAN_PARENT, "eth0",
-	              NULL);
+    g_assert_cmpstr(nm_connection_get_interface_name(con), ==, IFACE_NAME);
 
-	g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, IFACE_NAME, NULL);
+    connection_dict = nm_connection_to_dbus(con, NM_CONNECTION_SERIALIZE_ALL);
+    g_object_unref(con);
 
-	g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
+    /* Serialized form should include vlan.interface-name as well. */
+    setting_dict = g_variant_lookup_value(connection_dict,
+                                          NM_SETTING_VLAN_SETTING_NAME,
+                                          NM_VARIANT_TYPE_SETTING);
+    g_assert(setting_dict != NULL);
+    var = g_variant_lookup_value(setting_dict, "interface-name", NULL);
+    g_assert(var != NULL);
+    g_assert(g_variant_is_of_type(var, G_VARIANT_TYPE_STRING));
+    g_assert_cmpstr(g_variant_get_string(var, NULL), ==, IFACE_NAME);
 
-	connection_dict = nm_connection_to_dbus (con, NM_CONNECTION_SERIALIZE_ALL);
-	g_object_unref (con);
+    g_variant_unref(setting_dict);
+    g_variant_unref(var);
 
-	/* Serialized form should include vlan.interface-name as well. */
-	setting_dict = g_variant_lookup_value (connection_dict, NM_SETTING_VLAN_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (setting_dict != NULL);
-	var = g_variant_lookup_value (setting_dict, "interface-name", NULL);
-	g_assert (var != NULL);
-	g_assert (g_variant_is_of_type (var, G_VARIANT_TYPE_STRING));
-	g_assert_cmpstr (g_variant_get_string (var, NULL), ==, IFACE_NAME);
+    /* If vlan.interface-name will be ignored. */
+    NMTST_VARIANT_EDITOR(
+        connection_dict,
+        NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_VLAN_SETTING_NAME,
+                                      "interface-name",
+                                      "s",
+                                      ":::this-is-not-a-valid-interface-name:::"););
 
-	g_variant_unref (setting_dict);
-	g_variant_unref (var);
+    con = _connection_new_from_dbus(connection_dict, &error);
+    nmtst_assert_success(con, error);
+    g_assert_cmpstr(nm_connection_get_interface_name(con), ==, IFACE_NAME);
+    g_clear_object(&con);
 
-	/* If vlan.interface-name will be ignored. */
-	NMTST_VARIANT_EDITOR (connection_dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_VLAN_SETTING_NAME,
-	                                                     "interface-name",
-	                                                     "s",
-	                                                     ":::this-is-not-a-valid-interface-name:::");
-	                      );
+    /* If vlan.interface-name is valid, but doesn't match, it will be ignored. */
+    NMTST_VARIANT_EDITOR(connection_dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_VLAN_SETTING_NAME,
+                                                       "interface-name",
+                                                       "s",
+                                                       IFACE_VIRT););
 
-	con = _connection_new_from_dbus (connection_dict, &error);
-	nmtst_assert_success (con, error);
-	g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
-	g_clear_object (&con);
+    con = _connection_new_from_dbus(connection_dict, &error);
+    g_assert_no_error(error);
 
-	/* If vlan.interface-name is valid, but doesn't match, it will be ignored. */
-	NMTST_VARIANT_EDITOR (connection_dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_VLAN_SETTING_NAME,
-	                                                     "interface-name",
-	                                                     "s",
-	                                                     IFACE_VIRT);
-	                      );
+    g_assert_cmpstr(nm_connection_get_interface_name(con), ==, IFACE_NAME);
+    s_con = nm_connection_get_setting_connection(con);
+    g_assert_cmpstr(nm_setting_connection_get_interface_name(s_con), ==, IFACE_NAME);
+    g_object_unref(con);
 
-	con = _connection_new_from_dbus (connection_dict, &error);
-	g_assert_no_error (error);
+    /* But removing connection.interface-name should result in vlan.connection-name
+     * being "promoted".
+     */
+    NMTST_VARIANT_EDITOR(connection_dict,
+                         NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_CONNECTION_SETTING_NAME,
+                                                     NM_SETTING_CONNECTION_INTERFACE_NAME););
 
-	g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME);
-	s_con = nm_connection_get_setting_connection (con);
-	g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, IFACE_NAME);
-	g_object_unref (con);
+    con = _connection_new_from_dbus(connection_dict, &error);
+    g_assert_no_error(error);
 
-	/* But removing connection.interface-name should result in vlan.connection-name
-	 * being "promoted".
-	 */
-	NMTST_VARIANT_EDITOR (connection_dict,
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_CONNECTION_SETTING_NAME,
-	                                                   NM_SETTING_CONNECTION_INTERFACE_NAME);
-	                      );
+    g_assert_cmpstr(nm_connection_get_interface_name(con), ==, IFACE_VIRT);
+    s_con = nm_connection_get_setting_connection(con);
+    g_assert_cmpstr(nm_setting_connection_get_interface_name(s_con), ==, IFACE_VIRT);
+    g_object_unref(con);
 
-	con = _connection_new_from_dbus (connection_dict, &error);
-	g_assert_no_error (error);
-
-	g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_VIRT);
-	s_con = nm_connection_get_setting_connection (con);
-	g_assert_cmpstr (nm_setting_connection_get_interface_name (s_con), ==, IFACE_VIRT);
-	g_object_unref (con);
-
-	g_variant_unref (connection_dict);
+    g_variant_unref(connection_dict);
 }
 
 static void
-_test_connection_normalize_type_normalizable_setting (const char *type,
-                                                      void (*prepare_normalizable_fcn) (NMConnection *con))
+_test_connection_normalize_type_normalizable_setting(
+    const char *type,
+    void (*prepare_normalizable_fcn)(NMConnection *con))
 {
-	NMSettingConnection *s_con;
-	NMSetting *s_base;
-	GType base_type;
-	gs_unref_object NMConnection *con = NULL;
-	gs_free char *id = g_strdup_printf ("%s[%s]", G_STRFUNC, type);
+    NMSettingConnection *s_con;
+    NMSetting *          s_base;
+    GType                base_type;
+    gs_unref_object NMConnection *con = NULL;
+    gs_free char *                id  = g_strdup_printf("%s[%s]", G_STRFUNC, type);
 
-	base_type = nm_setting_lookup_type (type);
-	g_assert (base_type != G_TYPE_INVALID);
-	g_assert (_nm_setting_type_get_base_type_priority (base_type) != NM_SETTING_PRIORITY_INVALID);
+    base_type = nm_setting_lookup_type(type);
+    g_assert(base_type != G_TYPE_INVALID);
+    g_assert(_nm_setting_type_get_base_type_priority(base_type) != NM_SETTING_PRIORITY_INVALID);
 
-	con = nmtst_create_minimal_connection (id, NULL, NULL, &s_con);
+    con = nmtst_create_minimal_connection(id, NULL, NULL, &s_con);
 
-	nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_MISSING_PROPERTY);
 
-	g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
 
-	if (prepare_normalizable_fcn)
-		prepare_normalizable_fcn (con);
+    if (prepare_normalizable_fcn)
+        prepare_normalizable_fcn(con);
 
-	g_assert (!nm_connection_get_setting_by_name (con, type));
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
-	nmtst_connection_normalize (con);
+    g_assert(!nm_connection_get_setting_by_name(con, type));
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_MISSING_SETTING);
+    nmtst_connection_normalize(con);
 
-	s_base = nm_connection_get_setting_by_name (con, type);
-	g_assert (s_base);
-	g_assert (G_OBJECT_TYPE (s_base) == base_type);
+    s_base = nm_connection_get_setting_by_name(con, type);
+    g_assert(s_base);
+    g_assert(G_OBJECT_TYPE(s_base) == base_type);
 }
 
 static void
-_test_connection_normalize_type_unnormalizable_setting (const char *type)
+_test_connection_normalize_type_unnormalizable_setting(const char *type)
 {
-	NMSettingConnection *s_con;
-	GType base_type;
-	gs_unref_object NMConnection *con = NULL;
-	gs_free char *id = g_strdup_printf ("%s[%s]", G_STRFUNC, type);
+    NMSettingConnection *s_con;
+    GType                base_type;
+    gs_unref_object NMConnection *con = NULL;
+    gs_free char *                id  = g_strdup_printf("%s[%s]", G_STRFUNC, type);
 
-	base_type = nm_setting_lookup_type (type);
-	g_assert (base_type != G_TYPE_INVALID);
-	g_assert (_nm_setting_type_get_base_type_priority (base_type) != NM_SETTING_PRIORITY_INVALID);
+    base_type = nm_setting_lookup_type(type);
+    g_assert(base_type != G_TYPE_INVALID);
+    g_assert(_nm_setting_type_get_base_type_priority(base_type) != NM_SETTING_PRIORITY_INVALID);
 
-	con = nmtst_create_minimal_connection (id, NULL, NULL, &s_con);
+    con = nmtst_create_minimal_connection(id, NULL, NULL, &s_con);
 
-	nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_MISSING_PROPERTY);
 
-	g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_TYPE, type, NULL);
 
-	nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_MISSING_SETTING);
 }
 
 static void
-_test_connection_normalize_type_normalizable_type (const char *type,
-                                                   NMSetting *(*add_setting_fcn) (NMConnection *con))
+_test_connection_normalize_type_normalizable_type(const char *type,
+                                                  NMSetting *(*add_setting_fcn)(NMConnection *con))
 {
-	NMSettingConnection *s_con;
-	NMSetting *s_base;
-	GType base_type;
-	gs_unref_object NMConnection *con = NULL;
-	gs_free char *id = g_strdup_printf ("%s[%s]", G_STRFUNC, type);
+    NMSettingConnection *s_con;
+    NMSetting *          s_base;
+    GType                base_type;
+    gs_unref_object NMConnection *con = NULL;
+    gs_free char *                id  = g_strdup_printf("%s[%s]", G_STRFUNC, type);
 
-	base_type = nm_setting_lookup_type (type);
-	g_assert (base_type != G_TYPE_INVALID);
-	g_assert (_nm_setting_type_get_base_type_priority (base_type) != NM_SETTING_PRIORITY_INVALID);
+    base_type = nm_setting_lookup_type(type);
+    g_assert(base_type != G_TYPE_INVALID);
+    g_assert(_nm_setting_type_get_base_type_priority(base_type) != NM_SETTING_PRIORITY_INVALID);
 
-	con = nmtst_create_minimal_connection (id, NULL, NULL, &s_con);
+    con = nmtst_create_minimal_connection(id, NULL, NULL, &s_con);
 
-	nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_MISSING_PROPERTY);
 
-	if (add_setting_fcn)
-		s_base = add_setting_fcn (con);
-	else {
-		s_base = NM_SETTING (g_object_new (base_type, NULL));
-		nm_connection_add_setting (con, s_base);
-	}
+    if (add_setting_fcn)
+        s_base = add_setting_fcn(con);
+    else {
+        s_base = NM_SETTING(g_object_new(base_type, NULL));
+        nm_connection_add_setting(con, s_base);
+    }
 
-	g_assert (!nm_setting_connection_get_connection_type (s_con));
-	g_assert (nm_connection_get_setting_by_name (con, type) == s_base);
+    g_assert(!nm_setting_connection_get_connection_type(s_con));
+    g_assert(nm_connection_get_setting_by_name(con, type) == s_base);
 
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-	nmtst_connection_normalize (con);
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_MISSING_PROPERTY);
+    nmtst_connection_normalize(con);
 
-	g_assert_cmpstr (nm_connection_get_connection_type (con), ==, type);
-	g_assert (nm_connection_get_setting_by_name (con, type) == s_base);
+    g_assert_cmpstr(nm_connection_get_connection_type(con), ==, type);
+    g_assert(nm_connection_get_setting_by_name(con, type) == s_base);
 }
 
 static NMSetting *
-_add_setting_fcn_adsl (NMConnection *con)
+_add_setting_fcn_adsl(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_ADSL,
-	                        NM_SETTING_ADSL_USERNAME, "test-user",
-	                        NM_SETTING_ADSL_PROTOCOL, NM_SETTING_ADSL_PROTOCOL_PPPOA,
-	                        NM_SETTING_ADSL_ENCAPSULATION, NM_SETTING_ADSL_ENCAPSULATION_VCMUX,
-	                        NULL);
+    setting = g_object_new(NM_TYPE_SETTING_ADSL,
+                           NM_SETTING_ADSL_USERNAME,
+                           "test-user",
+                           NM_SETTING_ADSL_PROTOCOL,
+                           NM_SETTING_ADSL_PROTOCOL_PPPOA,
+                           NM_SETTING_ADSL_ENCAPSULATION,
+                           NM_SETTING_ADSL_ENCAPSULATION_VCMUX,
+                           NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_bluetooth (NMConnection *con)
+_add_setting_fcn_bluetooth(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_BLUETOOTH,
-	                        NM_SETTING_BLUETOOTH_BDADDR, "11:22:33:44:55:66",
-	                        NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU,
-	                        NULL);
+    setting = g_object_new(NM_TYPE_SETTING_BLUETOOTH,
+                           NM_SETTING_BLUETOOTH_BDADDR,
+                           "11:22:33:44:55:66",
+                           NM_SETTING_BLUETOOTH_TYPE,
+                           NM_SETTING_BLUETOOTH_TYPE_PANU,
+                           NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_bond (NMConnection *con)
+_add_setting_fcn_bond(NMConnection *con)
 {
-	NMSetting *setting;
-	NMSettingConnection *s_con;
+    NMSetting *          setting;
+    NMSettingConnection *s_con;
 
-	setting = g_object_new (NM_TYPE_SETTING_BOND, NULL);
+    setting = g_object_new(NM_TYPE_SETTING_BOND, NULL);
 
-	nm_connection_add_setting (con, setting);
+    nm_connection_add_setting(con, setting);
 
-	s_con = nm_connection_get_setting_connection (con);
+    s_con = nm_connection_get_setting_connection(con);
 
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "test-bond",
-	              NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "test-bond", NULL);
 
-	return setting;
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_bridge (NMConnection *con)
+_add_setting_fcn_bridge(NMConnection *con)
 {
-	NMSetting *setting;
-	NMSettingConnection *s_con;
+    NMSetting *          setting;
+    NMSettingConnection *s_con;
 
-	setting = g_object_new (NM_TYPE_SETTING_BRIDGE, NULL);
+    setting = g_object_new(NM_TYPE_SETTING_BRIDGE, NULL);
 
-	nm_connection_add_setting (con, setting);
+    nm_connection_add_setting(con, setting);
 
-	s_con = nm_connection_get_setting_connection (con);
+    s_con = nm_connection_get_setting_connection(con);
 
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "test-bridge",
-	              NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "test-bridge", NULL);
 
-	return setting;
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_cdma (NMConnection *con)
+_add_setting_fcn_cdma(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_CDMA,
-	                        NM_SETTING_CDMA_NUMBER, "test-number",
-	                        NULL);
+    setting = g_object_new(NM_TYPE_SETTING_CDMA, NM_SETTING_CDMA_NUMBER, "test-number", NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_infiniband (NMConnection *con)
+_add_setting_fcn_infiniband(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_INFINIBAND,
-	                        NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
-	                        NULL);
+    setting = g_object_new(NM_TYPE_SETTING_INFINIBAND,
+                           NM_SETTING_INFINIBAND_TRANSPORT_MODE,
+                           "connected",
+                           NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_olpc_mesh (NMConnection *con)
+_add_setting_fcn_olpc_mesh(NMConnection *con)
 {
-	NMSetting *setting;
-	const char *ssid_data = "ssid-test";
-	GBytes *ssid;
+    NMSetting * setting;
+    const char *ssid_data = "ssid-test";
+    GBytes *    ssid;
 
-	ssid = g_bytes_new (ssid_data, strlen (ssid_data));
-	setting = g_object_new (NM_TYPE_SETTING_OLPC_MESH,
-	                        NM_SETTING_OLPC_MESH_SSID, ssid,
-	                        NM_SETTING_OLPC_MESH_CHANNEL, 1,
-	                        NULL);
-	g_bytes_unref (ssid);
+    ssid    = g_bytes_new(ssid_data, strlen(ssid_data));
+    setting = g_object_new(NM_TYPE_SETTING_OLPC_MESH,
+                           NM_SETTING_OLPC_MESH_SSID,
+                           ssid,
+                           NM_SETTING_OLPC_MESH_CHANNEL,
+                           1,
+                           NULL);
+    g_bytes_unref(ssid);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_team (NMConnection *con)
+_add_setting_fcn_team(NMConnection *con)
 {
-	NMSetting *setting;
-	NMSettingConnection *s_con;
+    NMSetting *          setting;
+    NMSettingConnection *s_con;
 
-	setting = g_object_new (NM_TYPE_SETTING_TEAM, NULL);
+    setting = g_object_new(NM_TYPE_SETTING_TEAM, NULL);
 
-	nm_connection_add_setting (con, setting);
+    nm_connection_add_setting(con, setting);
 
-	s_con = nm_connection_get_setting_connection (con);
+    s_con = nm_connection_get_setting_connection(con);
 
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "test-team",
-	              NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "test-team", NULL);
 
-	return setting;
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_vlan (NMConnection *con)
+_add_setting_fcn_vlan(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_VLAN,
-	                        NM_SETTING_VLAN_PARENT, "test-parent",
-	                        NULL);
+    setting = g_object_new(NM_TYPE_SETTING_VLAN, NM_SETTING_VLAN_PARENT, "test-parent", NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_vpn (NMConnection *con)
+_add_setting_fcn_vpn(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_VPN,
-	                        NM_SETTING_VPN_SERVICE_TYPE, "test-vpn-service-type",
-	                        NULL);
+    setting = g_object_new(NM_TYPE_SETTING_VPN,
+                           NM_SETTING_VPN_SERVICE_TYPE,
+                           "test-vpn-service-type",
+                           NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_wimax (NMConnection *con)
+_add_setting_fcn_wimax(NMConnection *con)
 {
-	NMSetting *setting;
+    NMSetting *setting;
 
-	setting = g_object_new (NM_TYPE_SETTING_WIMAX,
-	                        NM_SETTING_WIMAX_NETWORK_NAME, "test-network",
-	                        NULL);
+    setting =
+        g_object_new(NM_TYPE_SETTING_WIMAX, NM_SETTING_WIMAX_NETWORK_NAME, "test-network", NULL);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static NMSetting *
-_add_setting_fcn_wireless (NMConnection *con)
+_add_setting_fcn_wireless(NMConnection *con)
 {
-	NMSetting *setting;
-	const char *ssid_data = "ssid-test";
-	GBytes *ssid;
+    NMSetting * setting;
+    const char *ssid_data = "ssid-test";
+    GBytes *    ssid;
 
-	ssid = g_bytes_new (ssid_data, strlen (ssid_data));
-	setting = g_object_new (NM_TYPE_SETTING_WIRELESS,
-	                        NM_SETTING_WIRELESS_SSID, ssid,
-	                        NULL);
-	g_bytes_unref (ssid);
+    ssid    = g_bytes_new(ssid_data, strlen(ssid_data));
+    setting = g_object_new(NM_TYPE_SETTING_WIRELESS, NM_SETTING_WIRELESS_SSID, ssid, NULL);
+    g_bytes_unref(ssid);
 
-	nm_connection_add_setting (con, setting);
-	return setting;
+    nm_connection_add_setting(con, setting);
+    return setting;
 }
 
 static void
-_prepare_normalizable_fcn_vlan (NMConnection *con)
+_prepare_normalizable_fcn_vlan(NMConnection *con)
 {
-	nm_connection_add_setting (con, g_object_new (NM_TYPE_SETTING_WIRED,
-	                                              NM_SETTING_WIRED_MAC_ADDRESS, "11:22:33:44:55:66",
-	                                              NULL));
-}
-
-static void
-test_connection_normalize_type (void)
-{
-	guint i;
-	struct {
-		const char *type;
-		gboolean normalizable;
-		NMSetting *(*add_setting_fcn) (NMConnection *con);
-		void (*prepare_normalizable_fcn) (NMConnection *con);
-	} types[] = {
-		{ NM_SETTING_GENERIC_SETTING_NAME, TRUE },
-		{ NM_SETTING_GSM_SETTING_NAME, TRUE },
-		{ NM_SETTING_WIRED_SETTING_NAME, TRUE },
-		{ NM_SETTING_VLAN_SETTING_NAME, TRUE, _add_setting_fcn_vlan, _prepare_normalizable_fcn_vlan },
-
-		{ NM_SETTING_ADSL_SETTING_NAME, FALSE, _add_setting_fcn_adsl },
-		{ NM_SETTING_BLUETOOTH_SETTING_NAME, FALSE, _add_setting_fcn_bluetooth },
-		{ NM_SETTING_BOND_SETTING_NAME, FALSE, _add_setting_fcn_bond },
-		{ NM_SETTING_BRIDGE_SETTING_NAME, FALSE, _add_setting_fcn_bridge },
-		{ NM_SETTING_CDMA_SETTING_NAME, FALSE, _add_setting_fcn_cdma },
-		{ NM_SETTING_INFINIBAND_SETTING_NAME, FALSE, _add_setting_fcn_infiniband },
-		{ NM_SETTING_OLPC_MESH_SETTING_NAME, FALSE, _add_setting_fcn_olpc_mesh },
-		{ NM_SETTING_TEAM_SETTING_NAME, FALSE, _add_setting_fcn_team },
-		{ NM_SETTING_VLAN_SETTING_NAME, FALSE, _add_setting_fcn_vlan },
-		{ NM_SETTING_VPN_SETTING_NAME, FALSE, _add_setting_fcn_vpn },
-		{ NM_SETTING_WIMAX_SETTING_NAME, FALSE, _add_setting_fcn_wimax },
-		{ NM_SETTING_WIRELESS_SETTING_NAME, FALSE, _add_setting_fcn_wireless },
-		{ 0 },
-	};
-
-	for (i = 0; types[i].type; i++) {
-		const char *type = types[i].type;
-
-		if (types[i].normalizable)
-			_test_connection_normalize_type_normalizable_setting (type, types[i].prepare_normalizable_fcn);
-		else
-			_test_connection_normalize_type_unnormalizable_setting (type);
-		_test_connection_normalize_type_normalizable_type (type, types[i].add_setting_fcn);
-	}
-}
-
-static void
-test_connection_normalize_slave_type_1 (void)
-{
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingConnection *s_con;
-
-	con = nmtst_create_minimal_connection ("test_connection_normalize_slave_type_1",
-	                                       "cc4cd5df-45dc-483e-b291-6b76c2338ecb",
-	                                       NM_SETTING_WIRED_SETTING_NAME, &s_con);
-
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_MASTER, "master0",
-	              NM_SETTING_CONNECTION_SLAVE_TYPE, "invalid-type",
-	              NULL);
-
-	nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (!nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
-
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_SLAVE_TYPE, "bridge",
-	              NULL);
-
-	g_assert (!nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
-	nmtst_connection_normalize (con);
-	g_assert (nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
-	g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
-}
-
-static void
-test_connection_normalize_slave_type_2 (void)
-{
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingConnection *s_con;
-
-	con = nmtst_create_minimal_connection ("test_connection_normalize_slave_type_2",
-	                                       "40bea008-ca72-439a-946b-e65f827656f9",
-	                                       NM_SETTING_WIRED_SETTING_NAME, &s_con);
-
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_MASTER, "master0",
-	              NM_SETTING_CONNECTION_SLAVE_TYPE, "invalid-type",
-	              NULL);
-
-	nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (!nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
-
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_SLAVE_TYPE, NULL,
-	              NULL);
-	nm_connection_add_setting (con, nm_setting_bridge_port_new ());
-
-	g_assert (nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
-	g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NULL);
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-	nmtst_connection_normalize (con);
-	g_assert (nm_connection_get_setting_by_name (con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
-	g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
-}
-
-static void
-test_connection_normalize_infiniband_mtu (void)
-{
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingInfiniband *s_infini;
-	guint mtu_regular = nmtst_rand_select (2044, 2045, 65520);
-
-	con = nmtst_create_minimal_connection ("test_connection_normalize_infiniband_mtu", NULL,
-	                                       NM_SETTING_INFINIBAND_SETTING_NAME, NULL);
-
-	s_infini = nm_connection_get_setting_infiniband (con);
-	g_object_set (s_infini,
-	              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
-	              NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	g_object_set (s_infini,
-	              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
-	              NM_SETTING_INFINIBAND_MTU, (guint) mtu_regular,
-	              NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
-	nmtst_connection_normalize (con);
-	g_assert_cmpint (mtu_regular, ==, nm_setting_infiniband_get_mtu (s_infini));
-
-	g_object_set (s_infini,
-	              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
-	              NM_SETTING_INFINIBAND_MTU, (guint) 65521,
-	              NULL);
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	nmtst_connection_normalize (con);
-	g_assert_cmpint (65520, ==, nm_setting_infiniband_get_mtu (s_infini));
-
-	g_object_set (s_infini,
-	              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
-	              NM_SETTING_INFINIBAND_MTU, (guint) mtu_regular,
-	              NULL);
-	nmtst_assert_connection_verifies_without_normalization (con);
-	g_assert_cmpint (mtu_regular, ==, nm_setting_infiniband_get_mtu (s_infini));
-
-	g_object_set (s_infini,
-	              NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
-	              NM_SETTING_INFINIBAND_MTU, (guint) 65521,
-	              NULL);
-	nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	nmtst_connection_normalize (con);
-	g_assert_cmpint (65520, ==, nm_setting_infiniband_get_mtu (s_infini));
+    nm_connection_add_setting(con,
+                              g_object_new(NM_TYPE_SETTING_WIRED,
+                                           NM_SETTING_WIRED_MAC_ADDRESS,
+                                           "11:22:33:44:55:66",
+                                           NULL));
 }
-
+
 static void
-test_connection_normalize_gateway_never_default (void)
+test_connection_normalize_type(void)
 {
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingIPConfig *s_ip4, *s_ip6;
-	NMIPAddress *addr;
-	gs_free_error GError *error = NULL;
-
-	con = nmtst_create_minimal_connection ("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
-	              NULL);
+    guint i;
+    struct {
+        const char *type;
+        gboolean    normalizable;
+        NMSetting *(*add_setting_fcn)(NMConnection *con);
+        void (*prepare_normalizable_fcn)(NMConnection *con);
+    } types[] = {
+        {NM_SETTING_GENERIC_SETTING_NAME, TRUE},
+        {NM_SETTING_GSM_SETTING_NAME, TRUE},
+        {NM_SETTING_WIRED_SETTING_NAME, TRUE},
+        {NM_SETTING_VLAN_SETTING_NAME, TRUE, _add_setting_fcn_vlan, _prepare_normalizable_fcn_vlan},
+
+        {NM_SETTING_ADSL_SETTING_NAME, FALSE, _add_setting_fcn_adsl},
+        {NM_SETTING_BLUETOOTH_SETTING_NAME, FALSE, _add_setting_fcn_bluetooth},
+        {NM_SETTING_BOND_SETTING_NAME, FALSE, _add_setting_fcn_bond},
+        {NM_SETTING_BRIDGE_SETTING_NAME, FALSE, _add_setting_fcn_bridge},
+        {NM_SETTING_CDMA_SETTING_NAME, FALSE, _add_setting_fcn_cdma},
+        {NM_SETTING_INFINIBAND_SETTING_NAME, FALSE, _add_setting_fcn_infiniband},
+        {NM_SETTING_OLPC_MESH_SETTING_NAME, FALSE, _add_setting_fcn_olpc_mesh},
+        {NM_SETTING_TEAM_SETTING_NAME, FALSE, _add_setting_fcn_team},
+        {NM_SETTING_VLAN_SETTING_NAME, FALSE, _add_setting_fcn_vlan},
+        {NM_SETTING_VPN_SETTING_NAME, FALSE, _add_setting_fcn_vpn},
+        {NM_SETTING_WIMAX_SETTING_NAME, FALSE, _add_setting_fcn_wimax},
+        {NM_SETTING_WIRELESS_SETTING_NAME, FALSE, _add_setting_fcn_wireless},
+        {0},
+    };
 
-	addr = nm_ip_address_new (AF_INET, "1.1.1.1", 24, &error);
-	g_assert_no_error (error);
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
+    for (i = 0; types[i].type; i++) {
+        const char *type = types[i].type;
 
-	g_object_set (s_ip4,
-	              NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.254",
-	              NM_SETTING_IP_CONFIG_NEVER_DEFAULT, FALSE,
-	              NULL);
-
-	s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
-	g_object_set (s_ip6,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
-	              NULL);
-
-	nm_connection_add_setting (con, (NMSetting *) s_ip4);
-	nm_connection_add_setting (con, (NMSetting *) s_ip6);
-	nm_connection_add_setting (con, nm_setting_proxy_new ());
-
-	nmtst_assert_connection_verifies_without_normalization (con);
-	g_assert_cmpstr ("1.1.1.254", ==, nm_setting_ip_config_get_gateway (s_ip4));
-
-	/* Now set never-default to TRUE and check that the gateway is
-	 * removed during normalization
-	 * */
-	g_object_set (s_ip4,
-	              NM_SETTING_IP_CONFIG_NEVER_DEFAULT, TRUE,
-	              NULL);
-
-	nmtst_assert_connection_verifies_after_normalization (con,
-	                                                      NM_CONNECTION_ERROR,
-	                                                      NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	nmtst_connection_normalize (con);
-	g_assert_cmpstr (NULL, ==, nm_setting_ip_config_get_gateway (s_ip4));
-}
-
-static void
-test_connection_normalize_may_fail (void)
-{
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingIPConfig *s_ip4, *s_ip6;
-
-	con = nmtst_create_minimal_connection ("test2", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
-	              NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
-	              NULL);
-
-	s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
-	g_object_set (s_ip6,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
-	              NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
-	              NULL);
-
-	nm_connection_add_setting (con, (NMSetting *) s_ip4);
-	nm_connection_add_setting (con, (NMSetting *) s_ip6);
-
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	/* Now set method=disabled/ignore and check that may-fail becomes TRUE
-	 * after normalization
-	 * */
-	g_object_set (s_ip4,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
-	              NULL);
-	g_object_set (s_ip6,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
-	              NULL);
-
-	nmtst_assert_connection_verifies (con);
-	nmtst_connection_normalize (con);
-	g_assert_cmpint (nm_setting_ip_config_get_may_fail (s_ip4), ==, TRUE);
-	g_assert_cmpint (nm_setting_ip_config_get_may_fail (s_ip6), ==, TRUE);
-}
-
-static void
-test_connection_normalize_shared_addresses (void)
-{
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingIPConfig *s_ip4, *s_ip6;
-	NMIPAddress *addr;
-	gs_free_error GError *error = NULL;
-
-	con = nmtst_create_minimal_connection ("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	g_object_set (G_OBJECT (s_ip4),
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_SHARED,
-	              NULL);
-
-	addr = nm_ip_address_new (AF_INET, "1.1.1.1", 24, &error);
-	g_assert_no_error (error);
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-
-	s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
-	g_object_set (s_ip6,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
-	              NULL);
-
-	nm_connection_add_setting (con, (NMSetting *) s_ip4);
-	nm_connection_add_setting (con, (NMSetting *) s_ip6);
-
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	/* Now we add other addresses and check that they are
-	 * removed during normalization
-	 * */
-	addr = nm_ip_address_new (AF_INET, "2.2.2.2", 24, &error);
-	g_assert_no_error (error);
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-
-	addr = nm_ip_address_new (AF_INET, "3.3.3.3", 24, &error);
-	g_assert_no_error (error);
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-
-	nmtst_assert_connection_verifies_after_normalization (con,
-	                                                      NM_CONNECTION_ERROR,
-	                                                      NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	nmtst_connection_normalize (con);
-	g_assert_cmpuint (nm_setting_ip_config_get_num_addresses (s_ip4), ==, 1);
-	addr = nm_setting_ip_config_get_address (s_ip4, 0);
-	g_assert_cmpstr (nm_ip_address_get_address (addr), ==, "1.1.1.1");
-}
-
-static void
-test_connection_normalize_ovs_interface_type_system (gconstpointer test_data)
-{
-	const guint TEST_CASE = GPOINTER_TO_UINT (test_data);
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingConnection *s_con;
-	NMSettingOvsInterface *s_ovs_if;
-
-	con = nmtst_create_minimal_connection ("test_connection_normalize_ovs_interface_type_system",
-	                                       NULL,
-	                                       NM_SETTING_WIRED_SETTING_NAME, &s_con);
-
-	switch (TEST_CASE) {
-	case 1:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
-
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_WIRED_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		s_ovs_if = nm_connection_get_setting_ovs_interface (con);
-		g_assert (s_ovs_if);
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "system");
-		break;
-	case 2:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		s_ovs_if = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_if));
-
-		nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_WIRED_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		g_assert (s_ovs_if == nm_connection_get_setting_ovs_interface (con));
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "system");
-		break;
-	case 3:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		s_ovs_if = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_if));
-
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "system",
-		              NULL);
-		nmtst_assert_connection_verifies_without_normalization (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_WIRED_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		break;
-	case 4:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		s_ovs_if = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_if));
-
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "internal",
-		              NULL);
-		/* the setting doesn't verify, because the interface-type must be "system". */
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-		break;
-	case 5:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NULL);
-
-		s_ovs_if = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_if));
-
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "system",
-		              NULL);
-		nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_WIRED_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		g_assert (s_con == nm_connection_get_setting_connection (con));
-		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME);
-		break;
-	case 6:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
-		              NULL);
-
-		s_ovs_if = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_if));
-
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "system",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-		break;
-	case 7:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
-		              NULL);
-
-		nm_connection_add_setting (con, nm_setting_bridge_port_new ());
-
-		s_ovs_if = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_if));
-
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "system",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-		break;
-	default:
-		g_assert_not_reached ();
-		break;
-	}
-}
-
-static void
-test_connection_normalize_ovs_interface_type_ovs_interface (gconstpointer test_data)
-{
-	const guint TEST_CASE = GPOINTER_TO_UINT (test_data);
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingConnection *s_con;
-	NMSettingOvsInterface *s_ovs_if;
-	NMSettingOvsPatch *s_ovs_patch;
-	NMSettingIP4Config *s_ip4;
-	NMSettingIP6Config *s_ip6;
-
-	con = nmtst_create_minimal_connection ("test_connection_normalize_ovs_interface_type_ovs_interface",
-	                                       NULL,
-	                                       NM_SETTING_OVS_INTERFACE_SETTING_NAME, &s_con);
-	s_ovs_if = nm_connection_get_setting_ovs_interface (con);
-	g_assert (s_ovs_if);
-
-	switch (TEST_CASE) {
-	case 1:
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-		break;
-	case 2:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NULL);
-		nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_IP4_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_IP6_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_PROXY_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		g_assert (s_con == nm_connection_get_setting_connection (con));
-		g_assert (s_ovs_if == nm_connection_get_setting_ovs_interface (con));
-		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME);
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "internal");
-		break;
-	case 3:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_IP4_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_IP6_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_PROXY_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		g_assert (s_con == nm_connection_get_setting_connection (con));
-		g_assert (s_ovs_if == nm_connection_get_setting_ovs_interface (con));
-		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME);
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "internal");
-		break;
-	case 4:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "internal",
-		              NULL);
-		nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_IP4_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_IP6_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_PROXY_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		g_assert (s_con == nm_connection_get_setting_connection (con));
-		g_assert (s_ovs_if == nm_connection_get_setting_ovs_interface (con));
-		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME);
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "internal");
-		break;
-	case 5:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "internal",
-		              NULL);
-		nm_connection_add_setting (con, nm_setting_ip4_config_new ());
-		nm_connection_add_setting (con, nm_setting_ip6_config_new ());
-		nm_connection_add_setting (con, nm_setting_proxy_new ());
-		s_ip4 = NM_SETTING_IP4_CONFIG (nm_connection_get_setting_ip4_config (con));
-		s_ip6 = NM_SETTING_IP6_CONFIG (nm_connection_get_setting_ip6_config (con));
-		g_object_set (s_ip4,
-		              NM_SETTING_IP_CONFIG_METHOD, "auto",
-		              NULL);
-		g_object_set (s_ip6,
-		              NM_SETTING_IP_CONFIG_METHOD, "auto",
-		              NULL);
-		nmtst_assert_connection_verifies_without_normalization (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_IP4_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_IP6_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_PROXY_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		break;
-	case 6:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "internal",
-		              NULL);
-		nmtst_assert_connection_verifies_and_normalizable (con);
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_IP4_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_IP6_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_PROXY_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME);
-		g_assert (s_con == nm_connection_get_setting_connection (con));
-		g_assert (s_ovs_if == nm_connection_get_setting_ovs_interface (con));
-		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME);
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "internal");
-		break;
-	case 7:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "system",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-		break;
-	case 8:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "bogus",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-		break;
-	case 9:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "patch",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_SETTING);
-		break;
-	case 10:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "patch",
-		              NULL);
-		nm_connection_add_setting (con, nm_setting_ovs_patch_new ());
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-		break;
-	case 11:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME, "adsf",
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "patch",
-		              NULL);
-		nm_connection_add_setting (con, nm_setting_ovs_patch_new ());
-		nmtst_assert_connection_unnormalizable (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_MISSING_PROPERTY);
-		break;
-	case 12:
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER, "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME, "adsf",
-		              NULL);
-		g_object_set (s_ovs_if,
-		              NM_SETTING_OVS_INTERFACE_TYPE, "patch",
-		              NULL);
-		s_ovs_patch = NM_SETTING_OVS_PATCH (nm_setting_ovs_patch_new ());
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_patch));
-		g_object_set (s_ovs_patch,
-		              NM_SETTING_OVS_PATCH_PEER, "1.2.3.4",
-		              NULL);
-		nmtst_assert_connection_verifies_and_normalizable (con);
-		nmtst_connection_normalize (con);
-		nmtst_assert_connection_has_settings (con, NM_SETTING_CONNECTION_SETTING_NAME,
-		                                           NM_SETTING_IP4_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_IP6_CONFIG_SETTING_NAME,
-		                                           NM_SETTING_PROXY_SETTING_NAME,
-		                                           NM_SETTING_OVS_INTERFACE_SETTING_NAME,
-		                                           NM_SETTING_OVS_PATCH_SETTING_NAME);
-		g_assert (s_con == nm_connection_get_setting_connection (con));
-		g_assert (s_ovs_if == nm_connection_get_setting_ovs_interface (con));
-		g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_OVS_PORT_SETTING_NAME);
-		g_assert_cmpstr (nm_setting_ovs_interface_get_interface_type (s_ovs_if), ==, "patch");
-		break;
-	default:
-		g_assert_not_reached ();
-	}
-}
-
-static void
-test_setting_ip4_gateway (void)
-{
-	NMConnection *conn;
-	NMSettingIPConfig *s_ip4;
-	NMIPAddress *addr;
-	GVariant *conn_dict, *ip4_dict, *value;
-	GVariantIter iter;
-	GVariant *addr_var;
-	guint32 addr_vals_0[] = { htonl (0xc0a8010a), 0x00000018, htonl (0x00000000) };
-	guint32 addr_vals_1[] = { htonl (0xc0a8010b), 0x00000018, htonl (0xc0a80101) };
-	GVariantBuilder addrs_builder;
-	GError *error = NULL;
-
-	nmtst_assert_ip4_address (addr_vals_0[0], "192.168.1.10");
-
-	/* When serializing on the daemon side, ipv4.gateway is copied to the first
-	 * entry of ipv4.addresses
-	 */
-	conn = nmtst_create_minimal_connection ("test_setting_ip4_gateway", NULL,
-	                                        NM_SETTING_WIRED_SETTING_NAME, NULL);
-	s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
-	g_object_set (s_ip4,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
-	              NM_SETTING_IP_CONFIG_GATEWAY, "192.168.1.1",
-	              NULL);
-	nm_connection_add_setting (conn, NM_SETTING (s_ip4));
-
-	addr = nm_ip_address_new (AF_INET, "192.168.1.10", 24, &error);
-	g_assert_no_error (error);
-	nm_setting_ip_config_add_address (s_ip4, addr);
-	nm_ip_address_unref (addr);
-
-	_nm_utils_is_manager_process = TRUE;
-	conn_dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-	_nm_utils_is_manager_process = FALSE;
-	g_object_unref (conn);
-
-	ip4_dict = g_variant_lookup_value (conn_dict, NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (ip4_dict != NULL);
-
-	value = g_variant_lookup_value (ip4_dict, NM_SETTING_IP_CONFIG_GATEWAY, G_VARIANT_TYPE_STRING);
-	g_assert (value != NULL);
-	g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "192.168.1.1");
-	g_variant_unref (value);
-
-	value = g_variant_lookup_value (ip4_dict, NM_SETTING_IP_CONFIG_ADDRESSES, G_VARIANT_TYPE ("aau"));
-	g_assert (value != NULL);
-
-	g_variant_iter_init (&iter, value);
-	while (g_variant_iter_next (&iter, "@au", &addr_var)) {
-		const guint32 *addr_array;
-		gsize length;
-
-		addr_array = g_variant_get_fixed_array (addr_var, &length, sizeof (guint32));
-		g_assert_cmpint (length, ==, 3);
-		nmtst_assert_ip4_address (addr_array[2], "192.168.1.1");
-		g_variant_unref (addr_var);
-	}
-	g_variant_unref (value);
-
-	g_variant_unref (ip4_dict);
-
-	/* When deserializing an old-style connection, the first non-0 gateway in
-	 * ipv4.addresses is copied to :gateway.
-	 */
-	NMTST_VARIANT_EDITOR (conn_dict,
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
-	                                                   NM_SETTING_IP_CONFIG_GATEWAY);
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
-	                                                   "address-data");
-	                      );
-
-	conn = _connection_new_from_dbus (conn_dict, &error);
-	g_assert_no_error (error);
-
-	s_ip4 = (NMSettingIPConfig *) nm_connection_get_setting_ip4_config (conn);
-	g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.1");
-
-	g_object_unref (conn);
-
-	/* Try again with the gateway in the second address. */
-	g_variant_builder_init (&addrs_builder, G_VARIANT_TYPE ("aau"));
-	g_variant_builder_add (&addrs_builder, "@au",
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-	                                                  addr_vals_0, 3, 4));
-	g_variant_builder_add (&addrs_builder, "@au",
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
-	                                                  addr_vals_1, 3, 4));
-
-	NMTST_VARIANT_EDITOR (conn_dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP4_CONFIG_SETTING_NAME,
-	                                                     "addresses", "aau", &addrs_builder);
-	                      );
-
-	conn = _connection_new_from_dbus (conn_dict, &error);
-	g_assert_no_error (error);
-	g_variant_unref (conn_dict);
-
-	s_ip4 = (NMSettingIPConfig *) nm_connection_get_setting_ip4_config (conn);
-	g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip4), ==, "192.168.1.1");
-
-	g_object_unref (conn);
-}
-
-static void
-test_setting_ip6_gateway (void)
-{
-	NMConnection *conn;
-	NMSettingIPConfig *s_ip6;
-	NMIPAddress *addr;
-	GVariant *conn_dict, *ip6_dict, *value;
-	GVariantIter iter;
-	GVariant *gateway_var;
-	GVariantBuilder addrs_builder;
-	guint8 addr_bytes_0[] = { 0xab, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a };
-	guint8 addr_bytes_1[] = { 0xab, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b };
-	guint8 gateway_bytes_1[] = { 0xab, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
-	GError *error = NULL;
-
-	/* When serializing on the daemon side, ipv6.gateway is copied to the first
-	 * entry of ipv6.addresses
-	 */
-	conn = nmtst_create_minimal_connection ("test_setting_ip6_gateway", NULL,
-	                                        NM_SETTING_WIRED_SETTING_NAME, NULL);
-	s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
-	g_object_set (s_ip6,
-	              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
-	              NM_SETTING_IP_CONFIG_GATEWAY, "abcd::1",
-	              NULL);
-	nm_connection_add_setting (conn, NM_SETTING (s_ip6));
-
-	addr = nm_ip_address_new (AF_INET6, "abcd::10", 64, &error);
-	g_assert_no_error (error);
-	nm_setting_ip_config_add_address (s_ip6, addr);
-	nm_ip_address_unref (addr);
-
-	_nm_utils_is_manager_process = TRUE;
-	conn_dict = nm_connection_to_dbus (conn, NM_CONNECTION_SERIALIZE_ALL);
-	_nm_utils_is_manager_process = FALSE;
-	g_object_unref (conn);
-
-	ip6_dict = g_variant_lookup_value (conn_dict, NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_VARIANT_TYPE_SETTING);
-	g_assert (ip6_dict != NULL);
-
-	value = g_variant_lookup_value (ip6_dict, NM_SETTING_IP_CONFIG_GATEWAY, G_VARIANT_TYPE_STRING);
-	g_assert (value != NULL);
-	g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "abcd::1");
-	g_variant_unref (value);
-
-	value = g_variant_lookup_value (ip6_dict, NM_SETTING_IP_CONFIG_ADDRESSES, G_VARIANT_TYPE ("a(ayuay)"));
-	g_assert (value != NULL);
-
-	g_variant_iter_init (&iter, value);
-	while (g_variant_iter_next (&iter, "(@ayu@ay)", NULL, NULL, &gateway_var)) {
-		const guint8 *gateway_bytes;
-		gsize length;
-
-		gateway_bytes = g_variant_get_fixed_array (gateway_var, &length, 1);
-		g_assert_cmpint (length, ==, 16);
-		nmtst_assert_ip6_address ((struct in6_addr *) gateway_bytes, "abcd::1");
-		g_variant_unref (gateway_var);
-	}
-	g_variant_unref (value);
-
-	g_variant_unref (ip6_dict);
-
-	/* When deserializing an old-style connection, the first non-0 gateway in
-	 * ipv6.addresses is copied to :gateway.
-	 */
-	NMTST_VARIANT_EDITOR (conn_dict,
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                                                   NM_SETTING_IP_CONFIG_GATEWAY);
-	                      NMTST_VARIANT_DROP_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                                                   "address-data");
-	                      );
-
-	conn = _connection_new_from_dbus (conn_dict, &error);
-	g_assert_no_error (error);
-
-	s_ip6 = (NMSettingIPConfig *) nm_connection_get_setting_ip6_config (conn);
-	g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip6), ==, "abcd::1");
-
-	g_object_unref (conn);
-
-	/* Try again with the gateway in the second address. */
-	g_variant_builder_init (&addrs_builder, G_VARIANT_TYPE ("a(ayuay)"));
-	g_variant_builder_add (&addrs_builder, "(@ayu@ay)",
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                  addr_bytes_0, 16, 1),
-	                       64,
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                  &in6addr_any, 16, 1));
-	g_variant_builder_add (&addrs_builder, "(@ayu@ay)",
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                  addr_bytes_1, 16, 1),
-	                       64,
-	                       g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
-	                                                  gateway_bytes_1, 16, 1));
-
-	NMTST_VARIANT_EDITOR (conn_dict,
-	                      NMTST_VARIANT_CHANGE_PROPERTY (NM_SETTING_IP6_CONFIG_SETTING_NAME,
-	                                                     "addresses", "a(ayuay)", &addrs_builder);
-	                      );
-
-	conn = _connection_new_from_dbus (conn_dict, &error);
-	g_assert_no_error (error);
-	g_variant_unref (conn_dict);
-
-	s_ip6 = (NMSettingIPConfig *) nm_connection_get_setting_ip6_config (conn);
-	g_assert_cmpstr (nm_setting_ip_config_get_gateway (s_ip6), ==, "abcd::1");
-
-	g_object_unref (conn);
+        if (types[i].normalizable)
+            _test_connection_normalize_type_normalizable_setting(type,
+                                                                 types[i].prepare_normalizable_fcn);
+        else
+            _test_connection_normalize_type_unnormalizable_setting(type);
+        _test_connection_normalize_type_normalizable_type(type, types[i].add_setting_fcn);
+    }
+}
+
+static void
+test_connection_normalize_slave_type_1(void)
+{
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingConnection *         s_con;
+
+    con = nmtst_create_minimal_connection("test_connection_normalize_slave_type_1",
+                                          "cc4cd5df-45dc-483e-b291-6b76c2338ecb",
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          &s_con);
+
+    g_object_set(s_con,
+                 NM_SETTING_CONNECTION_MASTER,
+                 "master0",
+                 NM_SETTING_CONNECTION_SLAVE_TYPE,
+                 "invalid-type",
+                 NULL);
+
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(!nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+
+    g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, "bridge", NULL);
+
+    g_assert(!nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_MISSING_SETTING);
+    nmtst_connection_normalize(con);
+    g_assert(nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+    g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                    ==,
+                    NM_SETTING_BRIDGE_SETTING_NAME);
+}
+
+static void
+test_connection_normalize_slave_type_2(void)
+{
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingConnection *         s_con;
+
+    con = nmtst_create_minimal_connection("test_connection_normalize_slave_type_2",
+                                          "40bea008-ca72-439a-946b-e65f827656f9",
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          &s_con);
+
+    g_object_set(s_con,
+                 NM_SETTING_CONNECTION_MASTER,
+                 "master0",
+                 NM_SETTING_CONNECTION_SLAVE_TYPE,
+                 "invalid-type",
+                 NULL);
+
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(!nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+
+    g_object_set(s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NULL, NULL);
+    nm_connection_add_setting(con, nm_setting_bridge_port_new());
+
+    g_assert(nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+    g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NULL);
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_MISSING_PROPERTY);
+    nmtst_connection_normalize(con);
+    g_assert(nm_connection_get_setting_by_name(con, NM_SETTING_BRIDGE_PORT_SETTING_NAME));
+    g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                    ==,
+                    NM_SETTING_BRIDGE_SETTING_NAME);
+}
+
+static void
+test_connection_normalize_infiniband_mtu(void)
+{
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingInfiniband *         s_infini;
+    guint                         mtu_regular = nmtst_rand_select(2044, 2045, 65520);
+
+    con = nmtst_create_minimal_connection("test_connection_normalize_infiniband_mtu",
+                                          NULL,
+                                          NM_SETTING_INFINIBAND_SETTING_NAME,
+                                          NULL);
+
+    s_infini = nm_connection_get_setting_infiniband(con);
+    g_object_set(s_infini, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected", NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    g_object_set(s_infini,
+                 NM_SETTING_INFINIBAND_TRANSPORT_MODE,
+                 "datagram",
+                 NM_SETTING_INFINIBAND_MTU,
+                 (guint) mtu_regular,
+                 NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+    nmtst_connection_normalize(con);
+    g_assert_cmpint(mtu_regular, ==, nm_setting_infiniband_get_mtu(s_infini));
+
+    g_object_set(s_infini,
+                 NM_SETTING_INFINIBAND_TRANSPORT_MODE,
+                 "datagram",
+                 NM_SETTING_INFINIBAND_MTU,
+                 (guint) 65521,
+                 NULL);
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    nmtst_connection_normalize(con);
+    g_assert_cmpint(65520, ==, nm_setting_infiniband_get_mtu(s_infini));
+
+    g_object_set(s_infini,
+                 NM_SETTING_INFINIBAND_TRANSPORT_MODE,
+                 "connected",
+                 NM_SETTING_INFINIBAND_MTU,
+                 (guint) mtu_regular,
+                 NULL);
+    nmtst_assert_connection_verifies_without_normalization(con);
+    g_assert_cmpint(mtu_regular, ==, nm_setting_infiniband_get_mtu(s_infini));
+
+    g_object_set(s_infini,
+                 NM_SETTING_INFINIBAND_TRANSPORT_MODE,
+                 "connected",
+                 NM_SETTING_INFINIBAND_MTU,
+                 (guint) 65521,
+                 NULL);
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    nmtst_connection_normalize(con);
+    g_assert_cmpint(65520, ==, nm_setting_infiniband_get_mtu(s_infini));
+}
+
+static void
+test_connection_normalize_gateway_never_default(void)
+{
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingIPConfig *           s_ip4, *s_ip6;
+    NMIPAddress *                 addr;
+    gs_free_error GError *error = NULL;
+
+    con = nmtst_create_minimal_connection("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    g_object_set(G_OBJECT(s_ip4),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+                 NULL);
+
+    addr = nm_ip_address_new(AF_INET, "1.1.1.1", 24, &error);
+    g_assert_no_error(error);
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+
+    g_object_set(s_ip4,
+                 NM_SETTING_IP_CONFIG_GATEWAY,
+                 "1.1.1.254",
+                 NM_SETTING_IP_CONFIG_NEVER_DEFAULT,
+                 FALSE,
+                 NULL);
+
+    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
+    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+
+    nm_connection_add_setting(con, (NMSetting *) s_ip4);
+    nm_connection_add_setting(con, (NMSetting *) s_ip6);
+    nm_connection_add_setting(con, nm_setting_proxy_new());
+
+    nmtst_assert_connection_verifies_without_normalization(con);
+    g_assert_cmpstr("1.1.1.254", ==, nm_setting_ip_config_get_gateway(s_ip4));
+
+    /* Now set never-default to TRUE and check that the gateway is
+     * removed during normalization
+     * */
+    g_object_set(s_ip4, NM_SETTING_IP_CONFIG_NEVER_DEFAULT, TRUE, NULL);
+
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    nmtst_connection_normalize(con);
+    g_assert_cmpstr(NULL, ==, nm_setting_ip_config_get_gateway(s_ip4));
+}
+
+static void
+test_connection_normalize_may_fail(void)
+{
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingIPConfig *           s_ip4, *s_ip6;
+
+    con = nmtst_create_minimal_connection("test2", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    g_object_set(G_OBJECT(s_ip4),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_AUTO,
+                 NM_SETTING_IP_CONFIG_MAY_FAIL,
+                 FALSE,
+                 NULL);
+
+    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
+    g_object_set(s_ip6,
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP6_CONFIG_METHOD_AUTO,
+                 NM_SETTING_IP_CONFIG_MAY_FAIL,
+                 FALSE,
+                 NULL);
+
+    nm_connection_add_setting(con, (NMSetting *) s_ip4);
+    nm_connection_add_setting(con, (NMSetting *) s_ip6);
+
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    /* Now set method=disabled/ignore and check that may-fail becomes TRUE
+     * after normalization
+     * */
+    g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED, NULL);
+    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+
+    nmtst_assert_connection_verifies(con);
+    nmtst_connection_normalize(con);
+    g_assert_cmpint(nm_setting_ip_config_get_may_fail(s_ip4), ==, TRUE);
+    g_assert_cmpint(nm_setting_ip_config_get_may_fail(s_ip6), ==, TRUE);
+}
+
+static void
+test_connection_normalize_shared_addresses(void)
+{
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingIPConfig *           s_ip4, *s_ip6;
+    NMIPAddress *                 addr;
+    gs_free_error GError *error = NULL;
+
+    con = nmtst_create_minimal_connection("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    g_object_set(G_OBJECT(s_ip4),
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_SHARED,
+                 NULL);
+
+    addr = nm_ip_address_new(AF_INET, "1.1.1.1", 24, &error);
+    g_assert_no_error(error);
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+
+    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
+    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
+
+    nm_connection_add_setting(con, (NMSetting *) s_ip4);
+    nm_connection_add_setting(con, (NMSetting *) s_ip6);
+
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    /* Now we add other addresses and check that they are
+     * removed during normalization
+     * */
+    addr = nm_ip_address_new(AF_INET, "2.2.2.2", 24, &error);
+    g_assert_no_error(error);
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+
+    addr = nm_ip_address_new(AF_INET, "3.3.3.3", 24, &error);
+    g_assert_no_error(error);
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+
+    nmtst_assert_connection_verifies_after_normalization(con,
+                                                         NM_CONNECTION_ERROR,
+                                                         NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    nmtst_connection_normalize(con);
+    g_assert_cmpuint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1);
+    addr = nm_setting_ip_config_get_address(s_ip4, 0);
+    g_assert_cmpstr(nm_ip_address_get_address(addr), ==, "1.1.1.1");
+}
+
+static void
+test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
+{
+    const guint     TEST_CASE         = GPOINTER_TO_UINT(test_data);
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingOvsInterface *       s_ovs_if;
+
+    con = nmtst_create_minimal_connection("test_connection_normalize_ovs_interface_type_system",
+                                          NULL,
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          &s_con);
+
+    switch (TEST_CASE) {
+    case 1:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        nmtst_assert_connection_verifies_after_normalization(con,
+                                                             NM_CONNECTION_ERROR,
+                                                             NM_CONNECTION_ERROR_MISSING_SETTING);
+
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_WIRED_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        s_ovs_if = nm_connection_get_setting_ovs_interface(con);
+        g_assert(s_ovs_if);
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "system");
+        break;
+    case 2:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
+
+        nmtst_assert_connection_verifies_after_normalization(con,
+                                                             NM_CONNECTION_ERROR,
+                                                             NM_CONNECTION_ERROR_MISSING_PROPERTY);
+
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_WIRED_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con));
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "system");
+        break;
+    case 3:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
+
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL);
+        nmtst_assert_connection_verifies_without_normalization(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_WIRED_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        break;
+    case 4:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
+
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL);
+        /* the setting doesn't verify, because the interface-type must be "system". */
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+        break;
+    case 5:
+        g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, "master0", NULL);
+
+        s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
+
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL);
+        nmtst_assert_connection_verifies_after_normalization(con,
+                                                             NM_CONNECTION_ERROR,
+                                                             NM_CONNECTION_ERROR_MISSING_PROPERTY);
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_WIRED_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        g_assert(s_con == nm_connection_get_setting_connection(con));
+        g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                        ==,
+                        NM_SETTING_OVS_PORT_SETTING_NAME);
+        break;
+    case 6:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_BRIDGE_SETTING_NAME,
+                     NULL);
+
+        s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
+
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+        break;
+    case 7:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_BRIDGE_SETTING_NAME,
+                     NULL);
+
+        nm_connection_add_setting(con, nm_setting_bridge_port_new());
+
+        s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
+
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+        break;
+    default:
+        g_assert_not_reached();
+        break;
+    }
+}
+
+static void
+test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_data)
+{
+    const guint     TEST_CASE         = GPOINTER_TO_UINT(test_data);
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingOvsInterface *       s_ovs_if;
+    NMSettingOvsPatch *           s_ovs_patch;
+    NMSettingIP4Config *          s_ip4;
+    NMSettingIP6Config *          s_ip6;
+
+    con = nmtst_create_minimal_connection(
+        "test_connection_normalize_ovs_interface_type_ovs_interface",
+        NULL,
+        NM_SETTING_OVS_INTERFACE_SETTING_NAME,
+        &s_con);
+    s_ovs_if = nm_connection_get_setting_ovs_interface(con);
+    g_assert(s_ovs_if);
+
+    switch (TEST_CASE) {
+    case 1:
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+        break;
+    case 2:
+        g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, "master0", NULL);
+        nmtst_assert_connection_verifies_after_normalization(con,
+                                                             NM_CONNECTION_ERROR,
+                                                             NM_CONNECTION_ERROR_MISSING_PROPERTY);
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                             NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                             NM_SETTING_PROXY_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        g_assert(s_con == nm_connection_get_setting_connection(con));
+        g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con));
+        g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                        ==,
+                        NM_SETTING_OVS_PORT_SETTING_NAME);
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal");
+        break;
+    case 3:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        nmtst_assert_connection_verifies_after_normalization(con,
+                                                             NM_CONNECTION_ERROR,
+                                                             NM_CONNECTION_ERROR_MISSING_PROPERTY);
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                             NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                             NM_SETTING_PROXY_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        g_assert(s_con == nm_connection_get_setting_connection(con));
+        g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con));
+        g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                        ==,
+                        NM_SETTING_OVS_PORT_SETTING_NAME);
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal");
+        break;
+    case 4:
+        g_object_set(s_con, NM_SETTING_CONNECTION_MASTER, "master0", NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL);
+        nmtst_assert_connection_verifies_after_normalization(con,
+                                                             NM_CONNECTION_ERROR,
+                                                             NM_CONNECTION_ERROR_MISSING_PROPERTY);
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                             NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                             NM_SETTING_PROXY_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        g_assert(s_con == nm_connection_get_setting_connection(con));
+        g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con));
+        g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                        ==,
+                        NM_SETTING_OVS_PORT_SETTING_NAME);
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal");
+        break;
+    case 5:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL);
+        nm_connection_add_setting(con, nm_setting_ip4_config_new());
+        nm_connection_add_setting(con, nm_setting_ip6_config_new());
+        nm_connection_add_setting(con, nm_setting_proxy_new());
+        s_ip4 = NM_SETTING_IP4_CONFIG(nm_connection_get_setting_ip4_config(con));
+        s_ip6 = NM_SETTING_IP6_CONFIG(nm_connection_get_setting_ip6_config(con));
+        g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, "auto", NULL);
+        g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, "auto", NULL);
+        nmtst_assert_connection_verifies_without_normalization(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                             NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                             NM_SETTING_PROXY_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        break;
+    case 6:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL);
+        nmtst_assert_connection_verifies_and_normalizable(con);
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                             NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                             NM_SETTING_PROXY_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME);
+        g_assert(s_con == nm_connection_get_setting_connection(con));
+        g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con));
+        g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                        ==,
+                        NM_SETTING_OVS_PORT_SETTING_NAME);
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal");
+        break;
+    case 7:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+        break;
+    case 8:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "bogus", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+        break;
+    case 9:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_MISSING_SETTING);
+        break;
+    case 10:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL);
+        nm_connection_add_setting(con, nm_setting_ovs_patch_new());
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_MISSING_PROPERTY);
+        break;
+    case 11:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NM_SETTING_CONNECTION_INTERFACE_NAME,
+                     "adsf",
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL);
+        nm_connection_add_setting(con, nm_setting_ovs_patch_new());
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_MISSING_PROPERTY);
+        break;
+    case 12:
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NM_SETTING_CONNECTION_INTERFACE_NAME,
+                     "adsf",
+                     NULL);
+        g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL);
+        s_ovs_patch = NM_SETTING_OVS_PATCH(nm_setting_ovs_patch_new());
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_patch));
+        g_object_set(s_ovs_patch, NM_SETTING_OVS_PATCH_PEER, "1.2.3.4", NULL);
+        nmtst_assert_connection_verifies_and_normalizable(con);
+        nmtst_connection_normalize(con);
+        nmtst_assert_connection_has_settings(con,
+                                             NM_SETTING_CONNECTION_SETTING_NAME,
+                                             NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                             NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                             NM_SETTING_PROXY_SETTING_NAME,
+                                             NM_SETTING_OVS_INTERFACE_SETTING_NAME,
+                                             NM_SETTING_OVS_PATCH_SETTING_NAME);
+        g_assert(s_con == nm_connection_get_setting_connection(con));
+        g_assert(s_ovs_if == nm_connection_get_setting_ovs_interface(con));
+        g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
+                        ==,
+                        NM_SETTING_OVS_PORT_SETTING_NAME);
+        g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "patch");
+        break;
+    default:
+        g_assert_not_reached();
+    }
+}
+
+static void
+test_setting_ip4_gateway(void)
+{
+    NMConnection *     conn;
+    NMSettingIPConfig *s_ip4;
+    NMIPAddress *      addr;
+    GVariant *         conn_dict, *ip4_dict, *value;
+    GVariantIter       iter;
+    GVariant *         addr_var;
+    guint32            addr_vals_0[] = {htonl(0xc0a8010a), 0x00000018, htonl(0x00000000)};
+    guint32            addr_vals_1[] = {htonl(0xc0a8010b), 0x00000018, htonl(0xc0a80101)};
+    GVariantBuilder    addrs_builder;
+    GError *           error = NULL;
+
+    nmtst_assert_ip4_address(addr_vals_0[0], "192.168.1.10");
+
+    /* When serializing on the daemon side, ipv4.gateway is copied to the first
+     * entry of ipv4.addresses
+     */
+    conn  = nmtst_create_minimal_connection("test_setting_ip4_gateway",
+                                           NULL,
+                                           NM_SETTING_WIRED_SETTING_NAME,
+                                           NULL);
+    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    g_object_set(s_ip4,
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
+                 NM_SETTING_IP_CONFIG_GATEWAY,
+                 "192.168.1.1",
+                 NULL);
+    nm_connection_add_setting(conn, NM_SETTING(s_ip4));
+
+    addr = nm_ip_address_new(AF_INET, "192.168.1.10", 24, &error);
+    g_assert_no_error(error);
+    nm_setting_ip_config_add_address(s_ip4, addr);
+    nm_ip_address_unref(addr);
+
+    _nm_utils_is_manager_process = TRUE;
+    conn_dict                    = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+    _nm_utils_is_manager_process = FALSE;
+    g_object_unref(conn);
+
+    ip4_dict = g_variant_lookup_value(conn_dict,
+                                      NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                      NM_VARIANT_TYPE_SETTING);
+    g_assert(ip4_dict != NULL);
+
+    value = g_variant_lookup_value(ip4_dict, NM_SETTING_IP_CONFIG_GATEWAY, G_VARIANT_TYPE_STRING);
+    g_assert(value != NULL);
+    g_assert_cmpstr(g_variant_get_string(value, NULL), ==, "192.168.1.1");
+    g_variant_unref(value);
+
+    value = g_variant_lookup_value(ip4_dict, NM_SETTING_IP_CONFIG_ADDRESSES, G_VARIANT_TYPE("aau"));
+    g_assert(value != NULL);
+
+    g_variant_iter_init(&iter, value);
+    while (g_variant_iter_next(&iter, "@au", &addr_var)) {
+        const guint32 *addr_array;
+        gsize          length;
+
+        addr_array = g_variant_get_fixed_array(addr_var, &length, sizeof(guint32));
+        g_assert_cmpint(length, ==, 3);
+        nmtst_assert_ip4_address(addr_array[2], "192.168.1.1");
+        g_variant_unref(addr_var);
+    }
+    g_variant_unref(value);
+
+    g_variant_unref(ip4_dict);
+
+    /* When deserializing an old-style connection, the first non-0 gateway in
+     * ipv4.addresses is copied to :gateway.
+     */
+    NMTST_VARIANT_EDITOR(
+        conn_dict,
+        NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                    NM_SETTING_IP_CONFIG_GATEWAY);
+        NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_IP4_CONFIG_SETTING_NAME, "address-data"););
+
+    conn = _connection_new_from_dbus(conn_dict, &error);
+    g_assert_no_error(error);
+
+    s_ip4 = (NMSettingIPConfig *) nm_connection_get_setting_ip4_config(conn);
+    g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.168.1.1");
+
+    g_object_unref(conn);
+
+    /* Try again with the gateway in the second address. */
+    g_variant_builder_init(&addrs_builder, G_VARIANT_TYPE("aau"));
+    g_variant_builder_add(&addrs_builder,
+                          "@au",
+                          g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, addr_vals_0, 3, 4));
+    g_variant_builder_add(&addrs_builder,
+                          "@au",
+                          g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, addr_vals_1, 3, 4));
+
+    NMTST_VARIANT_EDITOR(conn_dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_IP4_CONFIG_SETTING_NAME,
+                                                       "addresses",
+                                                       "aau",
+                                                       &addrs_builder););
+
+    conn = _connection_new_from_dbus(conn_dict, &error);
+    g_assert_no_error(error);
+    g_variant_unref(conn_dict);
+
+    s_ip4 = (NMSettingIPConfig *) nm_connection_get_setting_ip4_config(conn);
+    g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.168.1.1");
+
+    g_object_unref(conn);
+}
+
+static void
+test_setting_ip6_gateway(void)
+{
+    NMConnection *     conn;
+    NMSettingIPConfig *s_ip6;
+    NMIPAddress *      addr;
+    GVariant *         conn_dict, *ip6_dict, *value;
+    GVariantIter       iter;
+    GVariant *         gateway_var;
+    GVariantBuilder    addrs_builder;
+    guint8             addr_bytes_0[]    = {0xab,
+                             0xcd,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x0a};
+    guint8             addr_bytes_1[]    = {0xab,
+                             0xcd,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x00,
+                             0x0b};
+    guint8             gateway_bytes_1[] = {0xab,
+                                0xcd,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x00,
+                                0x01};
+    GError *           error             = NULL;
+
+    /* When serializing on the daemon side, ipv6.gateway is copied to the first
+     * entry of ipv6.addresses
+     */
+    conn  = nmtst_create_minimal_connection("test_setting_ip6_gateway",
+                                           NULL,
+                                           NM_SETTING_WIRED_SETTING_NAME,
+                                           NULL);
+    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
+    g_object_set(s_ip6,
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
+                 NM_SETTING_IP_CONFIG_GATEWAY,
+                 "abcd::1",
+                 NULL);
+    nm_connection_add_setting(conn, NM_SETTING(s_ip6));
+
+    addr = nm_ip_address_new(AF_INET6, "abcd::10", 64, &error);
+    g_assert_no_error(error);
+    nm_setting_ip_config_add_address(s_ip6, addr);
+    nm_ip_address_unref(addr);
+
+    _nm_utils_is_manager_process = TRUE;
+    conn_dict                    = nm_connection_to_dbus(conn, NM_CONNECTION_SERIALIZE_ALL);
+    _nm_utils_is_manager_process = FALSE;
+    g_object_unref(conn);
+
+    ip6_dict = g_variant_lookup_value(conn_dict,
+                                      NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                      NM_VARIANT_TYPE_SETTING);
+    g_assert(ip6_dict != NULL);
+
+    value = g_variant_lookup_value(ip6_dict, NM_SETTING_IP_CONFIG_GATEWAY, G_VARIANT_TYPE_STRING);
+    g_assert(value != NULL);
+    g_assert_cmpstr(g_variant_get_string(value, NULL), ==, "abcd::1");
+    g_variant_unref(value);
+
+    value = g_variant_lookup_value(ip6_dict,
+                                   NM_SETTING_IP_CONFIG_ADDRESSES,
+                                   G_VARIANT_TYPE("a(ayuay)"));
+    g_assert(value != NULL);
+
+    g_variant_iter_init(&iter, value);
+    while (g_variant_iter_next(&iter, "(@ayu@ay)", NULL, NULL, &gateway_var)) {
+        const guint8 *gateway_bytes;
+        gsize         length;
+
+        gateway_bytes = g_variant_get_fixed_array(gateway_var, &length, 1);
+        g_assert_cmpint(length, ==, 16);
+        nmtst_assert_ip6_address((struct in6_addr *) gateway_bytes, "abcd::1");
+        g_variant_unref(gateway_var);
+    }
+    g_variant_unref(value);
+
+    g_variant_unref(ip6_dict);
+
+    /* When deserializing an old-style connection, the first non-0 gateway in
+     * ipv6.addresses is copied to :gateway.
+     */
+    NMTST_VARIANT_EDITOR(
+        conn_dict,
+        NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                    NM_SETTING_IP_CONFIG_GATEWAY);
+        NMTST_VARIANT_DROP_PROPERTY(NM_SETTING_IP6_CONFIG_SETTING_NAME, "address-data"););
+
+    conn = _connection_new_from_dbus(conn_dict, &error);
+    g_assert_no_error(error);
+
+    s_ip6 = (NMSettingIPConfig *) nm_connection_get_setting_ip6_config(conn);
+    g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "abcd::1");
+
+    g_object_unref(conn);
+
+    /* Try again with the gateway in the second address. */
+    g_variant_builder_init(&addrs_builder, G_VARIANT_TYPE("a(ayuay)"));
+    g_variant_builder_add(&addrs_builder,
+                          "(@ayu@ay)",
+                          g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, addr_bytes_0, 16, 1),
+                          64,
+                          g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, &in6addr_any, 16, 1));
+    g_variant_builder_add(&addrs_builder,
+                          "(@ayu@ay)",
+                          g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, addr_bytes_1, 16, 1),
+                          64,
+                          g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, gateway_bytes_1, 16, 1));
+
+    NMTST_VARIANT_EDITOR(conn_dict,
+                         NMTST_VARIANT_CHANGE_PROPERTY(NM_SETTING_IP6_CONFIG_SETTING_NAME,
+                                                       "addresses",
+                                                       "a(ayuay)",
+                                                       &addrs_builder););
+
+    conn = _connection_new_from_dbus(conn_dict, &error);
+    g_assert_no_error(error);
+    g_variant_unref(conn_dict);
+
+    s_ip6 = (NMSettingIPConfig *) nm_connection_get_setting_ip6_config(conn);
+    g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "abcd::1");
+
+    g_object_unref(conn);
 }
 
 typedef struct {
-	const char *str;
-	const guint8 expected[20];
-	const guint expected_len;
+    const char * str;
+    const guint8 expected[20];
+    const guint  expected_len;
 } HexItem;
 
 static void
-test_setting_compare_default_strv (void)
+test_setting_compare_default_strv(void)
 {
-	gs_unref_object NMConnection *c1 = NULL, *c2 = NULL;
-	char **strv;
-	NMSettingIPConfig *s_ip2, *s_ip1;
-	gboolean compare;
-	GHashTable *out_settings = NULL;
+    gs_unref_object NMConnection *c1 = NULL, *c2 = NULL;
+    char **                       strv;
+    NMSettingIPConfig *           s_ip2, *s_ip1;
+    gboolean                      compare;
+    GHashTable *                  out_settings = NULL;
 
-	c1 = nmtst_create_minimal_connection ("test_compare_default_strv", NULL,
-	                                      NM_SETTING_WIRED_SETTING_NAME, NULL);
-	nmtst_assert_connection_verifies_and_normalizable (c1);
-	nmtst_connection_normalize (c1);
+    c1 = nmtst_create_minimal_connection("test_compare_default_strv",
+                                         NULL,
+                                         NM_SETTING_WIRED_SETTING_NAME,
+                                         NULL);
+    nmtst_assert_connection_verifies_and_normalizable(c1);
+    nmtst_connection_normalize(c1);
 
-	c2 = nm_simple_connection_new_clone (c1);
-	nmtst_assert_connection_verifies_without_normalization (c2);
+    c2 = nm_simple_connection_new_clone(c1);
+    nmtst_assert_connection_verifies_without_normalization(c2);
 
-	nmtst_assert_connection_equals (c1, FALSE, c2, FALSE);
+    nmtst_assert_connection_equals(c1, FALSE, c2, FALSE);
 
-	s_ip1 = nm_connection_get_setting_ip4_config (c1);
-	s_ip2 = nm_connection_get_setting_ip4_config (c2);
+    s_ip1 = nm_connection_get_setting_ip4_config(c1);
+    s_ip2 = nm_connection_get_setting_ip4_config(c2);
 
-	nm_setting_ip_config_clear_dns_options (s_ip2, FALSE);
-	g_object_get (G_OBJECT (s_ip2), NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL);
-	g_assert (!strv);
-	nmtst_assert_connection_equals (c1, FALSE, c2, FALSE);
+    nm_setting_ip_config_clear_dns_options(s_ip2, FALSE);
+    g_object_get(G_OBJECT(s_ip2), NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL);
+    g_assert(!strv);
+    nmtst_assert_connection_equals(c1, FALSE, c2, FALSE);
 
-	nm_setting_ip_config_clear_dns_options (s_ip2, TRUE);
-	g_object_get (G_OBJECT (s_ip2), NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL);
-	g_assert (strv && !strv[0]);
-	g_strfreev (strv);
+    nm_setting_ip_config_clear_dns_options(s_ip2, TRUE);
+    g_object_get(G_OBJECT(s_ip2), NM_SETTING_IP_CONFIG_DNS_OPTIONS, &strv, NULL);
+    g_assert(strv && !strv[0]);
+    g_strfreev(strv);
 
-	compare = nm_setting_diff ((NMSetting *) s_ip1, (NMSetting *) s_ip2, NM_SETTING_COMPARE_FLAG_EXACT, FALSE, &out_settings);
-	g_assert (!compare);
-	g_assert (out_settings);
-	g_assert (g_hash_table_contains (out_settings, NM_SETTING_IP_CONFIG_DNS_OPTIONS));
-	g_hash_table_unref (out_settings);
-	out_settings = NULL;
+    compare = nm_setting_diff((NMSetting *) s_ip1,
+                              (NMSetting *) s_ip2,
+                              NM_SETTING_COMPARE_FLAG_EXACT,
+                              FALSE,
+                              &out_settings);
+    g_assert(!compare);
+    g_assert(out_settings);
+    g_assert(g_hash_table_contains(out_settings, NM_SETTING_IP_CONFIG_DNS_OPTIONS));
+    g_hash_table_unref(out_settings);
+    out_settings = NULL;
 
-	compare = nm_connection_diff (c1, c2, NM_SETTING_COMPARE_FLAG_EXACT, &out_settings);
-	g_assert (!compare);
-	g_assert (out_settings);
-	g_hash_table_unref (out_settings);
-	out_settings = NULL;
+    compare = nm_connection_diff(c1, c2, NM_SETTING_COMPARE_FLAG_EXACT, &out_settings);
+    g_assert(!compare);
+    g_assert(out_settings);
+    g_hash_table_unref(out_settings);
+    out_settings = NULL;
 }
 
 /*****************************************************************************/
 
 static void
-test_setting_user_data (void)
+test_setting_user_data(void)
 {
-	gs_unref_object NMSettingUser *s_user = NULL;
+    gs_unref_object NMSettingUser *s_user = NULL;
 
-	s_user = NM_SETTING_USER (nm_setting_user_new ());
+    s_user = NM_SETTING_USER(nm_setting_user_new());
 }
 
 /*****************************************************************************/
 
 typedef union {
-	struct sockaddr     sa;
-	struct sockaddr_in  in;
-	struct sockaddr_in6 in6;
+    struct sockaddr     sa;
+    struct sockaddr_in  in;
+    struct sockaddr_in6 in6;
 } SockAddrUnion;
 
 static void
-_sock_addr_endpoint (const char *endpoint,
-                     const char *host,
-                     gint32 port)
-{
-	nm_auto_unref_sockaddrendpoint NMSockAddrEndpoint *ep = NULL;
-	const char *s_endpoint;
-	const char *s_host;
-	gint32 s_port;
-	SockAddrUnion sockaddr = { };
-
-	g_assert (endpoint);
-	g_assert ((!host) == (port == -1));
-	g_assert (port >= -1 && port <= G_MAXUINT16);
-
-	ep = nm_sock_addr_endpoint_new (endpoint);
-	g_assert (ep);
-
-	s_endpoint = nm_sock_addr_endpoint_get_endpoint (ep);
-	s_host = nm_sock_addr_endpoint_get_host (ep);
-	s_port = nm_sock_addr_endpoint_get_port (ep);
-	g_assert_cmpstr (endpoint, ==, s_endpoint);
-	g_assert_cmpstr (host,     ==, s_host);
-	g_assert_cmpint (port,     ==, s_port);
-
-	g_assert (!nm_sock_addr_endpoint_get_fixed_sockaddr (ep, &sockaddr));
-
-	if (endpoint[0] != ' ') {
-		gs_free char *endpoint2 = NULL;
-
-		/* also test with a leading space */
-		endpoint2 = g_strdup_printf (" %s", endpoint);
-		_sock_addr_endpoint (endpoint2, host, port);
-	}
-
-	if (endpoint[0] && endpoint[strlen (endpoint) - 1] != ' ') {
-		gs_free char *endpoint2 = NULL;
-
-		/* also test with a trailing space */
-		endpoint2 = g_strdup_printf ("%s ", endpoint);
-		_sock_addr_endpoint (endpoint2, host, port);
-	}
-}
-
-static void
-_sock_addr_endpoint_fixed (const char *endpoint,
-                           const char *host,
-                           guint16 port,
-                           guint scope_id)
-{
-	nm_auto_unref_sockaddrendpoint NMSockAddrEndpoint *ep = NULL;
-	const char *s_endpoint;
-	const char *s_host;
-	gint32 s_port;
-	int addr_family;
-	NMIPAddr addrbin;
-	SockAddrUnion sockaddr = { };
-
-	g_assert (endpoint);
-	g_assert (host);
-	g_assert (port > 0);
-
-	if (!nm_utils_parse_inaddr_bin (AF_UNSPEC, host, &addr_family, &addrbin))
-		g_assert_not_reached ();
-
-	ep = nm_sock_addr_endpoint_new (endpoint);
-	g_assert (ep);
-
-	s_endpoint = nm_sock_addr_endpoint_get_endpoint (ep);
-	s_host = nm_sock_addr_endpoint_get_host (ep);
-	s_port = nm_sock_addr_endpoint_get_port (ep);
-	g_assert_cmpstr (endpoint, ==, s_endpoint);
-	g_assert_cmpstr (NULL,     !=, s_host);
-	g_assert_cmpint (port,     ==, s_port);
-
-	if (!nm_sock_addr_endpoint_get_fixed_sockaddr (ep, &sockaddr))
-		g_assert_not_reached ();
-
-	g_assert_cmpint (sockaddr.sa.sa_family, ==, addr_family);
-	if (addr_family == AF_INET) {
-		const SockAddrUnion s = {
-			.in = {
-				.sin_family = AF_INET,
-				.sin_addr   = addrbin.addr4_struct,
-				.sin_port   = htons (port),
-			},
-		};
-
-		g_assert_cmpint (sockaddr.in.sin_addr.s_addr, ==, addrbin.addr4);
-		g_assert_cmpint (sockaddr.in.sin_port, ==, htons (port));
-		g_assert (memcmp (&s, &sockaddr, sizeof (s.in)) == 0);
-	} else if (addr_family == AF_INET6) {
-		const SockAddrUnion s = {
-			.in6 = {
-				.sin6_family   = AF_INET6,
-				.sin6_addr     = addrbin.addr6,
-				.sin6_scope_id = scope_id,
-				.sin6_port     = htons (port),
-			},
-		};
-
-		g_assert (memcmp (&sockaddr.in6.sin6_addr, &addrbin, sizeof (addrbin.addr6)) == 0);
-		g_assert_cmpint (sockaddr.in6.sin6_port, ==, htons (port));
-		g_assert_cmpint (sockaddr.in6.sin6_scope_id, ==, scope_id);
-		g_assert_cmpint (sockaddr.in6.sin6_flowinfo, ==, 0);
-		g_assert (memcmp (&s, &sockaddr, sizeof (s.in6)) == 0);
-	} else
-		g_assert_not_reached ();
-}
-
-static void
-test_sock_addr_endpoint (void)
-{
-	_sock_addr_endpoint ("",                NULL, -1);
-	_sock_addr_endpoint (":",               NULL, -1);
-	_sock_addr_endpoint ("a",               NULL, -1);
-	_sock_addr_endpoint ("a:",              NULL, -1);
-	_sock_addr_endpoint (":a",              NULL, -1);
-	_sock_addr_endpoint ("[]:a",            NULL, -1);
-	_sock_addr_endpoint ("[]a",             NULL, -1);
-	_sock_addr_endpoint ("[]:",             NULL, -1);
-	_sock_addr_endpoint ("[a]b",            NULL, -1);
-	_sock_addr_endpoint ("[a:b",            NULL, -1);
-	_sock_addr_endpoint ("[a[:b",           NULL, -1);
-	_sock_addr_endpoint ("a:6",             "a",  6);
-	_sock_addr_endpoint ("a:6",             "a",  6);
-	_sock_addr_endpoint ("[a]:6",           "a",  6);
-	_sock_addr_endpoint ("[a]:6",           "a",  6);
-	_sock_addr_endpoint ("[a]:655",         "a",  655);
-	_sock_addr_endpoint ("[ab]:][6",        NULL, -1);
-	_sock_addr_endpoint ("[ab]:]:[6",       NULL, -1);
-	_sock_addr_endpoint ("[a[]:b",          NULL, -1);
-	_sock_addr_endpoint ("[192.169.6.x]:6", "192.169.6.x", 6);
-	_sock_addr_endpoint ("[192.169.6.x]:0", NULL, -1);
-	_sock_addr_endpoint ("192.169.6.7:0",   NULL, -1);
-
-	_sock_addr_endpoint_fixed ("192.169.6.7:6",   "192.169.6.7", 6, 0);
-	_sock_addr_endpoint_fixed ("[192.169.6.7]:6", "192.169.6.7", 6, 0);
-	_sock_addr_endpoint_fixed ("[a:b::]:6", "a:b::", 6, 0);
-	_sock_addr_endpoint_fixed ("[a:b::%7]:6", "a:b::", 6, 7);
-	_sock_addr_endpoint_fixed ("a:b::1%75:6", "a:b::1", 6, 75);
-	_sock_addr_endpoint_fixed ("a:b::1%0:64", "a:b::1", 64, 0);
+_sock_addr_endpoint(const char *endpoint, const char *host, gint32 port)
+{
+    nm_auto_unref_sockaddrendpoint NMSockAddrEndpoint *ep = NULL;
+    const char *                                       s_endpoint;
+    const char *                                       s_host;
+    gint32                                             s_port;
+    SockAddrUnion                                      sockaddr = {};
+
+    g_assert(endpoint);
+    g_assert((!host) == (port == -1));
+    g_assert(port >= -1 && port <= G_MAXUINT16);
+
+    ep = nm_sock_addr_endpoint_new(endpoint);
+    g_assert(ep);
+
+    s_endpoint = nm_sock_addr_endpoint_get_endpoint(ep);
+    s_host     = nm_sock_addr_endpoint_get_host(ep);
+    s_port     = nm_sock_addr_endpoint_get_port(ep);
+    g_assert_cmpstr(endpoint, ==, s_endpoint);
+    g_assert_cmpstr(host, ==, s_host);
+    g_assert_cmpint(port, ==, s_port);
+
+    g_assert(!nm_sock_addr_endpoint_get_fixed_sockaddr(ep, &sockaddr));
+
+    if (endpoint[0] != ' ') {
+        gs_free char *endpoint2 = NULL;
+
+        /* also test with a leading space */
+        endpoint2 = g_strdup_printf(" %s", endpoint);
+        _sock_addr_endpoint(endpoint2, host, port);
+    }
+
+    if (endpoint[0] && endpoint[strlen(endpoint) - 1] != ' ') {
+        gs_free char *endpoint2 = NULL;
+
+        /* also test with a trailing space */
+        endpoint2 = g_strdup_printf("%s ", endpoint);
+        _sock_addr_endpoint(endpoint2, host, port);
+    }
+}
+
+static void
+_sock_addr_endpoint_fixed(const char *endpoint, const char *host, guint16 port, guint scope_id)
+{
+    nm_auto_unref_sockaddrendpoint NMSockAddrEndpoint *ep = NULL;
+    const char *                                       s_endpoint;
+    const char *                                       s_host;
+    gint32                                             s_port;
+    int                                                addr_family;
+    NMIPAddr                                           addrbin;
+    SockAddrUnion                                      sockaddr = {};
+
+    g_assert(endpoint);
+    g_assert(host);
+    g_assert(port > 0);
+
+    if (!nm_utils_parse_inaddr_bin(AF_UNSPEC, host, &addr_family, &addrbin))
+        g_assert_not_reached();
+
+    ep = nm_sock_addr_endpoint_new(endpoint);
+    g_assert(ep);
+
+    s_endpoint = nm_sock_addr_endpoint_get_endpoint(ep);
+    s_host     = nm_sock_addr_endpoint_get_host(ep);
+    s_port     = nm_sock_addr_endpoint_get_port(ep);
+    g_assert_cmpstr(endpoint, ==, s_endpoint);
+    g_assert_cmpstr(NULL, !=, s_host);
+    g_assert_cmpint(port, ==, s_port);
+
+    if (!nm_sock_addr_endpoint_get_fixed_sockaddr(ep, &sockaddr))
+        g_assert_not_reached();
+
+    g_assert_cmpint(sockaddr.sa.sa_family, ==, addr_family);
+    if (addr_family == AF_INET) {
+        const SockAddrUnion s = {
+            .in =
+                {
+                    .sin_family = AF_INET,
+                    .sin_addr   = addrbin.addr4_struct,
+                    .sin_port   = htons(port),
+                },
+        };
+
+        g_assert_cmpint(sockaddr.in.sin_addr.s_addr, ==, addrbin.addr4);
+        g_assert_cmpint(sockaddr.in.sin_port, ==, htons(port));
+        g_assert(memcmp(&s, &sockaddr, sizeof(s.in)) == 0);
+    } else if (addr_family == AF_INET6) {
+        const SockAddrUnion s = {
+            .in6 =
+                {
+                    .sin6_family   = AF_INET6,
+                    .sin6_addr     = addrbin.addr6,
+                    .sin6_scope_id = scope_id,
+                    .sin6_port     = htons(port),
+                },
+        };
+
+        g_assert(memcmp(&sockaddr.in6.sin6_addr, &addrbin, sizeof(addrbin.addr6)) == 0);
+        g_assert_cmpint(sockaddr.in6.sin6_port, ==, htons(port));
+        g_assert_cmpint(sockaddr.in6.sin6_scope_id, ==, scope_id);
+        g_assert_cmpint(sockaddr.in6.sin6_flowinfo, ==, 0);
+        g_assert(memcmp(&s, &sockaddr, sizeof(s.in6)) == 0);
+    } else
+        g_assert_not_reached();
+}
+
+static void
+test_sock_addr_endpoint(void)
+{
+    _sock_addr_endpoint("", NULL, -1);
+    _sock_addr_endpoint(":", NULL, -1);
+    _sock_addr_endpoint("a", NULL, -1);
+    _sock_addr_endpoint("a:", NULL, -1);
+    _sock_addr_endpoint(":a", NULL, -1);
+    _sock_addr_endpoint("[]:a", NULL, -1);
+    _sock_addr_endpoint("[]a", NULL, -1);
+    _sock_addr_endpoint("[]:", NULL, -1);
+    _sock_addr_endpoint("[a]b", NULL, -1);
+    _sock_addr_endpoint("[a:b", NULL, -1);
+    _sock_addr_endpoint("[a[:b", NULL, -1);
+    _sock_addr_endpoint("a:6", "a", 6);
+    _sock_addr_endpoint("a:6", "a", 6);
+    _sock_addr_endpoint("[a]:6", "a", 6);
+    _sock_addr_endpoint("[a]:6", "a", 6);
+    _sock_addr_endpoint("[a]:655", "a", 655);
+    _sock_addr_endpoint("[ab]:][6", NULL, -1);
+    _sock_addr_endpoint("[ab]:]:[6", NULL, -1);
+    _sock_addr_endpoint("[a[]:b", NULL, -1);
+    _sock_addr_endpoint("[192.169.6.x]:6", "192.169.6.x", 6);
+    _sock_addr_endpoint("[192.169.6.x]:0", NULL, -1);
+    _sock_addr_endpoint("192.169.6.7:0", NULL, -1);
+
+    _sock_addr_endpoint_fixed("192.169.6.7:6", "192.169.6.7", 6, 0);
+    _sock_addr_endpoint_fixed("[192.169.6.7]:6", "192.169.6.7", 6, 0);
+    _sock_addr_endpoint_fixed("[a:b::]:6", "a:b::", 6, 0);
+    _sock_addr_endpoint_fixed("[a:b::%7]:6", "a:b::", 6, 7);
+    _sock_addr_endpoint_fixed("a:b::1%75:6", "a:b::1", 6, 75);
+    _sock_addr_endpoint_fixed("a:b::1%0:64", "a:b::1", 64, 0);
 }
 
 /*****************************************************************************/
 
 static void
-test_hexstr2bin (void)
-{
-	static const HexItem items[] = {
-		{ "aaBBCCddDD10496a",     { 0xaa, 0xbb, 0xcc, 0xdd, 0xdd, 0x10, 0x49, 0x6a }, 8 },
-		{ "aa:bb:cc:dd:10:49:6a", { 0xaa, 0xbb, 0xcc, 0xdd, 0x10, 0x49, 0x6a },       7 },
-		{ "0xccddeeff",           { 0xcc, 0xdd, 0xee, 0xff },                         4 },
-		{ "1:2:66:77:80",         { 0x01, 0x02, 0x66, 0x77, 0x80 },                   5 },
-		{ "e",                    { 0x0e },                                           1 },
-		{ "ef",                   { 0xef },                                           1 },
-		{ "efa" },
-		{ "efad",                 { 0xef, 0xad },                                     2 },
-		{ "ef:a",                 { 0xef, 0x0a },                                     2 },
-		{ "aabb1199:" },
-		{ ":aabb1199" },
-		{ "aabb$$dd" },
-		{ "aab:ccc:ddd" },
-		{ "aab::ccc:ddd" },
-	};
-	guint i;
-
-	for (i = 0; i < G_N_ELEMENTS (items); i++) {
-		gs_unref_bytes GBytes *b = NULL;
-
-		b = nm_utils_hexstr2bin (items[i].str);
-		if (items[i].expected_len)
-			g_assert (b);
-		else
-			g_assert (!b);
-		g_assert (nm_utils_gbytes_equal_mem (b, items[i].expected, items[i].expected_len));
-	}
+test_hexstr2bin(void)
+{
+    static const HexItem items[] = {
+        {"aaBBCCddDD10496a", {0xaa, 0xbb, 0xcc, 0xdd, 0xdd, 0x10, 0x49, 0x6a}, 8},
+        {"aa:bb:cc:dd:10:49:6a", {0xaa, 0xbb, 0xcc, 0xdd, 0x10, 0x49, 0x6a}, 7},
+        {"0xccddeeff", {0xcc, 0xdd, 0xee, 0xff}, 4},
+        {"1:2:66:77:80", {0x01, 0x02, 0x66, 0x77, 0x80}, 5},
+        {"e", {0x0e}, 1},
+        {"ef", {0xef}, 1},
+        {"efa"},
+        {"efad", {0xef, 0xad}, 2},
+        {"ef:a", {0xef, 0x0a}, 2},
+        {"aabb1199:"},
+        {":aabb1199"},
+        {"aabb$$dd"},
+        {"aab:ccc:ddd"},
+        {"aab::ccc:ddd"},
+    };
+    guint i;
+
+    for (i = 0; i < G_N_ELEMENTS(items); i++) {
+        gs_unref_bytes GBytes *b = NULL;
+
+        b = nm_utils_hexstr2bin(items[i].str);
+        if (items[i].expected_len)
+            g_assert(b);
+        else
+            g_assert(!b);
+        g_assert(nm_utils_gbytes_equal_mem(b, items[i].expected, items[i].expected_len));
+    }
 }
 
 /*****************************************************************************/
 
 static void
-_do_strquote (const char *str, gsize buf_len, const char *expected)
-{
-	char canary = (char) nmtst_get_rand_uint32 ();
-	gs_free char *buf_full = g_malloc (buf_len + 2);
-	char *buf = &buf_full[1];
-	const char *b;
-
-	buf[-1] = canary;
-	buf[buf_len] = canary;
-
-	if (buf_len == 0) {
-		b = nm_strquote (NULL, 0, str);
-		g_assert (b == NULL);
-		g_assert (expected == NULL);
-		b = nm_strquote (buf, 0, str);
-		g_assert (b == buf);
-	} else {
-		b = nm_strquote (buf, buf_len, str);
-		g_assert (b == buf);
-		g_assert (strlen (b) < buf_len);
-		g_assert_cmpstr (expected, ==, b);
-	}
-
-	g_assert (buf[-1] == canary);
-	g_assert (buf[buf_len] == canary);
-}
-
-static void
-test_nm_strquote (void)
-{
-	_do_strquote (NULL, 0, NULL);
-	_do_strquote ("", 0, NULL);
-	_do_strquote ("a", 0, NULL);
-	_do_strquote ("ab", 0, NULL);
-
-	_do_strquote (NULL, 1, "");
-	_do_strquote (NULL, 2, "(");
-	_do_strquote (NULL, 3, "(n");
-	_do_strquote (NULL, 4, "(nu");
-	_do_strquote (NULL, 5, "(nul");
-	_do_strquote (NULL, 6, "(null");
-	_do_strquote (NULL, 7, "(null)");
-	_do_strquote (NULL, 8, "(null)");
-	_do_strquote (NULL, 100, "(null)");
-
-	_do_strquote ("", 1, "");
-	_do_strquote ("", 2, "^");
-	_do_strquote ("", 3, "\"\"");
-	_do_strquote ("", 4, "\"\"");
-	_do_strquote ("", 5, "\"\"");
-	_do_strquote ("", 100, "\"\"");
-
-	_do_strquote ("a", 1, "");
-	_do_strquote ("a", 2, "^");
-	_do_strquote ("a", 3, "\"^");
-	_do_strquote ("a", 4, "\"a\"");
-	_do_strquote ("a", 5, "\"a\"");
-	_do_strquote ("a", 6, "\"a\"");
-	_do_strquote ("a", 100, "\"a\"");
-
-	_do_strquote ("ab", 1, "");
-	_do_strquote ("ab", 2, "^");
-	_do_strquote ("ab", 3, "\"^");
-	_do_strquote ("ab", 4, "\"a^");
-	_do_strquote ("ab", 5, "\"ab\"");
-	_do_strquote ("ab", 6, "\"ab\"");
-	_do_strquote ("ab", 7, "\"ab\"");
-	_do_strquote ("ab", 100, "\"ab\"");
-
-	_do_strquote ("abc", 1, "");
-	_do_strquote ("abc", 2, "^");
-	_do_strquote ("abc", 3, "\"^");
-	_do_strquote ("abc", 4, "\"a^");
-	_do_strquote ("abc", 5, "\"ab^");
-	_do_strquote ("abc", 6, "\"abc\"");
-	_do_strquote ("abc", 7, "\"abc\"");
-	_do_strquote ("abc", 100, "\"abc\"");
+_do_strquote(const char *str, gsize buf_len, const char *expected)
+{
+    char          canary   = (char) nmtst_get_rand_uint32();
+    gs_free char *buf_full = g_malloc(buf_len + 2);
+    char *        buf      = &buf_full[1];
+    const char *  b;
+
+    buf[-1]      = canary;
+    buf[buf_len] = canary;
+
+    if (buf_len == 0) {
+        b = nm_strquote(NULL, 0, str);
+        g_assert(b == NULL);
+        g_assert(expected == NULL);
+        b = nm_strquote(buf, 0, str);
+        g_assert(b == buf);
+    } else {
+        b = nm_strquote(buf, buf_len, str);
+        g_assert(b == buf);
+        g_assert(strlen(b) < buf_len);
+        g_assert_cmpstr(expected, ==, b);
+    }
+
+    g_assert(buf[-1] == canary);
+    g_assert(buf[buf_len] == canary);
+}
+
+static void
+test_nm_strquote(void)
+{
+    _do_strquote(NULL, 0, NULL);
+    _do_strquote("", 0, NULL);
+    _do_strquote("a", 0, NULL);
+    _do_strquote("ab", 0, NULL);
+
+    _do_strquote(NULL, 1, "");
+    _do_strquote(NULL, 2, "(");
+    _do_strquote(NULL, 3, "(n");
+    _do_strquote(NULL, 4, "(nu");
+    _do_strquote(NULL, 5, "(nul");
+    _do_strquote(NULL, 6, "(null");
+    _do_strquote(NULL, 7, "(null)");
+    _do_strquote(NULL, 8, "(null)");
+    _do_strquote(NULL, 100, "(null)");
+
+    _do_strquote("", 1, "");
+    _do_strquote("", 2, "^");
+    _do_strquote("", 3, "\"\"");
+    _do_strquote("", 4, "\"\"");
+    _do_strquote("", 5, "\"\"");
+    _do_strquote("", 100, "\"\"");
+
+    _do_strquote("a", 1, "");
+    _do_strquote("a", 2, "^");
+    _do_strquote("a", 3, "\"^");
+    _do_strquote("a", 4, "\"a\"");
+    _do_strquote("a", 5, "\"a\"");
+    _do_strquote("a", 6, "\"a\"");
+    _do_strquote("a", 100, "\"a\"");
+
+    _do_strquote("ab", 1, "");
+    _do_strquote("ab", 2, "^");
+    _do_strquote("ab", 3, "\"^");
+    _do_strquote("ab", 4, "\"a^");
+    _do_strquote("ab", 5, "\"ab\"");
+    _do_strquote("ab", 6, "\"ab\"");
+    _do_strquote("ab", 7, "\"ab\"");
+    _do_strquote("ab", 100, "\"ab\"");
+
+    _do_strquote("abc", 1, "");
+    _do_strquote("abc", 2, "^");
+    _do_strquote("abc", 3, "\"^");
+    _do_strquote("abc", 4, "\"a^");
+    _do_strquote("abc", 5, "\"ab^");
+    _do_strquote("abc", 6, "\"abc\"");
+    _do_strquote("abc", 7, "\"abc\"");
+    _do_strquote("abc", 100, "\"abc\"");
 }
 
 /*****************************************************************************/
 
-#define UUID_NS_ZERO    "00000000-0000-0000-0000-000000000000"
-#define UUID_NS_DNS     "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
-#define UUID_NS_URL     "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
-#define UUID_NS_OID     "6ba7b812-9dad-11d1-80b4-00c04fd430c8"
-#define UUID_NS_X500    "6ba7b814-9dad-11d1-80b4-00c04fd430c8"
+#define UUID_NS_ZERO "00000000-0000-0000-0000-000000000000"
+#define UUID_NS_DNS  "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
+#define UUID_NS_URL  "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
+#define UUID_NS_OID  "6ba7b812-9dad-11d1-80b4-00c04fd430c8"
+#define UUID_NS_X500 "6ba7b814-9dad-11d1-80b4-00c04fd430c8"
 
 static const NMUuid *
-_uuid (const char *str)
+_uuid(const char *str)
 {
-	static NMUuid u;
+    static NMUuid u;
 
-	g_assert (str);
-	g_assert (_nm_utils_uuid_parse (str, &u));
-	return &u;
+    g_assert(str);
+    g_assert(_nm_utils_uuid_parse(str, &u));
+    return &u;
 }
 
 static void
-_test_uuid (int uuid_type, const char *expected_uuid, const char *str, gssize slen, gpointer type_args)
+_test_uuid(int         uuid_type,
+           const char *expected_uuid,
+           const char *str,
+           gssize      slen,
+           gpointer    type_args)
 {
-	gs_free char *uuid_test = NULL;
+    gs_free char *uuid_test = NULL;
 
-	uuid_test = nm_utils_uuid_generate_from_string (str, slen, uuid_type, type_args);
+    uuid_test = nm_utils_uuid_generate_from_string(str, slen, uuid_type, type_args);
 
-	g_assert (uuid_test);
-	g_assert (nm_utils_is_uuid (uuid_test));
+    g_assert(uuid_test);
+    g_assert(nm_utils_is_uuid(uuid_test));
 
-	if (!nm_streq (uuid_test, expected_uuid)) {
-		g_error ("UUID test failed: type=%d; text=%s, len=%lld, ns=%s, uuid=%s, expected=%s",
-		         uuid_type,
-		         str,
-		         (long long) slen,
-		         NM_IN_SET (uuid_type, NM_UTILS_UUID_TYPE_VERSION3,
-		                               NM_UTILS_UUID_TYPE_VERSION5)
-		           ? (((const char *) type_args) ?: "(all-zero)")
-		           : (type_args ? "(unknown)" : "(null)"),
-		         uuid_test,
-		         expected_uuid);
-	}
+    if (!nm_streq(uuid_test, expected_uuid)) {
+        g_error("UUID test failed: type=%d; text=%s, len=%lld, ns=%s, uuid=%s, expected=%s",
+                uuid_type,
+                str,
+                (long long) slen,
+                NM_IN_SET(uuid_type, NM_UTILS_UUID_TYPE_VERSION3, NM_UTILS_UUID_TYPE_VERSION5)
+                    ? (((const char *) type_args) ?: "(all-zero)")
+                    : (type_args ? "(unknown)" : "(null)"),
+                uuid_test,
+                expected_uuid);
+    }
 
-	if (slen < 0) {
-		/* also test that passing slen==-1 yields the same result as passing strlen(str). */
-		_test_uuid (uuid_type, expected_uuid, str, strlen (str), type_args);
-	} else if (str && slen == 0) {
-		/* also test if we accept NULL for slen==0 */
-		_test_uuid (uuid_type, expected_uuid, NULL, 0, type_args);
-	}
+    if (slen < 0) {
+        /* also test that passing slen==-1 yields the same result as passing strlen(str). */
+        _test_uuid(uuid_type, expected_uuid, str, strlen(str), type_args);
+    } else if (str && slen == 0) {
+        /* also test if we accept NULL for slen==0 */
+        _test_uuid(uuid_type, expected_uuid, NULL, 0, type_args);
+    }
 
-	if (   NM_IN_SET (uuid_type, NM_UTILS_UUID_TYPE_VERSION3,
-	                             NM_UTILS_UUID_TYPE_VERSION5)
-	    && !type_args) {
-		/* For version3 and version5, a missing @type_args is equal to UUID_NS_ZERO */
-		_test_uuid (uuid_type, expected_uuid, str, slen, UUID_NS_ZERO);
-	}
+    if (NM_IN_SET(uuid_type, NM_UTILS_UUID_TYPE_VERSION3, NM_UTILS_UUID_TYPE_VERSION5)
+        && !type_args) {
+        /* For version3 and version5, a missing @type_args is equal to UUID_NS_ZERO */
+        _test_uuid(uuid_type, expected_uuid, str, slen, UUID_NS_ZERO);
+    }
 }
 
 typedef struct {
-	const char *uuid3;
-	const char *uuid5;
+    const char *uuid3;
+    const char *uuid5;
 } ExpectedUuids;
 
 static void
-test_nm_utils_uuid_generate_from_string (void)
-{
-	const ExpectedUuids zero_uuids[] = {
-	    { .uuid3 = "19826852-5007-3022-a72a-212f66e9fac3", .uuid5 = "b6c54489-38a0-5f50-a60a-fd8d76219cae", },
-	    { .uuid3 = "9153af2e-fc8e-34f3-9e8b-81f73b33d0cb", .uuid5 = "11116e73-1c03-5de6-9130-5f9925ae8ab4", },
-	    { .uuid3 = "2f06a3ae-d78d-30d7-b898-088a0e0b76f6", .uuid5 = "1087ebe8-1ef8-5d97-8873-735b4949004d", },
-	    { .uuid3 = "aca948e0-1468-3a51-9f2e-c688a484efd7", .uuid5 = "7e57d004-2b97-5e7a-b45f-5387367791cd", },
-	    { .uuid3 = "b74e537a-53e8-3808-9abd-58546a6542bd", .uuid5 = "1dd80df1-492c-5dc5-aec2-6bf0e104f923", },
-	    { .uuid3 = "1b00958a-7d76-3d08-8aba-c66c5828658c", .uuid5 = "f797f61e-a392-5acf-af25-b46057f1c8e8", },
-	    { .uuid3 = "7ba18f7d-c9cf-3b48-a89e-ad79243135cc", .uuid5 = "e02c9780-2fc5-5d57-b92f-4cc3a64bff16", },
-	    { .uuid3 = "9baf0978-1a60-35c5-9e9b-bec8d259fd4e", .uuid5 = "94167980-f909-527e-a4af-bc3155f586d3", },
-	    { .uuid3 = "588668c0-7631-39c7-9976-c7d414adf7ba", .uuid5 = "9e3eefda-b56e-56bd-8a3a-0b8009d4a536", },
-	    { .uuid3 = "8edb3613-9612-3b32-9dd7-0a01aa8ed453", .uuid5 = "9b75648e-d38c-54e8-adee-1fb295a079c9", },
-	    { .uuid3 = "f3b34394-63a5-3773-9014-1f8a50d765b8", .uuid5 = "dd56b598-9e74-58c3-b3e8-2c623780b8ed", },
-	    { .uuid3 = "0572965f-05b8-342b-b225-d5c29d449eee", .uuid5 = "5666449a-fb7e-55b7-ae9f-0552e6513a10", },
-	    { .uuid3 = "6f7177c3-77b0-3f42-82a8-7031e25fcccf", .uuid5 = "10b38db9-82fc-528e-9ddb-1f09b7dbf907", },
-	    { .uuid3 = "d1e0f845-bc1b-368c-b8c8-49ab0b9e486b", .uuid5 = "85492596-9468-5845-9c7f-d4ae999cb751", },
-	    { .uuid3 = "46371ea3-c8a3-34d8-b2cf-2fa90bda4378", .uuid5 = "22b1c0dd-aa5d-54a4-8768-5adfd0d112bd", },
-	    { .uuid3 = "f1e6b499-9b68-343b-a5c5-ece7acc49a68", .uuid5 = "9cc429f8-200e-52a3-9e3b-ef134afa1e29", },
-	    { .uuid3 = "9ed06458-c712-31dd-aba5-6cf79879fabe", .uuid5 = "3949f95c-5d76-5ee2-af60-8e2d8fcf649d", },
-	    { .uuid3 = "4ddd5cd7-bc83-36aa-909c-4e660f57c830", .uuid5 = "0e994a02-069b-58fb-b3a4-d7dc94e90fca", },
-	    { .uuid3 = "335fa537-0909-395d-a696-6f41827dcbeb", .uuid5 = "17db3a41-de9b-5c6b-904d-833943209b3c", },
-	    { .uuid3 = "dbd58444-05ad-3edd-adc7-4393ecbcb43c", .uuid5 = "1bd906f2-05f9-5ab5-a39a-4c17a188f886", },
-	    { .uuid3 = "a1c62d82-d13c-361b-8f4e-ca91bc2f7fc5", .uuid5 = "ce6550fd-95b7-57e4-9aa7-461522666be4", },
-	    { .uuid3 = "e943d83e-3f82-307f-81ed-b7a7bcd0743e", .uuid5 = "04aa09ee-b420-57ac-8a23-5d99907fb0a1", },
-	    { .uuid3 = "cabf46dd-9f09-375c-8f6e-f2a8cf114709", .uuid5 = "8ece2c62-0c31-5c55-b7c6-155381e3780e", },
-	    { .uuid3 = "19beddf3-f2fb-340f-96ac-4f394960b7a7", .uuid5 = "5762a9f9-9a21-59ab-b0d2-2cb90027ef7f", },
-	    { .uuid3 = "08d835c2-f4ca-394c-ba7f-2494d8b60c6c", .uuid5 = "23c8409d-4b5f-5b6a-b946-41e49bad6c78", },
-	    { .uuid3 = "3b8c6847-5331-35bf-9cd9-ced50e53cd7c", .uuid5 = "e8e396be-95d5-5569-8edc-e0b64c2b7613", },
-	    { .uuid3 = "e601f160-484b-3254-8f3b-0a25c7203d8a", .uuid5 = "bc8b3cbc-ad5b-5808-a1b0-e0f7a1ad68a3", },
-	    { .uuid3 = "e5e492ed-5349-379d-b7de-a370a51e44a3", .uuid5 = "62c5ed3f-9afa-59ad-874f-a9dd8afc69d4", },
-	    { .uuid3 = "c40111f6-fe97-305e-bfce-7db730c3d2ec", .uuid5 = "66877a72-7243-59ed-b9e3-b5023b6da9c2", },
-	    { .uuid3 = "21e18ea8-95c2-362b-9ca9-25d6a0ff2dff", .uuid5 = "49a49eee-7e86-5d66-837a-8a8810cb5562", },
-	    { .uuid3 = "adab623b-1343-307f-80d8-58d005376ad9", .uuid5 = "e4a2a7ed-3bf3-53cf-a2bb-154dbb39a38c", },
-	    { .uuid3 = "67e9fc7c-dafe-356d-ac1a-a63ce3f44813", .uuid5 = "50cacfc9-f5d2-52dd-897c-a25a0927b816", },
-	    { .uuid3 = "36cc7f20-126c-3e40-94e7-737ac7486547", .uuid5 = "ca629991-3f2b-5e86-9bb7-37a335f7d809", },
-	    { .uuid3 = "fe282996-ac5e-3d13-b478-5def30007a8e", .uuid5 = "c1adf8a7-f72a-58ae-82d5-d18807f12e2e", },
-	    { .uuid3 = "3bfe339c-05ae-3233-a1a5-ebf1ead589db", .uuid5 = "6120c3cd-24e1-5ce4-987b-f8bfee2e4633", },
-	    { .uuid3 = "d1d90bc7-da4a-3cd7-a7c8-a1a89765d8ee", .uuid5 = "433d6a26-c319-5fcf-9a30-5ec6ad59d109", },
-	    { .uuid3 = "10b88a02-0102-359b-81e9-7e3b0ff7d25e", .uuid5 = "77d228d9-1b96-59e2-a07e-a8fdd4f62884", },
-	    { .uuid3 = "7da5e4f2-6df0-3aca-a1b0-b7f8b1340e1d", .uuid5 = "698259bf-a32b-5e00-9ec6-88b12278c4ad", },
-	    { .uuid3 = "cbe24d98-ca20-3058-86b6-24a6b36ceff0", .uuid5 = "60dbca63-704f-5666-9f64-f4e1a630c4aa", },
-	    { .uuid3 = "04d84e6a-b793-3993-afbf-bae7cfc42b49", .uuid5 = "79d63ec0-a39d-557d-8299-f4c97acfadc3", },
-	    { .uuid3 = "fdd157d8-a537-350a-9cc9-1930e8666c63", .uuid5 = "7df7f75e-a146-5a76-828b-bac052db312b", },
-	    { .uuid3 = "0bea36bb-24a7-3ee6-a98d-116433c14cd4", .uuid5 = "2bcca2e9-2879-53e3-b09d-cbbfd58771b2", },
-	    { .uuid3 = "52b040a4-1b84-32d2-b758-f82386f7e0f0", .uuid5 = "cb7bdca3-e9f7-50cd-b72e-73cb9ff24f62", },
-	    { .uuid3 = "0f0a4e26-e034-3021-acf2-4e886af43092", .uuid5 = "8e428e2b-5da3-5368-b760-5ca07ccbd819", },
-	    { .uuid3 = "819d3cd1-afe5-3e4a-9f0c-945e25d09879", .uuid5 = "f340ef4d-139c-567a-b0fc-7c495336674e", },
-	    { .uuid3 = "e7df1a3b-c9f8-3e5a-88d6-ba72b2a0f27b", .uuid5 = "7e3f5fd2-3c93-58d6-9f35-6e0192445b11", },
-	    { .uuid3 = "0854bedf-74ba-3f2b-b823-dc2c90d27c76", .uuid5 = "bc112b6b-c5de-5ee9-b816-808792743a20", },
-	    { .uuid3 = "a1b8c3ba-f821-32ef-a3fd-b97b3855efa8", .uuid5 = "47f8f82d-9fcd-553c-90c5-3f3cb3ad00ad", },
-	    { .uuid3 = "9458f819-079b-3033-9430-ba10f576c067", .uuid5 = "bee5c091-5f01-51fa-86bb-e9488fd3b4da", },
-	    { .uuid3 = "8e1f240a-e386-3e00-866a-6f9da1e3503f", .uuid5 = "8ea92cea-d741-566f-a44a-d51e65b4c5e4", },
-	};
-	const ExpectedUuids dns_uuids[] = {
-	    { .uuid3 = "4385125b-dd1e-3025-880f-3311517cc8d5", .uuid5 = "6af613b6-569c-5c22-9c37-2ed93f31d3af", },
-	    { .uuid3 = "afd0b036-625a-3aa8-b639-9dc8c8fff0ff", .uuid5 = "b04965e6-a9bb-591f-8f8a-1adcb2c8dc39", },
-	    { .uuid3 = "9c45c2f1-1761-3daa-ad31-1ff8703ae846", .uuid5 = "4b166dbe-d99d-5091-abdd-95b83330ed3a", },
-	    { .uuid3 = "15e0ba07-10e4-3d7f-aaff-c00fed873c88", .uuid5 = "98123fde-012f-5ff3-8b50-881449dac91a", },
-	    { .uuid3 = "bc27b4db-bc0f-34f9-ae8e-4b72f2d51b60", .uuid5 = "6ed955c6-506a-5343-9be4-2c0afae02eef", },
-	    { .uuid3 = "7586bfed-b8b8-3bb3-9c95-09a4a79dc0f7", .uuid5 = "c8691da2-158a-5ed6-8537-0e6f140801f2", },
-	    { .uuid3 = "881430b6-8d28-3175-b87d-e81f2f5978c6", .uuid5 = "a6c4fc8f-6950-51de-a9ae-2c519c465071", },
-	    { .uuid3 = "24075675-98ae-354e-89ca-0126a9ad36e3", .uuid5 = "a9f96b98-dd44-5216-ab0d-dbfc6b262edf", },
-	    { .uuid3 = "2c269ea4-dbfd-32dd-9bd7-a5c22677d18b", .uuid5 = "e99caacd-6c45-5906-bd9f-b79e62f25963", },
-	    { .uuid3 = "44eb0948-118f-3f28-87e4-f61c8f889aba", .uuid5 = "e4d80b30-151e-51b5-9f4f-18a3b82718e6", },
-	    { .uuid3 = "fc72beeb-f790-36ee-a73d-33888c9d8880", .uuid5 = "0159d6c7-973f-5e7a-a9a0-d195d0ea6fe2", },
-	    { .uuid3 = "1e46afa2-6176-3cd3-9750-3015846723df", .uuid5 = "7fef88f7-411d-5669-b42d-bf5fc7f9b58b", },
-	    { .uuid3 = "0042b01d-95bd-343f-bd9f-3186bfd63508", .uuid5 = "52524d6e-10dc-5261-aa36-8b2efcbaa5f0", },
-	    { .uuid3 = "115ff52f-d605-3b4b-98fe-c0ea57f4930c", .uuid5 = "91c274f2-9a0d-5ce6-ac3d-7529f452df21", },
-	    { .uuid3 = "ed0221e8-ac7d-393b-821d-25183567885b", .uuid5 = "0ff1e264-520d-543a-87dd-181a491e667e", },
-	    { .uuid3 = "508ef333-85a6-314c-bcf3-17ddc32b2216", .uuid5 = "23986425-d3a5-5e13-8bab-299745777a8d", },
-	    { .uuid3 = "a4715ee0-524a-37cc-beb2-a0b5030757b7", .uuid5 = "c15b38c9-9a3e-543c-a703-dd742f25b4d5", },
-	    { .uuid3 = "d1c72756-aaec-3470-a2f2-97415f44d72f", .uuid5 = "db680066-c83d-5ed7-89a4-1d79466ea62d", },
-	    { .uuid3 = "7aec2f01-586e-3d53-b8f3-6cf7e6b649a4", .uuid5 = "cadb7952-2bba-5609-88d4-8e47ec4e7920", },
-	    { .uuid3 = "3d234b88-8d6f-319a-91ea-edb6059fc825", .uuid5 = "35140057-a2a4-5adb-a500-46f8ed8b66a9", },
-	    { .uuid3 = "d2568554-93ec-30c7-9e15-f383be19e5bb", .uuid5 = "66e549b7-01e2-5d07-98d5-430f74d8d3b2", },
-	    { .uuid3 = "800e59a7-dd0f-3114-8e58-ab7e213895ca", .uuid5 = "292c8e99-2378-55aa-83d8-350e0ac3f1cc", },
-	    { .uuid3 = "3b7d03f0-e067-3d72-84f4-e410ac36ef57", .uuid5 = "0e3b230a-0509-55d8-96a0-9875f387a2be", },
-	    { .uuid3 = "8762be68-de95-391a-94a0-c5fd0446e037", .uuid5 = "4c507660-a83b-55c0-9b2b-83eccb07723d", },
-	    { .uuid3 = "2bd8b4c9-01af-3cd0-aced-94ee6e2004b8", .uuid5 = "a1b9b633-da11-58be-b1a9-5cfa2848f186", },
-	    { .uuid3 = "a627d6a4-394a-33f5-b68e-22bfb6488d01", .uuid5 = "c2708a8b-120a-56f5-a30d-990048af87cc", },
-	    { .uuid3 = "6a592510-17d9-3925-b321-4a8d4927f8d0", .uuid5 = "e7263999-68b6-5a23-b530-af25b7efd632", },
-	    { .uuid3 = "9ee72491-59c4-333c-bb93-fe733a842fdb", .uuid5 = "ce1ae2d5-3454-5952-97ff-36ff935bcfe9", },
-	    { .uuid3 = "2591c62c-0a9d-3c28-97bc-fa0401556a3c", .uuid5 = "33677b87-bc8d-5ff6-9a25-fe60225e4bf0", },
-	    { .uuid3 = "7912be1e-4562-373b-92e2-3d6d2123bc8e", .uuid5 = "ed2305ae-e8f9-5387-b860-3d80ae6c02f7", },
-	    { .uuid3 = "09370cda-89a4-3a48-b592-9c0486e0d5e4", .uuid5 = "604ed872-ae2d-5d91-8e3e-572f3a3aaaa5", },
-	    { .uuid3 = "de5980d3-a137-373c-850b-ca3e5f100779", .uuid5 = "8f8173d9-2f8d-5636-a693-24d9f79ba651", },
-	    { .uuid3 = "9441501d-f633-365a-8955-9df443edc762", .uuid5 = "36eb8d4d-b854-51f1-9fdf-3735964225d5", },
-	    { .uuid3 = "434ada18-13ce-3c08-8b40-a1a1ae030569", .uuid5 = "3493b6ca-f84b-56a9-97cc-c0bd1c46c4c0", },
-	    { .uuid3 = "a13b6160-bd23-3710-a150-41d800dd30b4", .uuid5 = "f413ea13-fcd9-5b44-9d22-1fa1f7b063a5", },
-	    { .uuid3 = "73a67c12-c5f0-3288-ad6a-c78aea0917b0", .uuid5 = "f468d924-d23b-56c2-b90f-3d1cf4b45337", },
-	    { .uuid3 = "a126ee4f-a222-357d-b71b-7d3f226c559f", .uuid5 = "8828c9d6-ed76-5c09-bf64-ba9e9cd90896", },
-	    { .uuid3 = "48f4f36b-b015-3137-9b6e-351bb175c7f7", .uuid5 = "facb7618-55ca-5c30-9cba-fd567b6c0611", },
-	    { .uuid3 = "3fe8f6a3-fe4a-3487-89d6-dd06c6ad02e3", .uuid5 = "96f3de0e-6412-5434-b406-67ef3352ab85", },
-	    { .uuid3 = "d68fa2d4-adc9-3b20-ac77-42585cd1d59f", .uuid5 = "9ebacb89-40ab-52b3-93a2-9054611d8f55", },
-	    { .uuid3 = "819f86a3-31d5-3e72-a83e-142c3a3e4832", .uuid5 = "681046ff-9129-5ade-b11c-769864e02184", },
-	    { .uuid3 = "9957b433-ddc8-3113-a3e6-5512cf13dab1", .uuid5 = "c13d0b5d-1ca3-57b6-a23f-8586bca44928", },
-	    { .uuid3 = "5aab6e0c-b7d3-379c-92e3-2bfbb5572511", .uuid5 = "7c411b5e-9d3f-50b5-9c28-62096e41c4ed", },
-	    { .uuid3 = "11c8ff30-3a7d-3547-80a7-d61b8abeeda8", .uuid5 = "f825aafe-6696-5121-b263-6b2c408b7f43", },
-	    { .uuid3 = "98799b9f-1c5e-30b3-930f-e412b862cbe4", .uuid5 = "f2b4caea-61c3-5bed-8ce7-d8b9d16e129e", },
-	    { .uuid3 = "9bdf2544-31d8-3555-94b0-6a749118a996", .uuid5 = "3593855a-6557-5736-8cab-172c6987f949", },
-	    { .uuid3 = "ddcfb9b3-e990-3985-9021-546a2711e7e5", .uuid5 = "36392431-d554-5385-b876-7bc6e1cb26b3", },
-	    { .uuid3 = "190d7a78-1484-3136-80a6-40f28852785c", .uuid5 = "7e645493-0898-5501-8155-e8578b4f5224", },
-	    { .uuid3 = "6ed693e4-7dc0-3210-856b-a6eb4cc73e13", .uuid5 = "14dc6a81-0491-5683-baaf-7582a61c5798", },
-	    { .uuid3 = "b6a14b21-e73a-3ce2-9076-a804c434f5c6", .uuid5 = "883e0a9c-e3b3-5f9c-8073-2913cbbb99ec", },
-	};
-	char i_str[30];
-	guint i;
-
-	_test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "d41d8cd9-8f00-b204-e980-0998ecf8427e", "", -1, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "0cc175b9-c0f1-b6a8-31c3-99e269772661", "a", -1, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "098f6bcd-4621-d373-cade-4e832627b4f6", "test", -1, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "70350f60-27bc-e371-3f6b-76473084309b", "a\0b", 3, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_LEGACY, "59c0547b-7fe2-1c15-2cce-e328e8bf6742", "/etc/NetworkManager/system-connections/em1", -1, NULL);
-
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "4ae71336-e44b-39bf-b9d2-752e234818a5", "", -1, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "0531103a-d8fc-3dd4-b972-d98e4750994e", "a", -1, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "96e17d7a-ac89-38cf-95e1-bf5098da34e1", "test", -1, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "8156568e-4ae6-3f34-a93e-18e2c6cbbf78", "a\0b", 3, NULL);
-
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "c87ee674-4ddc-3efe-a74e-dfe25da5d7b3", "", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "4c104dd0-4821-30d5-9ce3-0e7a1f8b7c0d", "a", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "45a113ac-c7f2-30b0-90a5-a399ab912716", "test", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "002a0ada-f547-375a-bab5-896a11d1927e", "a\0b", 3, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "9a75f5f2-195e-31a9-9d07-8c18b5d3b285", "test123", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "ec794efe-a384-3b11-a0b6-ec8995bc6acc", "x", -1, UUID_NS_DNS);
-
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "a7650b9f-f19f-5300-8a13-91160ea8de2c", "a\0b", 3, NULL);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "4f3f2898-69e3-5a0d-820a-c4e87987dbce", "a", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "05b16a01-46c6-56dd-bd6e-c6dfb4a1427a", "x", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "c9ed566a-6b79-5d3a-b2b7-96a936b48cf3", "test123", -1, UUID_NS_DNS);
-
-	for (i = 0; i < G_N_ELEMENTS (zero_uuids); i++) {
-		nm_sprintf_buf (i_str, "%u", i),
-		_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, zero_uuids[i].uuid3, i_str, -1, NULL);
-		_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, zero_uuids[i].uuid5, i_str, -1, NULL);
-	}
-	for (i = 0; i < G_N_ELEMENTS (dns_uuids); i++) {
-		nm_sprintf_buf (i_str, "%u", i),
-		_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, dns_uuids[i].uuid3, i_str, -1, UUID_NS_DNS);
-		_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, dns_uuids[i].uuid5, i_str, -1, UUID_NS_DNS);
-	}
-
-	/* examples from cpython unit tests: */
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "6fa459ea-ee8a-3ca4-894e-db77e160355e", "python.org", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "886313e1-3b8a-5372-9b90-0c9aee199e5d", "python.org", -1, UUID_NS_DNS);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "9fe8e8c4-aaa8-32a9-a55c-4535a88b748d", "http://python.org/", -1, UUID_NS_URL);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "4c565f0d-3f5a-5890-b41b-20cf47701c5e", "http://python.org/", -1, UUID_NS_URL);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "dd1a1cef-13d5-368a-ad82-eca71acd4cd1", "1.3.6.1", -1, UUID_NS_OID);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "1447fa61-5277-5fef-a9b3-fbc6e44f4af3", "1.3.6.1", -1, UUID_NS_OID);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION3, "658d3002-db6b-3040-a1d1-8ddd7d189a4d", "c=ca", -1, UUID_NS_X500);
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "cc957dd1-a972-5349-98cd-874190002798", "c=ca", -1, UUID_NS_X500);
-
-	_test_uuid (NM_UTILS_UUID_TYPE_VERSION5, "74738ff5-5367-5958-9aee-98fffdcd1876", "www.example.org", -1, UUID_NS_DNS);
+test_nm_utils_uuid_generate_from_string(void)
+{
+    const ExpectedUuids zero_uuids[] = {
+        {
+            .uuid3 = "19826852-5007-3022-a72a-212f66e9fac3",
+            .uuid5 = "b6c54489-38a0-5f50-a60a-fd8d76219cae",
+        },
+        {
+            .uuid3 = "9153af2e-fc8e-34f3-9e8b-81f73b33d0cb",
+            .uuid5 = "11116e73-1c03-5de6-9130-5f9925ae8ab4",
+        },
+        {
+            .uuid3 = "2f06a3ae-d78d-30d7-b898-088a0e0b76f6",
+            .uuid5 = "1087ebe8-1ef8-5d97-8873-735b4949004d",
+        },
+        {
+            .uuid3 = "aca948e0-1468-3a51-9f2e-c688a484efd7",
+            .uuid5 = "7e57d004-2b97-5e7a-b45f-5387367791cd",
+        },
+        {
+            .uuid3 = "b74e537a-53e8-3808-9abd-58546a6542bd",
+            .uuid5 = "1dd80df1-492c-5dc5-aec2-6bf0e104f923",
+        },
+        {
+            .uuid3 = "1b00958a-7d76-3d08-8aba-c66c5828658c",
+            .uuid5 = "f797f61e-a392-5acf-af25-b46057f1c8e8",
+        },
+        {
+            .uuid3 = "7ba18f7d-c9cf-3b48-a89e-ad79243135cc",
+            .uuid5 = "e02c9780-2fc5-5d57-b92f-4cc3a64bff16",
+        },
+        {
+            .uuid3 = "9baf0978-1a60-35c5-9e9b-bec8d259fd4e",
+            .uuid5 = "94167980-f909-527e-a4af-bc3155f586d3",
+        },
+        {
+            .uuid3 = "588668c0-7631-39c7-9976-c7d414adf7ba",
+            .uuid5 = "9e3eefda-b56e-56bd-8a3a-0b8009d4a536",
+        },
+        {
+            .uuid3 = "8edb3613-9612-3b32-9dd7-0a01aa8ed453",
+            .uuid5 = "9b75648e-d38c-54e8-adee-1fb295a079c9",
+        },
+        {
+            .uuid3 = "f3b34394-63a5-3773-9014-1f8a50d765b8",
+            .uuid5 = "dd56b598-9e74-58c3-b3e8-2c623780b8ed",
+        },
+        {
+            .uuid3 = "0572965f-05b8-342b-b225-d5c29d449eee",
+            .uuid5 = "5666449a-fb7e-55b7-ae9f-0552e6513a10",
+        },
+        {
+            .uuid3 = "6f7177c3-77b0-3f42-82a8-7031e25fcccf",
+            .uuid5 = "10b38db9-82fc-528e-9ddb-1f09b7dbf907",
+        },
+        {
+            .uuid3 = "d1e0f845-bc1b-368c-b8c8-49ab0b9e486b",
+            .uuid5 = "85492596-9468-5845-9c7f-d4ae999cb751",
+        },
+        {
+            .uuid3 = "46371ea3-c8a3-34d8-b2cf-2fa90bda4378",
+            .uuid5 = "22b1c0dd-aa5d-54a4-8768-5adfd0d112bd",
+        },
+        {
+            .uuid3 = "f1e6b499-9b68-343b-a5c5-ece7acc49a68",
+            .uuid5 = "9cc429f8-200e-52a3-9e3b-ef134afa1e29",
+        },
+        {
+            .uuid3 = "9ed06458-c712-31dd-aba5-6cf79879fabe",
+            .uuid5 = "3949f95c-5d76-5ee2-af60-8e2d8fcf649d",
+        },
+        {
+            .uuid3 = "4ddd5cd7-bc83-36aa-909c-4e660f57c830",
+            .uuid5 = "0e994a02-069b-58fb-b3a4-d7dc94e90fca",
+        },
+        {
+            .uuid3 = "335fa537-0909-395d-a696-6f41827dcbeb",
+            .uuid5 = "17db3a41-de9b-5c6b-904d-833943209b3c",
+        },
+        {
+            .uuid3 = "dbd58444-05ad-3edd-adc7-4393ecbcb43c",
+            .uuid5 = "1bd906f2-05f9-5ab5-a39a-4c17a188f886",
+        },
+        {
+            .uuid3 = "a1c62d82-d13c-361b-8f4e-ca91bc2f7fc5",
+            .uuid5 = "ce6550fd-95b7-57e4-9aa7-461522666be4",
+        },
+        {
+            .uuid3 = "e943d83e-3f82-307f-81ed-b7a7bcd0743e",
+            .uuid5 = "04aa09ee-b420-57ac-8a23-5d99907fb0a1",
+        },
+        {
+            .uuid3 = "cabf46dd-9f09-375c-8f6e-f2a8cf114709",
+            .uuid5 = "8ece2c62-0c31-5c55-b7c6-155381e3780e",
+        },
+        {
+            .uuid3 = "19beddf3-f2fb-340f-96ac-4f394960b7a7",
+            .uuid5 = "5762a9f9-9a21-59ab-b0d2-2cb90027ef7f",
+        },
+        {
+            .uuid3 = "08d835c2-f4ca-394c-ba7f-2494d8b60c6c",
+            .uuid5 = "23c8409d-4b5f-5b6a-b946-41e49bad6c78",
+        },
+        {
+            .uuid3 = "3b8c6847-5331-35bf-9cd9-ced50e53cd7c",
+            .uuid5 = "e8e396be-95d5-5569-8edc-e0b64c2b7613",
+        },
+        {
+            .uuid3 = "e601f160-484b-3254-8f3b-0a25c7203d8a",
+            .uuid5 = "bc8b3cbc-ad5b-5808-a1b0-e0f7a1ad68a3",
+        },
+        {
+            .uuid3 = "e5e492ed-5349-379d-b7de-a370a51e44a3",
+            .uuid5 = "62c5ed3f-9afa-59ad-874f-a9dd8afc69d4",
+        },
+        {
+            .uuid3 = "c40111f6-fe97-305e-bfce-7db730c3d2ec",
+            .uuid5 = "66877a72-7243-59ed-b9e3-b5023b6da9c2",
+        },
+        {
+            .uuid3 = "21e18ea8-95c2-362b-9ca9-25d6a0ff2dff",
+            .uuid5 = "49a49eee-7e86-5d66-837a-8a8810cb5562",
+        },
+        {
+            .uuid3 = "adab623b-1343-307f-80d8-58d005376ad9",
+            .uuid5 = "e4a2a7ed-3bf3-53cf-a2bb-154dbb39a38c",
+        },
+        {
+            .uuid3 = "67e9fc7c-dafe-356d-ac1a-a63ce3f44813",
+            .uuid5 = "50cacfc9-f5d2-52dd-897c-a25a0927b816",
+        },
+        {
+            .uuid3 = "36cc7f20-126c-3e40-94e7-737ac7486547",
+            .uuid5 = "ca629991-3f2b-5e86-9bb7-37a335f7d809",
+        },
+        {
+            .uuid3 = "fe282996-ac5e-3d13-b478-5def30007a8e",
+            .uuid5 = "c1adf8a7-f72a-58ae-82d5-d18807f12e2e",
+        },
+        {
+            .uuid3 = "3bfe339c-05ae-3233-a1a5-ebf1ead589db",
+            .uuid5 = "6120c3cd-24e1-5ce4-987b-f8bfee2e4633",
+        },
+        {
+            .uuid3 = "d1d90bc7-da4a-3cd7-a7c8-a1a89765d8ee",
+            .uuid5 = "433d6a26-c319-5fcf-9a30-5ec6ad59d109",
+        },
+        {
+            .uuid3 = "10b88a02-0102-359b-81e9-7e3b0ff7d25e",
+            .uuid5 = "77d228d9-1b96-59e2-a07e-a8fdd4f62884",
+        },
+        {
+            .uuid3 = "7da5e4f2-6df0-3aca-a1b0-b7f8b1340e1d",
+            .uuid5 = "698259bf-a32b-5e00-9ec6-88b12278c4ad",
+        },
+        {
+            .uuid3 = "cbe24d98-ca20-3058-86b6-24a6b36ceff0",
+            .uuid5 = "60dbca63-704f-5666-9f64-f4e1a630c4aa",
+        },
+        {
+            .uuid3 = "04d84e6a-b793-3993-afbf-bae7cfc42b49",
+            .uuid5 = "79d63ec0-a39d-557d-8299-f4c97acfadc3",
+        },
+        {
+            .uuid3 = "fdd157d8-a537-350a-9cc9-1930e8666c63",
+            .uuid5 = "7df7f75e-a146-5a76-828b-bac052db312b",
+        },
+        {
+            .uuid3 = "0bea36bb-24a7-3ee6-a98d-116433c14cd4",
+            .uuid5 = "2bcca2e9-2879-53e3-b09d-cbbfd58771b2",
+        },
+        {
+            .uuid3 = "52b040a4-1b84-32d2-b758-f82386f7e0f0",
+            .uuid5 = "cb7bdca3-e9f7-50cd-b72e-73cb9ff24f62",
+        },
+        {
+            .uuid3 = "0f0a4e26-e034-3021-acf2-4e886af43092",
+            .uuid5 = "8e428e2b-5da3-5368-b760-5ca07ccbd819",
+        },
+        {
+            .uuid3 = "819d3cd1-afe5-3e4a-9f0c-945e25d09879",
+            .uuid5 = "f340ef4d-139c-567a-b0fc-7c495336674e",
+        },
+        {
+            .uuid3 = "e7df1a3b-c9f8-3e5a-88d6-ba72b2a0f27b",
+            .uuid5 = "7e3f5fd2-3c93-58d6-9f35-6e0192445b11",
+        },
+        {
+            .uuid3 = "0854bedf-74ba-3f2b-b823-dc2c90d27c76",
+            .uuid5 = "bc112b6b-c5de-5ee9-b816-808792743a20",
+        },
+        {
+            .uuid3 = "a1b8c3ba-f821-32ef-a3fd-b97b3855efa8",
+            .uuid5 = "47f8f82d-9fcd-553c-90c5-3f3cb3ad00ad",
+        },
+        {
+            .uuid3 = "9458f819-079b-3033-9430-ba10f576c067",
+            .uuid5 = "bee5c091-5f01-51fa-86bb-e9488fd3b4da",
+        },
+        {
+            .uuid3 = "8e1f240a-e386-3e00-866a-6f9da1e3503f",
+            .uuid5 = "8ea92cea-d741-566f-a44a-d51e65b4c5e4",
+        },
+    };
+    const ExpectedUuids dns_uuids[] = {
+        {
+            .uuid3 = "4385125b-dd1e-3025-880f-3311517cc8d5",
+            .uuid5 = "6af613b6-569c-5c22-9c37-2ed93f31d3af",
+        },
+        {
+            .uuid3 = "afd0b036-625a-3aa8-b639-9dc8c8fff0ff",
+            .uuid5 = "b04965e6-a9bb-591f-8f8a-1adcb2c8dc39",
+        },
+        {
+            .uuid3 = "9c45c2f1-1761-3daa-ad31-1ff8703ae846",
+            .uuid5 = "4b166dbe-d99d-5091-abdd-95b83330ed3a",
+        },
+        {
+            .uuid3 = "15e0ba07-10e4-3d7f-aaff-c00fed873c88",
+            .uuid5 = "98123fde-012f-5ff3-8b50-881449dac91a",
+        },
+        {
+            .uuid3 = "bc27b4db-bc0f-34f9-ae8e-4b72f2d51b60",
+            .uuid5 = "6ed955c6-506a-5343-9be4-2c0afae02eef",
+        },
+        {
+            .uuid3 = "7586bfed-b8b8-3bb3-9c95-09a4a79dc0f7",
+            .uuid5 = "c8691da2-158a-5ed6-8537-0e6f140801f2",
+        },
+        {
+            .uuid3 = "881430b6-8d28-3175-b87d-e81f2f5978c6",
+            .uuid5 = "a6c4fc8f-6950-51de-a9ae-2c519c465071",
+        },
+        {
+            .uuid3 = "24075675-98ae-354e-89ca-0126a9ad36e3",
+            .uuid5 = "a9f96b98-dd44-5216-ab0d-dbfc6b262edf",
+        },
+        {
+            .uuid3 = "2c269ea4-dbfd-32dd-9bd7-a5c22677d18b",
+            .uuid5 = "e99caacd-6c45-5906-bd9f-b79e62f25963",
+        },
+        {
+            .uuid3 = "44eb0948-118f-3f28-87e4-f61c8f889aba",
+            .uuid5 = "e4d80b30-151e-51b5-9f4f-18a3b82718e6",
+        },
+        {
+            .uuid3 = "fc72beeb-f790-36ee-a73d-33888c9d8880",
+            .uuid5 = "0159d6c7-973f-5e7a-a9a0-d195d0ea6fe2",
+        },
+        {
+            .uuid3 = "1e46afa2-6176-3cd3-9750-3015846723df",
+            .uuid5 = "7fef88f7-411d-5669-b42d-bf5fc7f9b58b",
+        },
+        {
+            .uuid3 = "0042b01d-95bd-343f-bd9f-3186bfd63508",
+            .uuid5 = "52524d6e-10dc-5261-aa36-8b2efcbaa5f0",
+        },
+        {
+            .uuid3 = "115ff52f-d605-3b4b-98fe-c0ea57f4930c",
+            .uuid5 = "91c274f2-9a0d-5ce6-ac3d-7529f452df21",
+        },
+        {
+            .uuid3 = "ed0221e8-ac7d-393b-821d-25183567885b",
+            .uuid5 = "0ff1e264-520d-543a-87dd-181a491e667e",
+        },
+        {
+            .uuid3 = "508ef333-85a6-314c-bcf3-17ddc32b2216",
+            .uuid5 = "23986425-d3a5-5e13-8bab-299745777a8d",
+        },
+        {
+            .uuid3 = "a4715ee0-524a-37cc-beb2-a0b5030757b7",
+            .uuid5 = "c15b38c9-9a3e-543c-a703-dd742f25b4d5",
+        },
+        {
+            .uuid3 = "d1c72756-aaec-3470-a2f2-97415f44d72f",
+            .uuid5 = "db680066-c83d-5ed7-89a4-1d79466ea62d",
+        },
+        {
+            .uuid3 = "7aec2f01-586e-3d53-b8f3-6cf7e6b649a4",
+            .uuid5 = "cadb7952-2bba-5609-88d4-8e47ec4e7920",
+        },
+        {
+            .uuid3 = "3d234b88-8d6f-319a-91ea-edb6059fc825",
+            .uuid5 = "35140057-a2a4-5adb-a500-46f8ed8b66a9",
+        },
+        {
+            .uuid3 = "d2568554-93ec-30c7-9e15-f383be19e5bb",
+            .uuid5 = "66e549b7-01e2-5d07-98d5-430f74d8d3b2",
+        },
+        {
+            .uuid3 = "800e59a7-dd0f-3114-8e58-ab7e213895ca",
+            .uuid5 = "292c8e99-2378-55aa-83d8-350e0ac3f1cc",
+        },
+        {
+            .uuid3 = "3b7d03f0-e067-3d72-84f4-e410ac36ef57",
+            .uuid5 = "0e3b230a-0509-55d8-96a0-9875f387a2be",
+        },
+        {
+            .uuid3 = "8762be68-de95-391a-94a0-c5fd0446e037",
+            .uuid5 = "4c507660-a83b-55c0-9b2b-83eccb07723d",
+        },
+        {
+            .uuid3 = "2bd8b4c9-01af-3cd0-aced-94ee6e2004b8",
+            .uuid5 = "a1b9b633-da11-58be-b1a9-5cfa2848f186",
+        },
+        {
+            .uuid3 = "a627d6a4-394a-33f5-b68e-22bfb6488d01",
+            .uuid5 = "c2708a8b-120a-56f5-a30d-990048af87cc",
+        },
+        {
+            .uuid3 = "6a592510-17d9-3925-b321-4a8d4927f8d0",
+            .uuid5 = "e7263999-68b6-5a23-b530-af25b7efd632",
+        },
+        {
+            .uuid3 = "9ee72491-59c4-333c-bb93-fe733a842fdb",
+            .uuid5 = "ce1ae2d5-3454-5952-97ff-36ff935bcfe9",
+        },
+        {
+            .uuid3 = "2591c62c-0a9d-3c28-97bc-fa0401556a3c",
+            .uuid5 = "33677b87-bc8d-5ff6-9a25-fe60225e4bf0",
+        },
+        {
+            .uuid3 = "7912be1e-4562-373b-92e2-3d6d2123bc8e",
+            .uuid5 = "ed2305ae-e8f9-5387-b860-3d80ae6c02f7",
+        },
+        {
+            .uuid3 = "09370cda-89a4-3a48-b592-9c0486e0d5e4",
+            .uuid5 = "604ed872-ae2d-5d91-8e3e-572f3a3aaaa5",
+        },
+        {
+            .uuid3 = "de5980d3-a137-373c-850b-ca3e5f100779",
+            .uuid5 = "8f8173d9-2f8d-5636-a693-24d9f79ba651",
+        },
+        {
+            .uuid3 = "9441501d-f633-365a-8955-9df443edc762",
+            .uuid5 = "36eb8d4d-b854-51f1-9fdf-3735964225d5",
+        },
+        {
+            .uuid3 = "434ada18-13ce-3c08-8b40-a1a1ae030569",
+            .uuid5 = "3493b6ca-f84b-56a9-97cc-c0bd1c46c4c0",
+        },
+        {
+            .uuid3 = "a13b6160-bd23-3710-a150-41d800dd30b4",
+            .uuid5 = "f413ea13-fcd9-5b44-9d22-1fa1f7b063a5",
+        },
+        {
+            .uuid3 = "73a67c12-c5f0-3288-ad6a-c78aea0917b0",
+            .uuid5 = "f468d924-d23b-56c2-b90f-3d1cf4b45337",
+        },
+        {
+            .uuid3 = "a126ee4f-a222-357d-b71b-7d3f226c559f",
+            .uuid5 = "8828c9d6-ed76-5c09-bf64-ba9e9cd90896",
+        },
+        {
+            .uuid3 = "48f4f36b-b015-3137-9b6e-351bb175c7f7",
+            .uuid5 = "facb7618-55ca-5c30-9cba-fd567b6c0611",
+        },
+        {
+            .uuid3 = "3fe8f6a3-fe4a-3487-89d6-dd06c6ad02e3",
+            .uuid5 = "96f3de0e-6412-5434-b406-67ef3352ab85",
+        },
+        {
+            .uuid3 = "d68fa2d4-adc9-3b20-ac77-42585cd1d59f",
+            .uuid5 = "9ebacb89-40ab-52b3-93a2-9054611d8f55",
+        },
+        {
+            .uuid3 = "819f86a3-31d5-3e72-a83e-142c3a3e4832",
+            .uuid5 = "681046ff-9129-5ade-b11c-769864e02184",
+        },
+        {
+            .uuid3 = "9957b433-ddc8-3113-a3e6-5512cf13dab1",
+            .uuid5 = "c13d0b5d-1ca3-57b6-a23f-8586bca44928",
+        },
+        {
+            .uuid3 = "5aab6e0c-b7d3-379c-92e3-2bfbb5572511",
+            .uuid5 = "7c411b5e-9d3f-50b5-9c28-62096e41c4ed",
+        },
+        {
+            .uuid3 = "11c8ff30-3a7d-3547-80a7-d61b8abeeda8",
+            .uuid5 = "f825aafe-6696-5121-b263-6b2c408b7f43",
+        },
+        {
+            .uuid3 = "98799b9f-1c5e-30b3-930f-e412b862cbe4",
+            .uuid5 = "f2b4caea-61c3-5bed-8ce7-d8b9d16e129e",
+        },
+        {
+            .uuid3 = "9bdf2544-31d8-3555-94b0-6a749118a996",
+            .uuid5 = "3593855a-6557-5736-8cab-172c6987f949",
+        },
+        {
+            .uuid3 = "ddcfb9b3-e990-3985-9021-546a2711e7e5",
+            .uuid5 = "36392431-d554-5385-b876-7bc6e1cb26b3",
+        },
+        {
+            .uuid3 = "190d7a78-1484-3136-80a6-40f28852785c",
+            .uuid5 = "7e645493-0898-5501-8155-e8578b4f5224",
+        },
+        {
+            .uuid3 = "6ed693e4-7dc0-3210-856b-a6eb4cc73e13",
+            .uuid5 = "14dc6a81-0491-5683-baaf-7582a61c5798",
+        },
+        {
+            .uuid3 = "b6a14b21-e73a-3ce2-9076-a804c434f5c6",
+            .uuid5 = "883e0a9c-e3b3-5f9c-8073-2913cbbb99ec",
+        },
+    };
+    char  i_str[30];
+    guint i;
+
+    _test_uuid(NM_UTILS_UUID_TYPE_LEGACY, "d41d8cd9-8f00-b204-e980-0998ecf8427e", "", -1, NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_LEGACY, "0cc175b9-c0f1-b6a8-31c3-99e269772661", "a", -1, NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_LEGACY, "098f6bcd-4621-d373-cade-4e832627b4f6", "test", -1, NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_LEGACY, "70350f60-27bc-e371-3f6b-76473084309b", "a\0b", 3, NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_LEGACY,
+               "59c0547b-7fe2-1c15-2cce-e328e8bf6742",
+               "/etc/NetworkManager/system-connections/em1",
+               -1,
+               NULL);
+
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3, "4ae71336-e44b-39bf-b9d2-752e234818a5", "", -1, NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3, "0531103a-d8fc-3dd4-b972-d98e4750994e", "a", -1, NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "96e17d7a-ac89-38cf-95e1-bf5098da34e1",
+               "test",
+               -1,
+               NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "8156568e-4ae6-3f34-a93e-18e2c6cbbf78",
+               "a\0b",
+               3,
+               NULL);
+
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "c87ee674-4ddc-3efe-a74e-dfe25da5d7b3",
+               "",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "4c104dd0-4821-30d5-9ce3-0e7a1f8b7c0d",
+               "a",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "45a113ac-c7f2-30b0-90a5-a399ab912716",
+               "test",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "002a0ada-f547-375a-bab5-896a11d1927e",
+               "a\0b",
+               3,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "9a75f5f2-195e-31a9-9d07-8c18b5d3b285",
+               "test123",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "ec794efe-a384-3b11-a0b6-ec8995bc6acc",
+               "x",
+               -1,
+               UUID_NS_DNS);
+
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "a7650b9f-f19f-5300-8a13-91160ea8de2c",
+               "a\0b",
+               3,
+               NULL);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "4f3f2898-69e3-5a0d-820a-c4e87987dbce",
+               "a",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "05b16a01-46c6-56dd-bd6e-c6dfb4a1427a",
+               "x",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "c9ed566a-6b79-5d3a-b2b7-96a936b48cf3",
+               "test123",
+               -1,
+               UUID_NS_DNS);
+
+    for (i = 0; i < G_N_ELEMENTS(zero_uuids); i++) {
+        nm_sprintf_buf(i_str, "%u", i),
+            _test_uuid(NM_UTILS_UUID_TYPE_VERSION3, zero_uuids[i].uuid3, i_str, -1, NULL);
+        _test_uuid(NM_UTILS_UUID_TYPE_VERSION5, zero_uuids[i].uuid5, i_str, -1, NULL);
+    }
+    for (i = 0; i < G_N_ELEMENTS(dns_uuids); i++) {
+        nm_sprintf_buf(i_str, "%u", i),
+            _test_uuid(NM_UTILS_UUID_TYPE_VERSION3, dns_uuids[i].uuid3, i_str, -1, UUID_NS_DNS);
+        _test_uuid(NM_UTILS_UUID_TYPE_VERSION5, dns_uuids[i].uuid5, i_str, -1, UUID_NS_DNS);
+    }
+
+    /* examples from cpython unit tests: */
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "6fa459ea-ee8a-3ca4-894e-db77e160355e",
+               "python.org",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "886313e1-3b8a-5372-9b90-0c9aee199e5d",
+               "python.org",
+               -1,
+               UUID_NS_DNS);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "9fe8e8c4-aaa8-32a9-a55c-4535a88b748d",
+               "http://python.org/",
+               -1,
+               UUID_NS_URL);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "4c565f0d-3f5a-5890-b41b-20cf47701c5e",
+               "http://python.org/",
+               -1,
+               UUID_NS_URL);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "dd1a1cef-13d5-368a-ad82-eca71acd4cd1",
+               "1.3.6.1",
+               -1,
+               UUID_NS_OID);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "1447fa61-5277-5fef-a9b3-fbc6e44f4af3",
+               "1.3.6.1",
+               -1,
+               UUID_NS_OID);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION3,
+               "658d3002-db6b-3040-a1d1-8ddd7d189a4d",
+               "c=ca",
+               -1,
+               UUID_NS_X500);
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "cc957dd1-a972-5349-98cd-874190002798",
+               "c=ca",
+               -1,
+               UUID_NS_X500);
+
+    _test_uuid(NM_UTILS_UUID_TYPE_VERSION5,
+               "74738ff5-5367-5958-9aee-98fffdcd1876",
+               "www.example.org",
+               -1,
+               UUID_NS_DNS);
 }
 
 /*****************************************************************************/
 
 static void
-__test_uuid (const char *expected_uuid, const char *str, gssize slen, char *uuid_test)
+__test_uuid(const char *expected_uuid, const char *str, gssize slen, char *uuid_test)
 {
-	g_assert (uuid_test);
-	g_assert (nm_utils_is_uuid (uuid_test));
+    g_assert(uuid_test);
+    g_assert(nm_utils_is_uuid(uuid_test));
 
-	if (strcmp (uuid_test, expected_uuid)) {
-		g_error ("UUID test failed (1): text=%s, len=%lld, expected=%s, uuid_test=%s",
-		         str, (long long) slen, expected_uuid, uuid_test);
-	}
-	g_free (uuid_test);
+    if (strcmp(uuid_test, expected_uuid)) {
+        g_error("UUID test failed (1): text=%s, len=%lld, expected=%s, uuid_test=%s",
+                str,
+                (long long) slen,
+                expected_uuid,
+                uuid_test);
+    }
+    g_free(uuid_test);
 
-	uuid_test = nm_utils_uuid_generate_from_string (str, slen, NM_UTILS_UUID_TYPE_VERSION3, NM_UTILS_UUID_NS);
+    uuid_test = nm_utils_uuid_generate_from_string(str,
+                                                   slen,
+                                                   NM_UTILS_UUID_TYPE_VERSION3,
+                                                   NM_UTILS_UUID_NS);
 
-	g_assert (uuid_test);
-	g_assert (nm_utils_is_uuid (uuid_test));
+    g_assert(uuid_test);
+    g_assert(nm_utils_is_uuid(uuid_test));
 
-	if (strcmp (uuid_test, expected_uuid)) {
-		g_error ("UUID test failed (2): text=%s; len=%lld, expected=%s, uuid2=%s",
-		         str, (long long) slen, expected_uuid, uuid_test);
-	}
-	g_free (uuid_test);
+    if (strcmp(uuid_test, expected_uuid)) {
+        g_error("UUID test failed (2): text=%s; len=%lld, expected=%s, uuid2=%s",
+                str,
+                (long long) slen,
+                expected_uuid,
+                uuid_test);
+    }
+    g_free(uuid_test);
 }
 
-#define _test_uuid(expected_uuid, str, strlen, ...) __test_uuid (expected_uuid, str, strlen, _nm_utils_uuid_generate_from_strings(__VA_ARGS__, NULL))
+#define _test_uuid(expected_uuid, str, strlen, ...) \
+    __test_uuid(expected_uuid, str, strlen, _nm_utils_uuid_generate_from_strings(__VA_ARGS__, NULL))
 
 static void
-test_nm_utils_uuid_generate_from_strings (void)
+test_nm_utils_uuid_generate_from_strings(void)
 {
-	const NMUuid uuid0 = { };
+    const NMUuid uuid0 = {};
 
-	g_assert_cmpmem (&uuid0, sizeof (uuid0), _uuid ("00000000-0000-0000-0000-000000000000"), 16);
+    g_assert_cmpmem(&uuid0, sizeof(uuid0), _uuid("00000000-0000-0000-0000-000000000000"), 16);
 
-	g_assert (nm_utils_uuid_is_null (NULL));
-	g_assert (nm_utils_uuid_is_null (&uuid0));
-	g_assert ( nm_utils_uuid_is_null (_uuid ("00000000-0000-0000-0000-000000000000")));
-	g_assert (!nm_utils_uuid_is_null (_uuid ("10000000-0000-0000-0000-000000000000")));
+    g_assert(nm_utils_uuid_is_null(NULL));
+    g_assert(nm_utils_uuid_is_null(&uuid0));
+    g_assert(nm_utils_uuid_is_null(_uuid("00000000-0000-0000-0000-000000000000")));
+    g_assert(!nm_utils_uuid_is_null(_uuid("10000000-0000-0000-0000-000000000000")));
 
-	_test_uuid ("b07c334a-399b-32de-8d50-58e4e08f98e3", "",         0, NULL);
-	_test_uuid ("b8a426cb-bcb5-30a3-bd8f-6786fea72df9", "\0",       1, "");
-	_test_uuid ("12a4a982-7aae-39e1-951e-41aeb1250959", "a\0",      2, "a");
-	_test_uuid ("69e22c7e-f89f-3a43-b239-1cb52ed8db69", "aa\0",     3, "aa");
-	_test_uuid ("59829fd3-5ad5-3d90-a7b0-4911747e4088", "\0\0",     2, "",   "");
-	_test_uuid ("01ad0e06-6c50-3384-8d86-ddab81421425", "a\0\0",    3, "a",  "");
-	_test_uuid ("e1ed8647-9ed3-3ec8-8c6d-e8204524d71d", "aa\0\0",   4, "aa", "");
-	_test_uuid ("fb1c7cd6-275c-3489-9382-83b900da8af0", "\0a\0",    3, "",   "a");
-	_test_uuid ("5d79494e-c4ba-31a6-80a2-d6016ccd7e17", "a\0a\0",   4, "a",  "a");
-	_test_uuid ("fd698d86-1b60-3ebe-855f-7aada9950a8d", "aa\0a\0",  5, "aa", "a");
-	_test_uuid ("8c573b48-0f01-30ba-bb94-c5f59f4fe517", "\0aa\0",   4, "",   "aa");
-	_test_uuid ("2bdd3d46-eb83-3c53-a41b-a724d04b5544", "a\0aa\0",  5, "a",  "aa");
-	_test_uuid ("13d4b780-07c1-3ba7-b449-81c4844ef039", "aa\0aa\0", 6, "aa", "aa");
-	_test_uuid ("dd265bf7-c05a-3037-9939-b9629858a477", "a\0b\0",   4, "a",  "b");
+    _test_uuid("b07c334a-399b-32de-8d50-58e4e08f98e3", "", 0, NULL);
+    _test_uuid("b8a426cb-bcb5-30a3-bd8f-6786fea72df9", "\0", 1, "");
+    _test_uuid("12a4a982-7aae-39e1-951e-41aeb1250959", "a\0", 2, "a");
+    _test_uuid("69e22c7e-f89f-3a43-b239-1cb52ed8db69", "aa\0", 3, "aa");
+    _test_uuid("59829fd3-5ad5-3d90-a7b0-4911747e4088", "\0\0", 2, "", "");
+    _test_uuid("01ad0e06-6c50-3384-8d86-ddab81421425", "a\0\0", 3, "a", "");
+    _test_uuid("e1ed8647-9ed3-3ec8-8c6d-e8204524d71d", "aa\0\0", 4, "aa", "");
+    _test_uuid("fb1c7cd6-275c-3489-9382-83b900da8af0", "\0a\0", 3, "", "a");
+    _test_uuid("5d79494e-c4ba-31a6-80a2-d6016ccd7e17", "a\0a\0", 4, "a", "a");
+    _test_uuid("fd698d86-1b60-3ebe-855f-7aada9950a8d", "aa\0a\0", 5, "aa", "a");
+    _test_uuid("8c573b48-0f01-30ba-bb94-c5f59f4fe517", "\0aa\0", 4, "", "aa");
+    _test_uuid("2bdd3d46-eb83-3c53-a41b-a724d04b5544", "a\0aa\0", 5, "a", "aa");
+    _test_uuid("13d4b780-07c1-3ba7-b449-81c4844ef039", "aa\0aa\0", 6, "aa", "aa");
+    _test_uuid("dd265bf7-c05a-3037-9939-b9629858a477", "a\0b\0", 4, "a", "b");
 }
 
 /*****************************************************************************/
 
 static void
-test_nm_utils_ascii_str_to_int64_check (const char *str, guint base, gint64 min,
-                                        gint64 max, gint64 fallback, int exp_errno,
-                                        gint64 exp_val)
-{
-	gint64 v;
-
-	errno = 1;
-	v = _nm_utils_ascii_str_to_int64 (str, base, min, max, fallback);
-	g_assert_cmpint (errno, ==, exp_errno);
-	g_assert_cmpint (v, ==, exp_val);
-}
-
-static void
-test_nm_utils_ascii_str_to_int64_do (const char *str, guint base, gint64 min,
-                                     gint64 max, gint64 fallback, int exp_errno,
-                                     gint64 exp_val)
-{
-	const char *sign = "";
-	const char *val;
-	static const char *whitespaces[] = {
-		"",
-		" ",
-		"\r\n\t",
-		" \r\n\t ",
-		" \r\n\t \t\r\n\t",
-		NULL,
-	};
-	static const char *nulls[] = {
-		"",
-		"0",
-		"00",
-		"0000",
-		"0000000000000000",
-		"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
-		"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
-		NULL,
-	};
-	const char **ws_pre, **ws_post, **null;
-	guint i;
-
-	if (str == NULL || exp_errno != 0) {
-		test_nm_utils_ascii_str_to_int64_check (str, base, min, max, fallback, exp_errno, exp_val);
-		return;
-	}
-
-	if (strncmp (str, "-", 1) == 0)
-		sign = "-";
-
-	val = str + strlen (sign);
-
-	for (ws_pre = whitespaces; *ws_pre; ws_pre++) {
-		for (ws_post = whitespaces; *ws_post; ws_post++) {
-			for (null = nulls; *null; null++) {
-				for (i = 0; ; i++) {
-					char *s;
-					const char *str_base = "";
-
-					if (base == 16) {
-						if (i == 1)
-							str_base = "0x";
-						else if (i > 1)
-							break;
-					} else if (base == 8) {
-						if (i == 1)
-							str_base = "0";
-						else if (i > 1)
-							break;
-					} else if (base == 0) {
-						if (i > 0)
-							break;
-						/* with base==0, a leading zero would be interpreted as octal. Only test without *null */
-						if ((*null)[0])
-							break;
-					} else {
-						if (i > 0)
-							break;
-					}
-
-					s = g_strdup_printf ("%s%s%s%s%s%s", *ws_pre, sign, str_base, *null, val, *ws_post);
-
-					test_nm_utils_ascii_str_to_int64_check (s, base, min, max, fallback, exp_errno, exp_val);
-					g_free (s);
-				}
-			}
-		}
-	}
-}
-
-static void
-test_nm_utils_ascii_str_to_int64 (void)
-{
-	test_nm_utils_ascii_str_to_int64_do (NULL, 10, 0, 10000, -1, EINVAL, -1);
-	test_nm_utils_ascii_str_to_int64_do ("", 10, 0, 10000, -1, EINVAL, -1);
-	test_nm_utils_ascii_str_to_int64_do ("1x", 10, 0, 10000, -1, EINVAL, -1);
-	test_nm_utils_ascii_str_to_int64_do ("4711", 10, 0, 10000, -1, 0, 4711);
-	test_nm_utils_ascii_str_to_int64_do ("10000", 10, 0, 10000, -1, 0, 10000);
-	test_nm_utils_ascii_str_to_int64_do ("10001", 10, 0, 10000, -1, ERANGE, -1);
-	test_nm_utils_ascii_str_to_int64_do ("FF", 16, 0, 10000, -1, 0, 255);
-	test_nm_utils_ascii_str_to_int64_do ("FF", 10, 0, 10000, -2, EINVAL, -2);
-	test_nm_utils_ascii_str_to_int64_do ("9223372036854775807", 10, 0, G_MAXINT64, -2, 0, G_MAXINT64);
-	test_nm_utils_ascii_str_to_int64_do ("7FFFFFFFFFFFFFFF", 16, 0, G_MAXINT64, -2, 0, G_MAXINT64);
-	test_nm_utils_ascii_str_to_int64_do ("9223372036854775808", 10, 0, G_MAXINT64, -2, ERANGE, -2);
-	test_nm_utils_ascii_str_to_int64_do ("-9223372036854775808", 10, G_MININT64, 0, -2, 0, G_MININT64);
-	test_nm_utils_ascii_str_to_int64_do ("-9223372036854775808", 10, G_MININT64+1, 0, -2, ERANGE, -2);
-	test_nm_utils_ascii_str_to_int64_do ("-9223372036854775809", 10, G_MININT64, 0, -2, ERANGE, -2);
-	test_nm_utils_ascii_str_to_int64_do ("1.0", 10, 1, 1, -1, EINVAL, -1);
-	test_nm_utils_ascii_str_to_int64_do ("1x0", 16, -10, 10, -100, EINVAL, -100);
-	test_nm_utils_ascii_str_to_int64_do ("0", 16, -10, 10, -100, 0, 0);
-	test_nm_utils_ascii_str_to_int64_do ("10001111", 2, -1000, 1000, -100000, 0, 0x8F);
-	test_nm_utils_ascii_str_to_int64_do ("-10001111", 2, -1000, 1000, -100000, 0, -0x8F);
-	test_nm_utils_ascii_str_to_int64_do ("1111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7F);
-	test_nm_utils_ascii_str_to_int64_do ("111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFF);
-	test_nm_utils_ascii_str_to_int64_do ("11111111111111111111111111111111111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFFFFFFFFFF);
-	test_nm_utils_ascii_str_to_int64_do ("111111111111111111111111111111111111111111111111111111111111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFFFFFFFFFFFFFF);
-	test_nm_utils_ascii_str_to_int64_do ("100000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, 0,  0x4000000000000000);
-	test_nm_utils_ascii_str_to_int64_do ("1000000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, ERANGE, -1);
-	test_nm_utils_ascii_str_to_int64_do ("-100000000000000000000000000000000000000000000000000000000000000", 2, G_MININT64, G_MAXINT64, -1, 0,  -0x4000000000000000);
-	test_nm_utils_ascii_str_to_int64_do ("111111111111111111111111111111111111111111111111111111111111111",  2, G_MININT64, G_MAXINT64, -1, 0, 0x7FFFFFFFFFFFFFFF);
-	test_nm_utils_ascii_str_to_int64_do ("-100000000000000000000000000000000000000000000000000000000000000",  2, G_MININT64, G_MAXINT64, -1, 0,  -0x4000000000000000);
-	test_nm_utils_ascii_str_to_int64_do ("0x70",  10, G_MININT64, G_MAXINT64, -1, EINVAL, -1);
-	test_nm_utils_ascii_str_to_int64_do ("4711",  0, G_MININT64, G_MAXINT64, -1, 0, 4711);
-	test_nm_utils_ascii_str_to_int64_do ("04711",  0, G_MININT64, G_MAXINT64, -1, 0, 04711);
-	test_nm_utils_ascii_str_to_int64_do ("0x4711",  0, G_MININT64, G_MAXINT64, -1, 0, 0x4711);
-	test_nm_utils_ascii_str_to_int64_do ("080",  0, G_MININT64, G_MAXINT64, -1, EINVAL, -1);
-	test_nm_utils_ascii_str_to_int64_do ("070",  0, G_MININT64, G_MAXINT64, -1, 0, 7*8);
-	test_nm_utils_ascii_str_to_int64_do ("0x70",  0, G_MININT64, G_MAXINT64, -1, 0, 0x70);
-
-	g_assert_cmpint (21, ==, _nm_utils_ascii_str_to_int64 ("025", 0, 0, 1000, -1));
-	g_assert_cmpint (21, ==, _nm_utils_ascii_str_to_int64 ("0025", 0, 0, 1000, -1));
-	g_assert_cmpint (25, ==, _nm_utils_ascii_str_to_int64 ("025", 10, 0, 1000, -1));
-	g_assert_cmpint (25, ==, _nm_utils_ascii_str_to_int64 ("0025", 10, 0, 1000, -1));
+test_nm_utils_ascii_str_to_int64_check(const char *str,
+                                       guint       base,
+                                       gint64      min,
+                                       gint64      max,
+                                       gint64      fallback,
+                                       int         exp_errno,
+                                       gint64      exp_val)
+{
+    gint64 v;
+
+    errno = 1;
+    v     = _nm_utils_ascii_str_to_int64(str, base, min, max, fallback);
+    g_assert_cmpint(errno, ==, exp_errno);
+    g_assert_cmpint(v, ==, exp_val);
+}
+
+static void
+test_nm_utils_ascii_str_to_int64_do(const char *str,
+                                    guint       base,
+                                    gint64      min,
+                                    gint64      max,
+                                    gint64      fallback,
+                                    int         exp_errno,
+                                    gint64      exp_val)
+{
+    const char *       sign = "";
+    const char *       val;
+    static const char *whitespaces[] = {
+        "",
+        " ",
+        "\r\n\t",
+        " \r\n\t ",
+        " \r\n\t \t\r\n\t",
+        NULL,
+    };
+    static const char *nulls[] = {
+        "",
+        "0",
+        "00",
+        "0000",
+        "0000000000000000",
+        "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+        "00000000000000000000000000000000000000",
+        "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+        "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+        "00000000000000000000000000000000",
+        NULL,
+    };
+    const char **ws_pre, **ws_post, **null;
+    guint        i;
+
+    if (str == NULL || exp_errno != 0) {
+        test_nm_utils_ascii_str_to_int64_check(str, base, min, max, fallback, exp_errno, exp_val);
+        return;
+    }
+
+    if (strncmp(str, "-", 1) == 0)
+        sign = "-";
+
+    val = str + strlen(sign);
+
+    for (ws_pre = whitespaces; *ws_pre; ws_pre++) {
+        for (ws_post = whitespaces; *ws_post; ws_post++) {
+            for (null = nulls; *null; null++) {
+                for (i = 0;; i++) {
+                    char *      s;
+                    const char *str_base = "";
+
+                    if (base == 16) {
+                        if (i == 1)
+                            str_base = "0x";
+                        else if (i > 1)
+                            break;
+                    } else if (base == 8) {
+                        if (i == 1)
+                            str_base = "0";
+                        else if (i > 1)
+                            break;
+                    } else if (base == 0) {
+                        if (i > 0)
+                            break;
+                        /* with base==0, a leading zero would be interpreted as octal. Only test without *null */
+                        if ((*null)[0])
+                            break;
+                    } else {
+                        if (i > 0)
+                            break;
+                    }
+
+                    s = g_strdup_printf("%s%s%s%s%s%s",
+                                        *ws_pre,
+                                        sign,
+                                        str_base,
+                                        *null,
+                                        val,
+                                        *ws_post);
+
+                    test_nm_utils_ascii_str_to_int64_check(s,
+                                                           base,
+                                                           min,
+                                                           max,
+                                                           fallback,
+                                                           exp_errno,
+                                                           exp_val);
+                    g_free(s);
+                }
+            }
+        }
+    }
+}
+
+static void
+test_nm_utils_ascii_str_to_int64(void)
+{
+    test_nm_utils_ascii_str_to_int64_do(NULL, 10, 0, 10000, -1, EINVAL, -1);
+    test_nm_utils_ascii_str_to_int64_do("", 10, 0, 10000, -1, EINVAL, -1);
+    test_nm_utils_ascii_str_to_int64_do("1x", 10, 0, 10000, -1, EINVAL, -1);
+    test_nm_utils_ascii_str_to_int64_do("4711", 10, 0, 10000, -1, 0, 4711);
+    test_nm_utils_ascii_str_to_int64_do("10000", 10, 0, 10000, -1, 0, 10000);
+    test_nm_utils_ascii_str_to_int64_do("10001", 10, 0, 10000, -1, ERANGE, -1);
+    test_nm_utils_ascii_str_to_int64_do("FF", 16, 0, 10000, -1, 0, 255);
+    test_nm_utils_ascii_str_to_int64_do("FF", 10, 0, 10000, -2, EINVAL, -2);
+    test_nm_utils_ascii_str_to_int64_do("9223372036854775807",
+                                        10,
+                                        0,
+                                        G_MAXINT64,
+                                        -2,
+                                        0,
+                                        G_MAXINT64);
+    test_nm_utils_ascii_str_to_int64_do("7FFFFFFFFFFFFFFF", 16, 0, G_MAXINT64, -2, 0, G_MAXINT64);
+    test_nm_utils_ascii_str_to_int64_do("9223372036854775808", 10, 0, G_MAXINT64, -2, ERANGE, -2);
+    test_nm_utils_ascii_str_to_int64_do("-9223372036854775808",
+                                        10,
+                                        G_MININT64,
+                                        0,
+                                        -2,
+                                        0,
+                                        G_MININT64);
+    test_nm_utils_ascii_str_to_int64_do("-9223372036854775808",
+                                        10,
+                                        G_MININT64 + 1,
+                                        0,
+                                        -2,
+                                        ERANGE,
+                                        -2);
+    test_nm_utils_ascii_str_to_int64_do("-9223372036854775809", 10, G_MININT64, 0, -2, ERANGE, -2);
+    test_nm_utils_ascii_str_to_int64_do("1.0", 10, 1, 1, -1, EINVAL, -1);
+    test_nm_utils_ascii_str_to_int64_do("1x0", 16, -10, 10, -100, EINVAL, -100);
+    test_nm_utils_ascii_str_to_int64_do("0", 16, -10, 10, -100, 0, 0);
+    test_nm_utils_ascii_str_to_int64_do("10001111", 2, -1000, 1000, -100000, 0, 0x8F);
+    test_nm_utils_ascii_str_to_int64_do("-10001111", 2, -1000, 1000, -100000, 0, -0x8F);
+    test_nm_utils_ascii_str_to_int64_do("1111111", 2, G_MININT64, G_MAXINT64, -1, 0, 0x7F);
+    test_nm_utils_ascii_str_to_int64_do("111111111111111",
+                                        2,
+                                        G_MININT64,
+                                        G_MAXINT64,
+                                        -1,
+                                        0,
+                                        0x7FFF);
+    test_nm_utils_ascii_str_to_int64_do("11111111111111111111111111111111111111111111111",
+                                        2,
+                                        G_MININT64,
+                                        G_MAXINT64,
+                                        -1,
+                                        0,
+                                        0x7FFFFFFFFFFF);
+    test_nm_utils_ascii_str_to_int64_do(
+        "111111111111111111111111111111111111111111111111111111111111111",
+        2,
+        G_MININT64,
+        G_MAXINT64,
+        -1,
+        0,
+        0x7FFFFFFFFFFFFFFF);
+    test_nm_utils_ascii_str_to_int64_do(
+        "100000000000000000000000000000000000000000000000000000000000000",
+        2,
+        G_MININT64,
+        G_MAXINT64,
+        -1,
+        0,
+        0x4000000000000000);
+    test_nm_utils_ascii_str_to_int64_do(
+        "1000000000000000000000000000000000000000000000000000000000000000",
+        2,
+        G_MININT64,
+        G_MAXINT64,
+        -1,
+        ERANGE,
+        -1);
+    test_nm_utils_ascii_str_to_int64_do(
+        "-100000000000000000000000000000000000000000000000000000000000000",
+        2,
+        G_MININT64,
+        G_MAXINT64,
+        -1,
+        0,
+        -0x4000000000000000);
+    test_nm_utils_ascii_str_to_int64_do(
+        "111111111111111111111111111111111111111111111111111111111111111",
+        2,
+        G_MININT64,
+        G_MAXINT64,
+        -1,
+        0,
+        0x7FFFFFFFFFFFFFFF);
+    test_nm_utils_ascii_str_to_int64_do(
+        "-100000000000000000000000000000000000000000000000000000000000000",
+        2,
+        G_MININT64,
+        G_MAXINT64,
+        -1,
+        0,
+        -0x4000000000000000);
+    test_nm_utils_ascii_str_to_int64_do("0x70", 10, G_MININT64, G_MAXINT64, -1, EINVAL, -1);
+    test_nm_utils_ascii_str_to_int64_do("4711", 0, G_MININT64, G_MAXINT64, -1, 0, 4711);
+    test_nm_utils_ascii_str_to_int64_do("04711", 0, G_MININT64, G_MAXINT64, -1, 0, 04711);
+    test_nm_utils_ascii_str_to_int64_do("0x4711", 0, G_MININT64, G_MAXINT64, -1, 0, 0x4711);
+    test_nm_utils_ascii_str_to_int64_do("080", 0, G_MININT64, G_MAXINT64, -1, EINVAL, -1);
+    test_nm_utils_ascii_str_to_int64_do("070", 0, G_MININT64, G_MAXINT64, -1, 0, 7 * 8);
+    test_nm_utils_ascii_str_to_int64_do("0x70", 0, G_MININT64, G_MAXINT64, -1, 0, 0x70);
+
+    g_assert_cmpint(21, ==, _nm_utils_ascii_str_to_int64("025", 0, 0, 1000, -1));
+    g_assert_cmpint(21, ==, _nm_utils_ascii_str_to_int64("0025", 0, 0, 1000, -1));
+    g_assert_cmpint(25, ==, _nm_utils_ascii_str_to_int64("025", 10, 0, 1000, -1));
+    g_assert_cmpint(25, ==, _nm_utils_ascii_str_to_int64("0025", 10, 0, 1000, -1));
 }
 
 /*****************************************************************************/
 
 static void
-test_nm_utils_strstrdictkey (void)
-{
-#define _VALUES_STATIC(_v1, _v2) { .v1 = _v1, .v2 = _v2, .v_static = _nm_utils_strstrdictkey_static (_v1, _v2), }
-	const struct {
-		const char *v1;
-		const char *v2;
-		NMUtilsStrStrDictKey *v_static;
-	} *val1, *val2, values[] = {
-		{ NULL, NULL },
-		{ "", NULL },
-		{ NULL, "" },
-		{ "a", NULL },
-		{ NULL, "a" },
-		_VALUES_STATIC ("", ""),
-		_VALUES_STATIC ("a", ""),
-		_VALUES_STATIC ("", "a"),
-		_VALUES_STATIC ("a", "b"),
-	};
-	guint i, j;
-
-	for (i = 0; i < G_N_ELEMENTS (values); i++) {
-		gs_free NMUtilsStrStrDictKey *key1 = NULL;
-
-		val1 = &values[i];
-
-		key1 = _nm_utils_strstrdictkey_create (val1->v1, val1->v2);
-		if (val1->v_static) {
-			g_assert (_nm_utils_strstrdictkey_equal (key1, val1->v_static));
-			g_assert (_nm_utils_strstrdictkey_equal (val1->v_static, key1));
-			g_assert_cmpint (_nm_utils_strstrdictkey_hash (key1), ==, _nm_utils_strstrdictkey_hash (val1->v_static));
-		}
-
-		for (j = 0; j < G_N_ELEMENTS (values); j++) {
-			gs_free NMUtilsStrStrDictKey *key2 = NULL;
-
-			val2 = &values[j];
-			key2 = _nm_utils_strstrdictkey_create (val2->v1, val2->v2);
-			if (i != j) {
-				g_assert (!_nm_utils_strstrdictkey_equal (key1, key2));
-				g_assert (!_nm_utils_strstrdictkey_equal (key2, key1));
-			}
-		}
-	}
+test_nm_utils_strstrdictkey(void)
+{
+#define _VALUES_STATIC(_v1, _v2)                                                    \
+    {                                                                               \
+        .v1 = _v1, .v2 = _v2, .v_static = _nm_utils_strstrdictkey_static(_v1, _v2), \
+    }
+    const struct {
+        const char *          v1;
+        const char *          v2;
+        NMUtilsStrStrDictKey *v_static;
+    } * val1, *val2,
+        values[] = {
+            {NULL, NULL},
+            {"", NULL},
+            {NULL, ""},
+            {"a", NULL},
+            {NULL, "a"},
+            _VALUES_STATIC("", ""),
+            _VALUES_STATIC("a", ""),
+            _VALUES_STATIC("", "a"),
+            _VALUES_STATIC("a", "b"),
+        };
+    guint i, j;
+
+    for (i = 0; i < G_N_ELEMENTS(values); i++) {
+        gs_free NMUtilsStrStrDictKey *key1 = NULL;
+
+        val1 = &values[i];
+
+        key1 = _nm_utils_strstrdictkey_create(val1->v1, val1->v2);
+        if (val1->v_static) {
+            g_assert(_nm_utils_strstrdictkey_equal(key1, val1->v_static));
+            g_assert(_nm_utils_strstrdictkey_equal(val1->v_static, key1));
+            g_assert_cmpint(_nm_utils_strstrdictkey_hash(key1),
+                            ==,
+                            _nm_utils_strstrdictkey_hash(val1->v_static));
+        }
+
+        for (j = 0; j < G_N_ELEMENTS(values); j++) {
+            gs_free NMUtilsStrStrDictKey *key2 = NULL;
+
+            val2 = &values[j];
+            key2 = _nm_utils_strstrdictkey_create(val2->v1, val2->v2);
+            if (i != j) {
+                g_assert(!_nm_utils_strstrdictkey_equal(key1, key2));
+                g_assert(!_nm_utils_strstrdictkey_equal(key2, key1));
+            }
+        }
+    }
 }
 
 /*****************************************************************************/
 
 static guint
-_g_strv_length (gconstpointer arr)
-{
-	return arr ? g_strv_length ((char **) arr) : 0;
-}
-
-static void
-test_nm_ptrarray_len (void)
-{
-#define _PTRARRAY_cmp(len, arr) \
-	G_STMT_START { \
-		g_assert_cmpint (len, ==, NM_PTRARRAY_LEN (arr)); \
-		g_assert_cmpint (len, ==, _g_strv_length (arr)); \
-	} G_STMT_END
-#define _PTRARRAY_LEN0(T) \
-	G_STMT_START { \
-		T **vnull = NULL; \
-		T *const*vnull1 = NULL; \
-		T *const*const vnull2 = NULL; \
-		T *v0[] = { NULL }; \
-		T *const*v01 = v0; \
-		T *const*const v02 = v0; \
-		T **const v03 = v0; \
-		\
-		_PTRARRAY_cmp (0, vnull); \
-		_PTRARRAY_cmp (0, vnull1); \
-		_PTRARRAY_cmp (0, vnull2); \
-		_PTRARRAY_cmp (0, v0); \
-		_PTRARRAY_cmp (0, v01); \
-		_PTRARRAY_cmp (0, v02); \
-		_PTRARRAY_cmp (0, v03); \
-	} G_STMT_END
-
-	_PTRARRAY_LEN0 (char);
-	_PTRARRAY_LEN0 (const char);
-	_PTRARRAY_LEN0 (int);
-	_PTRARRAY_LEN0 (const int);
-	_PTRARRAY_LEN0 (void *);
-	_PTRARRAY_LEN0 (void);
-	_PTRARRAY_LEN0 (const void);
-
-#define _PTRARRAY_LENn(T) \
-	G_STMT_START { \
-		T x[5] = { 0 }; \
-		\
-		T *v1[] = { &x[0], NULL }; \
-		T *const*v11 = v1; \
-		T *const*const v12 = v1; \
-		T **const v13 = v1; \
-		\
-		T *v2[] = { &x[0], &x[1], NULL }; \
-		T *const*v21 = v2; \
-		T *const*const v22 = v2; \
-		T **const v23 = v2; \
-		\
-		_PTRARRAY_cmp (1, v1); \
-		_PTRARRAY_cmp (1, v11); \
-		_PTRARRAY_cmp (1, v12); \
-		_PTRARRAY_cmp (1, v13); \
-		\
-		_PTRARRAY_cmp (2, v2); \
-		_PTRARRAY_cmp (2, v21); \
-		_PTRARRAY_cmp (2, v22); \
-		_PTRARRAY_cmp (2, v23); \
-	} G_STMT_END
-
-	_PTRARRAY_LENn (char);
-	_PTRARRAY_LENn (const char);
-	_PTRARRAY_LENn (int);
-	_PTRARRAY_LENn (const int);
-	_PTRARRAY_LENn (void *);
+_g_strv_length(gconstpointer arr)
+{
+    return arr ? g_strv_length((char **) arr) : 0;
+}
+
+static void
+test_nm_ptrarray_len(void)
+{
+#define _PTRARRAY_cmp(len, arr)                         \
+    G_STMT_START                                        \
+    {                                                   \
+        g_assert_cmpint(len, ==, NM_PTRARRAY_LEN(arr)); \
+        g_assert_cmpint(len, ==, _g_strv_length(arr));  \
+    }                                                   \
+    G_STMT_END
+#define _PTRARRAY_LEN0(T)                \
+    G_STMT_START                         \
+    {                                    \
+        T **            vnull  = NULL;   \
+        T *const *      vnull1 = NULL;   \
+        T *const *const vnull2 = NULL;   \
+        T *             v0[]   = {NULL}; \
+        T *const *      v01    = v0;     \
+        T *const *const v02    = v0;     \
+        T **const       v03    = v0;     \
+                                         \
+        _PTRARRAY_cmp(0, vnull);         \
+        _PTRARRAY_cmp(0, vnull1);        \
+        _PTRARRAY_cmp(0, vnull2);        \
+        _PTRARRAY_cmp(0, v0);            \
+        _PTRARRAY_cmp(0, v01);           \
+        _PTRARRAY_cmp(0, v02);           \
+        _PTRARRAY_cmp(0, v03);           \
+    }                                    \
+    G_STMT_END
+
+    _PTRARRAY_LEN0(char);
+    _PTRARRAY_LEN0(const char);
+    _PTRARRAY_LEN0(int);
+    _PTRARRAY_LEN0(const int);
+    _PTRARRAY_LEN0(void *);
+    _PTRARRAY_LEN0(void);
+    _PTRARRAY_LEN0(const void);
+
+#define _PTRARRAY_LENn(T)                            \
+    G_STMT_START                                     \
+    {                                                \
+        T x[5] = {0};                                \
+                                                     \
+        T *             v1[] = {&x[0], NULL};        \
+        T *const *      v11  = v1;                   \
+        T *const *const v12  = v1;                   \
+        T **const       v13  = v1;                   \
+                                                     \
+        T *             v2[] = {&x[0], &x[1], NULL}; \
+        T *const *      v21  = v2;                   \
+        T *const *const v22  = v2;                   \
+        T **const       v23  = v2;                   \
+                                                     \
+        _PTRARRAY_cmp(1, v1);                        \
+        _PTRARRAY_cmp(1, v11);                       \
+        _PTRARRAY_cmp(1, v12);                       \
+        _PTRARRAY_cmp(1, v13);                       \
+                                                     \
+        _PTRARRAY_cmp(2, v2);                        \
+        _PTRARRAY_cmp(2, v21);                       \
+        _PTRARRAY_cmp(2, v22);                       \
+        _PTRARRAY_cmp(2, v23);                       \
+    }                                                \
+    G_STMT_END
+
+    _PTRARRAY_LENn(char);
+    _PTRARRAY_LENn(const char);
+    _PTRARRAY_LENn(int);
+    _PTRARRAY_LENn(const int);
+    _PTRARRAY_LENn(void *);
 }
 
 /*****************************************************************************/
 
 static void
-test_nm_utils_dns_option_validate_do (char *option, gboolean ipv6, const NMUtilsDNSOptionDesc *descs,
-                                      gboolean exp_result, char *exp_name, gboolean exp_value)
+test_nm_utils_dns_option_validate_do(char *                      option,
+                                     gboolean                    ipv6,
+                                     const NMUtilsDNSOptionDesc *descs,
+                                     gboolean                    exp_result,
+                                     char *                      exp_name,
+                                     gboolean                    exp_value)
 {
-	char *name;
-	long value = 0;
-	gboolean result;
+    char *   name;
+    long     value = 0;
+    gboolean result;
 
-	result = _nm_utils_dns_option_validate (option, &name, &value, ipv6, descs);
+    result = _nm_utils_dns_option_validate(option, &name, &value, ipv6, descs);
 
-	g_assert (result == exp_result);
-	g_assert_cmpstr (name, ==, exp_name);
-	g_assert (value == exp_value);
+    g_assert(result == exp_result);
+    g_assert_cmpstr(name, ==, exp_name);
+    g_assert(value == exp_value);
 
-	g_free (name);
+    g_free(name);
 }
 
 static const NMUtilsDNSOptionDesc opt_descs[] = {
-	/* name                   num      ipv6 */
-	{ "opt1",                 FALSE,   FALSE },
-	{ "opt2",                 TRUE,    FALSE },
-	{ "opt3",                 FALSE,   TRUE  },
-	{ "opt4",                 TRUE,    TRUE  },
-	{ NULL,                   FALSE,   FALSE }
-};
+    /* name                   num      ipv6 */
+    {"opt1", FALSE, FALSE},
+    {"opt2", TRUE, FALSE},
+    {"opt3", FALSE, TRUE},
+    {"opt4", TRUE, TRUE},
+    {NULL, FALSE, FALSE}};
 
 static void
-test_nm_utils_dns_option_validate (void)
+test_nm_utils_dns_option_validate(void)
 {
-	/*                                    opt            ipv6    descs        result name       value */
-	test_nm_utils_dns_option_validate_do ("",            FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do (":",           FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do (":1",          FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do (":val",        FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt",         FALSE,  NULL,        TRUE,  "opt",     -1);
-	test_nm_utils_dns_option_validate_do ("opt:",        FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt:12",      FALSE,  NULL,        TRUE,  "opt",     12);
-	test_nm_utils_dns_option_validate_do ("opt:12 ",     FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt:val",     FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt:2val",    FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt:2:3",     FALSE,  NULL,        FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt-6",       FALSE,  NULL,        TRUE,  "opt-6",   -1);
+    /*                                    opt            ipv6    descs        result name       value */
+    test_nm_utils_dns_option_validate_do("", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do(":", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do(":1", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do(":val", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt", FALSE, NULL, TRUE, "opt", -1);
+    test_nm_utils_dns_option_validate_do("opt:", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt:12", FALSE, NULL, TRUE, "opt", 12);
+    test_nm_utils_dns_option_validate_do("opt:12 ", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt:val", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt:2val", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt:2:3", FALSE, NULL, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt-6", FALSE, NULL, TRUE, "opt-6", -1);
 
-	test_nm_utils_dns_option_validate_do ("opt1",        FALSE,  opt_descs,   TRUE,  "opt1",    -1);
-	test_nm_utils_dns_option_validate_do ("opt1",        TRUE,   opt_descs,   TRUE,  "opt1",    -1);
-	test_nm_utils_dns_option_validate_do ("opt1:3",      FALSE,  opt_descs,   FALSE,  NULL,     -1);
+    test_nm_utils_dns_option_validate_do("opt1", FALSE, opt_descs, TRUE, "opt1", -1);
+    test_nm_utils_dns_option_validate_do("opt1", TRUE, opt_descs, TRUE, "opt1", -1);
+    test_nm_utils_dns_option_validate_do("opt1:3", FALSE, opt_descs, FALSE, NULL, -1);
 
-	test_nm_utils_dns_option_validate_do ("opt2",        FALSE,  opt_descs,   FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt2:5",      FALSE,  opt_descs,   TRUE,  "opt2",    5);
+    test_nm_utils_dns_option_validate_do("opt2", FALSE, opt_descs, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt2:5", FALSE, opt_descs, TRUE, "opt2", 5);
 
-	test_nm_utils_dns_option_validate_do ("opt3",        FALSE,  opt_descs,   FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt3",        TRUE,   opt_descs,   TRUE,  "opt3",    -1);
+    test_nm_utils_dns_option_validate_do("opt3", FALSE, opt_descs, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt3", TRUE, opt_descs, TRUE, "opt3", -1);
 
-	test_nm_utils_dns_option_validate_do ("opt4",        FALSE,  opt_descs,   FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt4",        TRUE,   opt_descs,   FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt4:40",     FALSE,  opt_descs,   FALSE, NULL,      -1);
-	test_nm_utils_dns_option_validate_do ("opt4:40",     TRUE,   opt_descs,   TRUE,  "opt4",    40);
+    test_nm_utils_dns_option_validate_do("opt4", FALSE, opt_descs, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt4", TRUE, opt_descs, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt4:40", FALSE, opt_descs, FALSE, NULL, -1);
+    test_nm_utils_dns_option_validate_do("opt4:40", TRUE, opt_descs, TRUE, "opt4", 40);
 }
 
 static void
-test_nm_utils_dns_option_find_idx (void)
+test_nm_utils_dns_option_find_idx(void)
 {
-	GPtrArray *options;
+    GPtrArray *options;
 
-	options = g_ptr_array_new ();
+    options = g_ptr_array_new();
 
-	g_ptr_array_add (options, "debug");
-	g_ptr_array_add (options, "timeout:5");
-	g_ptr_array_add (options, "edns0");
+    g_ptr_array_add(options, "debug");
+    g_ptr_array_add(options, "timeout:5");
+    g_ptr_array_add(options, "edns0");
 
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "debug"),      ==, 0);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "debug:1"),    ==, 0);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "timeout"),    ==, 1);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "timeout:5"),  ==, 1);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "timeout:2"),  ==, 1);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "edns0"),      ==, 2);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, "rotate"),     ==, -1);
-	g_assert_cmpint (_nm_utils_dns_option_find_idx (options, ""),           ==, -1);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "debug"), ==, 0);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "debug:1"), ==, 0);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "timeout"), ==, 1);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "timeout:5"), ==, 1);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "timeout:2"), ==, 1);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "edns0"), ==, 2);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, "rotate"), ==, -1);
+    g_assert_cmpint(_nm_utils_dns_option_find_idx(options, ""), ==, -1);
 
-	g_ptr_array_free (options, TRUE);
+    g_ptr_array_free(options, TRUE);
 }
 
 /*****************************************************************************/
 
 static void
-_json_config_check_valid (const char *conf, gboolean expected)
+_json_config_check_valid(const char *conf, gboolean expected)
 {
-	gs_free_error GError *error = NULL;
-	gboolean res;
+    gs_free_error GError *error = NULL;
+    gboolean              res;
 
-	res = nm_utils_is_json_object (conf, &error);
-	g_assert_cmpint (res, ==, expected);
-	g_assert (res || error);
+    res = nm_utils_is_json_object(conf, &error);
+    g_assert_cmpint(res, ==, expected);
+    g_assert(res || error);
 }
-
-static void
-test_nm_utils_check_valid_json (void)
+
+static void
+test_nm_utils_check_valid_json(void)
 {
-	_json_config_check_valid (NULL, FALSE);
-	_json_config_check_valid ("", FALSE);
-#if WITH_JSON_VALIDATION
-	_json_config_check_valid ("{ }", TRUE);
-	_json_config_check_valid ("{ \"a\" : 1 }", TRUE);
-	_json_config_check_valid ("{ \"a\" : }", FALSE);
-#else
-	/* Without JSON library everything except empty string is considered valid */
-	_json_config_check_valid ("{ }", TRUE);
-	_json_config_check_valid ("{'%!-a1} ", TRUE);
-	_json_config_check_valid (" {'%!-a1}", TRUE);
-	_json_config_check_valid ("{'%!-a1", FALSE);
-#endif
-}
-
-static void
-_team_config_equal_check (const char *conf1,
-                          const char *conf2,
-                          gboolean port_config,
-                          gboolean expected)
-{
-	nm_auto_free_team_setting NMTeamSetting *team_a = NULL;
-	nm_auto_free_team_setting NMTeamSetting *team_b = NULL;
-	gboolean is_same;
-
-	if (nmtst_get_rand_bool ())
-		NM_SWAP (conf1, conf2);
-
-	if (!nm_streq0 (conf1, conf2)) {
-		_team_config_equal_check (conf1, conf1, port_config, TRUE);
-		_team_config_equal_check (conf2, conf2, port_config, TRUE);
-	}
-
-	team_a = nm_team_setting_new (port_config, conf1);
-	team_b = nm_team_setting_new (port_config, conf2);
-
-	is_same = (nm_team_setting_cmp (team_a, team_b, TRUE) == 0);
-	g_assert_cmpint (is_same, ==, expected);
-
-	if (nm_streq0 (conf1, conf2)) {
-		g_assert_cmpint (nm_team_setting_cmp (team_a, team_b, FALSE), ==, 0);
-		g_assert (expected);
-	} else
-		g_assert_cmpint (nm_team_setting_cmp (team_a, team_b, FALSE), !=, 0);
-}
-
-static void
-test_nm_utils_team_config_equal (void)
-{
-	_team_config_equal_check ("",
-	                          "",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("",
-	                          " ",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("{}",
-	                          "{ }",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("{}",
-	                          "{",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"a\": 1 }",
-	                          "{ \"a\": 1 }",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"a\": 1 }",
-	                          "{ \"a\":   1 }",
-	                          TRUE,
-	                          TRUE);
-
-	/* team config */
-	_team_config_equal_check ("{ }",
-	                          "{ \"runner\" :  { \"name\" : \"random\"} }",
-	                          FALSE,
-	                          !WITH_JSON_VALIDATION);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"roundrobin\"} }",
-	                          "{ \"runner\" :  { \"name\" : \"random\"} }",
-	                          FALSE,
-	                          !WITH_JSON_VALIDATION);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"random\"} }",
-	                          "{ \"runner\" :  { \"name\" : \"random\"} }",
-	                          FALSE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"loadbalance\"} }",
-	                          "{ \"runner\" :  { \"name\" : \"loadbalance\"} }",
-	                          FALSE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"random\"}, \"ports\" : { \"eth0\" : {} } }",
-	                          "{ \"runner\" :  { \"name\" : \"random\"}, \"ports\" : { \"eth1\" : {} } }",
-	                          FALSE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"lacp\"} }",
-	                          "{ \"runner\" :  { \"name\" : \"lacp\", \"tx_hash\" : [ \"eth\", \"ipv4\", \"ipv6\" ] } }",
-	                          FALSE,
-	                          !WITH_JSON_VALIDATION);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"roundrobin\"} }",
-	                          "{ \"runner\" :  { \"name\" : \"roundrobin\", \"tx_hash\" : [ \"eth\", \"ipv4\", \"ipv6\" ] } }",
-	                          FALSE,
-	                          !WITH_JSON_VALIDATION);
-	_team_config_equal_check ("{ \"runner\" :  { \"name\" : \"lacp\"} }",
-	                          "{ \"runner\" :  { \"name\" : \"lacp\", \"tx_hash\" : [ \"eth\" ] } }",
-	                          FALSE,
-	                          !WITH_JSON_VALIDATION);
-
-	/* team port config */
-	_team_config_equal_check ("{ }",
-	                          "{ \"link_watch\" :  { \"name\" : \"ethtool\"} }",
-	                          TRUE,
-	                          !WITH_JSON_VALIDATION);
-	_team_config_equal_check ("{ }",
-	                          "{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"link_watch\" :  { \"name\" : \"ethtool\"} }",
-	                          "{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
-	                          TRUE,
-	                          !WITH_JSON_VALIDATION);
-	_team_config_equal_check ("{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
-	                          "{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
-	                          TRUE,
-	                          TRUE);
-	_team_config_equal_check ("{ \"link_watch\" :  { \"name\" : \"arp_ping\"}, \"ports\" : { \"eth0\" : {} } }",
-	                          "{ \"link_watch\" :  { \"name\" : \"arp_ping\"}, \"ports\" : { \"eth1\" : {} } }",
-	                          TRUE,
-	                          TRUE);
+    _json_config_check_valid(NULL, FALSE);
+    _json_config_check_valid("", FALSE);
+
+    /* Without JSON library everything except empty string is considered valid */
+    nmtst_json_vt_reset(FALSE);
+    _json_config_check_valid("{ }", TRUE);
+    _json_config_check_valid("{'%!-a1} ", TRUE);
+    _json_config_check_valid(" {'%!-a1}", TRUE);
+    _json_config_check_valid("{'%!-a1", FALSE);
+
+    if (nmtst_json_vt_reset(TRUE)) {
+        _json_config_check_valid("{ }", TRUE);
+        _json_config_check_valid("{ \"a\" : 1 }", TRUE);
+        _json_config_check_valid("{ \"a\" : }", FALSE);
+    }
+}
+
+static void
+_team_config_equal_check(const char *conf1,
+                         const char *conf2,
+                         gboolean    port_config,
+                         gboolean    expected)
+{
+    nm_auto_free_team_setting NMTeamSetting *team_a = NULL;
+    nm_auto_free_team_setting NMTeamSetting *team_b = NULL;
+    gboolean                                 is_same;
+
+    if (nmtst_get_rand_bool())
+        NM_SWAP(&conf1, &conf2);
+
+    if (!nm_streq0(conf1, conf2)) {
+        _team_config_equal_check(conf1, conf1, port_config, TRUE);
+        _team_config_equal_check(conf2, conf2, port_config, TRUE);
+    }
+
+    team_a = nm_team_setting_new(port_config, conf1);
+    team_b = nm_team_setting_new(port_config, conf2);
+
+    is_same = (nm_team_setting_cmp(team_a, team_b, TRUE) == 0);
+    g_assert_cmpint(is_same, ==, expected);
+
+    if (nm_streq0(conf1, conf2)) {
+        g_assert_cmpint(nm_team_setting_cmp(team_a, team_b, FALSE), ==, 0);
+        g_assert(expected);
+    } else
+        g_assert_cmpint(nm_team_setting_cmp(team_a, team_b, FALSE), !=, 0);
+}
+
+static void
+test_nm_utils_team_config_equal(void)
+{
+    int with_json_vt;
+
+    for (with_json_vt = 0; with_json_vt < 2; with_json_vt++) {
+        const NMJsonVt *vt;
+
+        vt = nmtst_json_vt_reset(!!with_json_vt);
+
+        _team_config_equal_check("", "", TRUE, TRUE);
+        _team_config_equal_check("", " ", TRUE, TRUE);
+        _team_config_equal_check("{}", "{ }", TRUE, TRUE);
+        _team_config_equal_check("{}", "{", TRUE, TRUE);
+        _team_config_equal_check("{ \"a\": 1 }", "{ \"a\": 1 }", TRUE, TRUE);
+        _team_config_equal_check("{ \"a\": 1 }", "{ \"a\":   1 }", TRUE, TRUE);
+
+        /* team config */
+        _team_config_equal_check("{ }", "{ \"runner\" :  { \"name\" : \"random\"} }", FALSE, !vt);
+        _team_config_equal_check("{ \"runner\" :  { \"name\" : \"roundrobin\"} }",
+                                 "{ \"runner\" :  { \"name\" : \"random\"} }",
+                                 FALSE,
+                                 !vt);
+        _team_config_equal_check("{ \"runner\" :  { \"name\" : \"random\"} }",
+                                 "{ \"runner\" :  { \"name\" : \"random\"} }",
+                                 FALSE,
+                                 TRUE);
+        _team_config_equal_check("{ \"runner\" :  { \"name\" : \"loadbalance\"} }",
+                                 "{ \"runner\" :  { \"name\" : \"loadbalance\"} }",
+                                 FALSE,
+                                 TRUE);
+        _team_config_equal_check(
+            "{ \"runner\" :  { \"name\" : \"random\"}, \"ports\" : { \"eth0\" : {} } }",
+            "{ \"runner\" :  { \"name\" : \"random\"}, \"ports\" : { \"eth1\" : {} } }",
+            FALSE,
+            TRUE);
+        _team_config_equal_check("{ \"runner\" :  { \"name\" : \"lacp\"} }",
+                                 "{ \"runner\" :  { \"name\" : \"lacp\", \"tx_hash\" : [ \"eth\", "
+                                 "\"ipv4\", \"ipv6\" ] } }",
+                                 FALSE,
+                                 !vt);
+        _team_config_equal_check("{ \"runner\" :  { \"name\" : \"roundrobin\"} }",
+                                 "{ \"runner\" :  { \"name\" : \"roundrobin\", \"tx_hash\" : [ "
+                                 "\"eth\", \"ipv4\", \"ipv6\" ] } }",
+                                 FALSE,
+                                 !vt);
+        _team_config_equal_check(
+            "{ \"runner\" :  { \"name\" : \"lacp\"} }",
+            "{ \"runner\" :  { \"name\" : \"lacp\", \"tx_hash\" : [ \"eth\" ] } }",
+            FALSE,
+            !vt);
+
+        /* team port config */
+        _team_config_equal_check("{ }",
+                                 "{ \"link_watch\" :  { \"name\" : \"ethtool\"} }",
+                                 TRUE,
+                                 !vt);
+        _team_config_equal_check("{ }",
+                                 "{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
+                                 TRUE,
+                                 TRUE);
+        _team_config_equal_check("{ \"link_watch\" :  { \"name\" : \"ethtool\"} }",
+                                 "{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
+                                 TRUE,
+                                 !vt);
+        _team_config_equal_check("{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
+                                 "{ \"link_watch\" :  { \"name\" : \"arp_ping\"} }",
+                                 TRUE,
+                                 TRUE);
+        _team_config_equal_check(
+            "{ \"link_watch\" :  { \"name\" : \"arp_ping\"}, \"ports\" : { \"eth0\" : {} } }",
+            "{ \"link_watch\" :  { \"name\" : \"arp_ping\"}, \"ports\" : { \"eth1\" : {} } }",
+            TRUE,
+            TRUE);
+    }
+
+    nmtst_json_vt_reset(TRUE);
 }
 
 /*****************************************************************************/
 
 enum TEST_IS_POWER_OF_TWP_ENUM_SIGNED {
-	_DUMMY_1 = -1,
+    _DUMMY_1 = -1,
 };
 
 enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED {
-	_DUMMY_2,
+    _DUMMY_2,
 };
 
 enum TEST_IS_POWER_OF_TWP_ENUM_SIGNED_64 {
-	_DUMMY_3 = (1LL << 40),
+    _DUMMY_3 = (1LL << 40),
 };
 
 enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED_64 {
-	_DUMMY_4a = -1,
-	_DUMMY_4b = (1LL << 40),
+    _DUMMY_4a = -1,
+    _DUMMY_4b = (1LL << 40),
 };
 
-#define test_nm_utils_is_power_of_two_do(type, x, expect) \
-	G_STMT_START { \
-		typeof (x) x1 = (x); \
-		type x2 = (type) x1; \
-		\
-		g_assert_cmpint (expect, ==, nm_utils_is_power_of_two (x1)); \
-		if (   ((typeof (x1)) x2) == x1 \
-		    && ((typeof (x2)) x1) == x2 \
-		    && x2 > 0) { \
-			/* x2 equals @x, and is positive. Compare to @expect */ \
-			g_assert_cmpint (expect, ==, nm_utils_is_power_of_two (x2)); \
-		} else if (!(x2 > 0)) { \
-			/* a non positive value is always FALSE. */ \
-			g_assert_cmpint (FALSE, ==, nm_utils_is_power_of_two (x2)); \
-		} \
-		if (x2) { \
-			x2 = -x2; \
-			if (!(x2 > 0)) { \
-				/* for negative values, we return FALSE. */ \
-				g_assert_cmpint (FALSE, ==, nm_utils_is_power_of_two (x2)); \
-			} \
-		} \
-	} G_STMT_END
-
-static void
-test_nm_utils_is_power_of_two (void)
-{
-	guint64 xyes, xno;
-	int i, j;
-	GRand *rand = nmtst_get_rand ();
-	int numbits;
-
-	for (i = -1; i < 64; i++) {
-
-		/* find a (positive) x which is a power of two. */
-		if (i == -1)
-			xyes = 0;
-		else {
-			xyes = (((guint64) 1) << i);
-			g_assert (xyes != 0);
-		}
-
-		xno = xyes;
-		if (xyes != 0) {
+#define test_nm_utils_is_power_of_two_do(type, x, expect)                   \
+    G_STMT_START                                                            \
+    {                                                                       \
+        typeof(x) x1 = (x);                                                 \
+        type     x2  = (type) x1;                                           \
+        gboolean val;                                                       \
+                                                                            \
+        val = nm_utils_is_power_of_two(x1);                                 \
+        g_assert_cmpint(expect, ==, val);                                   \
+        if (x1 != 0)                                                        \
+            g_assert_cmpint(val, ==, nm_utils_is_power_of_two_or_zero(x1)); \
+        else {                                                              \
+            g_assert(nm_utils_is_power_of_two_or_zero(x1));                 \
+            g_assert(!val);                                                 \
+        }                                                                   \
+        if (((typeof(x1)) x2) == x1 && ((typeof(x2)) x1) == x2 && x2 > 0) { \
+            /* x2 equals @x, and is positive. Compare to @expect */         \
+            g_assert_cmpint(expect, ==, nm_utils_is_power_of_two(x2));      \
+        } else if (!(x2 > 0)) {                                             \
+            /* a non positive value is always FALSE. */                     \
+            g_assert_cmpint(FALSE, ==, nm_utils_is_power_of_two(x2));       \
+        }                                                                   \
+        if (x2) {                                                           \
+            x2 = -x2;                                                       \
+            if (!(x2 > 0)) {                                                \
+                /* for negative values, we return FALSE. */                 \
+                g_assert_cmpint(FALSE, ==, nm_utils_is_power_of_two(x2));   \
+            }                                                               \
+        }                                                                   \
+    }                                                                       \
+    G_STMT_END
+
+static void
+test_nm_utils_is_power_of_two(void)
+{
+    guint64 xyes, xno;
+    int     i, j;
+    GRand * rand = nmtst_get_rand();
+    int     numbits;
+
+    g_assert(!nm_utils_is_power_of_two(0));
+    g_assert(nm_utils_is_power_of_two_or_zero(0));
+
+    for (i = -1; i < 64; i++) {
+        /* find a (positive) x which is a power of two. */
+        if (i == -1)
+            xyes = 0;
+        else {
+            xyes = (((guint64) 1) << i);
+            g_assert(xyes != 0);
+        }
+
+        xno = xyes;
+        if (xyes != 0) {
 again:
-			/* Find another @xno, that is not a power of two. Do that,
-			 * by randomly setting bits. */
-			numbits = g_rand_int_range (rand, 1, 65);
-			while (xno != ~((guint64) 0) && numbits > 0) {
-				guint64 v = (((guint64) 1) << g_rand_int_range (rand, 0, 64));
-
-				if ((xno | v) != xno) {
-					xno |= v;
-					--numbits;
-				}
-			}
-			if (xno == xyes)
-				goto again;
-		}
-
-		for (j = 0; j < 2; j++) {
-			gboolean expect = j == 0;
-			guint64 x = expect ? xyes : xno;
-
-			if (expect && xyes == 0)
-				continue;
-
-			/* check if @x is as @expect, when casted to a certain data type. */
-			test_nm_utils_is_power_of_two_do (gint8, x, expect);
-			test_nm_utils_is_power_of_two_do (guint8, x, expect);
-			test_nm_utils_is_power_of_two_do (gint16, x, expect);
-			test_nm_utils_is_power_of_two_do (guint16, x, expect);
-			test_nm_utils_is_power_of_two_do (gint32, x, expect);
-			test_nm_utils_is_power_of_two_do (guint32, x, expect);
-			test_nm_utils_is_power_of_two_do (gint64, x, expect);
-			test_nm_utils_is_power_of_two_do (guint64, x, expect);
-			test_nm_utils_is_power_of_two_do (char, x, expect);
-			test_nm_utils_is_power_of_two_do (unsigned char, x, expect);
-			test_nm_utils_is_power_of_two_do (signed char, x, expect);
-			test_nm_utils_is_power_of_two_do (enum TEST_IS_POWER_OF_TWP_ENUM_SIGNED, x, expect);
-			test_nm_utils_is_power_of_two_do (enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED, x, expect);
-			test_nm_utils_is_power_of_two_do (enum TEST_IS_POWER_OF_TWP_ENUM_SIGNED_64, x, expect);
-			test_nm_utils_is_power_of_two_do (enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED_64, x, expect);
-		}
-	}
+            /* Find another @xno, that is not a power of two. Do that,
+             * by randomly setting bits. */
+            numbits = g_rand_int_range(rand, 1, 65);
+            while (xno != ~((guint64) 0) && numbits > 0) {
+                guint64 v = (((guint64) 1) << g_rand_int_range(rand, 0, 64));
+
+                if ((xno | v) != xno) {
+                    xno |= v;
+                    --numbits;
+                }
+            }
+            if (xno == xyes)
+                goto again;
+        }
+
+        for (j = 0; j < 2; j++) {
+            gboolean expect = j == 0;
+            guint64  x      = expect ? xyes : xno;
+
+            if (expect && xyes == 0)
+                continue;
+
+            /* check if @x is as @expect, when casted to a certain data type. */
+            test_nm_utils_is_power_of_two_do(gint8, x, expect);
+            test_nm_utils_is_power_of_two_do(guint8, x, expect);
+            test_nm_utils_is_power_of_two_do(gint16, x, expect);
+            test_nm_utils_is_power_of_two_do(guint16, x, expect);
+            test_nm_utils_is_power_of_two_do(gint32, x, expect);
+            test_nm_utils_is_power_of_two_do(guint32, x, expect);
+            test_nm_utils_is_power_of_two_do(gint64, x, expect);
+            test_nm_utils_is_power_of_two_do(guint64, x, expect);
+            test_nm_utils_is_power_of_two_do(char, x, expect);
+            test_nm_utils_is_power_of_two_do(unsigned char, x, expect);
+            test_nm_utils_is_power_of_two_do(signed char, x, expect);
+            test_nm_utils_is_power_of_two_do(enum TEST_IS_POWER_OF_TWP_ENUM_SIGNED, x, expect);
+            test_nm_utils_is_power_of_two_do(enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED, x, expect);
+            test_nm_utils_is_power_of_two_do(enum TEST_IS_POWER_OF_TWP_ENUM_SIGNED_64, x, expect);
+            test_nm_utils_is_power_of_two_do(enum TEST_IS_POWER_OF_TWP_ENUM_UNSIGNED_64, x, expect);
+        }
+    }
 }
 
 /*****************************************************************************/
 
 static int
-_test_find_binary_search_cmp (gconstpointer a, gconstpointer b, gpointer dummy)
-{
-	int ia, ib;
-
-	ia = GPOINTER_TO_INT (a);
-	ib = GPOINTER_TO_INT (b);
-
-	if (ia == ib)
-		return 0;
-	if (ia < ib)
-		return -1;
-	return 1;
-}
-
-static void
-_test_find_binary_search_do (const int *array, gsize len)
-{
-	gsize i;
-	gssize idx, idx_first, idx_last;
-	gs_free gconstpointer *parray = g_new (gconstpointer, len);
-	const int NEEDLE = 0;
-	gconstpointer pneedle = GINT_TO_POINTER (NEEDLE);
-	gssize expected_result;
-
-	for (i = 0; i < len; i++)
-		parray[i] = GINT_TO_POINTER (array[i]);
-
-	expected_result = _nm_utils_ptrarray_find_first (parray, len, pneedle);
-
-	idx = nm_utils_ptrarray_find_binary_search (parray, len, pneedle, _test_find_binary_search_cmp, NULL, &idx_first, &idx_last);
-	if (expected_result >= 0) {
-		g_assert_cmpint (expected_result, ==, idx);
-	} else {
-		gssize idx2 = ~idx;
-		g_assert_cmpint (idx, <, 0);
-
-		g_assert (idx2 >= 0);
-		g_assert (idx2 <= len);
-		g_assert (idx2 - 1 < 0 || _test_find_binary_search_cmp (parray[idx2 - 1], pneedle, NULL) < 0);
-		g_assert (idx2 >= len || _test_find_binary_search_cmp (parray[idx2], pneedle, NULL) > 0);
-	}
-	g_assert_cmpint (idx, ==, idx_first);
-	g_assert_cmpint (idx, ==, idx_last);
-	for (i = 0; i < len; i++) {
-		int cmp;
-
-		cmp = _test_find_binary_search_cmp (parray[i], pneedle, NULL);
-		if (cmp == 0) {
-			g_assert (pneedle == parray[i]);
-			g_assert (idx >= 0);
-			g_assert (i == idx);
-		} else {
-			g_assert (pneedle != parray[i]);
-			if (cmp < 0) {
-				if (idx < 0)
-					g_assert (i < ~idx);
-				else
-					g_assert (i < idx);
-			} else {
-				if (idx < 0)
-					g_assert (i >= ~idx);
-				else
-					g_assert (i >= idx);
-			}
-		}
-	}
-}
-
-static void
-_test_find_binary_search_do_uint32 (const int *int_array, gsize len)
-{
-	gssize idx;
-	const int OFFSET = 100;
-	const int NEEDLE = 0 + OFFSET;
-	gssize expected_result = -1;
-	guint32 array[30];
-
-	g_assert (len <= G_N_ELEMENTS (array));
-
-	/* the test data has negative values. Shift them... */
-	for (idx = 0; idx < len; idx++) {
-		int v = int_array[idx];
-
-		g_assert (v > -OFFSET);
-		g_assert (v < OFFSET);
-		g_assert (idx == 0 || v > int_array[idx - 1]);
-		array[idx] = (guint32) (int_array[idx] + OFFSET);
-		if (array[idx] == NEEDLE)
-			expected_result = idx;
-	}
-
-	idx = nm_utils_array_find_binary_search (array,
-	                                         sizeof (guint32),
-	                                         len,
-	                                         &NEEDLE,
-	                                         nm_cmp_uint32_p_with_data,
-	                                         NULL);
-	if (expected_result >= 0)
-		g_assert_cmpint (expected_result, ==, idx);
-	else {
-		gssize idx2 = ~idx;
-		g_assert_cmpint (idx, <, 0);
-
-		g_assert (idx2 >= 0);
-		g_assert (idx2 <= len);
-		g_assert (idx2 - 1 < 0 || array[idx2 - 1] < NEEDLE);
-		g_assert (idx2 >= len || array[idx2] > NEEDLE);
-	}
-}
-#define test_find_binary_search_do(...) \
-	G_STMT_START { \
-		const int _array[] = { __VA_ARGS__ }; \
-		_test_find_binary_search_do (_array, G_N_ELEMENTS (_array)); \
-		_test_find_binary_search_do_uint32 (_array, G_N_ELEMENTS (_array)); \
-	} G_STMT_END
-
-static void
-test_nm_utils_ptrarray_find_binary_search (void)
-{
-	test_find_binary_search_do (            0);
-	test_find_binary_search_do (        -1, 0);
-	test_find_binary_search_do (    -2, -1, 0);
-	test_find_binary_search_do (-3, -2, -1, 0);
-	test_find_binary_search_do (            0, 1);
-	test_find_binary_search_do (            0, 1, 2);
-	test_find_binary_search_do (        -1, 0, 1, 2);
-	test_find_binary_search_do (    -2, -1, 0, 1, 2);
-	test_find_binary_search_do (-3, -2, -1, 0, 1, 2);
-	test_find_binary_search_do (-3, -2, -1, 0, 1, 2);
-	test_find_binary_search_do (-3, -2, -1, 0, 1, 2, 3);
-	test_find_binary_search_do (-3, -2, -1, 0, 1, 2, 3, 4);
-
-	test_find_binary_search_do (        -1);
-	test_find_binary_search_do (    -2, -1);
-	test_find_binary_search_do (-3, -2, -1);
-	test_find_binary_search_do (            1);
-	test_find_binary_search_do (            1, 2);
-	test_find_binary_search_do (        -1, 1, 2);
-	test_find_binary_search_do (    -2, -1, 1, 2);
-	test_find_binary_search_do (-3, -2, -1, 1, 2);
-	test_find_binary_search_do (-3, -2, -1, 1, 2);
-	test_find_binary_search_do (-3, -2, -1, 1, 2, 3);
-	test_find_binary_search_do (-3, -2, -1, 1, 2, 3, 4);
+_test_find_binary_search_cmp(gconstpointer a, gconstpointer b, gpointer dummy)
+{
+    int ia, ib;
+
+    ia = GPOINTER_TO_INT(a);
+    ib = GPOINTER_TO_INT(b);
+
+    if (ia == ib)
+        return 0;
+    if (ia < ib)
+        return -1;
+    return 1;
+}
+
+static void
+_test_find_binary_search_do(const int *array, gsize len)
+{
+    gsize   i;
+    gssize  idx, idx_first, idx_last;
+    gs_free gconstpointer *parray  = g_new(gconstpointer, len);
+    const int              NEEDLE  = 0;
+    gconstpointer          pneedle = GINT_TO_POINTER(NEEDLE);
+    gssize                 expected_result;
+
+    for (i = 0; i < len; i++)
+        parray[i] = GINT_TO_POINTER(array[i]);
+
+    expected_result = _nm_utils_ptrarray_find_first(parray, len, pneedle);
+
+    idx = nm_utils_ptrarray_find_binary_search(parray,
+                                               len,
+                                               pneedle,
+                                               _test_find_binary_search_cmp,
+                                               NULL,
+                                               &idx_first,
+                                               &idx_last);
+    if (expected_result >= 0) {
+        g_assert_cmpint(expected_result, ==, idx);
+    } else {
+        gssize idx2 = ~idx;
+        g_assert_cmpint(idx, <, 0);
+
+        g_assert(idx2 >= 0);
+        g_assert(idx2 <= len);
+        g_assert(idx2 - 1 < 0 || _test_find_binary_search_cmp(parray[idx2 - 1], pneedle, NULL) < 0);
+        g_assert(idx2 >= len || _test_find_binary_search_cmp(parray[idx2], pneedle, NULL) > 0);
+    }
+    g_assert_cmpint(idx, ==, idx_first);
+    g_assert_cmpint(idx, ==, idx_last);
+    for (i = 0; i < len; i++) {
+        int cmp;
+
+        cmp = _test_find_binary_search_cmp(parray[i], pneedle, NULL);
+        if (cmp == 0) {
+            g_assert(pneedle == parray[i]);
+            g_assert(idx >= 0);
+            g_assert(i == idx);
+        } else {
+            g_assert(pneedle != parray[i]);
+            if (cmp < 0) {
+                if (idx < 0)
+                    g_assert(i < ~idx);
+                else
+                    g_assert(i < idx);
+            } else {
+                if (idx < 0)
+                    g_assert(i >= ~idx);
+                else
+                    g_assert(i >= idx);
+            }
+        }
+    }
+}
+
+static void
+_test_find_binary_search_do_uint32(const int *int_array, gsize len)
+{
+    gssize    idx;
+    const int OFFSET          = 100;
+    const int NEEDLE          = 0 + OFFSET;
+    gssize    expected_result = -1;
+    guint32   array[30];
+
+    g_assert(len <= G_N_ELEMENTS(array));
+
+    /* the test data has negative values. Shift them... */
+    for (idx = 0; idx < len; idx++) {
+        int v = int_array[idx];
+
+        g_assert(v > -OFFSET);
+        g_assert(v < OFFSET);
+        g_assert(idx == 0 || v > int_array[idx - 1]);
+        array[idx] = (guint32)(int_array[idx] + OFFSET);
+        if (array[idx] == NEEDLE)
+            expected_result = idx;
+    }
+
+    idx = nm_utils_array_find_binary_search(array,
+                                            sizeof(guint32),
+                                            len,
+                                            &NEEDLE,
+                                            nm_cmp_uint32_p_with_data,
+                                            NULL);
+    if (expected_result >= 0)
+        g_assert_cmpint(expected_result, ==, idx);
+    else {
+        gssize idx2 = ~idx;
+        g_assert_cmpint(idx, <, 0);
+
+        g_assert(idx2 >= 0);
+        g_assert(idx2 <= len);
+        g_assert(idx2 - 1 < 0 || array[idx2 - 1] < NEEDLE);
+        g_assert(idx2 >= len || array[idx2] > NEEDLE);
+    }
+}
+#define test_find_binary_search_do(...)                                   \
+    G_STMT_START                                                          \
+    {                                                                     \
+        const int _array[] = {__VA_ARGS__};                               \
+        _test_find_binary_search_do(_array, G_N_ELEMENTS(_array));        \
+        _test_find_binary_search_do_uint32(_array, G_N_ELEMENTS(_array)); \
+    }                                                                     \
+    G_STMT_END
+
+static void
+test_nm_utils_ptrarray_find_binary_search(void)
+{
+    test_find_binary_search_do(0);
+    test_find_binary_search_do(-1, 0);
+    test_find_binary_search_do(-2, -1, 0);
+    test_find_binary_search_do(-3, -2, -1, 0);
+    test_find_binary_search_do(0, 1);
+    test_find_binary_search_do(0, 1, 2);
+    test_find_binary_search_do(-1, 0, 1, 2);
+    test_find_binary_search_do(-2, -1, 0, 1, 2);
+    test_find_binary_search_do(-3, -2, -1, 0, 1, 2);
+    test_find_binary_search_do(-3, -2, -1, 0, 1, 2);
+    test_find_binary_search_do(-3, -2, -1, 0, 1, 2, 3);
+    test_find_binary_search_do(-3, -2, -1, 0, 1, 2, 3, 4);
+
+    test_find_binary_search_do(-1);
+    test_find_binary_search_do(-2, -1);
+    test_find_binary_search_do(-3, -2, -1);
+    test_find_binary_search_do(1);
+    test_find_binary_search_do(1, 2);
+    test_find_binary_search_do(-1, 1, 2);
+    test_find_binary_search_do(-2, -1, 1, 2);
+    test_find_binary_search_do(-3, -2, -1, 1, 2);
+    test_find_binary_search_do(-3, -2, -1, 1, 2);
+    test_find_binary_search_do(-3, -2, -1, 1, 2, 3);
+    test_find_binary_search_do(-3, -2, -1, 1, 2, 3, 4);
 }
 
 /*****************************************************************************/
@@ -7514,584 +8494,619 @@ test_nm_utils_ptrarray_find_binary_search (void)
 #define BIN_SEARCH_W_DUPS_JITTER 10
 
 static int
-_test_bin_search2_cmp (gconstpointer pa,
-                       gconstpointer pb,
-                       gpointer user_data)
+_test_bin_search2_cmp(gconstpointer pa, gconstpointer pb, gpointer user_data)
 {
-	int a = GPOINTER_TO_INT (pa);
-	int b = GPOINTER_TO_INT (pb);
+    int a = GPOINTER_TO_INT(pa);
+    int b = GPOINTER_TO_INT(pb);
 
-	g_assert (a >= 0 && a <= BIN_SEARCH_W_DUPS_LEN + BIN_SEARCH_W_DUPS_JITTER);
-	g_assert (b >= 0 && b <= BIN_SEARCH_W_DUPS_LEN + BIN_SEARCH_W_DUPS_JITTER);
-	NM_CMP_DIRECT (a, b);
-	return 0;
+    g_assert(a >= 0 && a <= BIN_SEARCH_W_DUPS_LEN + BIN_SEARCH_W_DUPS_JITTER);
+    g_assert(b >= 0 && b <= BIN_SEARCH_W_DUPS_LEN + BIN_SEARCH_W_DUPS_JITTER);
+    NM_CMP_DIRECT(a, b);
+    return 0;
 }
 
 static int
-_test_bin_search2_cmp_p (gconstpointer pa,
-                         gconstpointer pb,
-                         gpointer user_data)
-{
-	return _test_bin_search2_cmp (*((gpointer *) pa), *((gpointer *) pb), NULL);
-}
-
-static void
-test_nm_utils_ptrarray_find_binary_search_with_duplicates (void)
-{
-	gssize idx, idx2, idx_first2, idx_first, idx_last;
-	int i_test, i_len, i;
-	gssize j;
-	gconstpointer arr[BIN_SEARCH_W_DUPS_LEN];
-	const int N_TEST = 10;
-
-	for (i_test = 0; i_test < N_TEST; i_test++) {
-		for (i_len = 0; i_len < BIN_SEARCH_W_DUPS_LEN; i_len++) {
-
-			/* fill with random numbers... surely there are some duplicates
-			 * there... or maybe even there are none... */
-			for (i = 0; i < i_len; i++)
-				arr[i] = GINT_TO_POINTER (nmtst_get_rand_uint32 () % (i_len + BIN_SEARCH_W_DUPS_JITTER));
-			g_qsort_with_data (arr,
-			                   i_len,
-			                   sizeof (gpointer),
-			                   _test_bin_search2_cmp_p,
-			                   NULL);
-			for (i = 0; i < i_len + BIN_SEARCH_W_DUPS_JITTER; i++) {
-				gconstpointer p = GINT_TO_POINTER (i);
-
-				idx = nm_utils_ptrarray_find_binary_search (arr, i_len, p, _test_bin_search2_cmp, NULL, &idx_first, &idx_last);
-
-				idx_first2 = _nm_utils_ptrarray_find_first (arr, i_len, p);
-
-				idx2 = nm_utils_array_find_binary_search (arr, sizeof (gpointer), i_len, &p, _test_bin_search2_cmp_p, NULL);
-				g_assert_cmpint (idx, ==, idx2);
-
-				if (idx_first2 < 0) {
-					g_assert_cmpint (idx, <, 0);
-					g_assert_cmpint (idx, ==, idx_first);
-					g_assert_cmpint (idx, ==, idx_last);
-					idx = ~idx;
-					g_assert_cmpint (idx, >=, 0);
-					g_assert_cmpint (idx, <=, i_len);
-					if (i_len == 0)
-						g_assert_cmpint (idx, ==, 0);
-					else {
-						g_assert (idx == i_len || GPOINTER_TO_INT (arr[idx]) > i);
-						g_assert (idx == 0     || GPOINTER_TO_INT (arr[idx - 1]) < i);
-					}
-				} else {
-					g_assert_cmpint (idx_first, ==, idx_first2);
-					g_assert_cmpint (idx_first, >=, 0);
-					g_assert_cmpint (idx_last, <, i_len);
-					g_assert_cmpint (idx_first, <=, idx_last);
-					g_assert_cmpint (idx, >=, idx_first);
-					g_assert_cmpint (idx, <=, idx_last);
-					for (j = idx_first; j < idx_last; j++)
-						g_assert (GPOINTER_TO_INT (arr[j]) == i);
-					g_assert (idx_first == 0 || GPOINTER_TO_INT (arr[idx_first - 1]) < i);
-					g_assert (idx_last == i_len - 1 || GPOINTER_TO_INT (arr[idx_last + 1]) > i);
-				}
-			}
-		}
-	}
+_test_bin_search2_cmp_p(gconstpointer pa, gconstpointer pb, gpointer user_data)
+{
+    return _test_bin_search2_cmp(*((gpointer *) pa), *((gpointer *) pb), NULL);
+}
+
+static void
+test_nm_utils_ptrarray_find_binary_search_with_duplicates(void)
+{
+    gssize        idx, idx2, idx_first2, idx_first, idx_last;
+    int           i_test, i_len, i;
+    gssize        j;
+    gconstpointer arr[BIN_SEARCH_W_DUPS_LEN];
+    const int     N_TEST = 10;
+
+    for (i_test = 0; i_test < N_TEST; i_test++) {
+        for (i_len = 0; i_len < BIN_SEARCH_W_DUPS_LEN; i_len++) {
+            /* fill with random numbers... surely there are some duplicates
+             * there... or maybe even there are none... */
+            for (i = 0; i < i_len; i++)
+                arr[i] =
+                    GINT_TO_POINTER(nmtst_get_rand_uint32() % (i_len + BIN_SEARCH_W_DUPS_JITTER));
+            g_qsort_with_data(arr, i_len, sizeof(gpointer), _test_bin_search2_cmp_p, NULL);
+            for (i = 0; i < i_len + BIN_SEARCH_W_DUPS_JITTER; i++) {
+                gconstpointer p = GINT_TO_POINTER(i);
+
+                idx = nm_utils_ptrarray_find_binary_search(arr,
+                                                           i_len,
+                                                           p,
+                                                           _test_bin_search2_cmp,
+                                                           NULL,
+                                                           &idx_first,
+                                                           &idx_last);
+
+                idx_first2 = _nm_utils_ptrarray_find_first(arr, i_len, p);
+
+                idx2 = nm_utils_array_find_binary_search(arr,
+                                                         sizeof(gpointer),
+                                                         i_len,
+                                                         &p,
+                                                         _test_bin_search2_cmp_p,
+                                                         NULL);
+                g_assert_cmpint(idx, ==, idx2);
+
+                if (idx_first2 < 0) {
+                    g_assert_cmpint(idx, <, 0);
+                    g_assert_cmpint(idx, ==, idx_first);
+                    g_assert_cmpint(idx, ==, idx_last);
+                    idx = ~idx;
+                    g_assert_cmpint(idx, >=, 0);
+                    g_assert_cmpint(idx, <=, i_len);
+                    if (i_len == 0)
+                        g_assert_cmpint(idx, ==, 0);
+                    else {
+                        g_assert(idx == i_len || GPOINTER_TO_INT(arr[idx]) > i);
+                        g_assert(idx == 0 || GPOINTER_TO_INT(arr[idx - 1]) < i);
+                    }
+                } else {
+                    g_assert_cmpint(idx_first, ==, idx_first2);
+                    g_assert_cmpint(idx_first, >=, 0);
+                    g_assert_cmpint(idx_last, <, i_len);
+                    g_assert_cmpint(idx_first, <=, idx_last);
+                    g_assert_cmpint(idx, >=, idx_first);
+                    g_assert_cmpint(idx, <=, idx_last);
+                    for (j = idx_first; j < idx_last; j++)
+                        g_assert(GPOINTER_TO_INT(arr[j]) == i);
+                    g_assert(idx_first == 0 || GPOINTER_TO_INT(arr[idx_first - 1]) < i);
+                    g_assert(idx_last == i_len - 1 || GPOINTER_TO_INT(arr[idx_last + 1]) > i);
+                }
+            }
+        }
+    }
 }
 
 /*****************************************************************************/
 
 static void
-_test_nm_utils_enum_to_str_do_full (GType type,
-                                    int flags,
-                                    const char *exp_str,
-                                    const NMUtilsEnumValueInfo *value_infos)
+_test_nm_utils_enum_to_str_do_full(GType                       type,
+                                   int                         flags,
+                                   const char *                exp_str,
+                                   const NMUtilsEnumValueInfo *value_infos)
 {
-	gs_free char *str = NULL;
-	int flags2;
-	gs_free char *err_token = NULL;
-	gboolean result;
+    gs_free char *str = NULL;
+    int           flags2;
+    gs_free char *err_token = NULL;
+    gboolean      result;
 
-	g_assert (exp_str);
+    g_assert(exp_str);
 
-	str = _nm_utils_enum_to_str_full (type, flags, ", ", value_infos);
-	g_assert_cmpstr (str, ==, exp_str);
+    str = _nm_utils_enum_to_str_full(type, flags, ", ", value_infos);
+    g_assert_cmpstr(str, ==, exp_str);
 
-	if (!value_infos) {
-		gs_free char *str2 = NULL;
+    if (!value_infos) {
+        gs_free char *str2 = NULL;
 
-		str2 = nm_utils_enum_to_str (type, flags);
-		g_assert_cmpstr (str2, ==, exp_str);
-	}
+        str2 = nm_utils_enum_to_str(type, flags);
+        g_assert_cmpstr(str2, ==, exp_str);
+    }
 
-	result = _nm_utils_enum_from_str_full (type, str, &flags2, &err_token, value_infos);
-	g_assert (result == TRUE);
-	g_assert_cmpint (flags2, ==, flags);
-	g_assert_cmpstr (err_token, ==, NULL);
+    result = _nm_utils_enum_from_str_full(type, str, &flags2, &err_token, value_infos);
+    g_assert(result == TRUE);
+    g_assert_cmpint(flags2, ==, flags);
+    g_assert_cmpstr(err_token, ==, NULL);
 }
 
-#define _test_nm_utils_enum_to_str_do(...) _test_nm_utils_enum_to_str_do_full (__VA_ARGS__, NULL)
+#define _test_nm_utils_enum_to_str_do(...) _test_nm_utils_enum_to_str_do_full(__VA_ARGS__, NULL)
 
 static void
-_test_nm_utils_enum_from_str_do_full (GType type,
-                                     const char *str,
-                                     gboolean exp_result,
-                                     int exp_flags,
-                                     const char *exp_err_token,
+_test_nm_utils_enum_from_str_do_full(GType                       type,
+                                     const char *                str,
+                                     gboolean                    exp_result,
+                                     int                         exp_flags,
+                                     const char *                exp_err_token,
                                      const NMUtilsEnumValueInfo *value_infos)
 {
-	int flags;
-	gs_free char *err_token = NULL;
-	gboolean result;
+    int           flags;
+    gs_free char *err_token = NULL;
+    gboolean      result;
 
-	result = _nm_utils_enum_from_str_full (type, str, &flags, &err_token, value_infos);
+    result = _nm_utils_enum_from_str_full(type, str, &flags, &err_token, value_infos);
 
-	g_assert (result == exp_result);
-	g_assert_cmpint (flags, ==, exp_flags);
-	g_assert_cmpstr (err_token, ==, exp_err_token);
+    g_assert(result == exp_result);
+    g_assert_cmpint(flags, ==, exp_flags);
+    g_assert_cmpstr(err_token, ==, exp_err_token);
 
-	if (!value_infos) {
-		int flags2;
-		gs_free char *err_token2 = NULL;
-		gboolean result2;
+    if (!value_infos) {
+        int           flags2;
+        gs_free char *err_token2 = NULL;
+        gboolean      result2;
 
-		result2 = nm_utils_enum_from_str (type, str, &flags2, &err_token2);
-		g_assert (result2 == exp_result);
-		g_assert_cmpint (flags2, ==, exp_flags);
-		g_assert_cmpstr (err_token2, ==, exp_err_token);
-	}
+        result2 = nm_utils_enum_from_str(type, str, &flags2, &err_token2);
+        g_assert(result2 == exp_result);
+        g_assert_cmpint(flags2, ==, exp_flags);
+        g_assert_cmpstr(err_token2, ==, exp_err_token);
+    }
 
-	if (result) {
-		int flags2;
-		gs_free char *str2 = NULL;
-		gs_free char *err_token2 = NULL;
+    if (result) {
+        int           flags2;
+        gs_free char *str2       = NULL;
+        gs_free char *err_token2 = NULL;
 
-		str2 = _nm_utils_enum_to_str_full (type, flags, ", ", value_infos);
-		g_assert (str2);
+        str2 = _nm_utils_enum_to_str_full(type, flags, ", ", value_infos);
+        g_assert(str2);
 
-		result = _nm_utils_enum_from_str_full (type, str2, &flags2, &err_token2, value_infos);
-		g_assert (result == TRUE);
-		g_assert_cmpint (flags2, ==, flags);
-		g_assert_cmpstr (err_token, ==, NULL);
-	}
+        result = _nm_utils_enum_from_str_full(type, str2, &flags2, &err_token2, value_infos);
+        g_assert(result == TRUE);
+        g_assert_cmpint(flags2, ==, flags);
+        g_assert_cmpstr(err_token, ==, NULL);
+    }
 }
 
 #define _test_nm_utils_enum_from_str_do(...) _test_nm_utils_enum_from_str_do_full(__VA_ARGS__, NULL)
 
 static void
-_test_nm_utils_enum_get_values_do (GType type, int from, int to, const char *exp_str)
-{
-	gs_free const char **strv = NULL;
-	gs_free char *str = NULL;
-
-	g_assert (exp_str);
-
-	strv = nm_utils_enum_get_values (type, from, to);
-	g_assert (strv);
-	str = g_strjoinv (",", (char **) strv);
-	g_assert_cmpstr (str, ==, exp_str);
-}
-
-static void
-test_nm_utils_enum (void)
-{
-	GType bool_enum = nm_test_general_bool_enum_get_type();
-	GType meta_flags = nm_test_general_meta_flags_get_type();
-	GType color_flags = nm_test_general_color_flags_get_type();
-	static const NMUtilsEnumValueInfo color_value_infos[] = {
-		{
-			.nick = "nick-4d",
-			.value = 0x4D,
-		},
-		{
-			.nick = "nick-5",
-			.value = 5,
-		},
-		{
-			.nick = "nick-red",
-			.value = NM_TEST_GENERAL_COLOR_FLAGS_RED,
-		},
-		{ 0 },
-	};
-
-	_test_nm_utils_enum_to_str_do (bool_enum, NM_TEST_GENERAL_BOOL_ENUM_YES, "yes");
-	_test_nm_utils_enum_to_str_do (bool_enum, NM_TEST_GENERAL_BOOL_ENUM_UNKNOWN, "unknown");
-	_test_nm_utils_enum_to_str_do (bool_enum, NM_TEST_GENERAL_BOOL_ENUM_INVALID, "4");
-	_test_nm_utils_enum_to_str_do (bool_enum, NM_TEST_GENERAL_BOOL_ENUM_67, "67");
-	_test_nm_utils_enum_to_str_do (bool_enum, NM_TEST_GENERAL_BOOL_ENUM_46, "64");
-
-	_test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_NONE, "none");
-	_test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_BAZ, "baz");
-	_test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_FOO |
-	                                           NM_TEST_GENERAL_META_FLAGS_BAR |
-	                                           NM_TEST_GENERAL_META_FLAGS_BAZ, "foo, bar, baz");
-	_test_nm_utils_enum_to_str_do (meta_flags, 0xFF, "foo, bar, baz, 0xf8");
-	_test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_0x8, "0x8");
-	_test_nm_utils_enum_to_str_do (meta_flags, NM_TEST_GENERAL_META_FLAGS_0x4, "0x10");
-
-	_test_nm_utils_enum_to_str_do (color_flags, NM_TEST_GENERAL_COLOR_FLAGS_RED, "red");
-	_test_nm_utils_enum_to_str_do (color_flags, NM_TEST_GENERAL_COLOR_FLAGS_WHITE, "0x1");
-	_test_nm_utils_enum_to_str_do (color_flags, NM_TEST_GENERAL_COLOR_FLAGS_RED |
-	                                            NM_TEST_GENERAL_COLOR_FLAGS_GREEN, "red, green");
-
-	_test_nm_utils_enum_to_str_do_full (color_flags,
-	                                      NM_TEST_GENERAL_COLOR_FLAGS_RED
-	                                    | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
-	                                    "nick-red, green",
-	                                    color_value_infos);
-
-	_test_nm_utils_enum_to_str_do_full (color_flags,
-	                                      0x4D
-	                                    |  NM_TEST_GENERAL_COLOR_FLAGS_RED
-	                                    | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
-	                                    "nick-4d",
-	                                    color_value_infos);
-
-	_test_nm_utils_enum_to_str_do_full (color_flags,
-	                                      5
-	                                    | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
-	                                    "nick-5, green",
-	                                    color_value_infos);
-
-	_test_nm_utils_enum_from_str_do (bool_enum, "", FALSE, 0, NULL);
-	_test_nm_utils_enum_from_str_do (bool_enum, " ", FALSE, 0, NULL);
-	_test_nm_utils_enum_from_str_do (bool_enum, "invalid", FALSE, 0, "invalid");
-	_test_nm_utils_enum_from_str_do (bool_enum, "yes", TRUE, NM_TEST_GENERAL_BOOL_ENUM_YES, NULL);
-	_test_nm_utils_enum_from_str_do (bool_enum, "no", TRUE, NM_TEST_GENERAL_BOOL_ENUM_NO, NULL);
-	_test_nm_utils_enum_from_str_do (bool_enum, "yes,no", FALSE, 0, "yes,no");
-
-	_test_nm_utils_enum_from_str_do (meta_flags, "", TRUE, 0, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, " ", TRUE, 0, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, "foo", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, "foo,baz", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO |
-	                                                              NM_TEST_GENERAL_META_FLAGS_BAZ, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, "foo, baz", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO |
-	                                                               NM_TEST_GENERAL_META_FLAGS_BAZ, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, "foo,,bar", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO |
-	                                                               NM_TEST_GENERAL_META_FLAGS_BAR, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, "foo,baz,quux,bar", FALSE, 0, "quux");
-	_test_nm_utils_enum_from_str_do (meta_flags, "foo,0x6", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO | 0x6, NULL);
-	_test_nm_utils_enum_from_str_do (meta_flags, "0x30,0x08,foo", TRUE, 0x39, NULL);
-
-	_test_nm_utils_enum_from_str_do (color_flags, "green", TRUE, NM_TEST_GENERAL_COLOR_FLAGS_GREEN, NULL);
-	_test_nm_utils_enum_from_str_do (color_flags, "blue,red", TRUE, NM_TEST_GENERAL_COLOR_FLAGS_BLUE |
-	                                                                NM_TEST_GENERAL_COLOR_FLAGS_RED, NULL);
-	_test_nm_utils_enum_from_str_do (color_flags, "blue,white", FALSE, 0, "white");
-
-	_test_nm_utils_enum_from_str_do_full (color_flags,
-	                                      "nick-red",
-	                                      TRUE,
-	                                      NM_TEST_GENERAL_COLOR_FLAGS_RED,
-	                                      NULL,
-	                                      color_value_infos);
-
-	_test_nm_utils_enum_from_str_do_full (color_flags,
-	                                      "0x4D",
-	                                      TRUE,
-	                                      0x4D,
-	                                      NULL,
-	                                      color_value_infos);
-
-	_test_nm_utils_enum_from_str_do_full (color_flags,
-	                                      "green,nick-4d",
-	                                      TRUE,
-	                                        0x4D
-	                                      | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
-	                                      NULL,
-	                                      color_value_infos);
-
-	_test_nm_utils_enum_from_str_do_full (color_flags,
-	                                      "nick-4d,nick-red,nick-5,green,nick-red",
-	                                      TRUE,
-	                                        0x4D
-	                                      | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
-	                                      NULL,
-	                                      color_value_infos);
-
-	_test_nm_utils_enum_get_values_do (bool_enum, 0, G_MAXINT, "no,yes,maybe,unknown,67,64");
-	_test_nm_utils_enum_get_values_do (bool_enum, NM_TEST_GENERAL_BOOL_ENUM_YES,
-	                                   NM_TEST_GENERAL_BOOL_ENUM_MAYBE, "yes,maybe");
-	_test_nm_utils_enum_get_values_do (meta_flags, 0, G_MAXINT, "none,foo,bar,baz,0x8,0x10");
-	_test_nm_utils_enum_get_values_do (color_flags, 0, G_MAXINT, "blue,red,green");
+_test_nm_utils_enum_get_values_do(GType type, int from, int to, const char *exp_str)
+{
+    gs_free const char **strv = NULL;
+    gs_free char *       str  = NULL;
+
+    g_assert(exp_str);
+
+    strv = nm_utils_enum_get_values(type, from, to);
+    g_assert(strv);
+    str = g_strjoinv(",", (char **) strv);
+    g_assert_cmpstr(str, ==, exp_str);
+}
+
+static void
+test_nm_utils_enum(void)
+{
+    GType                             bool_enum           = nm_test_general_bool_enum_get_type();
+    GType                             meta_flags          = nm_test_general_meta_flags_get_type();
+    GType                             color_flags         = nm_test_general_color_flags_get_type();
+    static const NMUtilsEnumValueInfo color_value_infos[] = {
+        {
+            .nick  = "nick-4d",
+            .value = 0x4D,
+        },
+        {
+            .nick  = "nick-5",
+            .value = 5,
+        },
+        {
+            .nick  = "nick-red",
+            .value = NM_TEST_GENERAL_COLOR_FLAGS_RED,
+        },
+        {0},
+    };
+
+    _test_nm_utils_enum_to_str_do(bool_enum, NM_TEST_GENERAL_BOOL_ENUM_YES, "yes");
+    _test_nm_utils_enum_to_str_do(bool_enum, NM_TEST_GENERAL_BOOL_ENUM_UNKNOWN, "unknown");
+    _test_nm_utils_enum_to_str_do(bool_enum, NM_TEST_GENERAL_BOOL_ENUM_INVALID, "4");
+    _test_nm_utils_enum_to_str_do(bool_enum, NM_TEST_GENERAL_BOOL_ENUM_67, "67");
+    _test_nm_utils_enum_to_str_do(bool_enum, NM_TEST_GENERAL_BOOL_ENUM_46, "64");
+
+    _test_nm_utils_enum_to_str_do(meta_flags, NM_TEST_GENERAL_META_FLAGS_NONE, "none");
+    _test_nm_utils_enum_to_str_do(meta_flags, NM_TEST_GENERAL_META_FLAGS_BAZ, "baz");
+    _test_nm_utils_enum_to_str_do(meta_flags,
+                                  NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAR
+                                      | NM_TEST_GENERAL_META_FLAGS_BAZ,
+                                  "foo, bar, baz");
+    _test_nm_utils_enum_to_str_do(meta_flags, 0xFF, "foo, bar, baz, 0xf8");
+    _test_nm_utils_enum_to_str_do(meta_flags, NM_TEST_GENERAL_META_FLAGS_0x8, "0x8");
+    _test_nm_utils_enum_to_str_do(meta_flags, NM_TEST_GENERAL_META_FLAGS_0x4, "0x10");
+
+    _test_nm_utils_enum_to_str_do(color_flags, NM_TEST_GENERAL_COLOR_FLAGS_RED, "red");
+    _test_nm_utils_enum_to_str_do(color_flags, NM_TEST_GENERAL_COLOR_FLAGS_WHITE, "0x1");
+    _test_nm_utils_enum_to_str_do(color_flags,
+                                  NM_TEST_GENERAL_COLOR_FLAGS_RED
+                                      | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                  "red, green");
+
+    _test_nm_utils_enum_to_str_do_full(color_flags,
+                                       NM_TEST_GENERAL_COLOR_FLAGS_RED
+                                           | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                       "nick-red, green",
+                                       color_value_infos);
+
+    _test_nm_utils_enum_to_str_do_full(color_flags,
+                                       0x4D | NM_TEST_GENERAL_COLOR_FLAGS_RED
+                                           | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                       "nick-4d",
+                                       color_value_infos);
+
+    _test_nm_utils_enum_to_str_do_full(color_flags,
+                                       5 | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                       "nick-5, green",
+                                       color_value_infos);
+
+    _test_nm_utils_enum_from_str_do(bool_enum, "", FALSE, 0, NULL);
+    _test_nm_utils_enum_from_str_do(bool_enum, " ", FALSE, 0, NULL);
+    _test_nm_utils_enum_from_str_do(bool_enum, "invalid", FALSE, 0, "invalid");
+    _test_nm_utils_enum_from_str_do(bool_enum, "yes", TRUE, NM_TEST_GENERAL_BOOL_ENUM_YES, NULL);
+    _test_nm_utils_enum_from_str_do(bool_enum, "no", TRUE, NM_TEST_GENERAL_BOOL_ENUM_NO, NULL);
+    _test_nm_utils_enum_from_str_do(bool_enum, "yes,no", FALSE, 0, "yes,no");
+
+    _test_nm_utils_enum_from_str_do(meta_flags, "", TRUE, 0, NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags, " ", TRUE, 0, NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags, "foo", TRUE, NM_TEST_GENERAL_META_FLAGS_FOO, NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags,
+                                    "foo,baz",
+                                    TRUE,
+                                    NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAZ,
+                                    NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags,
+                                    "foo, baz",
+                                    TRUE,
+                                    NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAZ,
+                                    NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags,
+                                    "foo,,bar",
+                                    TRUE,
+                                    NM_TEST_GENERAL_META_FLAGS_FOO | NM_TEST_GENERAL_META_FLAGS_BAR,
+                                    NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags, "foo,baz,quux,bar", FALSE, 0, "quux");
+    _test_nm_utils_enum_from_str_do(meta_flags,
+                                    "foo,0x6",
+                                    TRUE,
+                                    NM_TEST_GENERAL_META_FLAGS_FOO | 0x6,
+                                    NULL);
+    _test_nm_utils_enum_from_str_do(meta_flags, "0x30,0x08,foo", TRUE, 0x39, NULL);
+
+    _test_nm_utils_enum_from_str_do(color_flags,
+                                    "green",
+                                    TRUE,
+                                    NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                    NULL);
+    _test_nm_utils_enum_from_str_do(color_flags,
+                                    "blue,red",
+                                    TRUE,
+                                    NM_TEST_GENERAL_COLOR_FLAGS_BLUE
+                                        | NM_TEST_GENERAL_COLOR_FLAGS_RED,
+                                    NULL);
+    _test_nm_utils_enum_from_str_do(color_flags, "blue,white", FALSE, 0, "white");
+
+    _test_nm_utils_enum_from_str_do_full(color_flags,
+                                         "nick-red",
+                                         TRUE,
+                                         NM_TEST_GENERAL_COLOR_FLAGS_RED,
+                                         NULL,
+                                         color_value_infos);
+
+    _test_nm_utils_enum_from_str_do_full(color_flags, "0x4D", TRUE, 0x4D, NULL, color_value_infos);
+
+    _test_nm_utils_enum_from_str_do_full(color_flags,
+                                         "green,nick-4d",
+                                         TRUE,
+                                         0x4D | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                         NULL,
+                                         color_value_infos);
+
+    _test_nm_utils_enum_from_str_do_full(color_flags,
+                                         "nick-4d,nick-red,nick-5,green,nick-red",
+                                         TRUE,
+                                         0x4D | NM_TEST_GENERAL_COLOR_FLAGS_GREEN,
+                                         NULL,
+                                         color_value_infos);
+
+    _test_nm_utils_enum_get_values_do(bool_enum, 0, G_MAXINT, "no,yes,maybe,unknown,67,64");
+    _test_nm_utils_enum_get_values_do(bool_enum,
+                                      NM_TEST_GENERAL_BOOL_ENUM_YES,
+                                      NM_TEST_GENERAL_BOOL_ENUM_MAYBE,
+                                      "yes,maybe");
+    _test_nm_utils_enum_get_values_do(meta_flags, 0, G_MAXINT, "none,foo,bar,baz,0x8,0x10");
+    _test_nm_utils_enum_get_values_do(color_flags, 0, G_MAXINT, "blue,red,green");
 }
 
 /*****************************************************************************/
 
 static void
-_do_test_utils_str_utf8safe_unescape (const char *str, const char *expected, gsize expected_len)
-{
-	gsize l;
-	const char *s;
-	gs_free gpointer buf_free_1 = NULL;
-	gs_free char *str_free_1 = NULL;
-
-	s = nm_utils_buf_utf8safe_unescape (str, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &l, &buf_free_1);
-	g_assert_cmpint (expected_len, ==, l);
-	g_assert_cmpstr (s, ==, expected);
-
-	if (str == NULL) {
-		g_assert (!s);
-		g_assert (!buf_free_1);
-		g_assert_cmpint (l, ==, 0);
-	} else {
-		g_assert (s);
-		if (!strchr (str, '\\')) {
-			g_assert (!buf_free_1);
-			g_assert (s == str);
-			g_assert_cmpint (l, ==, strlen (str));
-		} else {
-			g_assert (buf_free_1);
-			g_assert (s == buf_free_1);
-			g_assert (memcmp (s, expected, expected_len) == 0);
-		}
-	}
-
-	if (   expected
-	    && l == strlen (expected)) {
-		/* there are no embeeded NULs. Check that nm_utils_str_utf8safe_unescape() yields the same result. */
-		s = nm_utils_str_utf8safe_unescape (str, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &str_free_1);
-		g_assert_cmpstr (s, ==, expected);
-		if (strchr (str, '\\')) {
-			g_assert (str_free_1 != str);
-			g_assert (s == str_free_1);
-		} else
-			g_assert (s == str);
-	}
+_do_test_utils_str_utf8safe_unescape(const char *str, const char *expected, gsize expected_len)
+{
+    gsize            l;
+    const char *     s;
+    gs_free gpointer buf_free_1 = NULL;
+    gs_free char *   str_free_1 = NULL;
+
+    s = nm_utils_buf_utf8safe_unescape(str, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &l, &buf_free_1);
+    g_assert_cmpint(expected_len, ==, l);
+    g_assert_cmpstr(s, ==, expected);
+
+    if (str == NULL) {
+        g_assert(!s);
+        g_assert(!buf_free_1);
+        g_assert_cmpint(l, ==, 0);
+    } else {
+        g_assert(s);
+        if (!strchr(str, '\\')) {
+            g_assert(!buf_free_1);
+            g_assert(s == str);
+            g_assert_cmpint(l, ==, strlen(str));
+        } else {
+            g_assert(buf_free_1);
+            g_assert(s == buf_free_1);
+            g_assert(memcmp(s, expected, expected_len) == 0);
+        }
+    }
+
+    if (expected && l == strlen(expected)) {
+        /* there are no embedded NULs. Check that nm_utils_str_utf8safe_unescape() yields the same result. */
+        s = nm_utils_str_utf8safe_unescape(str, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &str_free_1);
+        g_assert_cmpstr(s, ==, expected);
+        if (strchr(str, '\\')) {
+            g_assert(str_free_1 != str);
+            g_assert(s == str_free_1);
+        } else
+            g_assert(s == str);
+    }
 }
 
 #define do_test_utils_str_utf8safe_unescape(str, expected) \
-	_do_test_utils_str_utf8safe_unescape (""str"", expected, NM_STRLEN (expected))
-
-static void
-_do_test_utils_str_utf8safe (const char *str, gsize str_len, const char *expected, NMUtilsStrUtf8SafeFlags flags)
-{
-	const char *str_safe;
-	const char *buf_safe;
-	const char *s;
-	gs_free char *str_free_1 = NULL;
-	gs_free char *str_free_2 = NULL;
-	gs_free char *str_free_3 = NULL;
-	gs_free char *str_free_4 = NULL;
-	gs_free char *str_free_5 = NULL;
-	gs_free char *str_free_6 = NULL;
-	gs_free char *str_free_7 = NULL;
-	gs_free char *str_free_8 = NULL;
-	gboolean str_has_nul = FALSE;
-#define RND_FLAG ((nmtst_get_rand_bool ()) ? NM_UTILS_STR_UTF8_SAFE_FLAG_NONE : NM_UTILS_STR_UTF8_SAFE_FLAG_SECRET)
-
-	buf_safe = nm_utils_buf_utf8safe_escape (str, str_len, flags | RND_FLAG, &str_free_1);
-
-	str_safe = nm_utils_str_utf8safe_escape (str, flags | RND_FLAG, &str_free_2);
-
-	if (str_len == 0) {
-		g_assert (buf_safe == NULL);
-		g_assert (str_free_1 == NULL);
-		g_assert (str_safe == str);
-		g_assert (str == NULL || str[0] == '\0');
-		g_assert (str_free_2 == NULL);
-	} else if (str_len == strlen (str)) {
-		g_assert (buf_safe);
-		g_assert_cmpstr (buf_safe, ==, str_safe);
-
-		/* nm_utils_buf_utf8safe_escape() can only return a pointer equal to the input string,
-		 * if and only if str_len is negative. Otherwise, the input str won't be NUL terminated
-		 * and cannot be returned. */
-		g_assert (buf_safe != str);
-		g_assert (buf_safe == str_free_1);
-	} else
-		str_has_nul = TRUE;
-
-	str_free_3 = nm_utils_str_utf8safe_escape_cp (str, flags | RND_FLAG);
-	g_assert_cmpstr (str_free_3, ==, str_safe);
-	g_assert ((!str && !str_free_3) || (str != str_free_3));
-
-	if (str_len > 0)
-		_do_test_utils_str_utf8safe_unescape (buf_safe, str, str_len);
-
-	if (expected == NULL) {
-		g_assert (!str_has_nul);
-
-		g_assert (str_safe == str);
-		g_assert (!str_free_2);
-		if (str) {
-			g_assert (!strchr (str, '\\'));
-			g_assert (g_utf8_validate (str, -1, NULL));
-		}
-
-		g_assert (str == nm_utils_str_utf8safe_unescape (str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &str_free_4));
-		g_assert (!str_free_4);
-
-		str_free_5 = nm_utils_str_utf8safe_unescape_cp (str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-		if (str) {
-			g_assert (str_free_5 != str);
-			g_assert_cmpstr (str_free_5, ==, str);
-		} else
-			g_assert (!str_free_5);
-		return;
-	}
-
-	if (!str_has_nul) {
-		g_assert (str);
-		g_assert (str_safe != str);
-		g_assert (str_safe == str_free_2);
-		g_assert (   strchr (str, '\\')
-		          || !g_utf8_validate (str, -1, NULL)
-		          || (   NM_FLAGS_HAS (flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII)
-		              && NM_STRCHAR_ANY (str, ch, (guchar) ch >= 127))
-		          || (   NM_FLAGS_HAS (flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)
-		              && NM_STRCHAR_ANY (str, ch, (guchar) ch < ' ')));
-		g_assert (g_utf8_validate (str_safe, -1, NULL));
-
-		str_free_6 = g_strcompress (str_safe);
-		g_assert_cmpstr (str, ==, str_free_6);
-
-		str_free_7 = nm_utils_str_utf8safe_unescape_cp (str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-		g_assert (str_free_7 != str);
-		g_assert_cmpstr (str_free_7, ==, str);
-
-		s = nm_utils_str_utf8safe_unescape (str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &str_free_8);
-		g_assert (str_free_8 != str);
-		g_assert (s == str_free_8);
-		g_assert_cmpstr (str_free_8, ==, str);
-
-		g_assert_cmpstr (str_safe, ==, expected);
-
-		return;
-	}
-
-	g_assert_cmpstr (buf_safe, ==, expected);
-
+    _do_test_utils_str_utf8safe_unescape("" str "", expected, NM_STRLEN(expected))
+
+static void
+_do_test_utils_str_utf8safe(const char *            str,
+                            gsize                   str_len,
+                            const char *            expected,
+                            NMUtilsStrUtf8SafeFlags flags)
+{
+    const char *  str_safe;
+    const char *  buf_safe;
+    const char *  s;
+    gs_free char *str_free_1  = NULL;
+    gs_free char *str_free_2  = NULL;
+    gs_free char *str_free_3  = NULL;
+    gs_free char *str_free_4  = NULL;
+    gs_free char *str_free_5  = NULL;
+    gs_free char *str_free_6  = NULL;
+    gs_free char *str_free_7  = NULL;
+    gs_free char *str_free_8  = NULL;
+    gboolean      str_has_nul = FALSE;
+#define RND_FLAG                                                \
+    ((nmtst_get_rand_bool()) ? NM_UTILS_STR_UTF8_SAFE_FLAG_NONE \
+                             : NM_UTILS_STR_UTF8_SAFE_FLAG_SECRET)
+
+    buf_safe = nm_utils_buf_utf8safe_escape(str, str_len, flags | RND_FLAG, &str_free_1);
+
+    str_safe = nm_utils_str_utf8safe_escape(str, flags | RND_FLAG, &str_free_2);
+
+    if (str_len == 0) {
+        g_assert(buf_safe == NULL);
+        g_assert(str_free_1 == NULL);
+        g_assert(str_safe == str);
+        g_assert(str == NULL || str[0] == '\0');
+        g_assert(str_free_2 == NULL);
+    } else if (str_len == strlen(str)) {
+        g_assert(buf_safe);
+        g_assert_cmpstr(buf_safe, ==, str_safe);
+
+        /* nm_utils_buf_utf8safe_escape() can only return a pointer equal to the input string,
+         * if and only if str_len is negative. Otherwise, the input str won't be NUL terminated
+         * and cannot be returned. */
+        g_assert(buf_safe != str);
+        g_assert(buf_safe == str_free_1);
+    } else
+        str_has_nul = TRUE;
+
+    str_free_3 = nm_utils_str_utf8safe_escape_cp(str, flags | RND_FLAG);
+    g_assert_cmpstr(str_free_3, ==, str_safe);
+    g_assert((!str && !str_free_3) || (str != str_free_3));
+
+    if (str_len > 0)
+        _do_test_utils_str_utf8safe_unescape(buf_safe, str, str_len);
+
+    if (expected == NULL) {
+        g_assert(!str_has_nul);
+
+        g_assert(str_safe == str);
+        g_assert(!str_free_2);
+        if (str) {
+            g_assert(!strchr(str, '\\'));
+            g_assert(g_utf8_validate(str, -1, NULL));
+        }
+
+        g_assert(str
+                 == nm_utils_str_utf8safe_unescape(str_safe,
+                                                   NM_UTILS_STR_UTF8_SAFE_FLAG_NONE,
+                                                   &str_free_4));
+        g_assert(!str_free_4);
+
+        str_free_5 = nm_utils_str_utf8safe_unescape_cp(str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+        if (str) {
+            g_assert(str_free_5 != str);
+            g_assert_cmpstr(str_free_5, ==, str);
+        } else
+            g_assert(!str_free_5);
+        return;
+    }
+
+    if (!str_has_nul) {
+        g_assert(str);
+        g_assert(str_safe != str);
+        g_assert(str_safe == str_free_2);
+        g_assert(strchr(str, '\\') || !g_utf8_validate(str, -1, NULL)
+                 || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII)
+                     && NM_STRCHAR_ANY(str, ch, (guchar) ch >= 127))
+                 || (NM_FLAGS_HAS(flags, NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL)
+                     && NM_STRCHAR_ANY(str, ch, (guchar) ch < ' ')));
+        g_assert(g_utf8_validate(str_safe, -1, NULL));
+
+        str_free_6 = g_strcompress(str_safe);
+        g_assert_cmpstr(str, ==, str_free_6);
+
+        str_free_7 = nm_utils_str_utf8safe_unescape_cp(str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+        g_assert(str_free_7 != str);
+        g_assert_cmpstr(str_free_7, ==, str);
+
+        s = nm_utils_str_utf8safe_unescape(str_safe, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE, &str_free_8);
+        g_assert(str_free_8 != str);
+        g_assert(s == str_free_8);
+        g_assert_cmpstr(str_free_8, ==, str);
+
+        g_assert_cmpstr(str_safe, ==, expected);
+
+        return;
+    }
+
+    g_assert_cmpstr(buf_safe, ==, expected);
 }
 #define do_test_utils_str_utf8safe(str, expected, flags) \
-	_do_test_utils_str_utf8safe (""str"", NM_STRLEN (str), expected, flags)
-
-static void
-test_utils_str_utf8safe (void)
-{
-	_do_test_utils_str_utf8safe (NULL, 0, NULL,                                   NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-
-	do_test_utils_str_utf8safe ("", NULL,                                         NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\\", "\\\\",                                     NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\\a", "\\\\a",                                   NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\314", "\\314",                                  NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\314\315x\315\315x", "\\314\\315x\\315\\315x",   NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\314\315xx", "\\314\\315xx",                     NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\314xx", "\\314xx",                              NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\xa0", "\\240",                                  NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\xe2\x91\xa0", NULL,                             NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\xe2\xe2\x91\xa0", "\\342\xe2\x91\xa0",          NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\xe2\xe2\x91\xa0\xa0", "\\342\xe2\x91\xa0\\240", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("a", NULL,                                        NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("ab", NULL,                                       NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("ab\314", "ab\\314",                              NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("ab\314adsf", "ab\\314adsf",                      NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("abadsf", NULL,                                   NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("abäb", NULL,                                     NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("x\xa0", "x\\240",                                NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("Ä\304ab\\äb", "Ä\\304ab\\\\äb",                  NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("Äab\\äb", "Äab\\\\äb",                           NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("ÄÄab\\äb", "ÄÄab\\\\äb",                         NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("㈞abä㈞b", NULL,                                 NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("abäb", "ab\\303\\244b",                          NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII);
-	do_test_utils_str_utf8safe ("ab\ab", "ab\\007b",                              NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL);
-
-	do_test_utils_str_utf8safe ("\0", "\\000",                                    NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\0a\0", "\\000a\\000",                           NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\\\0", "\\\\\\000",                              NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\n\0", "\n\\000",                                NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
-	do_test_utils_str_utf8safe ("\n\0", "\\012\\000",                             NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL);
-
-	do_test_utils_str_utf8safe_unescape ("\n\\0", "\n\0");
-	do_test_utils_str_utf8safe_unescape ("\n\\01", "\n\01");
-	do_test_utils_str_utf8safe_unescape ("\n\\012", "\n\012");
-	do_test_utils_str_utf8safe_unescape ("\n\\.", "\n.");
-	do_test_utils_str_utf8safe_unescape ("\\n\\.3\\r", "\n.3\r");
+    _do_test_utils_str_utf8safe("" str "", NM_STRLEN(str), expected, flags)
+
+static void
+test_utils_str_utf8safe(void)
+{
+    _do_test_utils_str_utf8safe(NULL, 0, NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+
+    do_test_utils_str_utf8safe("", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\\", "\\\\", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\\a", "\\\\a", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\314", "\\314", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\314\315x\315\315x",
+                               "\\314\\315x\\315\\315x",
+                               NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\314\315xx", "\\314\\315xx", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\314xx", "\\314xx", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\xa0", "\\240", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\xe2\x91\xa0", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\xe2\xe2\x91\xa0",
+                               "\\342\xe2\x91\xa0",
+                               NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\xe2\xe2\x91\xa0\xa0",
+                               "\\342\xe2\x91\xa0\\240",
+                               NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("a", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("ab", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("ab\314", "ab\\314", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("ab\314adsf", "ab\\314adsf", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("abadsf", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("abäb", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("x\xa0", "x\\240", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("Ä\304ab\\äb", "Ä\\304ab\\\\äb", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("Äab\\äb", "Äab\\\\äb", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("ÄÄab\\äb", "ÄÄab\\\\äb", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("㈞abä㈞b", NULL, NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("abäb",
+                               "ab\\303\\244b",
+                               NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_NON_ASCII);
+    do_test_utils_str_utf8safe("ab\ab", "ab\\007b", NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL);
+
+    do_test_utils_str_utf8safe("\0", "\\000", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\0a\0", "\\000a\\000", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\\\0", "\\\\\\000", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\n\0", "\n\\000", NM_UTILS_STR_UTF8_SAFE_FLAG_NONE);
+    do_test_utils_str_utf8safe("\n\0", "\\012\\000", NM_UTILS_STR_UTF8_SAFE_FLAG_ESCAPE_CTRL);
+
+    do_test_utils_str_utf8safe_unescape("\n\\0", "\n\0");
+    do_test_utils_str_utf8safe_unescape("\n\\01", "\n\01");
+    do_test_utils_str_utf8safe_unescape("\n\\012", "\n\012");
+    do_test_utils_str_utf8safe_unescape("\n\\.", "\n.");
+    do_test_utils_str_utf8safe_unescape("\\n\\.3\\r", "\n.3\r");
 }
 
 /*****************************************************************************/
 
 static int
-_test_nm_in_set_get (int *call_counter, gboolean allow_called, int value)
-{
-	g_assert (call_counter);
-	*call_counter += 1;
-	if (!allow_called)
-		g_assert_not_reached ();
-	return value;
-}
-
-static void
-_test_nm_in_set_assert (int *call_counter, int expected)
-{
-	g_assert (call_counter);
-	g_assert_cmpint (expected, ==, *call_counter);
-	*call_counter = 0;
-}
-
-static void
-test_nm_in_set (void)
-{
-	int call_counter = 0;
-
-#define G(x) _test_nm_in_set_get (&call_counter, TRUE,  x)
-#define N(x) _test_nm_in_set_get (&call_counter, FALSE,  x)
-#define _ASSERT(expected, expr) \
-	G_STMT_START { \
-		_test_nm_in_set_assert (&call_counter, 0); \
-		g_assert (expr); \
-		_test_nm_in_set_assert (&call_counter, (expected)); \
-	} G_STMT_END
-	_ASSERT (1, !NM_IN_SET (-1, G( 1)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1)));
-
-	_ASSERT (2, !NM_IN_SET (-1, G( 1), G( 2)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N( 2)));
-	_ASSERT (2,  NM_IN_SET (-1, G( 1), G(-1)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N(-1)));
-
-	_ASSERT (3, !NM_IN_SET (-1, G( 1), G( 2), G( 3)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N( 2), N( 3)));
-	_ASSERT (2,  NM_IN_SET (-1, G( 1), G(-1), N( 3)));
-	_ASSERT (3,  NM_IN_SET (-1, G( 1), G( 2), G(-1)));
-	_ASSERT (2,  NM_IN_SET (-1, G( 1), G(-1), N(-1)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N( 2), N(-1)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N(-1), N( 3)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N(-1), N(-1)));
-
-	_ASSERT (4, !NM_IN_SET (-1, G( 1), G( 2), G( 3), G( 4)));
-	_ASSERT (1,  NM_IN_SET (-1, G(-1), N( 2), N( 3), N( 4)));
-	_ASSERT (2,  NM_IN_SET (-1, G( 1), G(-1), N( 3), N( 4)));
-	_ASSERT (3,  NM_IN_SET (-1, G( 1), G( 2), G(-1), N( 4)));
-	_ASSERT (4,  NM_IN_SET (-1, G( 1), G( 2), G( 3), G(-1)));
-
-	_ASSERT (4,  NM_IN_SET (-1, G( 1), G( 2), G( 3), G(-1), G( 5)));
-	_ASSERT (5,  NM_IN_SET (-1, G( 1), G( 2), G( 3), G( 4), G(-1)));
-	_ASSERT (6,  NM_IN_SET (-1, G( 1), G( 2), G( 3), G( 4), G( 5), G( -1)));
-
-	_ASSERT (1, !NM_IN_SET_SE (-1, G( 1)));
-	_ASSERT (1,  NM_IN_SET_SE (-1, G(-1)));
-
-	_ASSERT (2, !NM_IN_SET_SE (-1, G( 1), G( 2)));
-	_ASSERT (2,  NM_IN_SET_SE (-1, G(-1), G( 2)));
-	_ASSERT (2,  NM_IN_SET_SE (-1, G( 1), G(-1)));
-	_ASSERT (2,  NM_IN_SET_SE (-1, G(-1), G(-1)));
-
-	_ASSERT (3, !NM_IN_SET_SE (-1, G( 1), G( 2), G( 3)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G(-1), G( 2), G( 3)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G( 1), G(-1), G( 3)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G( 1), G( 2), G(-1)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G( 1), G(-1), G(-1)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G(-1), G( 2), G(-1)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G(-1), G(-1), G( 3)));
-	_ASSERT (3,  NM_IN_SET_SE (-1, G(-1), G(-1), G(-1)));
-
-	_ASSERT (4, !NM_IN_SET_SE (-1, G( 1), G( 2), G( 3), G( 4)));
-	_ASSERT (4,  NM_IN_SET_SE (-1, G(-1), G( 2), G( 3), G( 4)));
-	_ASSERT (4,  NM_IN_SET_SE (-1, G( 1), G(-1), G( 3), G( 4)));
-	_ASSERT (4,  NM_IN_SET_SE (-1, G( 1), G( 2), G(-1), G( 4)));
-	_ASSERT (4,  NM_IN_SET_SE (-1, G( 1), G( 2), G( 3), G(-1)));
-
-	_ASSERT (5,  NM_IN_SET_SE (-1, G( 1), G( 2), G( 3), G(-1), G( 5)));
-	_ASSERT (6,  NM_IN_SET_SE (-1, G( 1), G( 2), G( 3), G( 4), G( 5), G(-1)));
-
-	g_assert (!NM_IN_SET (0,  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
+_test_nm_in_set_get(int *call_counter, gboolean allow_called, int value)
+{
+    g_assert(call_counter);
+    *call_counter += 1;
+    if (!allow_called)
+        g_assert_not_reached();
+    return value;
+}
+
+static void
+_test_nm_in_set_assert(int *call_counter, int expected)
+{
+    g_assert(call_counter);
+    g_assert_cmpint(expected, ==, *call_counter);
+    *call_counter = 0;
+}
+
+static void
+test_nm_in_set(void)
+{
+    int call_counter = 0;
+
+#define G(x) _test_nm_in_set_get(&call_counter, TRUE, x)
+#define N(x) _test_nm_in_set_get(&call_counter, FALSE, x)
+#define _ASSERT(expected, expr)                            \
+    G_STMT_START                                           \
+    {                                                      \
+        _test_nm_in_set_assert(&call_counter, 0);          \
+        g_assert(expr);                                    \
+        _test_nm_in_set_assert(&call_counter, (expected)); \
+    }                                                      \
+    G_STMT_END
+    _ASSERT(1, !NM_IN_SET(-1, G(1)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1)));
+
+    _ASSERT(2, !NM_IN_SET(-1, G(1), G(2)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(2)));
+    _ASSERT(2, NM_IN_SET(-1, G(1), G(-1)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(-1)));
+
+    _ASSERT(3, !NM_IN_SET(-1, G(1), G(2), G(3)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(2), N(3)));
+    _ASSERT(2, NM_IN_SET(-1, G(1), G(-1), N(3)));
+    _ASSERT(3, NM_IN_SET(-1, G(1), G(2), G(-1)));
+    _ASSERT(2, NM_IN_SET(-1, G(1), G(-1), N(-1)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(2), N(-1)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(-1), N(3)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(-1), N(-1)));
+
+    _ASSERT(4, !NM_IN_SET(-1, G(1), G(2), G(3), G(4)));
+    _ASSERT(1, NM_IN_SET(-1, G(-1), N(2), N(3), N(4)));
+    _ASSERT(2, NM_IN_SET(-1, G(1), G(-1), N(3), N(4)));
+    _ASSERT(3, NM_IN_SET(-1, G(1), G(2), G(-1), N(4)));
+    _ASSERT(4, NM_IN_SET(-1, G(1), G(2), G(3), G(-1)));
+
+    _ASSERT(4, NM_IN_SET(-1, G(1), G(2), G(3), G(-1), G(5)));
+    _ASSERT(5, NM_IN_SET(-1, G(1), G(2), G(3), G(4), G(-1)));
+    _ASSERT(6, NM_IN_SET(-1, G(1), G(2), G(3), G(4), G(5), G(-1)));
+
+    _ASSERT(1, !NM_IN_SET_SE(-1, G(1)));
+    _ASSERT(1, NM_IN_SET_SE(-1, G(-1)));
+
+    _ASSERT(2, !NM_IN_SET_SE(-1, G(1), G(2)));
+    _ASSERT(2, NM_IN_SET_SE(-1, G(-1), G(2)));
+    _ASSERT(2, NM_IN_SET_SE(-1, G(1), G(-1)));
+    _ASSERT(2, NM_IN_SET_SE(-1, G(-1), G(-1)));
+
+    _ASSERT(3, !NM_IN_SET_SE(-1, G(1), G(2), G(3)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(-1), G(2), G(3)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(1), G(-1), G(3)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(1), G(2), G(-1)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(1), G(-1), G(-1)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(-1), G(2), G(-1)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(-1), G(-1), G(3)));
+    _ASSERT(3, NM_IN_SET_SE(-1, G(-1), G(-1), G(-1)));
+
+    _ASSERT(4, !NM_IN_SET_SE(-1, G(1), G(2), G(3), G(4)));
+    _ASSERT(4, NM_IN_SET_SE(-1, G(-1), G(2), G(3), G(4)));
+    _ASSERT(4, NM_IN_SET_SE(-1, G(1), G(-1), G(3), G(4)));
+    _ASSERT(4, NM_IN_SET_SE(-1, G(1), G(2), G(-1), G(4)));
+    _ASSERT(4, NM_IN_SET_SE(-1, G(1), G(2), G(3), G(-1)));
+
+    _ASSERT(5, NM_IN_SET_SE(-1, G(1), G(2), G(3), G(-1), G(5)));
+    _ASSERT(6, NM_IN_SET_SE(-1, G(1), G(2), G(3), G(4), G(5), G(-1)));
+
+    g_assert(!NM_IN_SET(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16));
 #undef G
 #undef N
 #undef _ASSERT
@@ -8100,1181 +9115,1418 @@ test_nm_in_set (void)
 /*****************************************************************************/
 
 static const char *
-_test_nm_in_set_getstr (int *call_counter, gboolean allow_called, const char *value)
-{
-	g_assert (call_counter);
-	*call_counter += 1;
-	if (!allow_called)
-		g_assert_not_reached ();
-	return value;
-}
-
-static void
-test_nm_in_strset (void)
-{
-	int call_counter = 0;
-
-#define G(x) _test_nm_in_set_getstr (&call_counter, TRUE,  x)
-#define N(x) _test_nm_in_set_getstr (&call_counter, FALSE,  x)
-#define _ASSERT(expected, expr) \
-	G_STMT_START { \
-		_test_nm_in_set_assert (&call_counter, 0); \
-		g_assert (expr); \
-		_test_nm_in_set_assert (&call_counter, (expected)); \
-	} G_STMT_END
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL)));
-	_ASSERT (1, !NM_IN_STRSET ("a",  G(NULL)));
-	_ASSERT (1, !NM_IN_STRSET (NULL, G("a")));
-
-	_ASSERT (1,  NM_IN_STRSET_SE (NULL, G(NULL)));
-	_ASSERT (1, !NM_IN_STRSET_SE ("a",  G(NULL)));
-	_ASSERT (1, !NM_IN_STRSET_SE (NULL, G("a")));
-
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N(NULL)));
-	_ASSERT (2, !NM_IN_STRSET ("a",  G(NULL), G(NULL)));
-	_ASSERT (2,  NM_IN_STRSET (NULL, G("a"),  G(NULL)));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("a")));
-	_ASSERT (2,  NM_IN_STRSET ("a",  G(NULL), G("a")));
-	_ASSERT (2, !NM_IN_STRSET (NULL, G("a"),  G("a")));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("b")));
-	_ASSERT (2, !NM_IN_STRSET ("a",  G(NULL), G("b")));
-	_ASSERT (2, !NM_IN_STRSET (NULL, G("a"),  G("b")));
-
-	_ASSERT (2,  NM_IN_STRSET_SE (NULL, G(NULL), G(NULL)));
-	_ASSERT (2, !NM_IN_STRSET_SE ("a",  G(NULL), G(NULL)));
-	_ASSERT (2,  NM_IN_STRSET_SE (NULL, G("a"),  G(NULL)));
-	_ASSERT (2,  NM_IN_STRSET_SE (NULL, G(NULL), G("a")));
-	_ASSERT (2,  NM_IN_STRSET_SE ("a",  G(NULL), G("a")));
-	_ASSERT (2, !NM_IN_STRSET_SE (NULL, G("a"),  G("a")));
-	_ASSERT (2,  NM_IN_STRSET_SE (NULL, G(NULL), G("b")));
-	_ASSERT (2, !NM_IN_STRSET_SE ("a",  G(NULL), G("b")));
-	_ASSERT (2, !NM_IN_STRSET_SE (NULL, G("a"),  G("b")));
-
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N(NULL), N(NULL)));
-	_ASSERT (3, !NM_IN_STRSET ("a",  G(NULL), G(NULL), G(NULL)));
-	_ASSERT (2,  NM_IN_STRSET (NULL, G("a"),  G(NULL), N(NULL)));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("a"),  N(NULL)));
-	_ASSERT (2,  NM_IN_STRSET ("a",  G(NULL), G("a"),  N(NULL)));
-	_ASSERT (3,  NM_IN_STRSET (NULL, G("a"),  G("a"),  G(NULL)));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("b"),  N(NULL)));
-	_ASSERT (3, !NM_IN_STRSET ("a",  G(NULL), G("b"),  G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET (NULL, G("a"),  G("b"),  G(NULL)));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N(NULL), N("a")));
-	_ASSERT (3,  NM_IN_STRSET ("a",  G(NULL), G(NULL), G("a")));
-	_ASSERT (2,  NM_IN_STRSET (NULL, G("a"),  G(NULL), N("a")));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("a"),  N("a")));
-	_ASSERT (2,  NM_IN_STRSET ("a",  G(NULL), G("a"),  N("a")));
-	_ASSERT (3, !NM_IN_STRSET (NULL, G("a"),  G("a"),  G("a")));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("b"),  N("a")));
-	_ASSERT (3,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("a")));
-	_ASSERT (3, !NM_IN_STRSET (NULL, G("a"),  G("b"),  G("a")));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N(NULL), N("b")));
-	_ASSERT (3, !NM_IN_STRSET ("a",  G(NULL), G(NULL), G("b")));
-	_ASSERT (2,  NM_IN_STRSET (NULL, G("a"),  G(NULL), N("b")));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("a"),  N("b")));
-	_ASSERT (2,  NM_IN_STRSET ("a",  G(NULL), G("a"),  N("b")));
-	_ASSERT (3, !NM_IN_STRSET (NULL, G("a"),  G("a"),  G("b")));
-	_ASSERT (1,  NM_IN_STRSET (NULL, G(NULL), N("b"),  N("b")));
-	_ASSERT (3, !NM_IN_STRSET ("a",  G(NULL), G("b"),  G("b")));
-	_ASSERT (3, !NM_IN_STRSET (NULL, G("a"),  G("b"),  G("b")));
-
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G(NULL), G(NULL)));
-	_ASSERT (3, !NM_IN_STRSET_SE ("a",  G(NULL), G(NULL), G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G("a"),  G(NULL), G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G("a"),  G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE ("a",  G(NULL), G("a"),  G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G("a"),  G("a"),  G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G("b"),  G(NULL)));
-	_ASSERT (3, !NM_IN_STRSET_SE ("a",  G(NULL), G("b"),  G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G("a"),  G("b"),  G(NULL)));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G(NULL), G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE ("a",  G(NULL), G(NULL), G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G("a"),  G(NULL), G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G("a"),  G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE ("a",  G(NULL), G("a"),  G("a")));
-	_ASSERT (3, !NM_IN_STRSET_SE (NULL, G("a"),  G("a"),  G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G("b"),  G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE ("a",  G(NULL), G("b"),  G("a")));
-	_ASSERT (3, !NM_IN_STRSET_SE (NULL, G("a"),  G("b"),  G("a")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G(NULL), G("b")));
-	_ASSERT (3, !NM_IN_STRSET_SE ("a",  G(NULL), G(NULL), G("b")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G("a"),  G(NULL), G("b")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G("a"),  G("b")));
-	_ASSERT (3,  NM_IN_STRSET_SE ("a",  G(NULL), G("a"),  G("b")));
-	_ASSERT (3, !NM_IN_STRSET_SE (NULL, G("a"),  G("a"),  G("b")));
-	_ASSERT (3,  NM_IN_STRSET_SE (NULL, G(NULL), G("b"),  G("b")));
-	_ASSERT (3, !NM_IN_STRSET_SE ("a",  G(NULL), G("b"),  G("b")));
-	_ASSERT (3, !NM_IN_STRSET_SE (NULL, G("a"),  G("b"),  G("b")));
-
-	_ASSERT (3,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("a"),  N("a")));
-	_ASSERT (4,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("a")));
-	_ASSERT (4, !NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("d")));
-
-	_ASSERT (4,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("a"),  N("a")));
-	_ASSERT (5,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("d"),  G("a")));
-	_ASSERT (5, !NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("d"),  G("e")));
-
-	_ASSERT (5,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("d"),  G("a"),  N("a")));
-	_ASSERT (6,  NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("d"),  G("e"),  G("a")));
-	_ASSERT (6, !NM_IN_STRSET ("a",  G(NULL), G("b"),  G("c"),  G("d"),  G("e"),  G("f")));
-
-	g_assert (!NM_IN_STRSET (NULL,  "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"));
-	g_assert (!NM_IN_STRSET ("_",   "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"));
-	g_assert ( NM_IN_STRSET ("10",  "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"));
+_test_nm_in_set_getstr(int *call_counter, gboolean allow_called, const char *value)
+{
+    g_assert(call_counter);
+    *call_counter += 1;
+    if (!allow_called)
+        g_assert_not_reached();
+    return value;
+}
+
+static void
+test_nm_in_strset(void)
+{
+    int call_counter = 0;
+
+#define G(x) _test_nm_in_set_getstr(&call_counter, TRUE, x)
+#define N(x) _test_nm_in_set_getstr(&call_counter, FALSE, x)
+#define _ASSERT(expected, expr)                            \
+    G_STMT_START                                           \
+    {                                                      \
+        _test_nm_in_set_assert(&call_counter, 0);          \
+        g_assert(expr);                                    \
+        _test_nm_in_set_assert(&call_counter, (expected)); \
+    }                                                      \
+    G_STMT_END
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL)));
+    _ASSERT(1, !NM_IN_STRSET("a", G(NULL)));
+    _ASSERT(1, !NM_IN_STRSET(NULL, G("a")));
+
+    _ASSERT(1, NM_IN_STRSET_SE(NULL, G(NULL)));
+    _ASSERT(1, !NM_IN_STRSET_SE("a", G(NULL)));
+    _ASSERT(1, !NM_IN_STRSET_SE(NULL, G("a")));
+
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N(NULL)));
+    _ASSERT(2, !NM_IN_STRSET("a", G(NULL), G(NULL)));
+    _ASSERT(2, NM_IN_STRSET(NULL, G("a"), G(NULL)));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("a")));
+    _ASSERT(2, NM_IN_STRSET("a", G(NULL), G("a")));
+    _ASSERT(2, !NM_IN_STRSET(NULL, G("a"), G("a")));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("b")));
+    _ASSERT(2, !NM_IN_STRSET("a", G(NULL), G("b")));
+    _ASSERT(2, !NM_IN_STRSET(NULL, G("a"), G("b")));
+
+    _ASSERT(2, NM_IN_STRSET_SE(NULL, G(NULL), G(NULL)));
+    _ASSERT(2, !NM_IN_STRSET_SE("a", G(NULL), G(NULL)));
+    _ASSERT(2, NM_IN_STRSET_SE(NULL, G("a"), G(NULL)));
+    _ASSERT(2, NM_IN_STRSET_SE(NULL, G(NULL), G("a")));
+    _ASSERT(2, NM_IN_STRSET_SE("a", G(NULL), G("a")));
+    _ASSERT(2, !NM_IN_STRSET_SE(NULL, G("a"), G("a")));
+    _ASSERT(2, NM_IN_STRSET_SE(NULL, G(NULL), G("b")));
+    _ASSERT(2, !NM_IN_STRSET_SE("a", G(NULL), G("b")));
+    _ASSERT(2, !NM_IN_STRSET_SE(NULL, G("a"), G("b")));
+
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N(NULL), N(NULL)));
+    _ASSERT(3, !NM_IN_STRSET("a", G(NULL), G(NULL), G(NULL)));
+    _ASSERT(2, NM_IN_STRSET(NULL, G("a"), G(NULL), N(NULL)));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("a"), N(NULL)));
+    _ASSERT(2, NM_IN_STRSET("a", G(NULL), G("a"), N(NULL)));
+    _ASSERT(3, NM_IN_STRSET(NULL, G("a"), G("a"), G(NULL)));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("b"), N(NULL)));
+    _ASSERT(3, !NM_IN_STRSET("a", G(NULL), G("b"), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET(NULL, G("a"), G("b"), G(NULL)));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N(NULL), N("a")));
+    _ASSERT(3, NM_IN_STRSET("a", G(NULL), G(NULL), G("a")));
+    _ASSERT(2, NM_IN_STRSET(NULL, G("a"), G(NULL), N("a")));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("a"), N("a")));
+    _ASSERT(2, NM_IN_STRSET("a", G(NULL), G("a"), N("a")));
+    _ASSERT(3, !NM_IN_STRSET(NULL, G("a"), G("a"), G("a")));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("b"), N("a")));
+    _ASSERT(3, NM_IN_STRSET("a", G(NULL), G("b"), G("a")));
+    _ASSERT(3, !NM_IN_STRSET(NULL, G("a"), G("b"), G("a")));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N(NULL), N("b")));
+    _ASSERT(3, !NM_IN_STRSET("a", G(NULL), G(NULL), G("b")));
+    _ASSERT(2, NM_IN_STRSET(NULL, G("a"), G(NULL), N("b")));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("a"), N("b")));
+    _ASSERT(2, NM_IN_STRSET("a", G(NULL), G("a"), N("b")));
+    _ASSERT(3, !NM_IN_STRSET(NULL, G("a"), G("a"), G("b")));
+    _ASSERT(1, NM_IN_STRSET(NULL, G(NULL), N("b"), N("b")));
+    _ASSERT(3, !NM_IN_STRSET("a", G(NULL), G("b"), G("b")));
+    _ASSERT(3, !NM_IN_STRSET(NULL, G("a"), G("b"), G("b")));
+
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G(NULL), G(NULL)));
+    _ASSERT(3, !NM_IN_STRSET_SE("a", G(NULL), G(NULL), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G("a"), G(NULL), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G("a"), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE("a", G(NULL), G("a"), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G("a"), G("a"), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G("b"), G(NULL)));
+    _ASSERT(3, !NM_IN_STRSET_SE("a", G(NULL), G("b"), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G("a"), G("b"), G(NULL)));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G(NULL), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE("a", G(NULL), G(NULL), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G("a"), G(NULL), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G("a"), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE("a", G(NULL), G("a"), G("a")));
+    _ASSERT(3, !NM_IN_STRSET_SE(NULL, G("a"), G("a"), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G("b"), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE("a", G(NULL), G("b"), G("a")));
+    _ASSERT(3, !NM_IN_STRSET_SE(NULL, G("a"), G("b"), G("a")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G(NULL), G("b")));
+    _ASSERT(3, !NM_IN_STRSET_SE("a", G(NULL), G(NULL), G("b")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G("a"), G(NULL), G("b")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G("a"), G("b")));
+    _ASSERT(3, NM_IN_STRSET_SE("a", G(NULL), G("a"), G("b")));
+    _ASSERT(3, !NM_IN_STRSET_SE(NULL, G("a"), G("a"), G("b")));
+    _ASSERT(3, NM_IN_STRSET_SE(NULL, G(NULL), G("b"), G("b")));
+    _ASSERT(3, !NM_IN_STRSET_SE("a", G(NULL), G("b"), G("b")));
+    _ASSERT(3, !NM_IN_STRSET_SE(NULL, G("a"), G("b"), G("b")));
+
+    _ASSERT(3, NM_IN_STRSET("a", G(NULL), G("b"), G("a"), N("a")));
+    _ASSERT(4, NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("a")));
+    _ASSERT(4, !NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("d")));
+
+    _ASSERT(4, NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("a"), N("a")));
+    _ASSERT(5, NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("d"), G("a")));
+    _ASSERT(5, !NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("d"), G("e")));
+
+    _ASSERT(5, NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("d"), G("a"), N("a")));
+    _ASSERT(6, NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("d"), G("e"), G("a")));
+    _ASSERT(6, !NM_IN_STRSET("a", G(NULL), G("b"), G("c"), G("d"), G("e"), G("f")));
+
+    g_assert(!NM_IN_STRSET(NULL,
+                           "1",
+                           "2",
+                           "3",
+                           "4",
+                           "5",
+                           "6",
+                           "7",
+                           "8",
+                           "9",
+                           "10",
+                           "11",
+                           "12",
+                           "13",
+                           "14",
+                           "15",
+                           "16"));
+    g_assert(!NM_IN_STRSET("_",
+                           "1",
+                           "2",
+                           "3",
+                           "4",
+                           "5",
+                           "6",
+                           "7",
+                           "8",
+                           "9",
+                           "10",
+                           "11",
+                           "12",
+                           "13",
+                           "14",
+                           "15",
+                           "16"));
+    g_assert(NM_IN_STRSET("10",
+                          "1",
+                          "2",
+                          "3",
+                          "4",
+                          "5",
+                          "6",
+                          "7",
+                          "8",
+                          "9",
+                          "10",
+                          "11",
+                          "12",
+                          "13",
+                          "14",
+                          "15",
+                          "16"));
 #undef G
 #undef N
 #undef _ASSERT
 }
 
 static void
-test_route_attributes_parse (void)
-{
-	GHashTable *ht;
-	GError *error = NULL;
-	GVariant *variant;
-
-	ht = nm_utils_parse_variant_attributes ("mtu=1400  src=1.2.3.4 cwnd=14",
-	                                        ' ', '=', FALSE,
-	                                        nm_ip_route_get_variant_attribute_spec (),
-	                                        &error);
-	g_assert_no_error (error);
-	g_assert (ht);
-	g_hash_table_unref (ht);
-
-	ht = nm_utils_parse_variant_attributes ("mtu=1400 src=1.2.3.4 cwnd=14 \\",
-	                                         ' ', '=', FALSE,
-	                                         nm_ip_route_get_variant_attribute_spec (),
-	                                         &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED);
-	g_assert (!ht);
-	g_clear_error (&error);
-
-	ht = nm_utils_parse_variant_attributes ("mtu.1400 src.1\\.2\\.3\\.4 ",
-	                                         ' ', '.', FALSE,
-	                                         nm_ip_route_get_variant_attribute_spec (),
-	                                         &error);
-	g_assert (ht);
-	g_assert_no_error (error);
-	variant = g_hash_table_lookup (ht, NM_IP_ROUTE_ATTRIBUTE_MTU);
-	g_assert (variant);
-	g_assert (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT32));
-	g_assert_cmpuint (g_variant_get_uint32 (variant), ==, 1400);
-
-	variant = g_hash_table_lookup (ht, NM_IP_ROUTE_ATTRIBUTE_SRC);
-	g_assert (variant);
-	g_assert (g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING));
-	g_assert_cmpstr (g_variant_get_string (variant, NULL), ==, "1.2.3.4");
-	g_hash_table_unref (ht);
-
-	ht = nm_utils_parse_variant_attributes ("from:fd01\\:\\:42\\/64/initrwnd:21",
-	                                         '/', ':', FALSE,
-	                                         nm_ip_route_get_variant_attribute_spec (),
-	                                         &error);
-	g_assert (ht);
-	g_assert_no_error (error);
-	variant = g_hash_table_lookup (ht, NM_IP_ROUTE_ATTRIBUTE_INITRWND);
-	g_assert (variant);
-	g_assert (g_variant_is_of_type (variant, G_VARIANT_TYPE_UINT32));
-	g_assert_cmpuint (g_variant_get_uint32 (variant), ==, 21);
-
-	variant = g_hash_table_lookup (ht, NM_IP_ROUTE_ATTRIBUTE_FROM);
-	g_assert (variant);
-	g_assert (g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING));
-	g_assert_cmpstr (g_variant_get_string (variant, NULL), ==, "fd01::42/64");
-	g_hash_table_unref (ht);
-}
-
-static void
-test_route_attributes_format (void)
-{
-	gs_unref_hashtable GHashTable *ht = NULL;
-	char *str;
-
-	ht = g_hash_table_new_full (nm_str_hash, g_str_equal,
-	                            NULL, (GDestroyNotify) g_variant_unref);
-
-	str = nm_utils_format_variant_attributes (NULL, ' ', '=');
-	g_assert_cmpstr (str, ==, NULL);
-
-	str = nm_utils_format_variant_attributes (ht, ' ', '=');
-	g_assert_cmpstr (str, ==, NULL);
-
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_MTU, g_variant_new_uint32 (5000));
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_INITRWND, g_variant_new_uint32 (20));
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_LOCK_MTU, g_variant_new_boolean (TRUE));
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_SRC, g_variant_new_string ("aaaa:bbbb::1"));
-	str = nm_utils_format_variant_attributes (ht, ' ', '=');
-	g_assert_cmpstr (str, ==, "initrwnd=20 lock-mtu=true mtu=5000 src=aaaa:bbbb::1");
-	g_hash_table_remove_all (ht);
-	g_free (str);
-
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_WINDOW, g_variant_new_uint32 (30000));
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_INITCWND, g_variant_new_uint32 (21));
-	g_hash_table_insert (ht, NM_IP_ROUTE_ATTRIBUTE_FROM, g_variant_new_string ("aaaa:bbbb:cccc:dddd::/64"));
-	str = nm_utils_format_variant_attributes (ht, '/', ':');
-	g_assert_cmpstr (str, ==, "from:aaaa\\:bbbb\\:cccc\\:dddd\\:\\:\\/64/initcwnd:21/window:30000");
-	g_hash_table_remove_all (ht);
-	g_free (str);
+test_route_attributes_parse(void)
+{
+    GHashTable *ht;
+    GError *    error = NULL;
+    GVariant *  variant;
+
+    ht = nm_utils_parse_variant_attributes("mtu=1400  src=1.2.3.4 cwnd=14",
+                                           ' ',
+                                           '=',
+                                           FALSE,
+                                           nm_ip_route_get_variant_attribute_spec(),
+                                           &error);
+    g_assert_no_error(error);
+    g_assert(ht);
+    g_hash_table_unref(ht);
+
+    ht = nm_utils_parse_variant_attributes("mtu=1400 src=1.2.3.4 cwnd=14 \\",
+                                           ' ',
+                                           '=',
+                                           FALSE,
+                                           nm_ip_route_get_variant_attribute_spec(),
+                                           &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_FAILED);
+    g_assert(!ht);
+    g_clear_error(&error);
+
+    ht = nm_utils_parse_variant_attributes("mtu.1400 src.1\\.2\\.3\\.4 ",
+                                           ' ',
+                                           '.',
+                                           FALSE,
+                                           nm_ip_route_get_variant_attribute_spec(),
+                                           &error);
+    g_assert(ht);
+    g_assert_no_error(error);
+    variant = g_hash_table_lookup(ht, NM_IP_ROUTE_ATTRIBUTE_MTU);
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_UINT32));
+    g_assert_cmpuint(g_variant_get_uint32(variant), ==, 1400);
+
+    variant = g_hash_table_lookup(ht, NM_IP_ROUTE_ATTRIBUTE_SRC);
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING));
+    g_assert_cmpstr(g_variant_get_string(variant, NULL), ==, "1.2.3.4");
+    g_hash_table_unref(ht);
+
+    ht = nm_utils_parse_variant_attributes("from:fd01\\:\\:42\\/64/initrwnd:21",
+                                           '/',
+                                           ':',
+                                           FALSE,
+                                           nm_ip_route_get_variant_attribute_spec(),
+                                           &error);
+    g_assert(ht);
+    g_assert_no_error(error);
+    variant = g_hash_table_lookup(ht, NM_IP_ROUTE_ATTRIBUTE_INITRWND);
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_UINT32));
+    g_assert_cmpuint(g_variant_get_uint32(variant), ==, 21);
+
+    variant = g_hash_table_lookup(ht, NM_IP_ROUTE_ATTRIBUTE_FROM);
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING));
+    g_assert_cmpstr(g_variant_get_string(variant, NULL), ==, "fd01::42/64");
+    g_hash_table_unref(ht);
+}
+
+static void
+test_route_attributes_format(void)
+{
+    gs_unref_hashtable GHashTable *ht = NULL;
+    char *                         str;
+
+    ht = g_hash_table_new_full(nm_str_hash, g_str_equal, NULL, (GDestroyNotify) g_variant_unref);
+
+    str = nm_utils_format_variant_attributes(NULL, ' ', '=');
+    g_assert_cmpstr(str, ==, NULL);
+
+    str = nm_utils_format_variant_attributes(ht, ' ', '=');
+    g_assert_cmpstr(str, ==, NULL);
+
+    g_hash_table_insert(ht, NM_IP_ROUTE_ATTRIBUTE_MTU, g_variant_new_uint32(5000));
+    g_hash_table_insert(ht, NM_IP_ROUTE_ATTRIBUTE_INITRWND, g_variant_new_uint32(20));
+    g_hash_table_insert(ht, NM_IP_ROUTE_ATTRIBUTE_LOCK_MTU, g_variant_new_boolean(TRUE));
+    g_hash_table_insert(ht, NM_IP_ROUTE_ATTRIBUTE_SRC, g_variant_new_string("aaaa:bbbb::1"));
+    str = nm_utils_format_variant_attributes(ht, ' ', '=');
+    g_assert_cmpstr(str, ==, "initrwnd=20 lock-mtu=true mtu=5000 src=aaaa:bbbb::1");
+    g_hash_table_remove_all(ht);
+    g_free(str);
+
+    g_hash_table_insert(ht, NM_IP_ROUTE_ATTRIBUTE_WINDOW, g_variant_new_uint32(30000));
+    g_hash_table_insert(ht, NM_IP_ROUTE_ATTRIBUTE_INITCWND, g_variant_new_uint32(21));
+    g_hash_table_insert(ht,
+                        NM_IP_ROUTE_ATTRIBUTE_FROM,
+                        g_variant_new_string("aaaa:bbbb:cccc:dddd::/64"));
+    str = nm_utils_format_variant_attributes(ht, '/', ':');
+    g_assert_cmpstr(str, ==, "from:aaaa\\:bbbb\\:cccc\\:dddd\\:\\:\\/64/initcwnd:21/window:30000");
+    g_hash_table_remove_all(ht);
+    g_free(str);
 }
 
 /*****************************************************************************/
 
 static void
-test_variant_attribute_spec (void)
+test_variant_attribute_spec(void)
 {
-	const NMVariantAttributeSpec *const *const specs_list[] = {
-		nm_ip_route_get_variant_attribute_spec (),
-	};
-	int i_specs;
+    const NMVariantAttributeSpec *const *const specs_list[] = {
+        nm_ip_route_get_variant_attribute_spec(),
+    };
+    int i_specs;
 
-	for (i_specs = 0; i_specs < G_N_ELEMENTS (specs_list); i_specs++) {
-		const NMVariantAttributeSpec *const *const specs = specs_list[i_specs];
-		gsize len;
-		gsize i;
+    for (i_specs = 0; i_specs < G_N_ELEMENTS(specs_list); i_specs++) {
+        const NMVariantAttributeSpec *const *const specs = specs_list[i_specs];
+        gsize                                      len;
+        gsize                                      i;
 
-		g_assert (specs);
+        g_assert(specs);
 
-		len = NM_PTRARRAY_LEN (specs);
-		g_assert_cmpint (len, >, 0u);
+        len = NM_PTRARRAY_LEN(specs);
+        g_assert_cmpint(len, >, 0u);
 
-		_nmtst_variant_attribute_spec_assert_sorted (specs, len);
-		for (i = 0; i < len; i++)
-			g_assert (specs[i] == _nm_variant_attribute_spec_find_binary_search (specs, len, specs[i]->name));
-		g_assert (!_nm_variant_attribute_spec_find_binary_search (specs, len, "bogus"));
-	}
+        _nmtst_variant_attribute_spec_assert_sorted(specs, len);
+        for (i = 0; i < len; i++)
+            g_assert(specs[i]
+                     == _nm_variant_attribute_spec_find_binary_search(specs, len, specs[i]->name));
+        g_assert(!_nm_variant_attribute_spec_find_binary_search(specs, len, "bogus"));
+    }
 }
 
 /*****************************************************************************/
 
 static gboolean
-do_test_nm_set_out_called (int *call_count)
+do_test_nm_set_out_called(int *call_count)
 {
-	(*call_count)++;
-	return TRUE;
+    (*call_count)++;
+    return TRUE;
 }
 
 static void
-test_nm_set_out (void)
+test_nm_set_out(void)
 {
-	gboolean val;
-	gboolean *p_val;
-	int call_count;
+    gboolean  val;
+    gboolean *p_val;
+    int       call_count;
 
-	/* NM_SET_OUT() has an unexpected non-function like behavior
-	 * wrt. side-effects of the value argument. Test it */
+    /* NM_SET_OUT() has an unexpected non-function like behavior
+     * wrt. side-effects of the value argument. Test it */
 
-	p_val = &val;
-	call_count = 0;
-	NM_SET_OUT (p_val, do_test_nm_set_out_called (&call_count));
-	g_assert_cmpint (call_count, ==, 1);
+    p_val      = &val;
+    call_count = 0;
+    NM_SET_OUT(p_val, do_test_nm_set_out_called(&call_count));
+    g_assert_cmpint(call_count, ==, 1);
 
-	p_val = NULL;
-	call_count = 0;
-	NM_SET_OUT (p_val, do_test_nm_set_out_called (&call_count));
-	g_assert_cmpint (call_count, ==, 0);
+    p_val      = NULL;
+    call_count = 0;
+    NM_SET_OUT(p_val, do_test_nm_set_out_called(&call_count));
+    g_assert_cmpint(call_count, ==, 0);
 
-	/* test that we successfully re-defined _G_BOOLEAN_EXPR() */
-#define _T1(a) \
-	({ \
-		g_assert (a > 2); \
-		a; \
-	})
-	g_assert (_T1 (3) > 1);
+    /* test that we successfully re-defined _G_BOOLEAN_EXPR() */
+#define _T1(a)           \
+    ({                   \
+        g_assert(a > 2); \
+        a;               \
+    })
+    g_assert(_T1(3) > 1);
 #undef _T1
 }
 
 /*****************************************************************************/
 
 static void
-test_get_start_time_for_pid (void)
+test_get_start_time_for_pid(void)
 {
-	guint64 x_start_time;
-	char x_state;
-	pid_t x_ppid;
+    guint64 x_start_time;
+    char    x_state;
+    pid_t   x_ppid;
 
-	x_start_time = nm_utils_get_start_time_for_pid (getpid (), &x_state, &x_ppid);
+    x_start_time = nm_utils_get_start_time_for_pid(getpid(), &x_state, &x_ppid);
 
-	g_assert (x_start_time > 0);
-	g_assert (x_ppid == getppid ());
-	g_assert (!NM_IN_SET (x_state, '\0', ' '));
+    g_assert(x_start_time > 0);
+    g_assert(x_ppid == getppid());
+    g_assert(!NM_IN_SET(x_state, '\0', ' '));
 }
 
 /*****************************************************************************/
 
 static void
-test_nm_va_args_macros (void)
-{
-#define GET_NARG_1(...) \
-	NM_NARG (__VA_ARGS__)
-
-	g_assert_cmpint ( 0, ==, GET_NARG_1 ());
-	g_assert_cmpint ( 1, ==, GET_NARG_1 (x));
-	g_assert_cmpint ( 2, ==, GET_NARG_1 ( ,  ));
-	g_assert_cmpint ( 2, ==, GET_NARG_1 ( , x));
-	g_assert_cmpint ( 2, ==, GET_NARG_1 (x,  ));
-	g_assert_cmpint ( 2, ==, GET_NARG_1 (x, x));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 ( ,  ,  ));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 ( ,  , x));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 ( , x,  ));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 ( , x, x));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 (x,  ,  ));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 (x,  , x));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 (x, x,  ));
-	g_assert_cmpint ( 3, ==, GET_NARG_1 (x, x, x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( ,  ,  ,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( ,  ,  , x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( ,  , x,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( ,  , x, x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( , x,  ,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( , x,  , x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( , x, x,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 ( , x, x, x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x,  ,  ,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x,  ,  , x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x,  , x,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x,  , x, x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x, x,  ,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x, x,  , x));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x, x, x,  ));
-	g_assert_cmpint ( 4, ==, GET_NARG_1 (x, x, x, x));
-
-	g_assert_cmpint ( 5, ==, GET_NARG_1 (x, x, x, x, x));
-	g_assert_cmpint ( 6, ==, GET_NARG_1 (x, x, x, x, x, x));
-	g_assert_cmpint ( 7, ==, GET_NARG_1 (x, x, x, x, x, x, x));
-	g_assert_cmpint ( 8, ==, GET_NARG_1 (x, x, x, x, x, x, x, x));
-	g_assert_cmpint ( 9, ==, GET_NARG_1 (x, x, x, x, x, x, x, x, x));
-	g_assert_cmpint (10, ==, GET_NARG_1 (x, x, x, x, x, x, x, x, x, x));
-
-	G_STATIC_ASSERT_EXPR (0 == GET_NARG_1 ());
-	G_STATIC_ASSERT_EXPR (1 == GET_NARG_1 (x));
-	G_STATIC_ASSERT_EXPR (2 == GET_NARG_1 (x, x));
+test_nm_va_args_macros(void)
+{
+#define GET_NARG_1(...) NM_NARG(__VA_ARGS__)
+
+    g_assert_cmpint(0, ==, GET_NARG_1());
+    g_assert_cmpint(1, ==, GET_NARG_1(x));
+    g_assert_cmpint(2, ==, GET_NARG_1(, ));
+    g_assert_cmpint(2, ==, GET_NARG_1(, x));
+    g_assert_cmpint(2, ==, GET_NARG_1(x, ));
+    g_assert_cmpint(2, ==, GET_NARG_1(x, x));
+    g_assert_cmpint(3, ==, GET_NARG_1(, , ));
+    g_assert_cmpint(3, ==, GET_NARG_1(, , x));
+    g_assert_cmpint(3, ==, GET_NARG_1(, x, ));
+    g_assert_cmpint(3, ==, GET_NARG_1(, x, x));
+    g_assert_cmpint(3, ==, GET_NARG_1(x, , ));
+    g_assert_cmpint(3, ==, GET_NARG_1(x, , x));
+    g_assert_cmpint(3, ==, GET_NARG_1(x, x, ));
+    g_assert_cmpint(3, ==, GET_NARG_1(x, x, x));
+    g_assert_cmpint(4, ==, GET_NARG_1(, , , ));
+    g_assert_cmpint(4, ==, GET_NARG_1(, , , x));
+    g_assert_cmpint(4, ==, GET_NARG_1(, , x, ));
+    g_assert_cmpint(4, ==, GET_NARG_1(, , x, x));
+    g_assert_cmpint(4, ==, GET_NARG_1(, x, , ));
+    g_assert_cmpint(4, ==, GET_NARG_1(, x, , x));
+    g_assert_cmpint(4, ==, GET_NARG_1(, x, x, ));
+    g_assert_cmpint(4, ==, GET_NARG_1(, x, x, x));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, , , ));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, , , x));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, , x, ));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, , x, x));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, x, , ));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, x, , x));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, x, x, ));
+    g_assert_cmpint(4, ==, GET_NARG_1(x, x, x, x));
+
+    g_assert_cmpint(5, ==, GET_NARG_1(x, x, x, x, x));
+    g_assert_cmpint(6, ==, GET_NARG_1(x, x, x, x, x, x));
+    g_assert_cmpint(7, ==, GET_NARG_1(x, x, x, x, x, x, x));
+    g_assert_cmpint(8, ==, GET_NARG_1(x, x, x, x, x, x, x, x));
+    g_assert_cmpint(9, ==, GET_NARG_1(x, x, x, x, x, x, x, x, x));
+    g_assert_cmpint(10, ==, GET_NARG_1(x, x, x, x, x, x, x, x, x, x));
+
+    G_STATIC_ASSERT_EXPR(0 == GET_NARG_1());
+    G_STATIC_ASSERT_EXPR(1 == GET_NARG_1(x));
+    G_STATIC_ASSERT_EXPR(2 == GET_NARG_1(x, x));
 }
 
 /*****************************************************************************/
 
 static void
-test_ethtool_offload (void)
+test_ethtool_offload(void)
 {
-	const NMEthtoolData *d;
+    const NMEthtoolData *d;
 
-	g_assert_cmpint (nm_ethtool_id_get_by_name ("invalid"),    ==, NM_ETHTOOL_ID_UNKNOWN);
-	g_assert_cmpint (nm_ethtool_id_get_by_name ("feature-rx"), ==, NM_ETHTOOL_ID_FEATURE_RX);
+    g_assert_cmpint(nm_ethtool_id_get_by_name("invalid"), ==, NM_ETHTOOL_ID_UNKNOWN);
+    g_assert_cmpint(nm_ethtool_id_get_by_name("feature-rx"), ==, NM_ETHTOOL_ID_FEATURE_RX);
 
-	d = nm_ethtool_data_get_by_optname (NM_ETHTOOL_OPTNAME_FEATURE_RXHASH);
-	g_assert (d);
-	g_assert_cmpint (d->id, ==, NM_ETHTOOL_ID_FEATURE_RXHASH);
-	g_assert_cmpstr (d->optname, ==, NM_ETHTOOL_OPTNAME_FEATURE_RXHASH);
+    d = nm_ethtool_data_get_by_optname(NM_ETHTOOL_OPTNAME_FEATURE_RXHASH);
+    g_assert(d);
+    g_assert_cmpint(d->id, ==, NM_ETHTOOL_ID_FEATURE_RXHASH);
+    g_assert_cmpstr(d->optname, ==, NM_ETHTOOL_OPTNAME_FEATURE_RXHASH);
 }
 
 /*****************************************************************************/
 
 typedef struct {
-	GMainLoop *loop1;
-	GMainContext *c2;
-	GSource *extra_sources[2];
-	bool got_signal[5];
-	int fd_2;
+    GMainLoop *   loop1;
+    GMainContext *c2;
+    GSource *     extra_sources[2];
+    bool          got_signal[5];
+    int           fd_2;
 } IntegData;
 
 static gboolean
-_test_integrate_cb_handle (IntegData *d, int signal)
+_test_integrate_cb_handle(IntegData *d, int signal)
 {
-	int i;
+    int i;
 
-	g_assert (d);
-	g_assert (signal >= 0);
-	g_assert (signal < G_N_ELEMENTS (d->got_signal));
+    g_assert(d);
+    g_assert(signal >= 0);
+    g_assert(signal < G_N_ELEMENTS(d->got_signal));
 
-	g_assert (!d->got_signal[signal]);
-	d->got_signal[signal] = TRUE;
+    g_assert(!d->got_signal[signal]);
+    d->got_signal[signal] = TRUE;
 
-	for (i = 0; i < G_N_ELEMENTS (d->got_signal); i++) {
-		if (!d->got_signal[i])
-			break;
-	}
-	if (i == G_N_ELEMENTS (d->got_signal))
-		g_main_loop_quit (d->loop1);
-	return G_SOURCE_REMOVE;
+    for (i = 0; i < G_N_ELEMENTS(d->got_signal); i++) {
+        if (!d->got_signal[i])
+            break;
+    }
+    if (i == G_N_ELEMENTS(d->got_signal))
+        g_main_loop_quit(d->loop1);
+    return G_SOURCE_REMOVE;
 }
 
 static gboolean
-_test_integrate_cb_timeout_1 (gpointer user_data)
+_test_integrate_cb_timeout_1(gpointer user_data)
 {
-	return _test_integrate_cb_handle (user_data, 0);
+    return _test_integrate_cb_handle(user_data, 0);
 }
 
 static gboolean
-_test_integrate_cb_fd_2 (int fd,
-                         GIOCondition condition,
-                         gpointer user_data)
+_test_integrate_cb_fd_2(int fd, GIOCondition condition, gpointer user_data)
 
 {
-	IntegData *d = user_data;
+    IntegData *d = user_data;
 
-	g_assert (d->got_signal[1]);
-	g_assert (d->got_signal[2]);
-	g_assert (d->got_signal[3]);
-	g_assert (d->extra_sources[0]);
-	g_assert (d->extra_sources[1]);
+    g_assert(d->got_signal[1]);
+    g_assert(d->got_signal[2]);
+    g_assert(d->got_signal[3]);
+    g_assert(d->extra_sources[0]);
+    g_assert(d->extra_sources[1]);
 
-	return _test_integrate_cb_handle (d, 4);
+    return _test_integrate_cb_handle(d, 4);
 }
 
 static gboolean
-_test_integrate_cb_idle_2 (gpointer user_data)
+_test_integrate_cb_idle_2(gpointer user_data)
 {
-	IntegData *d = user_data;
-	GSource *extra_source;
+    IntegData *d = user_data;
+    GSource *  extra_source;
 
-	g_assert (d->got_signal[1]);
-	g_assert (d->got_signal[2]);
-	g_assert (d->extra_sources[0]);
-	g_assert (!d->extra_sources[1]);
+    g_assert(d->got_signal[1]);
+    g_assert(d->got_signal[2]);
+    g_assert(d->extra_sources[0]);
+    g_assert(!d->extra_sources[1]);
 
-	extra_source = nm_g_unix_fd_source_new (d->fd_2,
-	                                        G_IO_IN,
-	                                        G_PRIORITY_DEFAULT,
-	                                        _test_integrate_cb_fd_2,
-	                                        d,
-	                                        NULL);
-	g_source_attach (extra_source, d->c2);
+    extra_source = nm_g_unix_fd_source_new(d->fd_2,
+                                           G_IO_IN,
+                                           G_PRIORITY_DEFAULT,
+                                           _test_integrate_cb_fd_2,
+                                           d,
+                                           NULL);
+    g_source_attach(extra_source, d->c2);
 
-	d->extra_sources[1] = extra_source;
+    d->extra_sources[1] = extra_source;
 
-	return _test_integrate_cb_handle (d, 3);
+    return _test_integrate_cb_handle(d, 3);
 }
 
 static gboolean
-_test_integrate_cb_idle_1 (gpointer user_data)
+_test_integrate_cb_idle_1(gpointer user_data)
 {
-	IntegData *d = user_data;
-	GSource *extra_source;
+    IntegData *d = user_data;
+    GSource *  extra_source;
 
-	g_assert (d->got_signal[2]);
-	g_assert (!d->extra_sources[0]);
+    g_assert(d->got_signal[2]);
+    g_assert(!d->extra_sources[0]);
 
-	extra_source = g_idle_source_new ();
-	g_source_set_callback (extra_source, _test_integrate_cb_idle_2, d, NULL);
-	g_source_attach (extra_source, d->c2);
+    extra_source = g_idle_source_new();
+    g_source_set_callback(extra_source, _test_integrate_cb_idle_2, d, NULL);
+    g_source_attach(extra_source, d->c2);
 
-	d->extra_sources[0] = extra_source;
+    d->extra_sources[0] = extra_source;
 
-	return _test_integrate_cb_handle (d, 1);
+    return _test_integrate_cb_handle(d, 1);
 }
 
 static gboolean
-_test_integrate_cb_fd_1 (int fd,
-                         GIOCondition condition,
-                         gpointer user_data)
+_test_integrate_cb_fd_1(int fd, GIOCondition condition, gpointer user_data)
 
 {
-	IntegData *d = user_data;
+    IntegData *d = user_data;
 
-	g_assert (!d->got_signal[1]);
-	return _test_integrate_cb_handle (d, 2);
+    g_assert(!d->got_signal[1]);
+    return _test_integrate_cb_handle(d, 2);
 }
 
 static gboolean
-_test_integrate_maincontext_cb_idle1 (gpointer user_data)
+_test_integrate_maincontext_cb_idle1(gpointer user_data)
 {
-	guint32 *p_count = user_data;
+    guint32 *p_count = user_data;
 
-	g_assert (*p_count < 5);
-	(*p_count)++;
-	return G_SOURCE_CONTINUE;
+    g_assert(*p_count < 5);
+    (*p_count)++;
+    return G_SOURCE_CONTINUE;
 }
 
 static void
-test_integrate_maincontext (gconstpointer test_data)
+test_integrate_maincontext(gconstpointer test_data)
 {
-	const guint TEST_IDX = GPOINTER_TO_UINT (test_data);
-	GMainContext *c1 = g_main_context_default ();
-	nm_auto_unref_gmaincontext GMainContext *c2 = g_main_context_new ();
-	nm_auto_destroy_and_unref_gsource GSource *integ_source = NULL;
+    const guint                TEST_IDX                     = GPOINTER_TO_UINT(test_data);
+    GMainContext *             c1                           = g_main_context_default();
+    nm_auto_unref_gmaincontext GMainContext *c2             = g_main_context_new();
+    nm_auto_destroy_and_unref_gsource GSource *integ_source = NULL;
 
-	integ_source = nm_utils_g_main_context_create_integrate_source (c2);
-	g_source_attach (integ_source, c1);
+    integ_source = nm_utils_g_main_context_create_integrate_source(c2);
+    g_source_attach(integ_source, c1);
 
-	if (TEST_IDX == 1) {
-		nm_auto_destroy_and_unref_gsource GSource *idle_source_1 = NULL;
-		guint32 count = 0;
+    if (TEST_IDX == 1) {
+        nm_auto_destroy_and_unref_gsource GSource *idle_source_1 = NULL;
+        guint32                                    count         = 0;
 
-		idle_source_1 = g_idle_source_new ();
-		g_source_set_callback (idle_source_1, _test_integrate_maincontext_cb_idle1, &count, NULL);
-		g_source_attach (idle_source_1, c2);
+        idle_source_1 = g_idle_source_new();
+        g_source_set_callback(idle_source_1, _test_integrate_maincontext_cb_idle1, &count, NULL);
+        g_source_attach(idle_source_1, c2);
 
-		nmtst_main_context_iterate_until_assert (c1, 2000, count == 5);
-	}
+        nmtst_main_context_iterate_until_assert(c1, 2000, count == 5);
+    }
 
-	if (TEST_IDX == 2) {
-		nm_auto_destroy_and_unref_gsource GSource *main_timeout_source = NULL;
-		nm_auto_destroy_and_unref_gsource GSource *timeout_source_1 = NULL;
-		nm_auto_destroy_and_unref_gsource GSource *idle_source_1 = NULL;
-		nm_auto_destroy_and_unref_gsource GSource *fd_source_1 = NULL;
-		nm_auto_unref_gmainloop GMainLoop *loop1 = NULL;
-		nm_auto_close int fd_1 = -1;
-		nm_auto_close int fd_2 = -1;
-		IntegData d;
-		int i;
+    if (TEST_IDX == 2) {
+        nm_auto_destroy_and_unref_gsource GSource *main_timeout_source = NULL;
+        nm_auto_destroy_and_unref_gsource GSource *timeout_source_1    = NULL;
+        nm_auto_destroy_and_unref_gsource GSource *idle_source_1       = NULL;
+        nm_auto_destroy_and_unref_gsource GSource *fd_source_1         = NULL;
+        nm_auto_unref_gmainloop GMainLoop *loop1                       = NULL;
+        nm_auto_close int                  fd_1                        = -1;
+        nm_auto_close int                  fd_2                        = -1;
+        IntegData                          d;
+        int                                i;
 
-		main_timeout_source = g_timeout_source_new (3000);
-		g_source_set_callback (main_timeout_source, nmtst_g_source_assert_not_called, NULL, NULL);
-		g_source_attach (main_timeout_source, c1);
+        main_timeout_source = g_timeout_source_new(3000);
+        g_source_set_callback(main_timeout_source, nmtst_g_source_assert_not_called, NULL, NULL);
+        g_source_attach(main_timeout_source, c1);
 
-		loop1 = g_main_loop_new (c1, FALSE);
+        loop1 = g_main_loop_new(c1, FALSE);
 
-		d = (IntegData) {
-			.loop1 = loop1,
-			.c2    = c2,
-		};
+        d = (IntegData){
+            .loop1 = loop1,
+            .c2    = c2,
+        };
 
-		fd_1 = open ("/dev/null", O_RDONLY | O_CLOEXEC);
-		g_assert (fd_1 >= 0);
-		fd_source_1 = nm_g_unix_fd_source_new (fd_1,
-		                                       G_IO_IN,
-		                                       G_PRIORITY_DEFAULT,
-		                                       _test_integrate_cb_fd_1,
-		                                       &d,
-		                                       NULL);
-		g_source_attach (fd_source_1, c2);
+        fd_1 = open("/dev/null", O_RDONLY | O_CLOEXEC);
+        g_assert(fd_1 >= 0);
+        fd_source_1 = nm_g_unix_fd_source_new(fd_1,
+                                              G_IO_IN,
+                                              G_PRIORITY_DEFAULT,
+                                              _test_integrate_cb_fd_1,
+                                              &d,
+                                              NULL);
+        g_source_attach(fd_source_1, c2);
 
-		fd_2 = open ("/dev/null", O_RDONLY | O_CLOEXEC);
-		g_assert (fd_2 >= 0);
-		d.fd_2 = fd_2;
+        fd_2 = open("/dev/null", O_RDONLY | O_CLOEXEC);
+        g_assert(fd_2 >= 0);
+        d.fd_2 = fd_2;
 
-		idle_source_1 = g_idle_source_new ();
-		g_source_set_callback (idle_source_1, _test_integrate_cb_idle_1, &d, NULL);
-		g_source_attach (idle_source_1, c2);
+        idle_source_1 = g_idle_source_new();
+        g_source_set_callback(idle_source_1, _test_integrate_cb_idle_1, &d, NULL);
+        g_source_attach(idle_source_1, c2);
 
-		timeout_source_1 = g_timeout_source_new (5);
-		g_source_set_callback (timeout_source_1, _test_integrate_cb_timeout_1, &d, NULL);
-		g_source_attach (timeout_source_1, c2);
+        timeout_source_1 = g_timeout_source_new(5);
+        g_source_set_callback(timeout_source_1, _test_integrate_cb_timeout_1, &d, NULL);
+        g_source_attach(timeout_source_1, c2);
 
-		g_main_loop_run (loop1);
+        g_main_loop_run(loop1);
 
-		for (i = 0; i < G_N_ELEMENTS (d.extra_sources); i++) {
-			g_assert (d.extra_sources[i]);
-			nm_clear_pointer (&d.extra_sources[i], nm_g_source_destroy_and_unref);
-		}
-	}
+        for (i = 0; i < G_N_ELEMENTS(d.extra_sources); i++) {
+            g_assert(d.extra_sources[i]);
+            nm_clear_pointer(&d.extra_sources[i], nm_g_source_destroy_and_unref);
+        }
+    }
 }
 
 /*****************************************************************************/
 
 static void
-test_nm_ip_addr_zero (void)
-{
-	in_addr_t a4 = nmtst_inet4_from_string ("0.0.0.0");
-	struct in6_addr a6 = *nmtst_inet6_from_string ("::");
-	char buf[NM_UTILS_INET_ADDRSTRLEN];
-	NMIPAddr a = NM_IP_ADDR_INIT;
-
-	g_assert (memcmp (&a, &nm_ip_addr_zero, sizeof (a)) == 0);
-
-	g_assert (IN6_IS_ADDR_UNSPECIFIED (&nm_ip_addr_zero.addr6));
-	g_assert (memcmp (&nm_ip_addr_zero.addr6, &in6addr_any, sizeof (in6addr_any)) == 0);
-
-	g_assert (memcmp (&nm_ip_addr_zero, &a4, sizeof (a4)) == 0);
-	g_assert (memcmp (&nm_ip_addr_zero, &a6, sizeof (a6)) == 0);
-
-	g_assert_cmpstr (_nm_utils_inet4_ntop (nm_ip_addr_zero.addr4, buf), ==, "0.0.0.0");
-	g_assert_cmpstr (_nm_utils_inet6_ntop (&nm_ip_addr_zero.addr6, buf), ==, "::");
-
-	g_assert_cmpstr (nm_utils_inet_ntop (AF_INET, &nm_ip_addr_zero, buf), ==, "0.0.0.0");
-	g_assert_cmpstr (nm_utils_inet_ntop (AF_INET6, &nm_ip_addr_zero, buf), ==, "::");
-
-	G_STATIC_ASSERT_EXPR (sizeof (a) == sizeof (a.array));
-}
-
-static void
-test_connection_ovs_ifname (gconstpointer test_data)
-{
-	const guint TEST_CASE = GPOINTER_TO_UINT (test_data);
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingConnection *s_con = NULL;
-	NMSettingOvsBridge *s_ovs_bridge = NULL;
-	NMSettingOvsPort *s_ovs_port = NULL;
-	NMSettingOvsInterface *s_ovs_iface = NULL;
-	NMSettingOvsPatch *s_ovs_patch = NULL;
-	const char *ovs_iface_type = NULL;
-
-	switch (TEST_CASE) {
-	case 1:
-		con = nmtst_create_minimal_connection ("test_connection_ovs_ifname_bridge",
-		                                       NULL,
-		                                       NM_SETTING_OVS_BRIDGE_SETTING_NAME, &s_con);
-		s_ovs_bridge = nm_connection_get_setting_ovs_bridge (con);
-		g_assert (s_ovs_bridge);
-		break;
-	case 2:
-		con = nmtst_create_minimal_connection ("test_connection_ovs_ifname_port",
-		                                       NULL,
-		                                       NM_SETTING_OVS_PORT_SETTING_NAME, &s_con);
-
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER,
-		              "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE,
-		              NM_SETTING_OVS_BRIDGE_SETTING_NAME,
-		              NULL);
-
-		s_ovs_port = nm_connection_get_setting_ovs_port (con);
-		g_assert (s_ovs_port);
-		break;
-	case 3:
-		con = nmtst_create_minimal_connection ("test_connection_ovs_ifname_interface_patch",
-		                                       NULL,
-		                                       NM_SETTING_OVS_INTERFACE_SETTING_NAME, &s_con);
-		s_ovs_iface = nm_connection_get_setting_ovs_interface (con);
-		g_assert (s_ovs_iface);
-
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER,
-		              "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE,
-		              NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		g_object_set (s_ovs_iface,
-		              NM_SETTING_OVS_INTERFACE_TYPE,
-		              "patch",
-		              NULL);
-
-		s_ovs_patch = NM_SETTING_OVS_PATCH (nm_setting_ovs_patch_new());
-		g_assert (s_ovs_patch);
-
-		g_object_set (s_ovs_patch,
-		              NM_SETTING_OVS_PATCH_PEER, "1.2.3.4",
-		              NULL);
-
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_patch));
-		s_ovs_patch = nm_connection_get_setting_ovs_patch (con);
-		g_assert (s_ovs_patch);
-		ovs_iface_type = "patch";
-		break;
-	case 4:
-		con = nmtst_create_minimal_connection ("test_connection_ovs_ifname_interface_internal",
-		                                       NULL,
-		                                       NM_SETTING_OVS_INTERFACE_SETTING_NAME, &s_con);
-		s_ovs_iface = nm_connection_get_setting_ovs_interface (con);
-		g_assert (s_ovs_iface);
-
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER,
-		              "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE,
-		              NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		g_object_set (s_ovs_iface,
-		              NM_SETTING_OVS_INTERFACE_TYPE,
-		              "internal",
-		              NULL);
-		ovs_iface_type = "internal";
-		break;
-	case 5:
-		con = nmtst_create_minimal_connection ("test_connection_ovs_ifname_interface_system",
-		                                       NULL,
-		                                       NM_SETTING_WIRED_SETTING_NAME, &s_con);
-
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER,
-		              "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE,
-		              NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		s_ovs_iface = NM_SETTING_OVS_INTERFACE (nm_setting_ovs_interface_new());
-		g_assert (s_ovs_iface);
-
-		g_object_set (s_ovs_iface,
-		              NM_SETTING_OVS_INTERFACE_TYPE,
-		              "system",
-		              NULL);
-
-		nm_connection_add_setting (con, NM_SETTING (s_ovs_iface));
-		s_ovs_iface = nm_connection_get_setting_ovs_interface (con);
-		g_assert (s_ovs_iface);
-
-		ovs_iface_type = "system";
-		break;
-	case 6:
-		con = nmtst_create_minimal_connection ("test_connection_ovs_ifname_interface_dpdk",
-		                                       NULL,
-		                                       NM_SETTING_OVS_INTERFACE_SETTING_NAME, &s_con);
-		s_ovs_iface = nm_connection_get_setting_ovs_interface (con);
-		g_assert (s_ovs_iface);
-
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_MASTER,
-		              "master0",
-		              NM_SETTING_CONNECTION_SLAVE_TYPE,
-		              NM_SETTING_OVS_PORT_SETTING_NAME,
-		              NULL);
-
-		g_object_set (s_ovs_iface,
-		              NM_SETTING_OVS_INTERFACE_TYPE,
-		              "dpdk",
-		              NULL);
-		ovs_iface_type = "dpdk";
-		break;
-	}
-
-	if (!nm_streq0 (ovs_iface_type, "system")) {
-		/* wrong: contains backward slash */
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs\\0",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con,
-		                                        NM_CONNECTION_ERROR,
-		                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-
-		/* wrong: contains forward slash */
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs/0",
-		              NULL);
-		nmtst_assert_connection_unnormalizable (con,
-		                                        NM_CONNECTION_ERROR,
-		                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	}
-
-	/* wrong: contains space */
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs 0",
-	              NULL);
-	nmtst_assert_connection_unnormalizable (con,
-	                                        NM_CONNECTION_ERROR,
-	                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-
-	/* good */
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs0",
-	              NULL);
-	nmtst_assert_connection_verifies (con);
-
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs-br0",
-	              NULL);
-	nmtst_assert_connection_verifies (con);
-
-	/* good if bridge, port, or patch interface */
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs123123123123130123123",
-	              NULL);
-
-	if (!ovs_iface_type || nm_streq (ovs_iface_type, "patch"))
-		nmtst_assert_connection_verifies (con);
-	else {
-		nmtst_assert_connection_unnormalizable (con,
-		                                        NM_CONNECTION_ERROR,
-		                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	}
+test_nm_ip_addr_zero(void)
+{
+    in_addr_t       a4 = nmtst_inet4_from_string("0.0.0.0");
+    struct in6_addr a6 = *nmtst_inet6_from_string("::");
+    char            buf[NM_UTILS_INET_ADDRSTRLEN];
+    NMIPAddr        a = NM_IP_ADDR_INIT;
+
+    g_assert(memcmp(&a, &nm_ip_addr_zero, sizeof(a)) == 0);
+
+    g_assert(IN6_IS_ADDR_UNSPECIFIED(&nm_ip_addr_zero.addr6));
+    g_assert(memcmp(&nm_ip_addr_zero.addr6, &in6addr_any, sizeof(in6addr_any)) == 0);
+
+    g_assert(memcmp(&nm_ip_addr_zero, &a4, sizeof(a4)) == 0);
+    g_assert(memcmp(&nm_ip_addr_zero, &a6, sizeof(a6)) == 0);
+
+    g_assert_cmpstr(_nm_utils_inet4_ntop(nm_ip_addr_zero.addr4, buf), ==, "0.0.0.0");
+    g_assert_cmpstr(_nm_utils_inet6_ntop(&nm_ip_addr_zero.addr6, buf), ==, "::");
+
+    g_assert_cmpstr(nm_utils_inet_ntop(AF_INET, &nm_ip_addr_zero, buf), ==, "0.0.0.0");
+    g_assert_cmpstr(nm_utils_inet_ntop(AF_INET6, &nm_ip_addr_zero, buf), ==, "::");
+
+    G_STATIC_ASSERT_EXPR(sizeof(a) == sizeof(a.array));
+}
+
+static void
+test_connection_ovs_ifname(gconstpointer test_data)
+{
+    const guint     TEST_CASE                    = GPOINTER_TO_UINT(test_data);
+    gs_unref_object NMConnection *con            = NULL;
+    NMSettingConnection *         s_con          = NULL;
+    NMSettingOvsBridge *          s_ovs_bridge   = NULL;
+    NMSettingOvsPort *            s_ovs_port     = NULL;
+    NMSettingOvsInterface *       s_ovs_iface    = NULL;
+    NMSettingOvsPatch *           s_ovs_patch    = NULL;
+    const char *                  ovs_iface_type = NULL;
+
+    switch (TEST_CASE) {
+    case 1:
+        con          = nmtst_create_minimal_connection("test_connection_ovs_ifname_bridge",
+                                              NULL,
+                                              NM_SETTING_OVS_BRIDGE_SETTING_NAME,
+                                              &s_con);
+        s_ovs_bridge = nm_connection_get_setting_ovs_bridge(con);
+        g_assert(s_ovs_bridge);
+        break;
+    case 2:
+        con = nmtst_create_minimal_connection("test_connection_ovs_ifname_port",
+                                              NULL,
+                                              NM_SETTING_OVS_PORT_SETTING_NAME,
+                                              &s_con);
+
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_BRIDGE_SETTING_NAME,
+                     NULL);
+
+        s_ovs_port = nm_connection_get_setting_ovs_port(con);
+        g_assert(s_ovs_port);
+        break;
+    case 3:
+        con         = nmtst_create_minimal_connection("test_connection_ovs_ifname_interface_patch",
+                                              NULL,
+                                              NM_SETTING_OVS_INTERFACE_SETTING_NAME,
+                                              &s_con);
+        s_ovs_iface = nm_connection_get_setting_ovs_interface(con);
+        g_assert(s_ovs_iface);
+
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        g_object_set(s_ovs_iface, NM_SETTING_OVS_INTERFACE_TYPE, "patch", NULL);
+
+        s_ovs_patch = NM_SETTING_OVS_PATCH(nm_setting_ovs_patch_new());
+        g_assert(s_ovs_patch);
+
+        g_object_set(s_ovs_patch, NM_SETTING_OVS_PATCH_PEER, "1.2.3.4", NULL);
+
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_patch));
+        s_ovs_patch = nm_connection_get_setting_ovs_patch(con);
+        g_assert(s_ovs_patch);
+        ovs_iface_type = "patch";
+        break;
+    case 4:
+        con = nmtst_create_minimal_connection("test_connection_ovs_ifname_interface_internal",
+                                              NULL,
+                                              NM_SETTING_OVS_INTERFACE_SETTING_NAME,
+                                              &s_con);
+        s_ovs_iface = nm_connection_get_setting_ovs_interface(con);
+        g_assert(s_ovs_iface);
+
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        g_object_set(s_ovs_iface, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL);
+        ovs_iface_type = "internal";
+        break;
+    case 5:
+        con = nmtst_create_minimal_connection("test_connection_ovs_ifname_interface_system",
+                                              NULL,
+                                              NM_SETTING_WIRED_SETTING_NAME,
+                                              &s_con);
+
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        s_ovs_iface = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
+        g_assert(s_ovs_iface);
+
+        g_object_set(s_ovs_iface, NM_SETTING_OVS_INTERFACE_TYPE, "system", NULL);
+
+        nm_connection_add_setting(con, NM_SETTING(s_ovs_iface));
+        s_ovs_iface = nm_connection_get_setting_ovs_interface(con);
+        g_assert(s_ovs_iface);
+
+        ovs_iface_type = "system";
+        break;
+    case 6:
+        con         = nmtst_create_minimal_connection("test_connection_ovs_ifname_interface_dpdk",
+                                              NULL,
+                                              NM_SETTING_OVS_INTERFACE_SETTING_NAME,
+                                              &s_con);
+        s_ovs_iface = nm_connection_get_setting_ovs_interface(con);
+        g_assert(s_ovs_iface);
+
+        g_object_set(s_con,
+                     NM_SETTING_CONNECTION_MASTER,
+                     "master0",
+                     NM_SETTING_CONNECTION_SLAVE_TYPE,
+                     NM_SETTING_OVS_PORT_SETTING_NAME,
+                     NULL);
+
+        g_object_set(s_ovs_iface, NM_SETTING_OVS_INTERFACE_TYPE, "dpdk", NULL);
+        ovs_iface_type = "dpdk";
+        break;
+    }
+
+    if (!nm_streq0(ovs_iface_type, "system")) {
+        /* wrong: contains backward slash */
+        g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs\\0", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+
+        /* wrong: contains forward slash */
+        g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs/0", NULL);
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    }
+
+    /* wrong: contains space */
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs 0", NULL);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_INVALID_PROPERTY);
+
+    /* good */
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs0", NULL);
+    nmtst_assert_connection_verifies(con);
+
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs-br0", NULL);
+    nmtst_assert_connection_verifies(con);
+
+    /* good if bridge, port, or patch interface */
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "ovs123123123123130123123", NULL);
+
+    if (!ovs_iface_type || nm_streq(ovs_iface_type, "patch"))
+        nmtst_assert_connection_verifies(con);
+    else {
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    }
 }
 
 /*****************************************************************************/
 
 static gboolean
-_strsplit_quoted_char_needs_escaping (char ch)
+_strsplit_quoted_char_needs_escaping(char ch)
 {
-	return    NM_IN_SET (ch, '\'', '\"', '\\')
-	       || strchr (NM_ASCII_WHITESPACES, ch);
+    return NM_IN_SET(ch, '\'', '\"', '\\') || strchr(NM_ASCII_WHITESPACES, ch);
 }
 
 static char *
-_strsplit_quoted_create_str_rand (gssize len)
+_strsplit_quoted_create_str_rand(gssize len)
 {
-	NMStrBuf strbuf = NM_STR_BUF_INIT (nmtst_get_rand_uint32 () % 200, nmtst_get_rand_bool ());
+    NMStrBuf strbuf = NM_STR_BUF_INIT(nmtst_get_rand_uint32() % 200, nmtst_get_rand_bool());
 
-	g_assert (len >= -1);
+    g_assert(len >= -1);
 
-	if (len == -1)
-		len = nmtst_get_rand_word_length (NULL);
+    if (len == -1)
+        len = nmtst_get_rand_word_length(NULL);
 
-	while (len-- > 0) {
-		char ch;
+    while (len-- > 0) {
+        char ch;
 
-		ch = nmtst_rand_select ('a', ' ', '\\', '"', '\'', nmtst_get_rand_uint32 () % 255 + 1);
-		g_assert (ch);
-		nm_str_buf_append_c (&strbuf, ch);
-	}
+        ch = nmtst_rand_select('a', ' ', '\\', '"', '\'', nmtst_get_rand_uint32() % 255 + 1);
+        g_assert(ch);
+        nm_str_buf_append_c(&strbuf, ch);
+    }
 
-	if (!strbuf.allocated)
-		nm_str_buf_maybe_expand (&strbuf, 1, nmtst_get_rand_bool ());
-	return nm_str_buf_finalize (&strbuf, NULL);
+    if (!strbuf.allocated)
+        nm_str_buf_maybe_expand(&strbuf, 1, nmtst_get_rand_bool());
+    return nm_str_buf_finalize(&strbuf, NULL);
 }
 
 static char **
-_strsplit_quoted_create_strv_rand (void)
+_strsplit_quoted_create_strv_rand(void)
 {
-	guint len = nmtst_get_rand_word_length (NULL);
-	char **ptr;
-	guint i;
+    guint  len = nmtst_get_rand_word_length(NULL);
+    char **ptr;
+    guint  i;
 
-	ptr = g_new (char *, len + 1);
-	for (i = 0; i < len; i++)
-		ptr[i] = _strsplit_quoted_create_str_rand (-1);
-	ptr[i] = NULL;
-	return ptr;
+    ptr = g_new(char *, len + 1);
+    for (i = 0; i < len; i++)
+        ptr[i] = _strsplit_quoted_create_str_rand(-1);
+    ptr[i] = NULL;
+    return ptr;
 }
 
 static char *
-_strsplit_quoted_join_strv_rand (const char *const*strv)
-{
-	NMStrBuf strbuf = NM_STR_BUF_INIT (nmtst_get_rand_uint32 () % 200, nmtst_get_rand_bool ());
-	char *result;
-	gsize l;
-	gsize l2;
-	gsize *p_l2 = nmtst_get_rand_bool () ? &l2 : NULL;
-	gsize i;
-
-	g_assert (strv);
-
-	nm_str_buf_append_c_repeated (&strbuf, ' ', nmtst_get_rand_word_length (NULL) / 4);
-	for (i = 0; strv[i]; i++) {
-		const char *s = strv[i];
-		gsize j;
-		char quote;
-
-		nm_str_buf_append_c_repeated (&strbuf, ' ', 1 + nmtst_get_rand_word_length (NULL) / 4);
-
-		j = 0;
-		quote = '\0';
-		while (TRUE) {
-			char ch = s[j++];
-
-			/* extract_first_word*/
-			if (quote != '\0') {
-				if (ch == '\0') {
-					nm_str_buf_append_c (&strbuf, quote);
-					break;
-				}
-				if (   ch == quote
-				    || ch == '\\'
-				    || nmtst_get_rand_uint32 () % 5 == 0)
-					nm_str_buf_append_c (&strbuf, '\\');
-				nm_str_buf_append_c (&strbuf, ch);
-				if (nmtst_get_rand_uint32 () % 3 == 0) {
-					nm_str_buf_append_c (&strbuf, quote);
-					quote = '\0';
-					goto next_maybe_quote;
-				}
-				continue;
-			}
-
-			if (ch == '\0') {
-				if (s == strv[i]) {
-					quote = nmtst_rand_select ('\'', '"');
-					nm_str_buf_append_c_repeated (&strbuf, quote, 2);
-				}
-				break;
-			}
-
-			if (   _strsplit_quoted_char_needs_escaping (ch)
-			    || nmtst_get_rand_uint32 () % 5 == 0)
-				nm_str_buf_append_c (&strbuf, '\\');
-
-			nm_str_buf_append_c (&strbuf, ch);
+_strsplit_quoted_join_strv_rand(const char *const *strv)
+{
+    NMStrBuf strbuf = NM_STR_BUF_INIT(nmtst_get_rand_uint32() % 200, nmtst_get_rand_bool());
+    char *   result;
+    gsize    l;
+    gsize    l2;
+    gsize *  p_l2 = nmtst_get_rand_bool() ? &l2 : NULL;
+    gsize    i;
+
+    g_assert(strv);
+
+    nm_str_buf_append_c_repeated(&strbuf, ' ', nmtst_get_rand_word_length(NULL) / 4);
+    for (i = 0; strv[i]; i++) {
+        const char *s = strv[i];
+        gsize       j;
+        char        quote;
+
+        nm_str_buf_append_c_repeated(&strbuf, ' ', 1 + nmtst_get_rand_word_length(NULL) / 4);
+
+        j     = 0;
+        quote = '\0';
+        while (TRUE) {
+            char ch = s[j++];
+
+            /* extract_first_word*/
+            if (quote != '\0') {
+                if (ch == '\0') {
+                    nm_str_buf_append_c(&strbuf, quote);
+                    break;
+                }
+                if (ch == quote || ch == '\\' || nmtst_get_rand_uint32() % 5 == 0)
+                    nm_str_buf_append_c(&strbuf, '\\');
+                nm_str_buf_append_c(&strbuf, ch);
+                if (nmtst_get_rand_uint32() % 3 == 0) {
+                    nm_str_buf_append_c(&strbuf, quote);
+                    quote = '\0';
+                    goto next_maybe_quote;
+                }
+                continue;
+            }
+
+            if (ch == '\0') {
+                if (s == strv[i]) {
+                    quote = nmtst_rand_select('\'', '"');
+                    nm_str_buf_append_c_repeated(&strbuf, quote, 2);
+                }
+                break;
+            }
+
+            if (_strsplit_quoted_char_needs_escaping(ch) || nmtst_get_rand_uint32() % 5 == 0)
+                nm_str_buf_append_c(&strbuf, '\\');
+
+            nm_str_buf_append_c(&strbuf, ch);
 
 next_maybe_quote:
-			if (nmtst_get_rand_uint32 () % 5 == 0) {
-				quote = nmtst_rand_select ('\'', '\"');
-				nm_str_buf_append_c (&strbuf, quote);
-				if (nmtst_get_rand_uint32 () % 5 == 0) {
-					nm_str_buf_append_c (&strbuf, quote);
-					quote = '\0';
-				}
-			}
-		}
-	}
-	nm_str_buf_append_c_repeated (&strbuf, ' ', nmtst_get_rand_word_length (NULL) / 4);
+            if (nmtst_get_rand_uint32() % 5 == 0) {
+                quote = nmtst_rand_select('\'', '\"');
+                nm_str_buf_append_c(&strbuf, quote);
+                if (nmtst_get_rand_uint32() % 5 == 0) {
+                    nm_str_buf_append_c(&strbuf, quote);
+                    quote = '\0';
+                }
+            }
+        }
+    }
+    nm_str_buf_append_c_repeated(&strbuf, ' ', nmtst_get_rand_word_length(NULL) / 4);
 
-	nm_str_buf_maybe_expand (&strbuf, 1, nmtst_get_rand_bool ());
+    nm_str_buf_maybe_expand(&strbuf, 1, nmtst_get_rand_bool());
 
-	l = strbuf.len;
-	result = nm_str_buf_finalize (&strbuf, p_l2);
-	g_assert (!p_l2 || l == *p_l2);
-	g_assert (strlen (result) == l);
-	return result;
+    l      = strbuf.len;
+    result = nm_str_buf_finalize(&strbuf, p_l2);
+    g_assert(!p_l2 || l == *p_l2);
+    g_assert(strlen(result) == l);
+    return result;
 }
 
 static void
-_strsplit_quoted_assert_strv (const char *topic,
-                              const char *str,
-                              const char *const*strv1,
-                              const char *const*strv2)
+_strsplit_quoted_assert_strv(const char *       topic,
+                             const char *       str,
+                             const char *const *strv1,
+                             const char *const *strv2)
 {
-	nm_auto_str_buf NMStrBuf s1 = { };
-	nm_auto_str_buf NMStrBuf s2 = { };
-	gs_free char *str_escaped = NULL;
-	int i;
+    nm_auto_str_buf NMStrBuf s1          = {};
+    nm_auto_str_buf NMStrBuf s2          = {};
+    gs_free char *           str_escaped = NULL;
+    int                      i;
 
-	g_assert (str);
-	g_assert (strv1);
-	g_assert (strv2);
+    g_assert(str);
+    g_assert(strv1);
+    g_assert(strv2);
 
-	if (_nm_utils_strv_equal ((char **) strv1, (char **) strv2))
-		return;
+    if (_nm_utils_strv_equal((char **) strv1, (char **) strv2))
+        return;
 
-	for (i = 0; strv1[i]; i++) {
-		gs_free char *s = g_strescape (strv1[i], NULL);
+    for (i = 0; strv1[i]; i++) {
+        gs_free char *s = g_strescape(strv1[i], NULL);
 
-		g_print (">>> [%s] strv1[%d] = \"%s\"\n", topic, i, s);
-		if (i > 0)
-			nm_str_buf_append_c (&s1, ' ');
-		nm_str_buf_append_printf (&s1, "\"%s\"", s);
-	}
+        g_print(">>> [%s] strv1[%d] = \"%s\"\n", topic, i, s);
+        if (i > 0)
+            nm_str_buf_append_c(&s1, ' ');
+        nm_str_buf_append_printf(&s1, "\"%s\"", s);
+    }
 
-	for (i = 0; strv2[i]; i++) {
-		gs_free char *s = g_strescape (strv2[i], NULL);
+    for (i = 0; strv2[i]; i++) {
+        gs_free char *s = g_strescape(strv2[i], NULL);
 
-		g_print (">>> [%s] strv2[%d] = \"%s\"\n", topic, i, s);
-		if (i > 0)
-			nm_str_buf_append_c (&s2, ' ');
-		nm_str_buf_append_printf (&s2, "\"%s\"", s);
-	}
+        g_print(">>> [%s] strv2[%d] = \"%s\"\n", topic, i, s);
+        if (i > 0)
+            nm_str_buf_append_c(&s2, ' ');
+        nm_str_buf_append_printf(&s2, "\"%s\"", s);
+    }
 
-	nm_str_buf_maybe_expand (&s1, 1, FALSE);
-	nm_str_buf_maybe_expand (&s2, 1, FALSE);
+    nm_str_buf_maybe_expand(&s1, 1, FALSE);
+    nm_str_buf_maybe_expand(&s2, 1, FALSE);
 
-	str_escaped = g_strescape (str, NULL);
-	g_error ("compared words differs: [%s] str=\"%s\"; strv1=%s; strv2=%s", topic, str_escaped, nm_str_buf_get_str (&s1), nm_str_buf_get_str (&s2));
+    str_escaped = g_strescape(str, NULL);
+    g_error("compared words differs: [%s] str=\"%s\"; strv1=%s; strv2=%s",
+            topic,
+            str_escaped,
+            nm_str_buf_get_str(&s1),
+            nm_str_buf_get_str(&s2));
 }
 
 static void
-_strsplit_quoted_test (const char *str,
-                       const char *const*strv_expected)
+_strsplit_quoted_test(const char *str, const char *const *strv_expected)
 {
-	gs_strfreev char **strv_systemd = NULL;
-	gs_strfreev char **strv_nm = NULL;
-	int r;
+    gs_strfreev char **strv_systemd = NULL;
+    gs_strfreev char **strv_nm      = NULL;
+    int                r;
 
-	g_assert (str);
+    g_assert(str);
 
-	r = nmtst_systemd_extract_first_word_all (str, &strv_systemd);
-	g_assert_cmpint (r, ==, 1);
-	g_assert (strv_systemd);
+    r = nmtst_systemd_extract_first_word_all(str, &strv_systemd);
+    g_assert_cmpint(r, ==, 1);
+    g_assert(strv_systemd);
 
-	if (!strv_expected)
-		strv_expected = (const char *const*) strv_systemd;
+    if (!strv_expected)
+        strv_expected = (const char *const *) strv_systemd;
 
-	_strsplit_quoted_assert_strv ("systemd", str, strv_expected, (const char *const*) strv_systemd);
+    _strsplit_quoted_assert_strv("systemd", str, strv_expected, (const char *const *) strv_systemd);
 
-	strv_nm = nm_utils_strsplit_quoted (str);
-	g_assert (strv_nm);
-	_strsplit_quoted_assert_strv ("nm", str, strv_expected, (const char *const*) strv_nm);
+    strv_nm = nm_utils_strsplit_quoted(str);
+    g_assert(strv_nm);
+    _strsplit_quoted_assert_strv("nm", str, strv_expected, (const char *const *) strv_nm);
 }
 
 static void
-test_strsplit_quoted (void)
+test_strsplit_quoted(void)
 {
-	int i_run;
+    int i_run;
+
+    _strsplit_quoted_test("", NM_MAKE_STRV());
+    _strsplit_quoted_test(" ", NM_MAKE_STRV());
+    _strsplit_quoted_test("  ", NM_MAKE_STRV());
+    _strsplit_quoted_test("  \t", NM_MAKE_STRV());
+    _strsplit_quoted_test("a b", NM_MAKE_STRV("a", "b"));
+    _strsplit_quoted_test("a\\ b", NM_MAKE_STRV("a b"));
+    _strsplit_quoted_test(" a\\ \"b\"", NM_MAKE_STRV("a b"));
+    _strsplit_quoted_test(" a\\ \"b\" c \n", NM_MAKE_STRV("a b", "c"));
+
+    for (i_run = 0; i_run < 1000; i_run++) {
+        gs_strfreev char **strv = NULL;
+        gs_free char *     str  = NULL;
+
+        /* create random strv array and join them carefully so that splitting
+         * them will yield the original value. */
+        strv = _strsplit_quoted_create_strv_rand();
+        str  = _strsplit_quoted_join_strv_rand((const char *const *) strv);
+        _strsplit_quoted_test(str, (const char *const *) strv);
+    }
+
+    /* Create random words and assert that systemd and our implementation can
+     * both split them (and in the exact same way). */
+    for (i_run = 0; i_run < 1000; i_run++) {
+        gs_free char *s = _strsplit_quoted_create_str_rand(nmtst_get_rand_uint32() % 150);
 
-	_strsplit_quoted_test ("", NM_MAKE_STRV ());
-	_strsplit_quoted_test (" ", NM_MAKE_STRV ());
-	_strsplit_quoted_test ("  ", NM_MAKE_STRV ());
-	_strsplit_quoted_test ("  \t", NM_MAKE_STRV ());
-	_strsplit_quoted_test ("a b", NM_MAKE_STRV ("a", "b"));
-	_strsplit_quoted_test ("a\\ b", NM_MAKE_STRV ("a b"));
-	_strsplit_quoted_test (" a\\ \"b\"", NM_MAKE_STRV ("a b"));
-	_strsplit_quoted_test (" a\\ \"b\" c \n", NM_MAKE_STRV ("a b", "c"));
+        _strsplit_quoted_test(s, NULL);
+    }
+}
+
+/*****************************************************************************/
 
-	for (i_run = 0; i_run < 1000; i_run++) {
-		gs_strfreev char **strv = NULL;
-		gs_free char *str = NULL;
+static void
+_do_wifi_ghz_freqs(const guint *freqs, const char *band)
+{
+    int len;
+    int j;
+    int i;
 
-		/* create random strv array and join them carefully so that splitting
-		 * them will yield the original value. */
-		strv = _strsplit_quoted_create_strv_rand ();
-		str = _strsplit_quoted_join_strv_rand ((const char *const*) strv);
-		_strsplit_quoted_test (str, (const char *const*) strv);
-	}
+    g_assert(NM_IN_STRSET(band, "a", "bg"));
+    g_assert(freqs);
+    g_assert(freqs[0] != 0);
 
-	/* Create random words and assert that systemd and our implementation can
-	 * both split them (and in the exact same way). */
-	for (i_run = 0; i_run < 1000; i_run++) {
-		gs_free char *s = _strsplit_quoted_create_str_rand (nmtst_get_rand_uint32 () % 150);
+    for (i = 0; freqs[i]; i++) {
+        for (j = 0; j < i; j++)
+            g_assert(freqs[i] != freqs[j]);
+    }
+    len = i;
 
-		_strsplit_quoted_test (s, NULL);
-	}
+    g_assert(nm_utils_wifi_freq_to_channel(0) == 0);
+    g_assert(nm_utils_wifi_channel_to_freq(0, "bg") == -1);
+    g_assert(nm_utils_wifi_channel_to_freq(0, "foo") == 0);
+    g_assert(!nm_utils_wifi_is_channel_valid(0, "bg"));
+    g_assert(!nm_utils_wifi_is_channel_valid(0, "foo"));
+
+    for (i = 0; i < len; i++) {
+        guint   freq = freqs[i];
+        guint32 chan;
+        guint32 freq2;
+
+        chan = nm_utils_wifi_freq_to_channel(freq);
+        g_assert(chan != 0);
+
+        freq2 = nm_utils_wifi_channel_to_freq(chan, band);
+        g_assert(freq2 == freq);
+
+        g_assert(nm_utils_wifi_is_channel_valid(chan, band));
+    }
+
+    g_assert(freqs[len] == 0);
+}
+
+static void
+test_nm_utils_wifi_ghz_freqs(void)
+{
+    _do_wifi_ghz_freqs(nm_utils_wifi_2ghz_freqs(), "bg");
+    _do_wifi_ghz_freqs(nm_utils_wifi_5ghz_freqs(), "a");
 }
 
 /*****************************************************************************/
 
-NMTST_DEFINE ();
-
-int main (int argc, char **argv)
-{
-	nmtst_init (&argc, &argv, TRUE);
-
-	g_test_add_func ("/core/general/test_nm_ascii_spaces", test_nm_ascii_spaces);
-	g_test_add_func ("/core/general/test_nm_hash", test_nm_hash);
-	g_test_add_func ("/core/general/test_nm_g_slice_free_fcn", test_nm_g_slice_free_fcn);
-	g_test_add_func ("/core/general/test_c_list_sort", test_c_list_sort);
-	g_test_add_func ("/core/general/test_dedup_multi", test_dedup_multi);
-	g_test_add_func ("/core/general/test_utils_str_utf8safe", test_utils_str_utf8safe);
-	g_test_add_func ("/core/general/test_nm_utils_strsplit_set", test_nm_utils_strsplit_set);
-	g_test_add_func ("/core/general/test_nm_utils_escaped_tokens", test_nm_utils_escaped_tokens);
-	g_test_add_func ("/core/general/test_nm_in_set", test_nm_in_set);
-	g_test_add_func ("/core/general/test_nm_in_strset", test_nm_in_strset);
-	g_test_add_func ("/core/general/test_setting_vpn_items", test_setting_vpn_items);
-	g_test_add_func ("/core/general/test_setting_vpn_update_secrets", test_setting_vpn_update_secrets);
-	g_test_add_func ("/core/general/test_setting_vpn_modify_during_foreach", test_setting_vpn_modify_during_foreach);
-	g_test_add_func ("/core/general/test_setting_ip4_config_labels", test_setting_ip4_config_labels);
-	g_test_add_func ("/core/general/test_setting_ip4_config_address_data", test_setting_ip4_config_address_data);
-	g_test_add_func ("/core/general/test_setting_ip_route_attributes", test_setting_ip_route_attributes);
-	g_test_add_func ("/core/general/test_setting_gsm_apn_spaces", test_setting_gsm_apn_spaces);
-	g_test_add_func ("/core/general/test_setting_gsm_apn_bad_chars", test_setting_gsm_apn_bad_chars);
-	g_test_add_func ("/core/general/test_setting_gsm_apn_underscore", test_setting_gsm_apn_underscore);
-	g_test_add_func ("/core/general/test_setting_gsm_without_number", test_setting_gsm_without_number);
-	g_test_add_func ("/core/general/test_setting_gsm_sim_operator_id", test_setting_gsm_sim_operator_id);
-	g_test_add_func ("/core/general/test_setting_to_dbus_all", test_setting_to_dbus_all);
-	g_test_add_func ("/core/general/test_setting_to_dbus_no_secrets", test_setting_to_dbus_no_secrets);
-	g_test_add_func ("/core/general/test_setting_to_dbus_only_secrets", test_setting_to_dbus_only_secrets);
-	g_test_add_func ("/core/general/test_setting_to_dbus_transform", test_setting_to_dbus_transform);
-	g_test_add_func ("/core/general/test_setting_to_dbus_enum", test_setting_to_dbus_enum);
-	g_test_add_func ("/core/general/test_setting_compare_id", test_setting_compare_id);
-	g_test_add_func ("/core/general/test_setting_compare_addresses", test_setting_compare_addresses);
-	g_test_add_func ("/core/general/test_setting_compare_routes", test_setting_compare_routes);
-	g_test_add_func ("/core/general/test_setting_compare_wired_cloned_mac_address", test_setting_compare_wired_cloned_mac_address);
-	g_test_add_func ("/core/general/test_setting_compare_wirless_cloned_mac_address", test_setting_compare_wireless_cloned_mac_address);
-	g_test_add_func ("/core/general/test_setting_compare_timestamp", test_setting_compare_timestamp);
-#define ADD_FUNC(name, func, secret_flags, comp_flags, remove_secret) \
-	g_test_add_data_func_full ("/core/general/" G_STRINGIFY (func) "_" name, \
-	                           test_data_compare_secrets_new (secret_flags, comp_flags, remove_secret), \
-	                           func, g_free)
-	ADD_FUNC ("agent_owned", test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE);
-	ADD_FUNC ("not_saved", test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE);
-	ADD_FUNC ("secrets", test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE);
-	ADD_FUNC ("exact", test_setting_compare_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE);
-	ADD_FUNC ("agent_owned", test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE);
-	ADD_FUNC ("not_saved", test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE);
-	ADD_FUNC ("secrets", test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE);
-	ADD_FUNC ("exact", test_setting_compare_vpn_secrets, NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE);
-	g_test_add_func ("/core/general/test_setting_old_uuid", test_setting_old_uuid);
-
-	g_test_add_func ("/core/general/test_connection_to_dbus_setting_name", test_connection_to_dbus_setting_name);
-	g_test_add_func ("/core/general/test_connection_to_dbus_deprecated_props", test_connection_to_dbus_deprecated_props);
-	g_test_add_func ("/core/general/test_setting_new_from_dbus", test_setting_new_from_dbus);
-	g_test_add_func ("/core/general/test_setting_new_from_dbus_transform", test_setting_new_from_dbus_transform);
-	g_test_add_func ("/core/general/test_setting_new_from_dbus_enum", test_setting_new_from_dbus_enum);
-	g_test_add_func ("/core/general/test_setting_new_from_dbus_bad", test_setting_new_from_dbus_bad);
-	g_test_add_func ("/core/general/test_connection_replace_settings", test_connection_replace_settings);
-	g_test_add_func ("/core/general/test_connection_replace_settings_from_connection", test_connection_replace_settings_from_connection);
-	g_test_add_func ("/core/general/test_connection_replace_settings_bad", test_connection_replace_settings_bad);
-	g_test_add_func ("/core/general/test_connection_new_from_dbus", test_connection_new_from_dbus);
-	g_test_add_func ("/core/general/test_connection_normalize_virtual_iface_name", test_connection_normalize_virtual_iface_name);
-	g_test_add_func ("/core/general/test_connection_normalize_uuid", test_connection_normalize_uuid);
-	g_test_add_func ("/core/general/test_connection_normalize_type", test_connection_normalize_type);
-	g_test_add_func ("/core/general/test_connection_normalize_slave_type_1", test_connection_normalize_slave_type_1);
-	g_test_add_func ("/core/general/test_connection_normalize_slave_type_2", test_connection_normalize_slave_type_2);
-	g_test_add_func ("/core/general/test_connection_normalize_infiniband_mtu", test_connection_normalize_infiniband_mtu);
-	g_test_add_func ("/core/general/test_connection_normalize_gateway_never_default", test_connection_normalize_gateway_never_default);
-	g_test_add_func ("/core/general/test_connection_normalize_may_fail", test_connection_normalize_may_fail);
-	g_test_add_func ("/core/general/test_connection_normalize_shared_addresses", test_connection_normalize_shared_addresses);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/1", GUINT_TO_POINTER (1), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/2", GUINT_TO_POINTER (2), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/3", GUINT_TO_POINTER (3), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/4", GUINT_TO_POINTER (4), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/5", GUINT_TO_POINTER (5), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/6", GUINT_TO_POINTER (6), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_system/7", GUINT_TO_POINTER (7), test_connection_normalize_ovs_interface_type_system);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/1",  GUINT_TO_POINTER (1),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/2",  GUINT_TO_POINTER (2),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/3",  GUINT_TO_POINTER (3),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/4",  GUINT_TO_POINTER (4),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/5",  GUINT_TO_POINTER (5),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/6",  GUINT_TO_POINTER (6),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/7",  GUINT_TO_POINTER (7),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/8",  GUINT_TO_POINTER (8),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/9",  GUINT_TO_POINTER (9),  test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/10", GUINT_TO_POINTER (10), test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/11", GUINT_TO_POINTER (11), test_connection_normalize_ovs_interface_type_ovs_interface);
-	g_test_add_data_func ("/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/12", GUINT_TO_POINTER (12), test_connection_normalize_ovs_interface_type_ovs_interface);
-
-	g_test_add_data_func ("/core/general/test_connection_ovs_ifname/1", GUINT_TO_POINTER (1), test_connection_ovs_ifname);
-	g_test_add_data_func ("/core/general/test_connection_ovs_ifname/2", GUINT_TO_POINTER (2), test_connection_ovs_ifname);
-	g_test_add_data_func ("/core/general/test_connection_ovs_ifname/3", GUINT_TO_POINTER (3), test_connection_ovs_ifname);
-	g_test_add_data_func ("/core/general/test_connection_ovs_ifname/4", GUINT_TO_POINTER (4), test_connection_ovs_ifname);
-	g_test_add_data_func ("/core/general/test_connection_ovs_ifname/5", GUINT_TO_POINTER (5), test_connection_ovs_ifname);
-	g_test_add_data_func ("/core/general/test_connection_ovs_ifname/6", GUINT_TO_POINTER (6), test_connection_ovs_ifname);
-
-	g_test_add_func ("/core/general/test_setting_connection_permissions_helpers", test_setting_connection_permissions_helpers);
-	g_test_add_func ("/core/general/test_setting_connection_permissions_property", test_setting_connection_permissions_property);
-
-	g_test_add_func ("/core/general/test_connection_compare_same", test_connection_compare_same);
-	g_test_add_func ("/core/general/test_connection_compare_key_only_in_a", test_connection_compare_key_only_in_a);
-	g_test_add_func ("/core/general/test_connection_compare_setting_only_in_a", test_connection_compare_setting_only_in_a);
-	g_test_add_func ("/core/general/test_connection_compare_key_only_in_b", test_connection_compare_key_only_in_b);
-	g_test_add_func ("/core/general/test_connection_compare_setting_only_in_b", test_connection_compare_setting_only_in_b);
-
-	g_test_add_func ("/core/general/test_connection_diff_a_only", test_connection_diff_a_only);
-	g_test_add_func ("/core/general/test_connection_diff_same", test_connection_diff_same);
-	g_test_add_func ("/core/general/test_connection_diff_different", test_connection_diff_different);
-	g_test_add_func ("/core/general/test_connection_diff_no_secrets", test_connection_diff_no_secrets);
-	g_test_add_func ("/core/general/test_connection_diff_inferrable", test_connection_diff_inferrable);
-	g_test_add_func ("/core/general/test_connection_good_base_types", test_connection_good_base_types);
-	g_test_add_func ("/core/general/test_connection_bad_base_types", test_connection_bad_base_types);
-
-	g_test_add_func ("/core/general/test_hwaddr_aton_ether_normal", test_hwaddr_aton_ether_normal);
-	g_test_add_func ("/core/general/test_hwaddr_aton_ib_normal", test_hwaddr_aton_ib_normal);
-	g_test_add_func ("/core/general/test_hwaddr_aton_no_leading_zeros", test_hwaddr_aton_no_leading_zeros);
-	g_test_add_func ("/core/general/test_hwaddr_aton_malformed", test_hwaddr_aton_malformed);
-	g_test_add_func ("/core/general/test_hwaddr_equal", test_hwaddr_equal);
-	g_test_add_func ("/core/general/test_hwaddr_canonical", test_hwaddr_canonical);
-
-	g_test_add_func ("/core/general/test_ip4_prefix_to_netmask", test_ip4_prefix_to_netmask);
-	g_test_add_func ("/core/general/test_ip4_netmask_to_prefix", test_ip4_netmask_to_prefix);
-
-	g_test_add_func ("/core/general/test_connection_changed_signal", test_connection_changed_signal);
-	g_test_add_func ("/core/general/test_setting_connection_changed_signal", test_setting_connection_changed_signal);
-	g_test_add_func ("/core/general/test_setting_bond_changed_signal", test_setting_bond_changed_signal);
-	g_test_add_func ("/core/general/test_setting_ip4_changed_signal", test_setting_ip4_changed_signal);
-	g_test_add_func ("/core/general/test_setting_ip6_changed_signal", test_setting_ip6_changed_signal);
-	g_test_add_func ("/core/general/test_setting_vlan_changed_signal", test_setting_vlan_changed_signal);
-	g_test_add_func ("/core/general/test_setting_vpn_changed_signal", test_setting_vpn_changed_signal);
-	g_test_add_func ("/core/general/test_setting_wired_changed_signal", test_setting_wired_changed_signal);
-	g_test_add_func ("/core/general/test_setting_wireless_changed_signal", test_setting_wireless_changed_signal);
-	g_test_add_func ("/core/general/test_setting_wireless_security_changed_signal", test_setting_wireless_security_changed_signal);
-	g_test_add_func ("/core/general/test_setting_802_1x_changed_signal", test_setting_802_1x_changed_signal);
-	g_test_add_func ("/core/general/test_setting_ip4_gateway", test_setting_ip4_gateway);
-	g_test_add_func ("/core/general/test_setting_ip6_gateway", test_setting_ip6_gateway);
-	g_test_add_func ("/core/general/test_setting_compare_default_strv", test_setting_compare_default_strv);
-	g_test_add_func ("/core/general/test_setting_user_data", test_setting_user_data);
-
-	g_test_add_func ("/core/general/test_sock_addr_endpoint", test_sock_addr_endpoint);
-
-	g_test_add_func ("/core/general/hexstr2bin", test_hexstr2bin);
-	g_test_add_func ("/core/general/nm_strquote", test_nm_strquote);
-	g_test_add_func ("/core/general/test_nm_utils_uuid_generate_from_string", test_nm_utils_uuid_generate_from_string);
-	g_test_add_func ("/core/general/_nm_utils_uuid_generate_from_strings", test_nm_utils_uuid_generate_from_strings);
-
-	g_test_add_func ("/core/general/_nm_utils_ascii_str_to_int64", test_nm_utils_ascii_str_to_int64);
-	g_test_add_func ("/core/general/nm_utils_is_power_of_two", test_nm_utils_is_power_of_two);
-	g_test_add_func ("/core/general/nm_utils_ptrarray_find_binary_search", test_nm_utils_ptrarray_find_binary_search);
-	g_test_add_func ("/core/general/nm_utils_ptrarray_find_binary_search_with_duplicates", test_nm_utils_ptrarray_find_binary_search_with_duplicates);
-	g_test_add_func ("/core/general/_nm_utils_strstrdictkey", test_nm_utils_strstrdictkey);
-	g_test_add_func ("/core/general/nm_ptrarray_len", test_nm_ptrarray_len);
-
-	g_test_add_func ("/core/general/_nm_utils_dns_option_validate", test_nm_utils_dns_option_validate);
-	g_test_add_func ("/core/general/_nm_utils_dns_option_find_idx", test_nm_utils_dns_option_find_idx);
-	g_test_add_func ("/core/general/_nm_utils_validate_json", test_nm_utils_check_valid_json);
-	g_test_add_func ("/core/general/_nm_utils_team_config_equal", test_nm_utils_team_config_equal);
-	g_test_add_func ("/core/general/test_nm_utils_enum", test_nm_utils_enum);
-	g_test_add_func ("/core/general/nm-set-out", test_nm_set_out);
-	g_test_add_func ("/core/general/route_attributes/parse", test_route_attributes_parse);
-	g_test_add_func ("/core/general/route_attributes/format", test_route_attributes_format);
-	g_test_add_func ("/core/general/test_variant_attribute_spec", test_variant_attribute_spec);
-
-	g_test_add_func ("/core/general/get_start_time_for_pid", test_get_start_time_for_pid);
-	g_test_add_func ("/core/general/test_nm_va_args_macros", test_nm_va_args_macros);
-	g_test_add_func ("/core/general/test_ethtool_offload", test_ethtool_offload);
-
-	g_test_add_data_func ("/core/general/test_integrate_maincontext/1", GUINT_TO_POINTER (1), test_integrate_maincontext);
-	g_test_add_data_func ("/core/general/test_integrate_maincontext/2", GUINT_TO_POINTER (2), test_integrate_maincontext);
-
-	g_test_add_func ("/core/general/test_nm_ip_addr_zero", test_nm_ip_addr_zero);
-
-	g_test_add_func ("/core/general/test_strsplit_quoted", test_strsplit_quoted);
-
-	return g_test_run ();
+NMTST_DEFINE();
+
+int
+main(int argc, char **argv)
+{
+    nmtst_init(&argc, &argv, TRUE);
+
+    g_test_add_func("/core/general/test_nm_ascii_spaces", test_nm_ascii_spaces);
+    g_test_add_func("/core/general/test_nm_hash", test_nm_hash);
+    g_test_add_func("/core/general/test_nm_g_slice_free_fcn", test_nm_g_slice_free_fcn);
+    g_test_add_func("/core/general/test_c_list_sort", test_c_list_sort);
+    g_test_add_func("/core/general/test_dedup_multi", test_dedup_multi);
+    g_test_add_func("/core/general/test_utils_str_utf8safe", test_utils_str_utf8safe);
+    g_test_add_func("/core/general/test_nm_utils_strsplit_set", test_nm_utils_strsplit_set);
+    g_test_add_func("/core/general/test_nm_utils_escaped_tokens", test_nm_utils_escaped_tokens);
+    g_test_add_func("/core/general/test_nm_in_set", test_nm_in_set);
+    g_test_add_func("/core/general/test_nm_in_strset", test_nm_in_strset);
+    g_test_add_func("/core/general/test_setting_vpn_items", test_setting_vpn_items);
+    g_test_add_func("/core/general/test_setting_vpn_update_secrets",
+                    test_setting_vpn_update_secrets);
+    g_test_add_func("/core/general/test_setting_vpn_modify_during_foreach",
+                    test_setting_vpn_modify_during_foreach);
+    g_test_add_func("/core/general/test_setting_ip4_config_labels", test_setting_ip4_config_labels);
+    g_test_add_func("/core/general/test_setting_ip4_config_address_data",
+                    test_setting_ip4_config_address_data);
+    g_test_add_func("/core/general/test_setting_ip_route_attributes",
+                    test_setting_ip_route_attributes);
+    g_test_add_func("/core/general/test_setting_gsm_apn_spaces", test_setting_gsm_apn_spaces);
+    g_test_add_func("/core/general/test_setting_gsm_apn_bad_chars", test_setting_gsm_apn_bad_chars);
+    g_test_add_func("/core/general/test_setting_gsm_apn_underscore",
+                    test_setting_gsm_apn_underscore);
+    g_test_add_func("/core/general/test_setting_gsm_without_number",
+                    test_setting_gsm_without_number);
+    g_test_add_func("/core/general/test_setting_gsm_sim_operator_id",
+                    test_setting_gsm_sim_operator_id);
+    g_test_add_func("/core/general/test_setting_to_dbus_all", test_setting_to_dbus_all);
+    g_test_add_func("/core/general/test_setting_to_dbus_no_secrets",
+                    test_setting_to_dbus_no_secrets);
+    g_test_add_func("/core/general/test_setting_to_dbus_only_secrets",
+                    test_setting_to_dbus_only_secrets);
+    g_test_add_func("/core/general/test_setting_to_dbus_transform", test_setting_to_dbus_transform);
+    g_test_add_func("/core/general/test_setting_to_dbus_enum", test_setting_to_dbus_enum);
+    g_test_add_func("/core/general/test_setting_compare_id", test_setting_compare_id);
+    g_test_add_func("/core/general/test_setting_compare_addresses", test_setting_compare_addresses);
+    g_test_add_func("/core/general/test_setting_compare_routes", test_setting_compare_routes);
+    g_test_add_func("/core/general/test_setting_compare_wired_cloned_mac_address",
+                    test_setting_compare_wired_cloned_mac_address);
+    g_test_add_func("/core/general/test_setting_compare_wirless_cloned_mac_address",
+                    test_setting_compare_wireless_cloned_mac_address);
+    g_test_add_func("/core/general/test_setting_compare_timestamp", test_setting_compare_timestamp);
+#define ADD_FUNC(name, func, secret_flags, comp_flags, remove_secret)           \
+    g_test_add_data_func_full(                                                  \
+        "/core/general/" G_STRINGIFY(func) "_" name,                            \
+        test_data_compare_secrets_new(secret_flags, comp_flags, remove_secret), \
+        func,                                                                   \
+        g_free)
+    ADD_FUNC("agent_owned",
+             test_setting_compare_secrets,
+             NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+             NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS,
+             TRUE);
+    ADD_FUNC("not_saved",
+             test_setting_compare_secrets,
+             NM_SETTING_SECRET_FLAG_NOT_SAVED,
+             NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS,
+             TRUE);
+    ADD_FUNC("secrets",
+             test_setting_compare_secrets,
+             NM_SETTING_SECRET_FLAG_NONE,
+             NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS,
+             TRUE);
+    ADD_FUNC("exact",
+             test_setting_compare_secrets,
+             NM_SETTING_SECRET_FLAG_NONE,
+             NM_SETTING_COMPARE_FLAG_EXACT,
+             FALSE);
+    ADD_FUNC("agent_owned",
+             test_setting_compare_vpn_secrets,
+             NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+             NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS,
+             TRUE);
+    ADD_FUNC("not_saved",
+             test_setting_compare_vpn_secrets,
+             NM_SETTING_SECRET_FLAG_NOT_SAVED,
+             NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS,
+             TRUE);
+    ADD_FUNC("secrets",
+             test_setting_compare_vpn_secrets,
+             NM_SETTING_SECRET_FLAG_NONE,
+             NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS,
+             TRUE);
+    ADD_FUNC("exact",
+             test_setting_compare_vpn_secrets,
+             NM_SETTING_SECRET_FLAG_NONE,
+             NM_SETTING_COMPARE_FLAG_EXACT,
+             FALSE);
+    g_test_add_func("/core/general/test_setting_old_uuid", test_setting_old_uuid);
+
+    g_test_add_func("/core/general/test_connection_to_dbus_setting_name",
+                    test_connection_to_dbus_setting_name);
+    g_test_add_func("/core/general/test_connection_to_dbus_deprecated_props",
+                    test_connection_to_dbus_deprecated_props);
+    g_test_add_func("/core/general/test_setting_new_from_dbus", test_setting_new_from_dbus);
+    g_test_add_func("/core/general/test_setting_new_from_dbus_transform",
+                    test_setting_new_from_dbus_transform);
+    g_test_add_func("/core/general/test_setting_new_from_dbus_enum",
+                    test_setting_new_from_dbus_enum);
+    g_test_add_func("/core/general/test_setting_new_from_dbus_bad", test_setting_new_from_dbus_bad);
+    g_test_add_func("/core/general/test_connection_replace_settings",
+                    test_connection_replace_settings);
+    g_test_add_func("/core/general/test_connection_replace_settings_from_connection",
+                    test_connection_replace_settings_from_connection);
+    g_test_add_func("/core/general/test_connection_replace_settings_bad",
+                    test_connection_replace_settings_bad);
+    g_test_add_func("/core/general/test_connection_new_from_dbus", test_connection_new_from_dbus);
+    g_test_add_func("/core/general/test_connection_normalize_virtual_iface_name",
+                    test_connection_normalize_virtual_iface_name);
+    g_test_add_func("/core/general/test_connection_normalize_uuid", test_connection_normalize_uuid);
+    g_test_add_func("/core/general/test_connection_normalize_type", test_connection_normalize_type);
+    g_test_add_func("/core/general/test_connection_normalize_slave_type_1",
+                    test_connection_normalize_slave_type_1);
+    g_test_add_func("/core/general/test_connection_normalize_slave_type_2",
+                    test_connection_normalize_slave_type_2);
+    g_test_add_func("/core/general/test_connection_normalize_infiniband_mtu",
+                    test_connection_normalize_infiniband_mtu);
+    g_test_add_func("/core/general/test_connection_normalize_gateway_never_default",
+                    test_connection_normalize_gateway_never_default);
+    g_test_add_func("/core/general/test_connection_normalize_may_fail",
+                    test_connection_normalize_may_fail);
+    g_test_add_func("/core/general/test_connection_normalize_shared_addresses",
+                    test_connection_normalize_shared_addresses);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/1",
+                         GUINT_TO_POINTER(1),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/2",
+                         GUINT_TO_POINTER(2),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/3",
+                         GUINT_TO_POINTER(3),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/4",
+                         GUINT_TO_POINTER(4),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/5",
+                         GUINT_TO_POINTER(5),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/6",
+                         GUINT_TO_POINTER(6),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func("/core/general/test_connection_normalize_ovs_interface_type_system/7",
+                         GUINT_TO_POINTER(7),
+                         test_connection_normalize_ovs_interface_type_system);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/1",
+        GUINT_TO_POINTER(1),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/2",
+        GUINT_TO_POINTER(2),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/3",
+        GUINT_TO_POINTER(3),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/4",
+        GUINT_TO_POINTER(4),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/5",
+        GUINT_TO_POINTER(5),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/6",
+        GUINT_TO_POINTER(6),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/7",
+        GUINT_TO_POINTER(7),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/8",
+        GUINT_TO_POINTER(8),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/9",
+        GUINT_TO_POINTER(9),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/10",
+        GUINT_TO_POINTER(10),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/11",
+        GUINT_TO_POINTER(11),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+    g_test_add_data_func(
+        "/core/general/test_connection_normalize_ovs_interface_type_ovs_interface/12",
+        GUINT_TO_POINTER(12),
+        test_connection_normalize_ovs_interface_type_ovs_interface);
+
+    g_test_add_data_func("/core/general/test_connection_ovs_ifname/1",
+                         GUINT_TO_POINTER(1),
+                         test_connection_ovs_ifname);
+    g_test_add_data_func("/core/general/test_connection_ovs_ifname/2",
+                         GUINT_TO_POINTER(2),
+                         test_connection_ovs_ifname);
+    g_test_add_data_func("/core/general/test_connection_ovs_ifname/3",
+                         GUINT_TO_POINTER(3),
+                         test_connection_ovs_ifname);
+    g_test_add_data_func("/core/general/test_connection_ovs_ifname/4",
+                         GUINT_TO_POINTER(4),
+                         test_connection_ovs_ifname);
+    g_test_add_data_func("/core/general/test_connection_ovs_ifname/5",
+                         GUINT_TO_POINTER(5),
+                         test_connection_ovs_ifname);
+    g_test_add_data_func("/core/general/test_connection_ovs_ifname/6",
+                         GUINT_TO_POINTER(6),
+                         test_connection_ovs_ifname);
+
+    g_test_add_func("/core/general/test_setting_connection_permissions_helpers",
+                    test_setting_connection_permissions_helpers);
+    g_test_add_func("/core/general/test_setting_connection_permissions_property",
+                    test_setting_connection_permissions_property);
+
+    g_test_add_func("/core/general/test_connection_compare_same", test_connection_compare_same);
+    g_test_add_func("/core/general/test_connection_compare_key_only_in_a",
+                    test_connection_compare_key_only_in_a);
+    g_test_add_func("/core/general/test_connection_compare_setting_only_in_a",
+                    test_connection_compare_setting_only_in_a);
+    g_test_add_func("/core/general/test_connection_compare_key_only_in_b",
+                    test_connection_compare_key_only_in_b);
+    g_test_add_func("/core/general/test_connection_compare_setting_only_in_b",
+                    test_connection_compare_setting_only_in_b);
+
+    g_test_add_func("/core/general/test_connection_diff_a_only", test_connection_diff_a_only);
+    g_test_add_func("/core/general/test_connection_diff_same", test_connection_diff_same);
+    g_test_add_func("/core/general/test_connection_diff_different", test_connection_diff_different);
+    g_test_add_func("/core/general/test_connection_diff_no_secrets",
+                    test_connection_diff_no_secrets);
+    g_test_add_func("/core/general/test_connection_diff_inferrable",
+                    test_connection_diff_inferrable);
+    g_test_add_func("/core/general/test_connection_good_base_types",
+                    test_connection_good_base_types);
+    g_test_add_func("/core/general/test_connection_bad_base_types", test_connection_bad_base_types);
+
+    g_test_add_func("/core/general/test_hwaddr_aton_ether_normal", test_hwaddr_aton_ether_normal);
+    g_test_add_func("/core/general/test_hwaddr_aton_ib_normal", test_hwaddr_aton_ib_normal);
+    g_test_add_func("/core/general/test_hwaddr_aton_no_leading_zeros",
+                    test_hwaddr_aton_no_leading_zeros);
+    g_test_add_func("/core/general/test_hwaddr_aton_malformed", test_hwaddr_aton_malformed);
+    g_test_add_func("/core/general/test_hwaddr_equal", test_hwaddr_equal);
+    g_test_add_func("/core/general/test_hwaddr_canonical", test_hwaddr_canonical);
+
+    g_test_add_func("/core/general/test_ip4_prefix_to_netmask", test_ip4_prefix_to_netmask);
+    g_test_add_func("/core/general/test_ip4_netmask_to_prefix", test_ip4_netmask_to_prefix);
+
+    g_test_add_func("/core/general/test_connection_changed_signal", test_connection_changed_signal);
+    g_test_add_func("/core/general/test_setting_connection_changed_signal",
+                    test_setting_connection_changed_signal);
+    g_test_add_func("/core/general/test_setting_bond_changed_signal",
+                    test_setting_bond_changed_signal);
+    g_test_add_func("/core/general/test_setting_ip4_changed_signal",
+                    test_setting_ip4_changed_signal);
+    g_test_add_func("/core/general/test_setting_ip6_changed_signal",
+                    test_setting_ip6_changed_signal);
+    g_test_add_func("/core/general/test_setting_vlan_changed_signal",
+                    test_setting_vlan_changed_signal);
+    g_test_add_func("/core/general/test_setting_vpn_changed_signal",
+                    test_setting_vpn_changed_signal);
+    g_test_add_func("/core/general/test_setting_wired_changed_signal",
+                    test_setting_wired_changed_signal);
+    g_test_add_func("/core/general/test_setting_wireless_changed_signal",
+                    test_setting_wireless_changed_signal);
+    g_test_add_func("/core/general/test_setting_wireless_security_changed_signal",
+                    test_setting_wireless_security_changed_signal);
+    g_test_add_func("/core/general/test_setting_802_1x_changed_signal",
+                    test_setting_802_1x_changed_signal);
+    g_test_add_func("/core/general/test_setting_ip4_gateway", test_setting_ip4_gateway);
+    g_test_add_func("/core/general/test_setting_ip6_gateway", test_setting_ip6_gateway);
+    g_test_add_func("/core/general/test_setting_compare_default_strv",
+                    test_setting_compare_default_strv);
+    g_test_add_func("/core/general/test_setting_user_data", test_setting_user_data);
+
+    g_test_add_func("/core/general/test_sock_addr_endpoint", test_sock_addr_endpoint);
+
+    g_test_add_func("/core/general/hexstr2bin", test_hexstr2bin);
+    g_test_add_func("/core/general/nm_strquote", test_nm_strquote);
+    g_test_add_func("/core/general/test_nm_utils_uuid_generate_from_string",
+                    test_nm_utils_uuid_generate_from_string);
+    g_test_add_func("/core/general/_nm_utils_uuid_generate_from_strings",
+                    test_nm_utils_uuid_generate_from_strings);
+
+    g_test_add_func("/core/general/_nm_utils_ascii_str_to_int64", test_nm_utils_ascii_str_to_int64);
+    g_test_add_func("/core/general/nm_utils_is_power_of_two", test_nm_utils_is_power_of_two);
+    g_test_add_func("/core/general/nm_utils_ptrarray_find_binary_search",
+                    test_nm_utils_ptrarray_find_binary_search);
+    g_test_add_func("/core/general/nm_utils_ptrarray_find_binary_search_with_duplicates",
+                    test_nm_utils_ptrarray_find_binary_search_with_duplicates);
+    g_test_add_func("/core/general/_nm_utils_strstrdictkey", test_nm_utils_strstrdictkey);
+    g_test_add_func("/core/general/nm_ptrarray_len", test_nm_ptrarray_len);
+
+    g_test_add_func("/core/general/_nm_utils_dns_option_validate",
+                    test_nm_utils_dns_option_validate);
+    g_test_add_func("/core/general/_nm_utils_dns_option_find_idx",
+                    test_nm_utils_dns_option_find_idx);
+    g_test_add_func("/core/general/_nm_utils_validate_json", test_nm_utils_check_valid_json);
+    g_test_add_func("/core/general/_nm_utils_team_config_equal", test_nm_utils_team_config_equal);
+    g_test_add_func("/core/general/test_nm_utils_enum", test_nm_utils_enum);
+    g_test_add_func("/core/general/nm-set-out", test_nm_set_out);
+    g_test_add_func("/core/general/route_attributes/parse", test_route_attributes_parse);
+    g_test_add_func("/core/general/route_attributes/format", test_route_attributes_format);
+    g_test_add_func("/core/general/test_variant_attribute_spec", test_variant_attribute_spec);
+
+    g_test_add_func("/core/general/get_start_time_for_pid", test_get_start_time_for_pid);
+    g_test_add_func("/core/general/test_nm_va_args_macros", test_nm_va_args_macros);
+    g_test_add_func("/core/general/test_ethtool_offload", test_ethtool_offload);
+
+    g_test_add_data_func("/core/general/test_integrate_maincontext/1",
+                         GUINT_TO_POINTER(1),
+                         test_integrate_maincontext);
+    g_test_add_data_func("/core/general/test_integrate_maincontext/2",
+                         GUINT_TO_POINTER(2),
+                         test_integrate_maincontext);
+
+    g_test_add_func("/core/general/test_nm_ip_addr_zero", test_nm_ip_addr_zero);
+    g_test_add_func("/core/general/test_nm_utils_wifi_ghz_freqs", test_nm_utils_wifi_ghz_freqs);
+
+    g_test_add_func("/core/general/test_strsplit_quoted", test_strsplit_quoted);
+
+    return g_test_run();
 }
diff --git a/libnm-core/tests/test-keyfile.c b/libnm-core/tests/test-keyfile.c
index 23149b61..2b3750a9 100644
--- a/libnm-core/tests/test-keyfile.c
+++ b/libnm-core/tests/test-keyfile.c
@@ -1,10 +1,11 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2015 Red Hat, Inc.
  */
 
 #include "nm-default.h"
 
+#include "nm-glib-aux/nm-json-aux.h"
 #include "nm-keyfile/nm-keyfile-utils.h"
 #include "nm-keyfile/nm-keyfile-internal.h"
 #include "nm-simple-connection.h"
@@ -17,846 +18,892 @@
 
 #include "nm-utils/nm-test-utils.h"
 
-#define TEST_CERT_DIR              NM_BUILD_SRCDIR"/libnm-core/tests/certs"
-#define TEST_WIRED_TLS_CA_CERT     TEST_CERT_DIR"/test-ca-cert.pem"
-#define TEST_WIRED_TLS_PRIVKEY     TEST_CERT_DIR"/test-key-and-cert.pem"
-#define TEST_WIRED_TLS_TPM2KEY     TEST_CERT_DIR"/test-tpm2wrapped-key.pem"
+#define TEST_CERT_DIR          NM_BUILD_SRCDIR "/libnm-core/tests/certs"
+#define TEST_WIRED_TLS_CA_CERT TEST_CERT_DIR "/test-ca-cert.pem"
+#define TEST_WIRED_TLS_PRIVKEY TEST_CERT_DIR "/test-key-and-cert.pem"
+#define TEST_WIRED_TLS_TPM2KEY TEST_CERT_DIR "/test-tpm2wrapped-key.pem"
 
 /*****************************************************************************/
 
 static void
-do_test_encode_key_full (GKeyFile *kf, const char *name, const char *key, const char *key_decode_encode)
+do_test_encode_key_full(GKeyFile *  kf,
+                        const char *name,
+                        const char *key,
+                        const char *key_decode_encode)
 {
-	gs_free char *to_free1 = NULL;
-	gs_free char *to_free2 = NULL;
-	const char *key2;
-	const char *name2;
-
-	g_assert (key);
-
-	if (name) {
-		key2 = nm_keyfile_key_encode (name, &to_free1);
-		g_assert (key2);
-		g_assert (NM_STRCHAR_ALL (key2, ch, (guchar) ch < 127));
-		g_assert_cmpstr (key2, ==, key);
-
-		/* try to add the encoded key to the keyfile. We expect
-		 * no g_critical warning about invalid key. */
-		g_key_file_set_value (kf, "group", key, "dummy");
-	}
-
-	name2 = nm_keyfile_key_decode (key, &to_free2);
-	if (name)
-		g_assert_cmpstr (name2, ==, name);
-	else {
-		key2 = nm_keyfile_key_encode (name2, &to_free1);
-		g_assert (key2);
-		g_assert (NM_STRCHAR_ALL (key2, ch, (guchar) ch < 127));
-		if (key_decode_encode)
-			g_assert_cmpstr (key2, ==, key_decode_encode);
-		g_key_file_set_value (kf, "group", key2, "dummy");
-	}
+    gs_free char *to_free1 = NULL;
+    gs_free char *to_free2 = NULL;
+    const char *  key2;
+    const char *  name2;
+
+    g_assert(key);
+
+    if (name) {
+        key2 = nm_keyfile_key_encode(name, &to_free1);
+        g_assert(key2);
+        g_assert(NM_STRCHAR_ALL(key2, ch, (guchar) ch < 127));
+        g_assert_cmpstr(key2, ==, key);
+
+        /* try to add the encoded key to the keyfile. We expect
+         * no g_critical warning about invalid key. */
+        g_key_file_set_value(kf, "group", key, "dummy");
+    }
+
+    name2 = nm_keyfile_key_decode(key, &to_free2);
+    if (name)
+        g_assert_cmpstr(name2, ==, name);
+    else {
+        key2 = nm_keyfile_key_encode(name2, &to_free1);
+        g_assert(key2);
+        g_assert(NM_STRCHAR_ALL(key2, ch, (guchar) ch < 127));
+        if (key_decode_encode)
+            g_assert_cmpstr(key2, ==, key_decode_encode);
+        g_key_file_set_value(kf, "group", key2, "dummy");
+    }
 }
 
-#define do_test_encode_key_bijection(kf, name, key)                      do_test_encode_key_full (kf, ""name, ""key,  NULL)
-#define do_test_encode_key_identity(kf, name)                            do_test_encode_key_full (kf, ""name, ""name, NULL)
-#define do_test_encode_key_decode_surjection(kf, key, key_decode_encode) do_test_encode_key_full (kf, NULL,   ""key,  ""key_decode_encode)
+#define do_test_encode_key_bijection(kf, name, key) \
+    do_test_encode_key_full(kf, "" name, "" key, NULL)
+#define do_test_encode_key_identity(kf, name) do_test_encode_key_full(kf, "" name, "" name, NULL)
+#define do_test_encode_key_decode_surjection(kf, key, key_decode_encode) \
+    do_test_encode_key_full(kf, NULL, "" key, "" key_decode_encode)
 
 static void
-test_encode_key (void)
+test_encode_key(void)
 {
-	gs_unref_keyfile GKeyFile *kf = g_key_file_new ();
-
-	do_test_encode_key_identity (kf, "a");
-	do_test_encode_key_bijection (kf, "", "\\00");
-	do_test_encode_key_bijection (kf, " ", "\\20");
-	do_test_encode_key_bijection (kf, "\\ ", "\\\\20");
-	do_test_encode_key_identity (kf, "\\0");
-	do_test_encode_key_identity (kf, "\\a");
-	do_test_encode_key_identity (kf, "\\0g");
-	do_test_encode_key_bijection (kf, "\\0f", "\\5C0f");
-	do_test_encode_key_bijection (kf, "\\0f ", "\\5C0f\\20");
-	do_test_encode_key_bijection (kf, " \\0f ", "\\20\\5C0f\\20");
-	do_test_encode_key_bijection (kf, "\xF5", "\\F5");
-	do_test_encode_key_bijection (kf, "\x7F", "\\7F");
-	do_test_encode_key_bijection (kf, "\x1f", "\\1F");
-	do_test_encode_key_bijection (kf, "  ", "\\20\\20");
-	do_test_encode_key_bijection (kf, "   ", "\\20 \\20");
-	do_test_encode_key_decode_surjection (kf, "f\\20c", "f c");
-	do_test_encode_key_decode_surjection (kf, "\\20\\20\\20", "\\20 \\20");
-
-	do_test_encode_key_bijection (kf, "\t", "\\09");
-	do_test_encode_key_bijection (kf, "\t=x", "\\09\\3Dx");
-	do_test_encode_key_bijection (kf, "(nm-openvpn-auth-dialog:10283): GdkPixbuf-DEBUG: \tCopy pixels == false",
-	                                  "(nm-openvpn-auth-dialog:10283): GdkPixbuf-DEBUG: \\09Copy pixels \\3D\\3D false");
+    nm_auto_unref_keyfile GKeyFile *kf = g_key_file_new();
+
+    do_test_encode_key_identity(kf, "a");
+    do_test_encode_key_bijection(kf, "", "\\00");
+    do_test_encode_key_bijection(kf, " ", "\\20");
+    do_test_encode_key_bijection(kf, "\\ ", "\\\\20");
+    do_test_encode_key_identity(kf, "\\0");
+    do_test_encode_key_identity(kf, "\\a");
+    do_test_encode_key_identity(kf, "\\0g");
+    do_test_encode_key_bijection(kf, "\\0f", "\\5C0f");
+    do_test_encode_key_bijection(kf, "\\0f ", "\\5C0f\\20");
+    do_test_encode_key_bijection(kf, " \\0f ", "\\20\\5C0f\\20");
+    do_test_encode_key_bijection(kf, "\xF5", "\\F5");
+    do_test_encode_key_bijection(kf, "\x7F", "\\7F");
+    do_test_encode_key_bijection(kf, "\x1f", "\\1F");
+    do_test_encode_key_bijection(kf, "  ", "\\20\\20");
+    do_test_encode_key_bijection(kf, "   ", "\\20 \\20");
+    do_test_encode_key_decode_surjection(kf, "f\\20c", "f c");
+    do_test_encode_key_decode_surjection(kf, "\\20\\20\\20", "\\20 \\20");
+
+    do_test_encode_key_bijection(kf, "\t", "\\09");
+    do_test_encode_key_bijection(kf, "\t=x", "\\09\\3Dx");
+    do_test_encode_key_bijection(
+        kf,
+        "(nm-openvpn-auth-dialog:10283): GdkPixbuf-DEBUG: \tCopy pixels == false",
+        "(nm-openvpn-auth-dialog:10283): GdkPixbuf-DEBUG: \\09Copy pixels \\3D\\3D false");
 }
 
 /*****************************************************************************/
 
-#define CLEAR(con, keyfile) \
-	G_STMT_START { \
-		NMConnection **_con = (con); \
-		GKeyFile **_keyfile = (keyfile); \
-		\
-		g_clear_object (_con); \
-		nm_clear_pointer (_keyfile, g_key_file_unref); \
-	} G_STMT_END
+#define CLEAR(con, keyfile)                           \
+    G_STMT_START                                      \
+    {                                                 \
+        NMConnection **_con     = (con);              \
+        GKeyFile **    _keyfile = (keyfile);          \
+                                                      \
+        g_clear_object(_con);                         \
+        nm_clear_pointer(_keyfile, g_key_file_unref); \
+    }                                                 \
+    G_STMT_END
 
 static void
-_assert_gbytes (GBytes *bytes, gconstpointer data, gssize len)
+_assert_gbytes(GBytes *bytes, gconstpointer data, gssize len)
 {
-	g_assert ((data && len > 0) || !len || (data && len == -1));
+    g_assert((data && len > 0) || !len || (data && len == -1));
 
-	if (len == -1)
-		len = strlen (data);
+    if (len == -1)
+        len = strlen(data);
 
-	if (!len)
-		g_assert (!bytes);
+    if (!len)
+        g_assert(!bytes);
 
-	g_assert (nm_utils_gbytes_equal_mem (bytes, data, len));
+    g_assert(nm_utils_gbytes_equal_mem(bytes, data, len));
 }
 
 static GKeyFile *
-_keyfile_load_from_data (const char *str)
+_keyfile_load_from_data(const char *str)
 {
-	GError *error = NULL;
-	gboolean success;
-	GKeyFile *keyfile;
+    GError *  error = NULL;
+    gboolean  success;
+    GKeyFile *keyfile;
 
-	g_assert (str);
+    g_assert(str);
 
-	keyfile =  g_key_file_new ();
-	success = g_key_file_load_from_data (keyfile, str, strlen (str), G_KEY_FILE_NONE, &error);
-	g_assert_no_error (error);
-	g_assert (success);
+    keyfile = g_key_file_new();
+    success = g_key_file_load_from_data(keyfile, str, strlen(str), G_KEY_FILE_NONE, &error);
+    g_assert_no_error(error);
+    g_assert(success);
 
-	return keyfile;
+    return keyfile;
 }
 
 static GKeyFile *
-_nm_keyfile_write (NMConnection *connection,
-                   NMKeyfileWriteHandler handler,
-                   void *user_data)
+_nm_keyfile_write(NMConnection *connection, NMKeyfileWriteHandler handler, void *user_data)
 {
-	GError *error = NULL;
-	GKeyFile *kf;
+    GError *  error = NULL;
+    GKeyFile *kf;
 
-	g_assert (NM_IS_CONNECTION (connection));
+    g_assert(NM_IS_CONNECTION(connection));
 
-	kf = nm_keyfile_write (connection, NM_KEYFILE_HANDLER_FLAGS_NONE, handler, user_data, &error);
-	g_assert_no_error (error);
-	g_assert (kf);
-	return kf;
+    kf = nm_keyfile_write(connection, NM_KEYFILE_HANDLER_FLAGS_NONE, handler, user_data, &error);
+    g_assert_no_error(error);
+    g_assert(kf);
+    return kf;
 }
 
 static NMConnection *
-_nm_keyfile_read (GKeyFile *keyfile,
-                  const char *keyfile_name,
-                  NMKeyfileReadHandler read_handler,
-                  void *read_data,
-                  gboolean needs_normalization)
+_nm_keyfile_read(GKeyFile *           keyfile,
+                 const char *         keyfile_name,
+                 NMKeyfileReadHandler read_handler,
+                 void *               read_data,
+                 gboolean             needs_normalization)
 {
-	GError *error = NULL;
-	NMConnection *con;
-	gs_free char *filename = NULL;
-	gs_free char *base_dir = NULL;
-
-	g_assert (keyfile);
-	g_assert (!keyfile_name || (keyfile_name[0] == '/'));
-
-	base_dir = g_path_get_dirname (keyfile_name);
-	filename = g_path_get_basename (keyfile_name);
-
-	con = nm_keyfile_read (keyfile, base_dir, NM_KEYFILE_HANDLER_FLAGS_NONE, read_handler, read_data, &error);
-	g_assert_no_error (error);
-	g_assert (NM_IS_CONNECTION (con));
-
-	nm_keyfile_read_ensure_id (con, filename);
-	nm_keyfile_read_ensure_uuid (con, keyfile_name);
-
-	if (needs_normalization) {
-		nmtst_assert_connection_verifies_after_normalization (con, 0, 0);
-		nmtst_connection_normalize (con);
-	} else {
-		{
-			NMSettingConnection *s_con;
-
-			/* a non-slave connection must have a proxy setting, but
-			 * keyfile reader does not add that (unless a [proxy] section
-			 * is present. */
-			s_con = nm_connection_get_setting_connection (con);
-			if (   s_con
-			    && !nm_setting_connection_get_master (s_con)
-			    && !nm_connection_get_setting_proxy (con))
-				nm_connection_add_setting (con, nm_setting_proxy_new ());
-		}
-		nmtst_assert_connection_verifies_without_normalization (con);
-	}
-	return con;
+    GError *      error = NULL;
+    NMConnection *con;
+    gs_free char *filename = NULL;
+    gs_free char *base_dir = NULL;
+
+    g_assert(keyfile);
+    g_assert(!keyfile_name || (keyfile_name[0] == '/'));
+
+    base_dir = g_path_get_dirname(keyfile_name);
+    filename = g_path_get_basename(keyfile_name);
+
+    con = nm_keyfile_read(keyfile,
+                          base_dir,
+                          NM_KEYFILE_HANDLER_FLAGS_NONE,
+                          read_handler,
+                          read_data,
+                          &error);
+    g_assert_no_error(error);
+    g_assert(NM_IS_CONNECTION(con));
+
+    nm_keyfile_read_ensure_id(con, filename);
+    nm_keyfile_read_ensure_uuid(con, keyfile_name);
+
+    if (needs_normalization) {
+        nmtst_assert_connection_verifies_after_normalization(con, 0, 0);
+        nmtst_connection_normalize(con);
+    } else {
+        {
+            NMSettingConnection *s_con;
+
+            /* a non-slave connection must have a proxy setting, but
+             * keyfile reader does not add that (unless a [proxy] section
+             * is present. */
+            s_con = nm_connection_get_setting_connection(con);
+            if (s_con && !nm_setting_connection_get_master(s_con)
+                && !nm_connection_get_setting_proxy(con))
+                nm_connection_add_setting(con, nm_setting_proxy_new());
+        }
+        nmtst_assert_connection_verifies_without_normalization(con);
+    }
+    return con;
 }
 
 static void
-_keyfile_convert (NMConnection **con,
-                  GKeyFile **keyfile,
-                  const char *keyfile_name,
-                  NMKeyfileReadHandler read_handler,
-                  void *read_data,
-                  NMKeyfileWriteHandler write_handler,
-                  void *write_data,
-                  gboolean needs_normalization)
+_keyfile_convert(NMConnection **       con,
+                 GKeyFile **           keyfile,
+                 const char *          keyfile_name,
+                 NMKeyfileReadHandler  read_handler,
+                 void *                read_data,
+                 NMKeyfileWriteHandler write_handler,
+                 void *                write_data,
+                 gboolean              needs_normalization)
 {
-	NMConnection *c0;
-	GKeyFile *k0;
-	gs_unref_object NMConnection *c0_k1_c2 = NULL, *k0_c1 = NULL, *k0_c1_k2_c3 = NULL;
-	gs_unref_keyfile GKeyFile *k0_c1_k2 = NULL, *c0_k1 = NULL, *c0_k1_c2_k3 = NULL;
-
-	/* convert from @con to @keyfile and check that we can make
-	 * full round trips and obtaining the same result. */
-
-	g_assert (con);
-	g_assert (keyfile);
-	g_assert (*con || *keyfile);
-
-	c0 = *con;
-	k0 = *keyfile;
-
-	if (c0) {
-		c0_k1 = _nm_keyfile_write (c0, write_handler, write_data);
-		c0_k1_c2 = _nm_keyfile_read (c0_k1, keyfile_name, read_handler, read_data, FALSE);
-		c0_k1_c2_k3 = _nm_keyfile_write (c0_k1_c2, write_handler, write_data);
-
-		g_assert (_nm_keyfile_equals (c0_k1, c0_k1_c2_k3, TRUE));
-	}
-	if (k0) {
-		NMSetting8021x *s1, *s2;
-
-		k0_c1 = _nm_keyfile_read (k0, keyfile_name, read_handler, read_data, needs_normalization);
-		k0_c1_k2 = _nm_keyfile_write (k0_c1, write_handler, write_data);
-		k0_c1_k2_c3 = _nm_keyfile_read (k0_c1_k2, keyfile_name, read_handler, read_data, FALSE);
-
-		/* It is a expected behavior, that if @k0 contains a relative path ca-cert, @k0_c1 will
-		 * contain that path as relative. But @k0_c1_k2 and @k0_c1_k2_c3 will have absolute paths.
-		 * In this case, hack up @k0_c1_k2_c3 to contain the same relative path. */
-		s1 = nm_connection_get_setting_802_1x (k0_c1);
-		s2 = nm_connection_get_setting_802_1x (k0_c1_k2_c3);
-		if (s1 || s2) {
-			g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s1), ==, nm_setting_802_1x_get_ca_cert_scheme (s2));
-			switch (nm_setting_802_1x_get_ca_cert_scheme (s1)) {
-			case NM_SETTING_802_1X_CK_SCHEME_PATH:
-				{
-					const char *p1 = nm_setting_802_1x_get_ca_cert_path (s1);
-					const char *p2 = nm_setting_802_1x_get_ca_cert_path (s2);
-
-					nmtst_assert_resolve_relative_path_equals (p1, p2);
-					if (strcmp (p1, p2) != 0) {
-						gs_free char *puri = NULL;
-						gs_unref_bytes GBytes *pfile = NULL;
-
-						g_assert (p1[0] != '/' && p2[0] == '/');
-
-						/* one of the paths is a relative path and the other is absolute. This is an
-						 * expected difference.
-						 * Make the paths of s2 identical to s1... */
-						puri = g_strconcat (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, p1, NULL);
-						pfile = g_bytes_new (puri, strlen (puri) + 1);
-						g_object_set (s2, NM_SETTING_802_1X_CA_CERT, pfile, NULL);
-					}
-				}
-				break;
-			case NM_SETTING_802_1X_CK_SCHEME_BLOB: {
-				GBytes *b1, *b2;
-
-				b1 = nm_setting_802_1x_get_ca_cert_blob (s1);
-				b2 = nm_setting_802_1x_get_ca_cert_blob (s2);
-				g_assert (b1);
-				g_assert (b2);
-				g_assert (g_bytes_equal (b1, b2));
-				break;
-			}
-			default:
-				break;
-			}
-		}
-
-		nmtst_assert_connection_equals (k0_c1, FALSE, k0_c1_k2_c3, FALSE);
-	}
-
-	if (!k0)
-		*keyfile = g_key_file_ref (c0_k1);
-	else if (!c0)
-		*con = g_object_ref (k0_c1);
-	else {
-		/* finally, if both a keyfile and a connection are given, assert that they are equal
-		 * after a round of conversion. */
-		g_assert (_nm_keyfile_equals (c0_k1, k0_c1_k2, TRUE));
-		nmtst_assert_connection_equals (k0_c1, FALSE, c0_k1_c2, FALSE);
-	}
+    NMConnection *  c0;
+    GKeyFile *      k0;
+    gs_unref_object NMConnection *c0_k1_c2 = NULL, *k0_c1 = NULL, *k0_c1_k2_c3 = NULL;
+    nm_auto_unref_keyfile GKeyFile *k0_c1_k2 = NULL, *c0_k1 = NULL, *c0_k1_c2_k3 = NULL;
+
+    /* convert from @con to @keyfile and check that we can make
+     * full round trips and obtaining the same result. */
+
+    g_assert(con);
+    g_assert(keyfile);
+    g_assert(*con || *keyfile);
+
+    c0 = *con;
+    k0 = *keyfile;
+
+    if (c0) {
+        c0_k1       = _nm_keyfile_write(c0, write_handler, write_data);
+        c0_k1_c2    = _nm_keyfile_read(c0_k1, keyfile_name, read_handler, read_data, FALSE);
+        c0_k1_c2_k3 = _nm_keyfile_write(c0_k1_c2, write_handler, write_data);
+
+        g_assert(_nm_keyfile_equals(c0_k1, c0_k1_c2_k3, TRUE));
+    }
+    if (k0) {
+        NMSetting8021x *s1, *s2;
+
+        k0_c1    = _nm_keyfile_read(k0, keyfile_name, read_handler, read_data, needs_normalization);
+        k0_c1_k2 = _nm_keyfile_write(k0_c1, write_handler, write_data);
+        k0_c1_k2_c3 = _nm_keyfile_read(k0_c1_k2, keyfile_name, read_handler, read_data, FALSE);
+
+        /* It is a expected behavior, that if @k0 contains a relative path ca-cert, @k0_c1 will
+         * contain that path as relative. But @k0_c1_k2 and @k0_c1_k2_c3 will have absolute paths.
+         * In this case, hack up @k0_c1_k2_c3 to contain the same relative path. */
+        s1 = nm_connection_get_setting_802_1x(k0_c1);
+        s2 = nm_connection_get_setting_802_1x(k0_c1_k2_c3);
+        if (s1 || s2) {
+            g_assert_cmpint(nm_setting_802_1x_get_ca_cert_scheme(s1),
+                            ==,
+                            nm_setting_802_1x_get_ca_cert_scheme(s2));
+            switch (nm_setting_802_1x_get_ca_cert_scheme(s1)) {
+            case NM_SETTING_802_1X_CK_SCHEME_PATH:
+            {
+                const char *p1 = nm_setting_802_1x_get_ca_cert_path(s1);
+                const char *p2 = nm_setting_802_1x_get_ca_cert_path(s2);
+
+                nmtst_assert_resolve_relative_path_equals(p1, p2);
+                if (strcmp(p1, p2) != 0) {
+                    gs_free char * puri          = NULL;
+                    gs_unref_bytes GBytes *pfile = NULL;
+
+                    g_assert(p1[0] != '/' && p2[0] == '/');
+
+                    /* one of the paths is a relative path and the other is absolute. This is an
+                         * expected difference.
+                         * Make the paths of s2 identical to s1... */
+                    puri  = g_strconcat(NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, p1, NULL);
+                    pfile = g_bytes_new(puri, strlen(puri) + 1);
+                    g_object_set(s2, NM_SETTING_802_1X_CA_CERT, pfile, NULL);
+                }
+            } break;
+            case NM_SETTING_802_1X_CK_SCHEME_BLOB:
+            {
+                GBytes *b1, *b2;
+
+                b1 = nm_setting_802_1x_get_ca_cert_blob(s1);
+                b2 = nm_setting_802_1x_get_ca_cert_blob(s2);
+                g_assert(b1);
+                g_assert(b2);
+                g_assert(g_bytes_equal(b1, b2));
+                break;
+            }
+            default:
+                break;
+            }
+        }
+
+        nmtst_assert_connection_equals(k0_c1, FALSE, k0_c1_k2_c3, FALSE);
+    }
+
+    if (!k0)
+        *keyfile = g_key_file_ref(c0_k1);
+    else if (!c0)
+        *con = g_object_ref(k0_c1);
+    else {
+        /* finally, if both a keyfile and a connection are given, assert that they are equal
+         * after a round of conversion. */
+        g_assert(_nm_keyfile_equals(c0_k1, k0_c1_k2, TRUE));
+        nmtst_assert_connection_equals(k0_c1, FALSE, c0_k1_c2, FALSE);
+    }
 }
 
 /*****************************************************************************/
 
 static void
-_test_8021x_cert_check (NMConnection *con,
-                        NMSetting8021xCKScheme expected_scheme,
-                        const void *value,
-                        gssize val_len)
+_test_8021x_cert_check(NMConnection *         con,
+                       NMSetting8021xCKScheme expected_scheme,
+                       const void *           value,
+                       gssize                 val_len)
 {
-	GKeyFile *keyfile = NULL;
-	NMSetting8021x *s_8021x;
-	gs_free char *kval = NULL;
+    GKeyFile *      keyfile = NULL;
+    NMSetting8021x *s_8021x;
+    gs_free char *  kval = NULL;
 
-	_keyfile_convert (&con, &keyfile, "/_test_8021x_cert_check/foo", NULL, NULL, NULL, NULL, FALSE);
+    _keyfile_convert(&con, &keyfile, "/_test_8021x_cert_check/foo", NULL, NULL, NULL, NULL, FALSE);
 
-	s_8021x = nm_connection_get_setting_802_1x (con);
+    s_8021x = nm_connection_get_setting_802_1x(con);
 
-	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == expected_scheme);
+    g_assert(nm_setting_802_1x_get_ca_cert_scheme(s_8021x) == expected_scheme);
 
-	if (expected_scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
-		const char *path = nm_setting_802_1x_get_ca_cert_path (s_8021x);
+    if (expected_scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
+        const char *path = nm_setting_802_1x_get_ca_cert_path(s_8021x);
 
-		g_assert_cmpstr (path, ==, value);
-		g_assert (val_len == -1 || strlen (path) == val_len);
+        g_assert_cmpstr(path, ==, value);
+        g_assert(val_len == -1 || strlen(path) == val_len);
 
-		kval = g_key_file_get_string (keyfile, "802-1x", "ca-cert", NULL);
-		g_assert (kval);
-		g_assert_cmpstr (kval, ==, value);
-	} else if (expected_scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
-		GBytes *blob = nm_setting_802_1x_get_ca_cert_blob (s_8021x);
-		gs_free char *file_blob = NULL;
+        kval = g_key_file_get_string(keyfile, "802-1x", "ca-cert", NULL);
+        g_assert(kval);
+        g_assert_cmpstr(kval, ==, value);
+    } else if (expected_scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+        GBytes *      blob      = nm_setting_802_1x_get_ca_cert_blob(s_8021x);
+        gs_free char *file_blob = NULL;
 
-		if (val_len == -1) {
-			gsize l;
-			gboolean success;
+        if (val_len == -1) {
+            gsize    l;
+            gboolean success;
 
-			success = g_file_get_contents (value, &file_blob, &l, NULL);
-			g_assert (success);
+            success = g_file_get_contents(value, &file_blob, &l, NULL);
+            g_assert(success);
 
-			value = file_blob;
-			val_len = l;
-		}
+            value   = file_blob;
+            val_len = l;
+        }
 
-		g_assert (blob);
-		g_assert (nm_utils_gbytes_equal_mem (blob, value, val_len));
+        g_assert(blob);
+        g_assert(nm_utils_gbytes_equal_mem(blob, value, val_len));
 
-		kval = g_key_file_get_string (keyfile, "802-1x", "ca-cert", NULL);
-		g_assert (kval);
-		g_assert (g_str_has_prefix (kval, NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB));
-	}
+        kval = g_key_file_get_string(keyfile, "802-1x", "ca-cert", NULL);
+        g_assert(kval);
+        g_assert(g_str_has_prefix(kval, NM_KEYFILE_CERT_SCHEME_PREFIX_BLOB));
+    }
 
-	g_key_file_unref (keyfile);
+    g_key_file_unref(keyfile);
 }
 
 static void
-_test_8021x_cert_check_blob_full (NMConnection *con, const void *data, gsize len)
+_test_8021x_cert_check_blob_full(NMConnection *con, const void *data, gsize len)
 {
-	GBytes *bytes;
-	NMSetting8021x *s_8021x = nm_connection_get_setting_802_1x (con);
-
-	bytes = g_bytes_new (data, len);
-	g_object_set (s_8021x,
-	              NM_SETTING_802_1X_CA_CERT,
-                  bytes,
-                  NULL);
-	_test_8021x_cert_check (con, NM_SETTING_802_1X_CK_SCHEME_BLOB, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
-	g_bytes_unref (bytes);
+    GBytes *        bytes;
+    NMSetting8021x *s_8021x = nm_connection_get_setting_802_1x(con);
+
+    bytes = g_bytes_new(data, len);
+    g_object_set(s_8021x, NM_SETTING_802_1X_CA_CERT, bytes, NULL);
+    _test_8021x_cert_check(con,
+                           NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                           g_bytes_get_data(bytes, NULL),
+                           g_bytes_get_size(bytes));
+    g_bytes_unref(bytes);
 }
-#define _test_8021x_cert_check_blob(con, data) _test_8021x_cert_check_blob_full(con, data, NM_STRLEN (data))
+#define _test_8021x_cert_check_blob(con, data) \
+    _test_8021x_cert_check_blob_full(con, data, NM_STRLEN(data))
 
 static void
-_test_8021x_cert_from_files (const char *cert, const char *key)
+_test_8021x_cert_from_files(const char *cert, const char *key)
 {
-	NMSetting8021x *s_8021x;
-	gs_unref_object NMConnection *con = nmtst_create_minimal_connection ("test-cert", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-	GError *error = NULL;
-	gboolean success;
-	NMSetting8021xCKScheme scheme = NM_SETTING_802_1X_CK_SCHEME_PATH;
-	gs_free char *full_TEST_WIRED_TLS_CA_CERT = nmtst_file_resolve_relative_path (cert, NULL);
-	gs_free char *full_TEST_WIRED_TLS_PRIVKEY = nmtst_file_resolve_relative_path (key, NULL);
-
-	/* test writing/reading of certificates of NMSetting8021x */
-
-	/* create a valid connection with NMSetting8021x */
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	nm_setting_802_1x_add_eap_method (s_8021x, "tls");
-	g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
-	success = nm_setting_802_1x_set_ca_cert (s_8021x,
-	                                         full_TEST_WIRED_TLS_CA_CERT,
-	                                         scheme,
-	                                         NULL,
-	                                         &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	success = nm_setting_802_1x_set_client_cert (s_8021x,
-	                                             full_TEST_WIRED_TLS_CA_CERT,
-	                                             scheme,
-	                                             NULL,
-	                                             &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             full_TEST_WIRED_TLS_PRIVKEY,
-	                                             "test1",
-	                                             scheme,
-	                                             NULL,
-	                                             &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	/* test resetting ca-cert to different values and see whether we can write/read. */
-
-	nm_connection_add_setting (con, NM_SETTING (s_8021x));
-	nmtst_assert_connection_verifies_and_normalizable (con);
-	nmtst_connection_normalize (con);
-
-	_test_8021x_cert_check (con, scheme, full_TEST_WIRED_TLS_CA_CERT, -1);
-
-	scheme = NM_SETTING_802_1X_CK_SCHEME_BLOB;
-	success = nm_setting_802_1x_set_ca_cert (s_8021x,
-	                                         full_TEST_WIRED_TLS_CA_CERT,
-	                                         scheme,
-	                                         NULL,
-	                                         &error);
-	g_assert_no_error (error);
-	g_assert (success);
-	_test_8021x_cert_check (con, scheme, full_TEST_WIRED_TLS_CA_CERT, -1);
-
-	_test_8021x_cert_check_blob (con, "a");
-	_test_8021x_cert_check_blob (con, "\0");
-	_test_8021x_cert_check_blob (con, "10");
-	_test_8021x_cert_check_blob (con, "data:;base64,a");
-	_test_8021x_cert_check_blob_full (con, "data:;base64,a", NM_STRLEN ("data:;base64,a") + 1);
-	_test_8021x_cert_check_blob (con, "data:;base64,file://a");
-	_test_8021x_cert_check_blob (con, "123");
-
+    NMSetting8021x *s_8021x;
+    gs_unref_object NMConnection *con =
+        nmtst_create_minimal_connection("test-cert", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
+    GError *               error = NULL;
+    gboolean               success;
+    NMSetting8021xCKScheme scheme             = NM_SETTING_802_1X_CK_SCHEME_PATH;
+    gs_free char *full_TEST_WIRED_TLS_CA_CERT = nmtst_file_resolve_relative_path(cert, NULL);
+    gs_free char *full_TEST_WIRED_TLS_PRIVKEY = nmtst_file_resolve_relative_path(key, NULL);
+
+    /* test writing/reading of certificates of NMSetting8021x */
+
+    /* create a valid connection with NMSetting8021x */
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    nm_setting_802_1x_add_eap_method(s_8021x, "tls");
+    g_object_set(s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
+    success =
+        nm_setting_802_1x_set_ca_cert(s_8021x, full_TEST_WIRED_TLS_CA_CERT, scheme, NULL, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    success = nm_setting_802_1x_set_client_cert(s_8021x,
+                                                full_TEST_WIRED_TLS_CA_CERT,
+                                                scheme,
+                                                NULL,
+                                                &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    success = nm_setting_802_1x_set_private_key(s_8021x,
+                                                full_TEST_WIRED_TLS_PRIVKEY,
+                                                "test1",
+                                                scheme,
+                                                NULL,
+                                                &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    /* test resetting ca-cert to different values and see whether we can write/read. */
+
+    nm_connection_add_setting(con, NM_SETTING(s_8021x));
+    nmtst_assert_connection_verifies_and_normalizable(con);
+    nmtst_connection_normalize(con);
+
+    _test_8021x_cert_check(con, scheme, full_TEST_WIRED_TLS_CA_CERT, -1);
+
+    scheme = NM_SETTING_802_1X_CK_SCHEME_BLOB;
+    success =
+        nm_setting_802_1x_set_ca_cert(s_8021x, full_TEST_WIRED_TLS_CA_CERT, scheme, NULL, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+    _test_8021x_cert_check(con, scheme, full_TEST_WIRED_TLS_CA_CERT, -1);
+
+    _test_8021x_cert_check_blob(con, "a");
+    _test_8021x_cert_check_blob(con, "\0");
+    _test_8021x_cert_check_blob(con, "10");
+    _test_8021x_cert_check_blob(con, "data:;base64,a");
+    _test_8021x_cert_check_blob_full(con, "data:;base64,a", NM_STRLEN("data:;base64,a") + 1);
+    _test_8021x_cert_check_blob(con, "data:;base64,file://a");
+    _test_8021x_cert_check_blob(con, "123");
 }
 
 static void
-test_8021x_cert (void)
+test_8021x_cert(void)
 {
-	_test_8021x_cert_from_files (TEST_WIRED_TLS_CA_CERT, TEST_WIRED_TLS_PRIVKEY);
+    _test_8021x_cert_from_files(TEST_WIRED_TLS_CA_CERT, TEST_WIRED_TLS_PRIVKEY);
 }
 
 static void
-test_8021x_cert_tpm2key (void)
+test_8021x_cert_tpm2key(void)
 {
-	_test_8021x_cert_from_files (TEST_WIRED_TLS_CA_CERT, TEST_WIRED_TLS_TPM2KEY);
+    _test_8021x_cert_from_files(TEST_WIRED_TLS_CA_CERT, TEST_WIRED_TLS_TPM2KEY);
 }
 
 /*****************************************************************************/
 
 static void
-test_8021x_cert_read (void)
+test_8021x_cert_read(void)
 {
-	GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSetting8021x *s_8021x;
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "type=ethernet",
-	      "/test_8021x_cert_read/test0");
-	CLEAR (&con, &keyfile);
-
-	keyfile = _keyfile_load_from_data (
-	          "[connection]\n"
-	          "type=ethernet"
-	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test1", NULL, NULL, NULL, NULL, TRUE);
-	CLEAR (&con, &keyfile);
-
-	keyfile = _keyfile_load_from_data (
-	          "[connection]\n"
-	          "type=802-3-ethernet\n"
-
-	          "[802-1x]\n"
-	          "eap=tls;\n"
-	          "identity=Bill Smith\n"
-	          "ca-cert=48;130;2;52;48;130;1;161;2;16;2;173;102;126;78;69;254;94;87;111;60;152;25;94;221;192;48;13;6;9;42;134;72;134;247;13;1;1;2;5;0;48;95;49;11;48;9;6;3;85;4;6;19;2;85;83;49;32;48;30;6;3;85;4;10;19;23;82;83;65;32;68;97;116;97;32;83;101;99;117;114;105;116;121;44;32;73;110;99;46;49;46;48;44;6;3;85;4;11;19;37;83;101;99;117;114;101;32;83;101;114;118;101;114;32;67;101;114;116;105;102;105;99;97;116;105;111;110;32;65;117;116;104;111;114;105;116;121;48;30;23;13;57;52;49;49;48;57;48;48;48;48;48;48;90;23;13;49;48;48;49;48;55;50;51;53;57;53;57;90;48;95;49;11;48;9;6;3;85;4;6;19;2;85;83;49;32;48;30;6;3;85;4;10;19;23;82;83;65;32;68;97;116;97;32;83;101;99;117;114;105;116;121;44;32;73;110;99;46;49;46;48;44;6;3;85;4;11;19;37;83;101;99;117;114;101;32;83;101;114;118;101;114;32;67;101;114;116;105;102;105;99;97;116;105;111;110;32;65;117;116;104;111;114;105;116;121;48;129;155;48;13;6;9;42;134;72;134;247;13;1;1;1;5;0;3;129;137;0;48;129;133;2;126;0;146;206;122;193;174;131;62;90;170;137;131;87;172;37;1;118;12;173;174;142;44;55;206;235;53;120;100;84;3;229;132;64;81;201;191;143;8;226;138;130;8;210;22;134;55;85;233;177;33;2;173;118;104;129;154;5;162;75;201;75;37;102;34;86;108;136;7;143;247;129;89;109;132;7;101;112;19;113;118;62;155;119;76;227;80;137;86;152;72;185;29;167;41;26;19;46;74;17;89;156;30;21;213;73;84;44;115;58;105;130;177;151;57;156;109;112;103;72;229;221;45;214;200;30;123;2;3;1;0;1;48;13;6;9;42;134;72;134;247;13;1;1;2;5;0;3;126;0;101;221;126;225;178;236;176;226;58;224;236;113;70;154;25;17;184;211;199;160;180;3;64;38;2;62;9;156;225;18;179;209;90;246;55;165;183;97;3;182;91;22;105;59;198;68;8;12;136;83;12;107;151;73;199;62;53;220;108;185;187;170;223;92;187;58;47;147;96;182;169;75;77;242;32;247;205;95;127;100;123;142;220;0;92;215;250;119;202;57;22;89;111;14;234;211;181;131;127;77;77;66;86;118;180;201;95;4;248;56;248;235;210;95;117;95;205;123;252;229;142;128;124;252;80;\n"
-	          "client-cert=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;109;0;\n"
-	          "private-key=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;109;0;\n"
-	          "private-key-password=12345testing\n"
-	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
-	CLEAR (&con, &keyfile);
-
-	keyfile = _keyfile_load_from_data (
-	          "[connection]\n"
-	          "type=802-3-ethernet\n"
-
-	          "[802-1x]\n"
-	          "eap=tls;\n"
-	          "identity=Bill Smith\n"
-	          /* unqualified strings are only recognized as path up to 500 chars*/
-	          "ca-cert="  "/111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-	                      "/111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-	                      "/111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-	                      "/111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-	                      "/11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\n"
-	          "client-cert=/222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221"
-	                      "/222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221"
-	                      "/222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221"
-	                      "/222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221"
-	                      "/222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\n"
-	          "private-key=file://"
-	                      "/333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331"
-	                      "/333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331"
-	                      "/333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331"
-	                      "/333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331"
-	                      "/33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333111111\n"
-	          "private-key-password=12345testing\n"
-	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
-	s_8021x = nm_connection_get_setting_802_1x (con);
-
-	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
-	g_assert (g_str_has_prefix (nm_setting_802_1x_get_ca_cert_path (s_8021x), "/111111111111"));
-	g_assert_cmpint (strlen (nm_setting_802_1x_get_ca_cert_path (s_8021x)), ==, 499);
-
-	g_assert (nm_setting_802_1x_get_client_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	g_assert (g_str_has_prefix (g_bytes_get_data (nm_setting_802_1x_get_client_cert_blob (s_8021x), NULL), "/2222222222"));
-	g_assert_cmpint (g_bytes_get_size (nm_setting_802_1x_get_client_cert_blob (s_8021x)), ==, 500 + 1 /* keyfile reader adds a trailing NUL */);
-
-	g_assert (nm_setting_802_1x_get_private_key_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
-	g_assert (g_str_has_prefix (nm_setting_802_1x_get_private_key_path (s_8021x), "/333333333"));
-	g_assert_cmpint (strlen (nm_setting_802_1x_get_private_key_path (s_8021x)), ==, 505);
-	CLEAR (&con, &keyfile);
-
-	keyfile = _keyfile_load_from_data (
-	          "[connection]\n"
-	          "type=802-3-ethernet\n"
-
-	          "[802-1x]\n"
-	          "eap=tls;\n"
-	          "identity=Bill Smith\n"
-	          "ca-cert=/\n"
-	          "client-cert=a.pem\n"
-	          "private-key=data:;base64,aGFsbG8=\n" // hallo
-	          "private-key-password=12345testing\n"
-	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
-	s_8021x = nm_connection_get_setting_802_1x (con);
-
-	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
-	g_assert_cmpstr (nm_setting_802_1x_get_ca_cert_path (s_8021x), ==, "/");
-
-	g_assert (nm_setting_802_1x_get_client_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
-	g_assert_cmpstr (nm_setting_802_1x_get_client_cert_path (s_8021x), ==, "/test_8021x_cert_read/a.pem");
-
-	g_assert (nm_setting_802_1x_get_private_key_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	_assert_gbytes (nm_setting_802_1x_get_private_key_blob (s_8021x), "hallo", -1);
-	CLEAR (&con, &keyfile);
-
-	keyfile = _keyfile_load_from_data (
-	          "[connection]\n"
-	          "type=802-3-ethernet\n"
-
-	          "[802-1x]\n"
-	          "eap=tls;\n"
-	          "identity=Bill Smith\n"
-	          "ca-cert=file://data:;base64,x\n"
-	          "client-cert=abc.der\n"
-	          "private-key=abc.deR\n"
-	          "private-key-password=12345testing\n"
-	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
-	s_8021x = nm_connection_get_setting_802_1x (con);
-
-	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
-	g_assert_cmpstr (nm_setting_802_1x_get_ca_cert_path (s_8021x), ==, "data:;base64,x");
-
-	g_assert (nm_setting_802_1x_get_client_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
-	g_assert_cmpstr (nm_setting_802_1x_get_client_cert_path (s_8021x), ==, "/test_8021x_cert_read/abc.der");
-
-	g_assert (nm_setting_802_1x_get_private_key_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	_assert_gbytes (nm_setting_802_1x_get_private_key_blob (s_8021x), "abc.deR\0", 8);
-	CLEAR (&con, &keyfile);
-
-	keyfile = _keyfile_load_from_data (
-	          "[connection]\n"
-	          "type=802-3-ethernet\n"
-
-	          "[802-1x]\n"
-	          "eap=tls;\n"
-	          "identity=Bill Smith\n"
-	          "ca-cert=104;97;108;108;111;\n" /* "hallo" without trailing NUL */
-	          "client-cert=104;097;108;108;111;0;\n"
-	          "private-key=hallo\n"
-	          "private-key-password=12345testing\n"
-	          );
-	_keyfile_convert (&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
-	s_8021x = nm_connection_get_setting_802_1x (con);
-
-	g_assert (nm_setting_802_1x_get_ca_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	_assert_gbytes (nm_setting_802_1x_get_ca_cert_blob (s_8021x), "hallo", 5);
-
-	g_assert (nm_setting_802_1x_get_client_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	_assert_gbytes (nm_setting_802_1x_get_client_cert_blob (s_8021x), "hallo\0", 6);
-
-	g_assert (nm_setting_802_1x_get_private_key_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	_assert_gbytes (nm_setting_802_1x_get_private_key_blob (s_8021x), "hallo\0", 6);
-	CLEAR (&con, &keyfile);
+    GKeyFile *      keyfile           = NULL;
+    gs_unref_object NMConnection *con = NULL;
+    NMSetting8021x *              s_8021x;
+
+    con = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "type=ethernet",
+                                               "/test_8021x_cert_read/test0");
+    CLEAR(&con, &keyfile);
+
+    keyfile = _keyfile_load_from_data("[connection]\n"
+                                      "type=ethernet");
+    _keyfile_convert(&con, &keyfile, "/test_8021x_cert_read/test1", NULL, NULL, NULL, NULL, TRUE);
+    CLEAR(&con, &keyfile);
+
+    keyfile = _keyfile_load_from_data(
+        "[connection]\n"
+        "type=802-3-ethernet\n"
+
+        "[802-1x]\n"
+        "eap=tls;\n"
+        "identity=Bill Smith\n"
+        "ca-cert=48;130;2;52;48;130;1;161;2;16;2;173;102;126;78;69;254;94;87;111;60;152;25;94;221;"
+        "192;48;13;6;9;42;134;72;134;247;13;1;1;2;5;0;48;95;49;11;48;9;6;3;85;4;6;19;2;85;83;49;32;"
+        "48;30;6;3;85;4;10;19;23;82;83;65;32;68;97;116;97;32;83;101;99;117;114;105;116;121;44;32;"
+        "73;110;99;46;49;46;48;44;6;3;85;4;11;19;37;83;101;99;117;114;101;32;83;101;114;118;101;"
+        "114;32;67;101;114;116;105;102;105;99;97;116;105;111;110;32;65;117;116;104;111;114;105;116;"
+        "121;48;30;23;13;57;52;49;49;48;57;48;48;48;48;48;48;90;23;13;49;48;48;49;48;55;50;51;53;"
+        "57;53;57;90;48;95;49;11;48;9;6;3;85;4;6;19;2;85;83;49;32;48;30;6;3;85;4;10;19;23;82;83;65;"
+        "32;68;97;116;97;32;83;101;99;117;114;105;116;121;44;32;73;110;99;46;49;46;48;44;6;3;85;4;"
+        "11;19;37;83;101;99;117;114;101;32;83;101;114;118;101;114;32;67;101;114;116;105;102;105;99;"
+        "97;116;105;111;110;32;65;117;116;104;111;114;105;116;121;48;129;155;48;13;6;9;42;134;72;"
+        "134;247;13;1;1;1;5;0;3;129;137;0;48;129;133;2;126;0;146;206;122;193;174;131;62;90;170;137;"
+        "131;87;172;37;1;118;12;173;174;142;44;55;206;235;53;120;100;84;3;229;132;64;81;201;191;"
+        "143;8;226;138;130;8;210;22;134;55;85;233;177;33;2;173;118;104;129;154;5;162;75;201;75;37;"
+        "102;34;86;108;136;7;143;247;129;89;109;132;7;101;112;19;113;118;62;155;119;76;227;80;137;"
+        "86;152;72;185;29;167;41;26;19;46;74;17;89;156;30;21;213;73;84;44;115;58;105;130;177;151;"
+        "57;156;109;112;103;72;229;221;45;214;200;30;123;2;3;1;0;1;48;13;6;9;42;134;72;134;247;13;"
+        "1;1;2;5;0;3;126;0;101;221;126;225;178;236;176;226;58;224;236;113;70;154;25;17;184;211;199;"
+        "160;180;3;64;38;2;62;9;156;225;18;179;209;90;246;55;165;183;97;3;182;91;22;105;59;198;68;"
+        "8;12;136;83;12;107;151;73;199;62;53;220;108;185;187;170;223;92;187;58;47;147;96;182;169;"
+        "75;77;242;32;247;205;95;127;100;123;142;220;0;92;215;250;119;202;57;22;89;111;14;234;211;"
+        "181;131;127;77;77;66;86;118;180;201;95;4;248;56;248;235;210;95;117;95;205;123;252;229;142;"
+        "128;124;252;80;\n"
+        "client-cert=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;"
+        "107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;"
+        "109;0;\n"
+        "private-key=102;105;108;101;58;47;47;47;104;111;109;101;47;100;99;98;119;47;68;101;115;"
+        "107;116;111;112;47;99;101;114;116;105;110;102;114;97;47;99;108;105;101;110;116;46;112;101;"
+        "109;0;\n"
+        "private-key-password=12345testing\n");
+    _keyfile_convert(&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
+    CLEAR(&con, &keyfile);
+
+    keyfile =
+        _keyfile_load_from_data("[connection]\n"
+                                "type=802-3-ethernet\n"
+
+                                "[802-1x]\n"
+                                "eap=tls;\n"
+                                "identity=Bill Smith\n"
+                                /* unqualified strings are only recognized as path up to 500 chars*/
+                                "ca-cert="
+                                "/11111111111111111111111111111111111111111111111111111111111111111"
+                                "1111111111111111111111111111111111"
+                                "/11111111111111111111111111111111111111111111111111111111111111111"
+                                "1111111111111111111111111111111111"
+                                "/11111111111111111111111111111111111111111111111111111111111111111"
+                                "1111111111111111111111111111111111"
+                                "/11111111111111111111111111111111111111111111111111111111111111111"
+                                "1111111111111111111111111111111111"
+                                "/11111111111111111111111111111111111111111111111111111111111111111"
+                                "111111111111111111111111111111111\n"
+                                "client-cert=/"
+                                "222222222222222222222222222222222222222222222222222222222222222222"
+                                "222222222222222222222222222222221"
+                                "/22222222222222222222222222222222222222222222222222222222222222222"
+                                "2222222222222222222222222222222221"
+                                "/22222222222222222222222222222222222222222222222222222222222222222"
+                                "2222222222222222222222222222222221"
+                                "/22222222222222222222222222222222222222222222222222222222222222222"
+                                "2222222222222222222222222222222221"
+                                "/22222222222222222222222222222222222222222222222222222222222222222"
+                                "2222222222222222222222222222222222\n"
+                                "private-key=file://"
+                                "/33333333333333333333333333333333333333333333333333333333333333333"
+                                "3333333333333333333333333333333331"
+                                "/33333333333333333333333333333333333333333333333333333333333333333"
+                                "3333333333333333333333333333333331"
+                                "/33333333333333333333333333333333333333333333333333333333333333333"
+                                "3333333333333333333333333333333331"
+                                "/33333333333333333333333333333333333333333333333333333333333333333"
+                                "3333333333333333333333333333333331"
+                                "/33333333333333333333333333333333333333333333333333333333333333333"
+                                "333333333333333333333333333333333111111\n"
+                                "private-key-password=12345testing\n");
+    _keyfile_convert(&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
+    s_8021x = nm_connection_get_setting_802_1x(con);
+
+    g_assert(nm_setting_802_1x_get_ca_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
+    g_assert(g_str_has_prefix(nm_setting_802_1x_get_ca_cert_path(s_8021x), "/111111111111"));
+    g_assert_cmpint(strlen(nm_setting_802_1x_get_ca_cert_path(s_8021x)), ==, 499);
+
+    g_assert(nm_setting_802_1x_get_client_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    g_assert(
+        g_str_has_prefix(g_bytes_get_data(nm_setting_802_1x_get_client_cert_blob(s_8021x), NULL),
+                         "/2222222222"));
+    g_assert_cmpint(g_bytes_get_size(nm_setting_802_1x_get_client_cert_blob(s_8021x)),
+                    ==,
+                    500 + 1 /* keyfile reader adds a trailing NUL */);
+
+    g_assert(nm_setting_802_1x_get_private_key_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
+    g_assert(g_str_has_prefix(nm_setting_802_1x_get_private_key_path(s_8021x), "/333333333"));
+    g_assert_cmpint(strlen(nm_setting_802_1x_get_private_key_path(s_8021x)), ==, 505);
+    CLEAR(&con, &keyfile);
+
+    keyfile = _keyfile_load_from_data("[connection]\n"
+                                      "type=802-3-ethernet\n"
+
+                                      "[802-1x]\n"
+                                      "eap=tls;\n"
+                                      "identity=Bill Smith\n"
+                                      "ca-cert=/\n"
+                                      "client-cert=a.pem\n"
+                                      "private-key=data:;base64,aGFsbG8=\n"  // hallo
+                                      "private-key-password=12345testing\n");
+    _keyfile_convert(&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
+    s_8021x = nm_connection_get_setting_802_1x(con);
+
+    g_assert(nm_setting_802_1x_get_ca_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
+    g_assert_cmpstr(nm_setting_802_1x_get_ca_cert_path(s_8021x), ==, "/");
+
+    g_assert(nm_setting_802_1x_get_client_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
+    g_assert_cmpstr(nm_setting_802_1x_get_client_cert_path(s_8021x),
+                    ==,
+                    "/test_8021x_cert_read/a.pem");
+
+    g_assert(nm_setting_802_1x_get_private_key_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    _assert_gbytes(nm_setting_802_1x_get_private_key_blob(s_8021x), "hallo", -1);
+    CLEAR(&con, &keyfile);
+
+    keyfile = _keyfile_load_from_data("[connection]\n"
+                                      "type=802-3-ethernet\n"
+
+                                      "[802-1x]\n"
+                                      "eap=tls;\n"
+                                      "identity=Bill Smith\n"
+                                      "ca-cert=file://data:;base64,x\n"
+                                      "client-cert=abc.der\n"
+                                      "private-key=abc.deR\n"
+                                      "private-key-password=12345testing\n");
+    _keyfile_convert(&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
+    s_8021x = nm_connection_get_setting_802_1x(con);
+
+    g_assert(nm_setting_802_1x_get_ca_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
+    g_assert_cmpstr(nm_setting_802_1x_get_ca_cert_path(s_8021x), ==, "data:;base64,x");
+
+    g_assert(nm_setting_802_1x_get_client_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH);
+    g_assert_cmpstr(nm_setting_802_1x_get_client_cert_path(s_8021x),
+                    ==,
+                    "/test_8021x_cert_read/abc.der");
+
+    g_assert(nm_setting_802_1x_get_private_key_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    _assert_gbytes(nm_setting_802_1x_get_private_key_blob(s_8021x), "abc.deR\0", 8);
+    CLEAR(&con, &keyfile);
+
+    keyfile =
+        _keyfile_load_from_data("[connection]\n"
+                                "type=802-3-ethernet\n"
+
+                                "[802-1x]\n"
+                                "eap=tls;\n"
+                                "identity=Bill Smith\n"
+                                "ca-cert=104;97;108;108;111;\n" /* "hallo" without trailing NUL */
+                                "client-cert=104;097;108;108;111;0;\n"
+                                "private-key=hallo\n"
+                                "private-key-password=12345testing\n");
+    _keyfile_convert(&con, &keyfile, "/test_8021x_cert_read/test2", NULL, NULL, NULL, NULL, TRUE);
+    s_8021x = nm_connection_get_setting_802_1x(con);
+
+    g_assert(nm_setting_802_1x_get_ca_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    _assert_gbytes(nm_setting_802_1x_get_ca_cert_blob(s_8021x), "hallo", 5);
+
+    g_assert(nm_setting_802_1x_get_client_cert_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    _assert_gbytes(nm_setting_802_1x_get_client_cert_blob(s_8021x), "hallo\0", 6);
+
+    g_assert(nm_setting_802_1x_get_private_key_scheme(s_8021x) == NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    _assert_gbytes(nm_setting_802_1x_get_private_key_blob(s_8021x), "hallo\0", 6);
+    CLEAR(&con, &keyfile);
 }
 
 static void
-test_team_conf_read_valid (void)
+test_team_conf_read_valid(void)
 {
-	GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingTeam *s_team;
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "type=team\n"
-	      "interface-name=nm-team1\n"
-	      "[team]\n"
-	      "config={\"foo\":\"bar\"}",
-	      "/test_team_conf_read/valid");
-
-	g_assert (con);
-	s_team = nm_connection_get_setting_team (con);
-	g_assert (s_team);
-	g_assert_cmpstr (nm_setting_team_get_config (s_team), ==, "{\"foo\":\"bar\"}");
-
-	CLEAR (&con, &keyfile);
+    GKeyFile *      keyfile           = NULL;
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingTeam *               s_team;
+
+    con = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "type=team\n"
+                                               "interface-name=nm-team1\n"
+                                               "[team]\n"
+                                               "config={\"foo\":\"bar\"}",
+                                               "/test_team_conf_read/valid");
+
+    g_assert(con);
+    s_team = nm_connection_get_setting_team(con);
+    g_assert(s_team);
+    g_assert_cmpstr(nm_setting_team_get_config(s_team), ==, "{\"foo\":\"bar\"}");
+
+    CLEAR(&con, &keyfile);
 }
 
 static void
-test_team_conf_read_invalid (void)
+test_team_conf_read_invalid(void)
 {
-	GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingTeam *s_team;
-
-	if (!WITH_JSON_VALIDATION) {
-		g_test_skip ("team test requires JSON validation");
-		return;
-	}
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "type=team\n"
-	      "interface-name=nm-team1\n"
-	      "[team]\n"
-	      "config={foobar}",
-	      "/test_team_conf_read/invalid");
-
-	g_assert (con);
-	s_team = nm_connection_get_setting_team (con);
-	g_assert (s_team);
-	g_assert (nm_setting_team_get_config (s_team) == NULL);
-
-	CLEAR (&con, &keyfile);
+    GKeyFile *      keyfile           = NULL;
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingTeam *               s_team;
+
+    if (!nm_json_vt()) {
+        g_test_skip("team test requires JSON validation");
+        return;
+    }
+
+    con = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "type=team\n"
+                                               "interface-name=nm-team1\n"
+                                               "[team]\n"
+                                               "config={foobar}",
+                                               "/test_team_conf_read/invalid");
+
+    g_assert(con);
+    s_team = nm_connection_get_setting_team(con);
+    g_assert(s_team);
+    g_assert(nm_setting_team_get_config(s_team) == NULL);
+
+    CLEAR(&con, &keyfile);
 }
 
 /*****************************************************************************/
 
 static void
-test_user_1 (void)
+test_user_1(void)
 {
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingUser *s_user;
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "id=t\n"
-	      "type=ethernet\n"
-	      "\n"
-	      "[user]\n"
-	      "my-value.x=value1\n"
-	      "",
-	      "/test_user_1/invalid");
-	g_assert (con);
-	s_user = NM_SETTING_USER (nm_connection_get_setting (con, NM_TYPE_SETTING_USER));
-	g_assert (s_user);
-	g_assert_cmpstr (nm_setting_user_get_data (s_user, "my-value.x"), ==, "value1");
-
-	CLEAR (&con, &keyfile);
-
-	con = nmtst_create_minimal_connection ("user-2", "8b85fb8d-3070-48ba-93d9-53eee231d9a2", NM_SETTING_WIRED_SETTING_NAME, NULL);
-	s_user = NM_SETTING_USER (nm_setting_user_new ());
-
-#define _USER_SET_DATA(s_user, key, val) \
-	G_STMT_START { \
-		GError *_error = NULL; \
-		gboolean _success; \
-		\
-		_success = nm_setting_user_set_data ((s_user), (key), (val), &_error); \
-		nmtst_assert_success (_success, _error); \
-	} G_STMT_END
-
-#define _USER_SET_DATA_X(s_user, key) \
-	_USER_SET_DATA (s_user, key, "val="key"")
-
-	_USER_SET_DATA (s_user, "my.val1", "");
-	_USER_SET_DATA_X (s_user, "my.val2");
-	_USER_SET_DATA_X (s_user, "my.v__al3");
-	_USER_SET_DATA_X (s_user, "my._v");
-	_USER_SET_DATA_X (s_user, "my.v+");
-	_USER_SET_DATA_X (s_user, "my.Av");
-	_USER_SET_DATA_X (s_user, "MY.AV");
-	_USER_SET_DATA_X (s_user, "MY.8V");
-	_USER_SET_DATA_X (s_user, "MY.8-V");
-	_USER_SET_DATA_X (s_user, "MY.8_V");
-	_USER_SET_DATA_X (s_user, "MY.8+V");
-	_USER_SET_DATA_X (s_user, "MY.8/V");
-	_USER_SET_DATA_X (s_user, "MY.8=V");
-	_USER_SET_DATA_X (s_user, "MY.-");
-	_USER_SET_DATA_X (s_user, "MY._");
-	_USER_SET_DATA_X (s_user, "MY.+");
-	_USER_SET_DATA_X (s_user, "MY./");
-	_USER_SET_DATA_X (s_user, "MY.=");
-	_USER_SET_DATA_X (s_user, "my.keys.1");
-	_USER_SET_DATA_X (s_user, "my.other.KEY.42");
-
-	nm_connection_add_setting (con, NM_SETTING (s_user));
-	nmtst_connection_normalize (con);
-
-	_keyfile_convert (&con, &keyfile, "/test_user_1/foo", NULL, NULL, NULL, NULL, FALSE);
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    gs_unref_object NMConnection *con       = NULL;
+    NMSettingUser *               s_user;
+
+    con = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "id=t\n"
+                                               "type=ethernet\n"
+                                               "\n"
+                                               "[user]\n"
+                                               "my-value.x=value1\n"
+                                               "",
+                                               "/test_user_1/invalid");
+    g_assert(con);
+    s_user = NM_SETTING_USER(nm_connection_get_setting(con, NM_TYPE_SETTING_USER));
+    g_assert(s_user);
+    g_assert_cmpstr(nm_setting_user_get_data(s_user, "my-value.x"), ==, "value1");
+
+    CLEAR(&con, &keyfile);
+
+    con    = nmtst_create_minimal_connection("user-2",
+                                          "8b85fb8d-3070-48ba-93d9-53eee231d9a2",
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          NULL);
+    s_user = NM_SETTING_USER(nm_setting_user_new());
+
+#define _USER_SET_DATA(s_user, key, val)                                      \
+    G_STMT_START                                                              \
+    {                                                                         \
+        GError * _error = NULL;                                               \
+        gboolean _success;                                                    \
+                                                                              \
+        _success = nm_setting_user_set_data((s_user), (key), (val), &_error); \
+        nmtst_assert_success(_success, _error);                               \
+    }                                                                         \
+    G_STMT_END
+
+#define _USER_SET_DATA_X(s_user, key) _USER_SET_DATA(s_user, key, "val=" key "")
+
+    _USER_SET_DATA(s_user, "my.val1", "");
+    _USER_SET_DATA_X(s_user, "my.val2");
+    _USER_SET_DATA_X(s_user, "my.v__al3");
+    _USER_SET_DATA_X(s_user, "my._v");
+    _USER_SET_DATA_X(s_user, "my.v+");
+    _USER_SET_DATA_X(s_user, "my.Av");
+    _USER_SET_DATA_X(s_user, "MY.AV");
+    _USER_SET_DATA_X(s_user, "MY.8V");
+    _USER_SET_DATA_X(s_user, "MY.8-V");
+    _USER_SET_DATA_X(s_user, "MY.8_V");
+    _USER_SET_DATA_X(s_user, "MY.8+V");
+    _USER_SET_DATA_X(s_user, "MY.8/V");
+    _USER_SET_DATA_X(s_user, "MY.8=V");
+    _USER_SET_DATA_X(s_user, "MY.-");
+    _USER_SET_DATA_X(s_user, "MY._");
+    _USER_SET_DATA_X(s_user, "MY.+");
+    _USER_SET_DATA_X(s_user, "MY./");
+    _USER_SET_DATA_X(s_user, "MY.=");
+    _USER_SET_DATA_X(s_user, "my.keys.1");
+    _USER_SET_DATA_X(s_user, "my.other.KEY.42");
+
+    nm_connection_add_setting(con, NM_SETTING(s_user));
+    nmtst_connection_normalize(con);
+
+    _keyfile_convert(&con, &keyfile, "/test_user_1/foo", NULL, NULL, NULL, NULL, FALSE);
 }
 
 /*****************************************************************************/
 
 static void
-test_vpn_1 (void)
+test_vpn_1(void)
 {
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingVpn *s_vpn;
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "id=t\n"
-	      "type=vpn\n"
-	      "\n"
-	      "[vpn]\n"
-	      "service-type=a.b.c\n"
-	      "vpn-key-1=value1\n"
-	      "",
-	      "/test_vpn_1/invalid");
-	g_assert (con);
-	s_vpn = NM_SETTING_VPN (nm_connection_get_setting (con, NM_TYPE_SETTING_VPN));
-	g_assert (s_vpn);
-	g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, "vpn-key-1"), ==, "value1");
-
-	CLEAR (&con, &keyfile);
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    gs_unref_object NMConnection *con       = NULL;
+    NMSettingVpn *                s_vpn;
+
+    con = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "id=t\n"
+                                               "type=vpn\n"
+                                               "\n"
+                                               "[vpn]\n"
+                                               "service-type=a.b.c\n"
+                                               "vpn-key-1=value1\n"
+                                               "",
+                                               "/test_vpn_1/invalid");
+    g_assert(con);
+    s_vpn = NM_SETTING_VPN(nm_connection_get_setting(con, NM_TYPE_SETTING_VPN));
+    g_assert(s_vpn);
+    g_assert_cmpstr(nm_setting_vpn_get_data_item(s_vpn, "vpn-key-1"), ==, "value1");
+
+    CLEAR(&con, &keyfile);
 }
 
 /*****************************************************************************/
 
 static void
-test_bridge_vlans (void)
+test_bridge_vlans(void)
 {
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingBridge *s_bridge;
-	NMBridgeVlan *vlan;
-	guint16 vid, vid_end;
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "id=t\n"
-	      "type=bridge\n"
-	      "interface-name=br4\n"
-	      "\n"
-	      "[bridge]\n"
-	      "vlans=900 ,  1 pvid  untagged, 100-123 untagged\n"
-	      "",
-	      "/test_bridge_port/vlans");
-	s_bridge = NM_SETTING_BRIDGE (nm_connection_get_setting (con, NM_TYPE_SETTING_BRIDGE));
-	g_assert (s_bridge);
-	g_assert_cmpuint (nm_setting_bridge_get_num_vlans (s_bridge), ==, 3);
-
-	vlan = nm_setting_bridge_get_vlan (s_bridge, 0);
-	g_assert (vlan);
-	nm_bridge_vlan_get_vid_range (vlan, &vid, &vid_end);
-	g_assert_cmpuint (vid, ==, 1);
-	g_assert_cmpuint (vid_end, ==, 1);
-	g_assert_cmpint  (nm_bridge_vlan_is_pvid (vlan), ==, TRUE);
-	g_assert_cmpint  (nm_bridge_vlan_is_untagged (vlan), ==, TRUE);
-
-	vlan = nm_setting_bridge_get_vlan (s_bridge, 1);
-	g_assert (vlan);
-	nm_bridge_vlan_get_vid_range (vlan, &vid, &vid_end);
-	g_assert_cmpuint (vid, ==, 100);
-	g_assert_cmpuint (vid_end, ==, 123);
-	g_assert_cmpint  (nm_bridge_vlan_is_pvid (vlan), ==, FALSE);
-	g_assert_cmpint  (nm_bridge_vlan_is_untagged (vlan), ==, TRUE);
-
-	vlan = nm_setting_bridge_get_vlan (s_bridge, 2);
-	g_assert (vlan);
-	nm_bridge_vlan_get_vid_range (vlan, &vid, &vid_end);
-	g_assert_cmpuint (vid, ==, 900);
-	g_assert_cmpuint (vid_end, ==, 900);
-	g_assert_cmpint  (nm_bridge_vlan_is_pvid (vlan), ==, FALSE);
-	g_assert_cmpint  (nm_bridge_vlan_is_untagged (vlan), ==, FALSE);
-
-	CLEAR (&con, &keyfile);
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    gs_unref_object NMConnection *con       = NULL;
+    NMSettingBridge *             s_bridge;
+    NMBridgeVlan *                vlan;
+    guint16                       vid, vid_end;
+
+    con      = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "id=t\n"
+                                               "type=bridge\n"
+                                               "interface-name=br4\n"
+                                               "\n"
+                                               "[bridge]\n"
+                                               "vlans=900 ,  1 pvid  untagged, 100-123 untagged\n"
+                                               "",
+                                               "/test_bridge_port/vlans");
+    s_bridge = NM_SETTING_BRIDGE(nm_connection_get_setting(con, NM_TYPE_SETTING_BRIDGE));
+    g_assert(s_bridge);
+    g_assert_cmpuint(nm_setting_bridge_get_num_vlans(s_bridge), ==, 3);
+
+    vlan = nm_setting_bridge_get_vlan(s_bridge, 0);
+    g_assert(vlan);
+    nm_bridge_vlan_get_vid_range(vlan, &vid, &vid_end);
+    g_assert_cmpuint(vid, ==, 1);
+    g_assert_cmpuint(vid_end, ==, 1);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(vlan), ==, TRUE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(vlan), ==, TRUE);
+
+    vlan = nm_setting_bridge_get_vlan(s_bridge, 1);
+    g_assert(vlan);
+    nm_bridge_vlan_get_vid_range(vlan, &vid, &vid_end);
+    g_assert_cmpuint(vid, ==, 100);
+    g_assert_cmpuint(vid_end, ==, 123);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(vlan), ==, FALSE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(vlan), ==, TRUE);
+
+    vlan = nm_setting_bridge_get_vlan(s_bridge, 2);
+    g_assert(vlan);
+    nm_bridge_vlan_get_vid_range(vlan, &vid, &vid_end);
+    g_assert_cmpuint(vid, ==, 900);
+    g_assert_cmpuint(vid_end, ==, 900);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(vlan), ==, FALSE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(vlan), ==, FALSE);
+
+    CLEAR(&con, &keyfile);
 }
 
 static void
-test_bridge_port_vlans (void)
+test_bridge_port_vlans(void)
 {
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingBridgePort *s_port;
-	NMBridgeVlan *vlan;
-	guint16 vid_start, vid_end;
-
-	con = nmtst_create_connection_from_keyfile (
-	      "[connection]\n"
-	      "id=t\n"
-	      "type=dummy\n"
-	      "interface-name=dummy1\n"
-	      "master=br0\n"
-	      "slave-type=bridge\n"
-	      "\n"
-	      "[bridge-port]\n"
-	      "vlans=4094 pvid , 10-20 untagged\n"
-	      "",
-	      "/test_bridge_port/vlans");
-	s_port = NM_SETTING_BRIDGE_PORT (nm_connection_get_setting (con, NM_TYPE_SETTING_BRIDGE_PORT));
-	g_assert (s_port);
-	g_assert_cmpuint (nm_setting_bridge_port_get_num_vlans (s_port), ==, 2);
-
-	vlan = nm_setting_bridge_port_get_vlan (s_port, 0);
-	g_assert (vlan);
-	nm_bridge_vlan_get_vid_range (vlan, &vid_start, &vid_end);
-	g_assert_cmpuint (vid_start, ==, 10);
-	g_assert_cmpuint (vid_end, ==, 20);
-	g_assert_cmpint  (nm_bridge_vlan_is_pvid (vlan), ==, FALSE);
-	g_assert_cmpint  (nm_bridge_vlan_is_untagged (vlan), ==, TRUE);
-
-	vlan = nm_setting_bridge_port_get_vlan (s_port, 1);
-	g_assert (vlan);
-	nm_bridge_vlan_get_vid_range (vlan, &vid_start, &vid_end);
-	g_assert_cmpuint (vid_start, ==, 4094);
-	g_assert_cmpuint (vid_end, ==, 4094);
-	g_assert_cmpint  (nm_bridge_vlan_is_pvid (vlan), ==, TRUE);
-	g_assert_cmpint  (nm_bridge_vlan_is_untagged (vlan), ==, FALSE);
-
-	CLEAR (&con, &keyfile);
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    gs_unref_object NMConnection *con       = NULL;
+    NMSettingBridgePort *         s_port;
+    NMBridgeVlan *                vlan;
+    guint16                       vid_start, vid_end;
+
+    con    = nmtst_create_connection_from_keyfile("[connection]\n"
+                                               "id=t\n"
+                                               "type=dummy\n"
+                                               "interface-name=dummy1\n"
+                                               "master=br0\n"
+                                               "slave-type=bridge\n"
+                                               "\n"
+                                               "[bridge-port]\n"
+                                               "vlans=4094 pvid , 10-20 untagged\n"
+                                               "",
+                                               "/test_bridge_port/vlans");
+    s_port = NM_SETTING_BRIDGE_PORT(nm_connection_get_setting(con, NM_TYPE_SETTING_BRIDGE_PORT));
+    g_assert(s_port);
+    g_assert_cmpuint(nm_setting_bridge_port_get_num_vlans(s_port), ==, 2);
+
+    vlan = nm_setting_bridge_port_get_vlan(s_port, 0);
+    g_assert(vlan);
+    nm_bridge_vlan_get_vid_range(vlan, &vid_start, &vid_end);
+    g_assert_cmpuint(vid_start, ==, 10);
+    g_assert_cmpuint(vid_end, ==, 20);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(vlan), ==, FALSE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(vlan), ==, TRUE);
+
+    vlan = nm_setting_bridge_port_get_vlan(s_port, 1);
+    g_assert(vlan);
+    nm_bridge_vlan_get_vid_range(vlan, &vid_start, &vid_end);
+    g_assert_cmpuint(vid_start, ==, 4094);
+    g_assert_cmpuint(vid_end, ==, 4094);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(vlan), ==, TRUE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(vlan), ==, FALSE);
+
+    CLEAR(&con, &keyfile);
 }
 
 /*****************************************************************************/
 
-NMTST_DEFINE ();
+NMTST_DEFINE();
 
-int main (int argc, char **argv)
+int
+main(int argc, char **argv)
 {
-	nmtst_init (&argc, &argv, TRUE);
-
-	g_test_add_func ("/core/keyfile/encode_key", test_encode_key);
-	g_test_add_func ("/core/keyfile/test_8021x_cert", test_8021x_cert);
-	g_test_add_func ("/core/keyfile/test_8021x_cert_tpm2key", test_8021x_cert_tpm2key);
-	g_test_add_func ("/core/keyfile/test_8021x_cert_read", test_8021x_cert_read);
-	g_test_add_func ("/core/keyfile/test_team_conf_read/valid", test_team_conf_read_valid);
-	g_test_add_func ("/core/keyfile/test_team_conf_read/invalid", test_team_conf_read_invalid);
-	g_test_add_func ("/core/keyfile/test_user/1", test_user_1);
-	g_test_add_func ("/core/keyfile/test_vpn/1", test_vpn_1);
-	g_test_add_func ("/core/keyfile/bridge/vlans", test_bridge_vlans);
-	g_test_add_func ("/core/keyfile/bridge-port/vlans", test_bridge_port_vlans);
-
-	return g_test_run ();
+    nmtst_init(&argc, &argv, TRUE);
+
+    g_test_add_func("/core/keyfile/encode_key", test_encode_key);
+    g_test_add_func("/core/keyfile/test_8021x_cert", test_8021x_cert);
+    g_test_add_func("/core/keyfile/test_8021x_cert_tpm2key", test_8021x_cert_tpm2key);
+    g_test_add_func("/core/keyfile/test_8021x_cert_read", test_8021x_cert_read);
+    g_test_add_func("/core/keyfile/test_team_conf_read/valid", test_team_conf_read_valid);
+    g_test_add_func("/core/keyfile/test_team_conf_read/invalid", test_team_conf_read_invalid);
+    g_test_add_func("/core/keyfile/test_user/1", test_user_1);
+    g_test_add_func("/core/keyfile/test_vpn/1", test_vpn_1);
+    g_test_add_func("/core/keyfile/bridge/vlans", test_bridge_vlans);
+    g_test_add_func("/core/keyfile/bridge-port/vlans", test_bridge_port_vlans);
+
+    return g_test_run();
 }
-
diff --git a/libnm-core/tests/test-secrets.c b/libnm-core/tests/test-secrets.c
index 63335669..eb08104a 100644
--- a/libnm-core/tests/test-secrets.c
+++ b/libnm-core/tests/test-secrets.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2008 - 2011 Red Hat, Inc.
  */
@@ -22,649 +22,660 @@
 
 #include "nm-utils/nm-test-utils.h"
 
-#define TEST_CERT_DIR                         NM_BUILD_SRCDIR"/libnm-core/tests/certs"
+#define TEST_CERT_DIR                         NM_BUILD_SRCDIR "/libnm-core/tests/certs"
 #define TEST_NEED_SECRETS_EAP_TLS_CA_CERT     TEST_CERT_DIR "/test_ca_cert.pem"
 #define TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT TEST_CERT_DIR "/test_key_and_cert.pem"
 #define TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY TEST_CERT_DIR "/test_key_and_cert.pem"
 
 static void
-_assert_hints_has (GPtrArray *hints, const char *item)
+_assert_hints_has(GPtrArray *hints, const char *item)
 {
-	guint i;
-	guint found = 0;
-
-	g_assert (hints);
-	g_assert (item);
-	for (i = 0; i < hints->len; i++) {
-		g_assert (hints->pdata[i]);
-		if (strcmp (hints->pdata[i], item) == 0)
-			found++;
-	}
-	g_assert_cmpint (found, ==, 1);
+    guint i;
+    guint found = 0;
+
+    g_assert(hints);
+    g_assert(item);
+    for (i = 0; i < hints->len; i++) {
+        g_assert(hints->pdata[i]);
+        if (strcmp(hints->pdata[i], item) == 0)
+            found++;
+    }
+    g_assert_cmpint(found, ==, 1);
 }
 
 static NMConnection *
-make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme)
+make_tls_connection(const char *detail, NMSetting8021xCKScheme scheme)
 {
-	NMConnection *connection;
-	NMSettingConnection *s_con;
-	NMSetting8021x *s_8021x;
-	NMSettingWired *s_wired;
-	NMSettingIP4Config *s_ip4;
-	char *uuid;
-	gboolean success;
-	GError *error = 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 Need TLS Secrets",
-	              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));
-
-	/* Wireless security setting */
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_8021x));
-
-	g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
-
-	nm_setting_802_1x_add_eap_method (s_8021x, "tls");
-
-	success = nm_setting_802_1x_set_ca_cert (s_8021x,
-	                                         TEST_NEED_SECRETS_EAP_TLS_CA_CERT,
-	                                         scheme,
-	                                         NULL,
-	                                         &error);
-	nmtst_assert_success (success, error);
-
-	success = nm_setting_802_1x_set_client_cert (s_8021x,
-	                                             TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT,
-	                                             scheme,
-	                                             NULL,
-	                                             &error);
-	nmtst_assert_success (success, error);
-
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY,
-	                                             "test",
-	                                             scheme,
-	                                             NULL,
-	                                             &error);
-	nmtst_assert_success (success, error);
-
-	success = nm_setting_set_secret_flags (NM_SETTING (s_8021x),
-	                                       NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD,
-	                                       NM_SETTING_SECRET_FLAG_AGENT_OWNED,
-	                                       &error);
-	nmtst_assert_success (success, error);
-
-	/* IP4 setting */
-	s_ip4 = (NMSettingIP4Config *) 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_AUTO, NULL);
-
-	nmtst_assert_connection_verifies_and_normalizable (connection);
-
-	return connection;
+    NMConnection *       connection;
+    NMSettingConnection *s_con;
+    NMSetting8021x *     s_8021x;
+    NMSettingWired *     s_wired;
+    NMSettingIP4Config * s_ip4;
+    char *               uuid;
+    gboolean             success;
+    GError *             error = 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 Need TLS Secrets",
+                 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));
+
+    /* Wireless security setting */
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
+
+    g_object_set(s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
+
+    nm_setting_802_1x_add_eap_method(s_8021x, "tls");
+
+    success = nm_setting_802_1x_set_ca_cert(s_8021x,
+                                            TEST_NEED_SECRETS_EAP_TLS_CA_CERT,
+                                            scheme,
+                                            NULL,
+                                            &error);
+    nmtst_assert_success(success, error);
+
+    success = nm_setting_802_1x_set_client_cert(s_8021x,
+                                                TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT,
+                                                scheme,
+                                                NULL,
+                                                &error);
+    nmtst_assert_success(success, error);
+
+    success = nm_setting_802_1x_set_private_key(s_8021x,
+                                                TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY,
+                                                "test",
+                                                scheme,
+                                                NULL,
+                                                &error);
+    nmtst_assert_success(success, error);
+
+    success = nm_setting_set_secret_flags(NM_SETTING(s_8021x),
+                                          NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD,
+                                          NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                          &error);
+    nmtst_assert_success(success, error);
+
+    /* IP4 setting */
+    s_ip4 = (NMSettingIP4Config *) 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_AUTO, NULL);
+
+    nmtst_assert_connection_verifies_and_normalizable(connection);
+
+    return connection;
 }
 
 static void
-test_need_tls_secrets_path (void)
+test_need_tls_secrets_path(void)
 {
-	NMConnection *connection;
-	const char *setting_name;
-	GPtrArray *hints = NULL;
+    NMConnection *connection;
+    const char *  setting_name;
+    GPtrArray *   hints = NULL;
 
-	connection = make_tls_connection ("need-tls-secrets-path-key", NM_SETTING_802_1X_CK_SCHEME_PATH);
+    connection = make_tls_connection("need-tls-secrets-path-key", NM_SETTING_802_1X_CK_SCHEME_PATH);
 
-	/* Ensure we don't need any secrets since we just set up the connection */
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert (!setting_name);
-	g_assert (!hints);
+    /* Ensure we don't need any secrets since we just set up the connection */
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert(!setting_name);
+    g_assert(!hints);
 
-	/* Connection is good; clear secrets and ensure private key password is then required */
-	nm_connection_clear_secrets (connection);
+    /* Connection is good; clear secrets and ensure private key password is then required */
+    nm_connection_clear_secrets(connection);
 
-	hints = NULL;
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
-	_assert_hints_has (hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
+    hints        = NULL;
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert_cmpstr(setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
+    _assert_hints_has(hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
 
-	g_ptr_array_free (hints, TRUE);
-	g_object_unref (connection);
+    g_ptr_array_free(hints, TRUE);
+    g_object_unref(connection);
 }
 
 static void
-test_need_tls_secrets_blob (void)
+test_need_tls_secrets_blob(void)
 {
-	NMConnection *connection;
-	const char *setting_name;
-	GPtrArray *hints = NULL;
+    NMConnection *connection;
+    const char *  setting_name;
+    GPtrArray *   hints = NULL;
 
-	connection = make_tls_connection ("need-tls-secrets-blob-key", NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    connection = make_tls_connection("need-tls-secrets-blob-key", NM_SETTING_802_1X_CK_SCHEME_BLOB);
 
-	/* Ensure we don't need any secrets since we just set up the connection */
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert (!setting_name);
-	g_assert (!hints);
+    /* Ensure we don't need any secrets since we just set up the connection */
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert(!setting_name);
+    g_assert(!hints);
 
-	/* Clear secrets and ensure password is again required */
-	nm_connection_clear_secrets (connection);
+    /* Clear secrets and ensure password is again required */
+    nm_connection_clear_secrets(connection);
 
-	hints = NULL;
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
-	_assert_hints_has (hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
+    hints        = NULL;
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert_cmpstr(setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
+    _assert_hints_has(hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
 
-	g_ptr_array_free (hints, TRUE);
-	g_object_unref (connection);
+    g_ptr_array_free(hints, TRUE);
+    g_object_unref(connection);
 }
 
 static NMConnection *
-make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme)
+make_tls_phase2_connection(const char *detail, NMSetting8021xCKScheme scheme)
 {
-	NMConnection *connection;
-	NMSettingConnection *s_con;
-	NMSetting8021x *s_8021x;
-	NMSettingWired *s_wired;
-	NMSettingIP4Config *s_ip4;
-	char *uuid;
-	gboolean success;
-	GError *error = 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 Need TLS Secrets",
-	              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));
-
-	/* Wireless security setting */
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	nm_connection_add_setting (connection, NM_SETTING (s_8021x));
-
-	g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "blahblah", NULL);
-	g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
-
-	nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
-	g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTH, "tls", NULL);
-
-	success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x,
-	                                                TEST_NEED_SECRETS_EAP_TLS_CA_CERT,
-	                                                scheme,
-	                                                NULL,
-	                                                &error);
-	nmtst_assert_success (success, error);
-
-	success = nm_setting_802_1x_set_phase2_client_cert (s_8021x,
-	                                                    TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT,
-	                                                    scheme,
-	                                                    NULL,
-	                                                    &error);
-	nmtst_assert_success (success, error);
-
-	success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
-	                                                    TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY,
-	                                                    "test",
-	                                                    scheme,
-	                                                    NULL,
-	                                                    &error);
-	nmtst_assert_success (success, error);
-
-	success = nm_setting_set_secret_flags (NM_SETTING (s_8021x),
-	                                       NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD,
-	                                       NM_SETTING_SECRET_FLAG_AGENT_OWNED,
-	                                       &error);
-	nmtst_assert_success (success, error);
-
-	/* IP4 setting */
-	s_ip4 = (NMSettingIP4Config *) 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_AUTO, NULL);
-
-	nmtst_assert_connection_verifies_and_normalizable (connection);
-	return connection;
+    NMConnection *       connection;
+    NMSettingConnection *s_con;
+    NMSetting8021x *     s_8021x;
+    NMSettingWired *     s_wired;
+    NMSettingIP4Config * s_ip4;
+    char *               uuid;
+    gboolean             success;
+    GError *             error = 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 Need TLS Secrets",
+                 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));
+
+    /* Wireless security setting */
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
+
+    g_object_set(s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "blahblah", NULL);
+    g_object_set(s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
+
+    nm_setting_802_1x_add_eap_method(s_8021x, "ttls");
+    g_object_set(s_8021x, NM_SETTING_802_1X_PHASE2_AUTH, "tls", NULL);
+
+    success = nm_setting_802_1x_set_phase2_ca_cert(s_8021x,
+                                                   TEST_NEED_SECRETS_EAP_TLS_CA_CERT,
+                                                   scheme,
+                                                   NULL,
+                                                   &error);
+    nmtst_assert_success(success, error);
+
+    success = nm_setting_802_1x_set_phase2_client_cert(s_8021x,
+                                                       TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT,
+                                                       scheme,
+                                                       NULL,
+                                                       &error);
+    nmtst_assert_success(success, error);
+
+    success = nm_setting_802_1x_set_phase2_private_key(s_8021x,
+                                                       TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY,
+                                                       "test",
+                                                       scheme,
+                                                       NULL,
+                                                       &error);
+    nmtst_assert_success(success, error);
+
+    success = nm_setting_set_secret_flags(NM_SETTING(s_8021x),
+                                          NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD,
+                                          NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                          &error);
+    nmtst_assert_success(success, error);
+
+    /* IP4 setting */
+    s_ip4 = (NMSettingIP4Config *) 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_AUTO, NULL);
+
+    nmtst_assert_connection_verifies_and_normalizable(connection);
+    return connection;
 }
 
 static void
-test_need_tls_phase2_secrets_path (void)
+test_need_tls_phase2_secrets_path(void)
 {
-	NMConnection *connection;
-	const char *setting_name;
-	GPtrArray *hints = NULL;
+    NMConnection *connection;
+    const char *  setting_name;
+    GPtrArray *   hints = NULL;
 
-	connection = make_tls_phase2_connection ("need-tls-phase2-secrets-path-key",
-	                                         NM_SETTING_802_1X_CK_SCHEME_PATH);
+    connection = make_tls_phase2_connection("need-tls-phase2-secrets-path-key",
+                                            NM_SETTING_802_1X_CK_SCHEME_PATH);
 
-	/* Ensure we don't need any secrets since we just set up the connection */
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert (!setting_name);
-	g_assert (!hints);
+    /* Ensure we don't need any secrets since we just set up the connection */
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert(!setting_name);
+    g_assert(!hints);
 
-	/* Connection is good; clear secrets and ensure private key password is then required */
-	nm_connection_clear_secrets (connection);
+    /* Connection is good; clear secrets and ensure private key password is then required */
+    nm_connection_clear_secrets(connection);
 
-	hints = NULL;
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
-	_assert_hints_has (hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
+    hints        = NULL;
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert_cmpstr(setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
+    _assert_hints_has(hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
 
-	g_ptr_array_free (hints, TRUE);
-	g_object_unref (connection);
+    g_ptr_array_free(hints, TRUE);
+    g_object_unref(connection);
 }
 
 static void
-test_need_tls_phase2_secrets_blob (void)
+test_need_tls_phase2_secrets_blob(void)
 {
-	NMConnection *connection;
-	const char *setting_name;
-	GPtrArray *hints = NULL;
+    NMConnection *connection;
+    const char *  setting_name;
+    GPtrArray *   hints = NULL;
 
-	connection = make_tls_phase2_connection ("need-tls-phase2-secrets-blob-key",
-	                                         NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    connection = make_tls_phase2_connection("need-tls-phase2-secrets-blob-key",
+                                            NM_SETTING_802_1X_CK_SCHEME_BLOB);
 
-	/* Ensure we don't need any secrets since we just set up the connection */
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert (!setting_name);
-	g_assert (!hints);
+    /* Ensure we don't need any secrets since we just set up the connection */
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert(!setting_name);
+    g_assert(!hints);
 
-	/* Connection is good; clear secrets and ensure private key password is then required */
-	nm_connection_clear_secrets (connection);
+    /* Connection is good; clear secrets and ensure private key password is then required */
+    nm_connection_clear_secrets(connection);
 
-	hints = NULL;
-	setting_name = nm_connection_need_secrets (connection, &hints);
-	g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
-	_assert_hints_has (hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
+    hints        = NULL;
+    setting_name = nm_connection_need_secrets(connection, &hints);
+    g_assert_cmpstr(setting_name, ==, NM_SETTING_802_1X_SETTING_NAME);
+    _assert_hints_has(hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
 
-	g_ptr_array_free (hints, TRUE);
-	g_object_unref (connection);
+    g_ptr_array_free(hints, TRUE);
+    g_object_unref(connection);
 }
 
 static NMConnection *
-wifi_connection_new (void)
+wifi_connection_new(void)
 {
-	NMConnection *connection;
-	NMSettingConnection *s_con;
-	NMSettingWireless *s_wifi;
-	NMSettingWirelessSecurity *s_wsec;
-	unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 };
-	char *uuid;
-	GBytes *ssid;
-
-	connection = nm_simple_connection_new ();
-	g_assert (connection);
-
-	/* Connection setting */
-	s_con = (NMSettingConnection *) nm_setting_connection_new ();
-	g_assert (s_con);
-
-	uuid = nm_utils_uuid_generate ();
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_ID, "Test Wireless",
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
-	              NULL);
-	g_free (uuid);
-	nm_connection_add_setting (connection, NM_SETTING (s_con));
-
-	/* Wireless setting */
-	s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
-	g_assert (s_wifi);
-
-	ssid = g_bytes_new (tmpssid, sizeof (tmpssid));
-	g_object_set (s_wifi,
-	              NM_SETTING_WIRELESS_SSID, ssid,
-	              NULL);
-	g_bytes_unref (ssid);
-	nm_connection_add_setting (connection, NM_SETTING (s_wifi));
-
-	/* Wifi security */
-	s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
-	g_assert (s_wsec);
-
-	g_object_set (G_OBJECT (s_wsec),
-	              NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
-	              NULL);
-	nm_connection_add_setting (connection, NM_SETTING (s_wsec));
-
-	return connection;
+    NMConnection *             connection;
+    NMSettingConnection *      s_con;
+    NMSettingWireless *        s_wifi;
+    NMSettingWirelessSecurity *s_wsec;
+    unsigned char              tmpssid[] = {0x31, 0x33, 0x33, 0x37};
+    char *                     uuid;
+    GBytes *                   ssid;
+
+    connection = nm_simple_connection_new();
+    g_assert(connection);
+
+    /* Connection setting */
+    s_con = (NMSettingConnection *) nm_setting_connection_new();
+    g_assert(s_con);
+
+    uuid = nm_utils_uuid_generate();
+    g_object_set(s_con,
+                 NM_SETTING_CONNECTION_ID,
+                 "Test Wireless",
+                 NM_SETTING_CONNECTION_UUID,
+                 uuid,
+                 NM_SETTING_CONNECTION_AUTOCONNECT,
+                 FALSE,
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_WIRELESS_SETTING_NAME,
+                 NULL);
+    g_free(uuid);
+    nm_connection_add_setting(connection, NM_SETTING(s_con));
+
+    /* Wireless setting */
+    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
+    g_assert(s_wifi);
+
+    ssid = g_bytes_new(tmpssid, sizeof(tmpssid));
+    g_object_set(s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL);
+    g_bytes_unref(ssid);
+    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
+
+    /* Wifi security */
+    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
+    g_assert(s_wsec);
+
+    g_object_set(G_OBJECT(s_wsec), NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", NULL);
+    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
+
+    return connection;
 }
 
 static GVariant *
-build_wep_secrets (const char *wepkey)
+build_wep_secrets(const char *wepkey)
 {
-	GVariantBuilder builder;
-
-	g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
-	                       g_variant_new_string (wepkey));
-	g_variant_builder_add (&builder, "{sv}",
-	                       NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
-	                       g_variant_new_uint32 (NM_WEP_KEY_TYPE_KEY));
-
-	return g_variant_builder_end (&builder);
+    GVariantBuilder builder;
+
+    g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
+    g_variant_builder_add(&builder,
+                          "{sv}",
+                          NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+                          g_variant_new_string(wepkey));
+    g_variant_builder_add(&builder,
+                          "{sv}",
+                          NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
+                          g_variant_new_uint32(NM_WEP_KEY_TYPE_KEY));
+
+    return g_variant_builder_end(&builder);
 }
 
 static void
-test_update_secrets_wifi_single_setting (void)
+test_update_secrets_wifi_single_setting(void)
 {
-	NMConnection *connection;
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *secrets;
-	GError *error = NULL;
-	gboolean success;
-	const char *wepkey = "11111111111111111111111111";
-	const char *tmp;
-
-	/* Test update with a hashed setting of 802-11-wireless secrets */
-
-	connection = wifi_connection_new ();
-
-	secrets = build_wep_secrets (wepkey);
-	success = nm_connection_update_secrets (connection,
-	                                        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
-	                                        secrets,
-	                                        &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	g_variant_unref (secrets);
-
-	/* Make sure the secret is now in the connection */
-	s_wsec = nm_connection_get_setting_wireless_security (connection);
-	g_assert (s_wsec);
-	tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
-	g_assert_cmpstr (tmp, ==, wepkey);
-
-	g_object_unref (connection);
+    NMConnection *             connection;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 secrets;
+    GError *                   error = NULL;
+    gboolean                   success;
+    const char *               wepkey = "11111111111111111111111111";
+    const char *               tmp;
+
+    /* Test update with a hashed setting of 802-11-wireless secrets */
+
+    connection = wifi_connection_new();
+
+    secrets = build_wep_secrets(wepkey);
+    success = nm_connection_update_secrets(connection,
+                                           NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+                                           secrets,
+                                           &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    g_variant_unref(secrets);
+
+    /* Make sure the secret is now in the connection */
+    s_wsec = nm_connection_get_setting_wireless_security(connection);
+    g_assert(s_wsec);
+    tmp = nm_setting_wireless_security_get_wep_key(s_wsec, 0);
+    g_assert_cmpstr(tmp, ==, wepkey);
+
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_wifi_full_hash (void)
+test_update_secrets_wifi_full_hash(void)
 {
-	NMConnection *connection;
-	NMSettingWirelessSecurity *s_wsec;
-	GVariantBuilder builder;
-	GVariant *all;
-	GError *error = NULL;
-	gboolean success;
-	const char *wepkey = "11111111111111111111111111";
-	const char *tmp;
-
-	/* Test update with a hashed connection containing only 802-11-wireless
-	 * setting and secrets.
-	 */
-
-	connection = wifi_connection_new ();
-
-	g_variant_builder_init (&builder, NM_VARIANT_TYPE_CONNECTION);
-	g_variant_builder_add (&builder, "{s@a{sv}}",
-	                       NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
-	                       build_wep_secrets (wepkey));
-	all = g_variant_builder_end (&builder);
-
-	success = nm_connection_update_secrets (connection,
-	                                        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
-	                                        all,
-	                                        &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	g_variant_unref (all);
-
-	/* Make sure the secret is now in the connection */
-	s_wsec = nm_connection_get_setting_wireless_security (connection);
-	g_assert (s_wsec);
-	tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
-	g_assert_cmpstr (tmp, ==, wepkey);
-
-	g_object_unref (connection);
+    NMConnection *             connection;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariantBuilder            builder;
+    GVariant *                 all;
+    GError *                   error = NULL;
+    gboolean                   success;
+    const char *               wepkey = "11111111111111111111111111";
+    const char *               tmp;
+
+    /* Test update with a hashed connection containing only 802-11-wireless
+     * setting and secrets.
+     */
+
+    connection = wifi_connection_new();
+
+    g_variant_builder_init(&builder, NM_VARIANT_TYPE_CONNECTION);
+    g_variant_builder_add(&builder,
+                          "{s@a{sv}}",
+                          NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+                          build_wep_secrets(wepkey));
+    all = g_variant_builder_end(&builder);
+
+    success = nm_connection_update_secrets(connection,
+                                           NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+                                           all,
+                                           &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    g_variant_unref(all);
+
+    /* Make sure the secret is now in the connection */
+    s_wsec = nm_connection_get_setting_wireless_security(connection);
+    g_assert(s_wsec);
+    tmp = nm_setting_wireless_security_get_wep_key(s_wsec, 0);
+    g_assert_cmpstr(tmp, ==, wepkey);
+
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_wifi_bad_setting_name (void)
+test_update_secrets_wifi_bad_setting_name(void)
 {
-	NMConnection *connection;
-	GVariant *secrets;
-	GError *error = NULL;
-	gboolean success;
-	const char *wepkey = "11111111111111111111111111";
-
-	/* Test that passing an invalid setting name to
-	 * nm_connection_update_secrets() fails with the correct error.
-	 */
-
-	connection = wifi_connection_new ();
-
-	secrets = build_wep_secrets (wepkey);
-
-	success = nm_connection_update_secrets (connection,
-	                                        "asdfasdfasdfasf",
-	                                        secrets,
-	                                        &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
-	g_assert (success == FALSE);
-
-	g_clear_error (&error);
-	g_variant_unref (secrets);
-	g_object_unref (connection);
+    NMConnection *connection;
+    GVariant *    secrets;
+    GError *      error = NULL;
+    gboolean      success;
+    const char *  wepkey = "11111111111111111111111111";
+
+    /* Test that passing an invalid setting name to
+     * nm_connection_update_secrets() fails with the correct error.
+     */
+
+    connection = wifi_connection_new();
+
+    secrets = build_wep_secrets(wepkey);
+
+    success = nm_connection_update_secrets(connection, "asdfasdfasdfasf", secrets, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
+    g_assert(success == FALSE);
+
+    g_clear_error(&error);
+    g_variant_unref(secrets);
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_whole_connection (void)
+test_update_secrets_whole_connection(void)
 {
-	NMConnection *connection;
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *secrets;
-	GError *error = NULL;
-	gboolean success;
-	const char *wepkey = "11111111111111111111111111";
-
-	/* Test calling nm_connection_update_secrets() with an entire hashed
-	 * connection including non-secrets.
-	 */
-
-	connection = wifi_connection_new ();
-
-	/* Build up the secrets dictionary */
-	secrets = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
-	NMTST_VARIANT_EDITOR (secrets,
-	                      NMTST_VARIANT_ADD_PROPERTY (NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
-	                                                  NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
-	                                                  "s",
-	                                                  wepkey);
-	                      );
-
-	success = nm_connection_update_secrets (connection, NULL, secrets, &error);
-	g_assert_no_error (error);
-	g_assert (success == TRUE);
-
-	g_variant_unref (secrets);
-
-	s_wsec = nm_connection_get_setting_wireless_security (connection);
-	g_assert (s_wsec);
-	g_assert_cmpstr (nm_setting_wireless_security_get_wep_key (s_wsec, 0), ==, wepkey);
-
-	g_object_unref (connection);
+    NMConnection *             connection;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 secrets;
+    GError *                   error = NULL;
+    gboolean                   success;
+    const char *               wepkey = "11111111111111111111111111";
+
+    /* Test calling nm_connection_update_secrets() with an entire hashed
+     * connection including non-secrets.
+     */
+
+    connection = wifi_connection_new();
+
+    /* Build up the secrets dictionary */
+    secrets = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL);
+    NMTST_VARIANT_EDITOR(secrets,
+                         NMTST_VARIANT_ADD_PROPERTY(NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+                                                    NM_SETTING_WIRELESS_SECURITY_WEP_KEY0,
+                                                    "s",
+                                                    wepkey););
+
+    success = nm_connection_update_secrets(connection, NULL, secrets, &error);
+    g_assert_no_error(error);
+    g_assert(success == TRUE);
+
+    g_variant_unref(secrets);
+
+    s_wsec = nm_connection_get_setting_wireless_security(connection);
+    g_assert(s_wsec);
+    g_assert_cmpstr(nm_setting_wireless_security_get_wep_key(s_wsec, 0), ==, wepkey);
+
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_whole_connection_empty_hash (void)
+test_update_secrets_whole_connection_empty_hash(void)
 {
-	NMConnection *connection;
-	GVariant *secrets;
-	GError *error = NULL;
-	gboolean success;
-
-	/* Test that updating secrets with an empty connection hash returns success */
-
-	connection = wifi_connection_new ();
-	secrets = g_variant_new_array (G_VARIANT_TYPE ("{sa{sv}}"), NULL, 0);
-	success = nm_connection_update_secrets (connection, NULL, secrets, &error);
-	g_assert_no_error (error);
-	g_assert (success == TRUE);
-	g_variant_unref (secrets);
-	g_object_unref (connection);
+    NMConnection *connection;
+    GVariant *    secrets;
+    GError *      error = NULL;
+    gboolean      success;
+
+    /* Test that updating secrets with an empty connection hash returns success */
+
+    connection = wifi_connection_new();
+    secrets    = g_variant_new_array(G_VARIANT_TYPE("{sa{sv}}"), NULL, 0);
+    success    = nm_connection_update_secrets(connection, NULL, secrets, &error);
+    g_assert_no_error(error);
+    g_assert(success == TRUE);
+    g_variant_unref(secrets);
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_whole_connection_bad_setting (void)
+test_update_secrets_whole_connection_bad_setting(void)
 {
-	NMConnection *connection;
-	NMSettingWirelessSecurity *s_wsec;
-	GVariant *secrets, *copy, *setting_hash;
-	const char *setting_name;
-	GVariantBuilder conn_builder;
-	GVariantIter conn_iter;
-	GError *error = NULL;
-	gboolean success;
-	const char *wepkey = "11111111111111111111111111";
-
-	/* Test that sending a hashed connection containing an invalid setting
-	 * name fails with the right error.
-	 */
-
-	connection = wifi_connection_new ();
-	s_wsec = nm_connection_get_setting_wireless_security (connection);
-	g_assert (s_wsec != NULL);
-	g_object_set (G_OBJECT (s_wsec),
-	              NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, wepkey,
-	              NULL);
-
-	/* Build up the secrets hash */
-	secrets = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ALL);
-
-	/* Copy the dict, renaming the wireless-security setting in the process
-	 * (so we ensure libnm is returning the right error when it finds an entry
-	 * in the connection hash that doesn't match any setting in the connection).
-	 */
-	g_variant_builder_init (&conn_builder, NM_VARIANT_TYPE_CONNECTION);
-	g_variant_iter_init (&conn_iter, secrets);
-	while (g_variant_iter_next (&conn_iter, "{&s@a{sv}}", &setting_name, &setting_hash)) {
-		if (strcmp (setting_name, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0)
-			setting_name = "asdfasdfasdfasdf";
-
-		g_variant_builder_add (&conn_builder, "{s@a{sv}}", setting_name, setting_hash);
-		g_variant_unref (setting_hash);
-	}
-	copy = g_variant_builder_end (&conn_builder);
-	g_variant_unref (secrets);
-
-	success = nm_connection_update_secrets (connection, NULL, copy, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
-	g_assert (success == FALSE);
-
-	g_clear_error (&error);
-	g_variant_unref (copy);
-	g_object_unref (connection);
+    NMConnection *             connection;
+    NMSettingWirelessSecurity *s_wsec;
+    GVariant *                 secrets, *copy, *setting_hash;
+    const char *               setting_name;
+    GVariantBuilder            conn_builder;
+    GVariantIter               conn_iter;
+    GError *                   error = NULL;
+    gboolean                   success;
+    const char *               wepkey = "11111111111111111111111111";
+
+    /* Test that sending a hashed connection containing an invalid setting
+     * name fails with the right error.
+     */
+
+    connection = wifi_connection_new();
+    s_wsec     = nm_connection_get_setting_wireless_security(connection);
+    g_assert(s_wsec != NULL);
+    g_object_set(G_OBJECT(s_wsec), NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, wepkey, NULL);
+
+    /* Build up the secrets hash */
+    secrets = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ALL);
+
+    /* Copy the dict, renaming the wireless-security setting in the process
+     * (so we ensure libnm is returning the right error when it finds an entry
+     * in the connection hash that doesn't match any setting in the connection).
+     */
+    g_variant_builder_init(&conn_builder, NM_VARIANT_TYPE_CONNECTION);
+    g_variant_iter_init(&conn_iter, secrets);
+    while (g_variant_iter_next(&conn_iter, "{&s@a{sv}}", &setting_name, &setting_hash)) {
+        if (strcmp(setting_name, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) == 0)
+            setting_name = "asdfasdfasdfasdf";
+
+        g_variant_builder_add(&conn_builder, "{s@a{sv}}", setting_name, setting_hash);
+        g_variant_unref(setting_hash);
+    }
+    copy = g_variant_builder_end(&conn_builder);
+    g_variant_unref(secrets);
+
+    success = nm_connection_update_secrets(connection, NULL, copy, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
+    g_assert(success == FALSE);
+
+    g_clear_error(&error);
+    g_variant_unref(copy);
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_whole_connection_empty_base_setting (void)
+test_update_secrets_whole_connection_empty_base_setting(void)
 {
-	NMConnection *connection;
-	GVariant *secrets, *setting;
-	GError *error = NULL;
-	gboolean success;
-
-	/* Test that a hashed connection which does not have any hashed secrets
-	 * for the requested setting returns success.
-	 */
-
-	connection = wifi_connection_new ();
-	secrets = nm_connection_to_dbus (connection, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
-	g_assert_cmpint (g_variant_n_children (secrets), ==, 3);
-
-	setting = g_variant_lookup_value (secrets, NM_SETTING_WIRELESS_SETTING_NAME, NULL);
-	g_assert (setting != NULL);
-	g_variant_unref (setting);
-
-	success = nm_connection_update_secrets (connection,
-	                                        NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
-	                                        secrets,
-	                                        &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	g_variant_unref (secrets);
-	g_object_unref (connection);
+    NMConnection *connection;
+    GVariant *    secrets, *setting;
+    GError *      error = NULL;
+    gboolean      success;
+
+    /* Test that a hashed connection which does not have any hashed secrets
+     * for the requested setting returns success.
+     */
+
+    connection = wifi_connection_new();
+    secrets    = nm_connection_to_dbus(connection, NM_CONNECTION_SERIALIZE_ONLY_SECRETS);
+    g_assert_cmpint(g_variant_n_children(secrets), ==, 3);
+
+    setting = g_variant_lookup_value(secrets, NM_SETTING_WIRELESS_SETTING_NAME, NULL);
+    g_assert(setting != NULL);
+    g_variant_unref(setting);
+
+    success = nm_connection_update_secrets(connection,
+                                           NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
+                                           secrets,
+                                           &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    g_variant_unref(secrets);
+    g_object_unref(connection);
 }
 
 static void
-test_update_secrets_null_setting_name_with_setting_hash (void)
+test_update_secrets_null_setting_name_with_setting_hash(void)
 {
-	NMConnection *connection;
-	GVariant *secrets;
-	GError *error = NULL;
-	gboolean success;
-	const char *wepkey = "11111111111111111111111111";
+    NMConnection *connection;
+    GVariant *    secrets;
+    GError *      error = NULL;
+    gboolean      success;
+    const char *  wepkey = "11111111111111111111111111";
 
-	/* Ensure that a NULL setting name and only a hashed setting fails */
+    /* Ensure that a NULL setting name and only a hashed setting fails */
 
-	connection = wifi_connection_new ();
+    connection = wifi_connection_new();
 
-	secrets = build_wep_secrets (wepkey);
+    secrets = build_wep_secrets(wepkey);
 
-	NMTST_EXPECT_LIBNM_CRITICAL (NMTST_G_RETURN_MSG (setting_name || full_connection));
-	success = nm_connection_update_secrets (connection, NULL, secrets, &error);
-	g_test_assert_expected_messages ();
-	g_assert_no_error (error);
-	g_assert (!success);
+    NMTST_EXPECT_LIBNM_CRITICAL(NMTST_G_RETURN_MSG(setting_name || full_connection));
+    success = nm_connection_update_secrets(connection, NULL, secrets, &error);
+    g_test_assert_expected_messages();
+    g_assert_no_error(error);
+    g_assert(!success);
 
-	g_variant_unref (secrets);
-	g_object_unref (connection);
+    g_variant_unref(secrets);
+    g_object_unref(connection);
 }
 
-NMTST_DEFINE ();
+NMTST_DEFINE();
 
 int
-main (int argc, char **argv)
+main(int argc, char **argv)
 {
-	nmtst_init (&argc, &argv, TRUE);
-
-	/* The tests */
-	g_test_add_func ("/libnm/need_tls_secrets_path", test_need_tls_secrets_path);
-	g_test_add_func ("/libnm/need_tls_secrets_blob", test_need_tls_secrets_blob);
-	g_test_add_func ("/libnm/need_tls_phase2_secrets_path", test_need_tls_phase2_secrets_path);
-	g_test_add_func ("/libnm/need_tls_phase2_secrets_blob", test_need_tls_phase2_secrets_blob);
-
-	g_test_add_func ("/libnm/update_secrets_wifi_single_setting", test_update_secrets_wifi_single_setting);
-	g_test_add_func ("/libnm/update_secrets_wifi_full_hash", test_update_secrets_wifi_full_hash);
-	g_test_add_func ("/libnm/update_secrets_wifi_bad_setting_name", test_update_secrets_wifi_bad_setting_name);
-
-	g_test_add_func ("/libnm/update_secrets_whole_connection", test_update_secrets_whole_connection);
-	g_test_add_func ("/libnm/update_secrets_whole_connection_empty_hash", test_update_secrets_whole_connection_empty_hash);
-	g_test_add_func ("/libnm/update_secrets_whole_connection_bad_setting", test_update_secrets_whole_connection_bad_setting);
-	g_test_add_func ("/libnm/update_secrets_whole_connection_empty_base_setting", test_update_secrets_whole_connection_empty_base_setting);
-	g_test_add_func ("/libnm/update_secrets_null_setting_name_with_setting_hash", test_update_secrets_null_setting_name_with_setting_hash);
-
-	return g_test_run ();
+    nmtst_init(&argc, &argv, TRUE);
+
+    /* The tests */
+    g_test_add_func("/libnm/need_tls_secrets_path", test_need_tls_secrets_path);
+    g_test_add_func("/libnm/need_tls_secrets_blob", test_need_tls_secrets_blob);
+    g_test_add_func("/libnm/need_tls_phase2_secrets_path", test_need_tls_phase2_secrets_path);
+    g_test_add_func("/libnm/need_tls_phase2_secrets_blob", test_need_tls_phase2_secrets_blob);
+
+    g_test_add_func("/libnm/update_secrets_wifi_single_setting",
+                    test_update_secrets_wifi_single_setting);
+    g_test_add_func("/libnm/update_secrets_wifi_full_hash", test_update_secrets_wifi_full_hash);
+    g_test_add_func("/libnm/update_secrets_wifi_bad_setting_name",
+                    test_update_secrets_wifi_bad_setting_name);
+
+    g_test_add_func("/libnm/update_secrets_whole_connection", test_update_secrets_whole_connection);
+    g_test_add_func("/libnm/update_secrets_whole_connection_empty_hash",
+                    test_update_secrets_whole_connection_empty_hash);
+    g_test_add_func("/libnm/update_secrets_whole_connection_bad_setting",
+                    test_update_secrets_whole_connection_bad_setting);
+    g_test_add_func("/libnm/update_secrets_whole_connection_empty_base_setting",
+                    test_update_secrets_whole_connection_empty_base_setting);
+    g_test_add_func("/libnm/update_secrets_null_setting_name_with_setting_hash",
+                    test_update_secrets_null_setting_name_with_setting_hash);
+
+    return g_test_run();
 }
diff --git a/libnm-core/tests/test-setting.c b/libnm-core/tests/test-setting.c
index 7a8193ee..8978f73e 100644
--- a/libnm-core/tests/test-setting.c
+++ b/libnm-core/tests/test-setting.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2008 - 2017 Red Hat, Inc.
  */
@@ -8,6 +8,7 @@
 #include <linux/pkt_sched.h>
 #include <net/if.h>
 
+#include "nm-glib-aux/nm-json-aux.h"
 #include "nm-core-internal.h"
 #include "nm-utils.h"
 #include "nm-utils-private.h"
@@ -28,4077 +29,4327 @@
 
 #include "nm-utils/nm-test-utils.h"
 
-#define TEST_CERT_DIR NM_BUILD_SRCDIR"/libnm-core/tests/certs"
-
-/*****************************************************************************/
-
-/* assert that the define is just a plain integer (boolean). */
-
-G_STATIC_ASSERT (   (WITH_JSON_VALIDATION) == 1
-                 || (WITH_JSON_VALIDATION) == 0);
-
-_nm_unused static const int _with_json_validation = WITH_JSON_VALIDATION;
+#define TEST_CERT_DIR NM_BUILD_SRCDIR "/libnm-core/tests/certs"
 
 /*****************************************************************************/
 
 /* converts @dict to a connection. In this case, @dict must be good, without warnings, so that
  * NM_SETTING_PARSE_FLAGS_STRICT and NM_SETTING_PARSE_FLAGS_BEST_EFFORT yield the exact same results. */
 static NMConnection *
-_connection_new_from_dbus_strict (GVariant *dict,
-                                  gboolean normalize)
+_connection_new_from_dbus_strict(GVariant *dict, gboolean normalize)
 {
-	gs_unref_object NMConnection *con_x_0 = NULL;
-	gs_unref_object NMConnection *con_x_s = NULL;
-	gs_unref_object NMConnection *con_x_e = NULL;
-	gs_unref_object NMConnection *con_n_0 = NULL;
-	gs_unref_object NMConnection *con_n_s = NULL;
-	gs_unref_object NMConnection *con_n_e = NULL;
-	gs_free_error GError *error = NULL;
-	guint i;
-
-	g_assert (g_variant_is_of_type (dict, NM_VARIANT_TYPE_CONNECTION));
-
-	con_x_0 = _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_NONE, &error);
-	nmtst_assert_success (NM_IS_CONNECTION (con_x_0), error);
-
-	con_x_s = _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_STRICT, &error);
-	nmtst_assert_success (NM_IS_CONNECTION (con_x_s), error);
-
-	con_x_e = _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_BEST_EFFORT, &error);
-	nmtst_assert_success (NM_IS_CONNECTION (con_x_e), error);
-
-	con_n_0 = _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, &error);
-	nmtst_assert_success (NM_IS_CONNECTION (con_n_0), error);
-
-	con_n_s = _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_STRICT | NM_SETTING_PARSE_FLAGS_NORMALIZE, &error);
-	nmtst_assert_success (NM_IS_CONNECTION (con_n_s), error);
-
-	con_n_e = _nm_simple_connection_new_from_dbus (dict, NM_SETTING_PARSE_FLAGS_BEST_EFFORT | NM_SETTING_PARSE_FLAGS_NORMALIZE, &error);
-	nmtst_assert_success (NM_IS_CONNECTION (con_n_e), error);
-
-	nmtst_assert_connection_verifies (con_x_0);
-	nmtst_assert_connection_verifies (con_x_e);
-	nmtst_assert_connection_verifies (con_x_s);
-
-	nmtst_assert_connection_verifies_without_normalization (con_n_0);
-	nmtst_assert_connection_verifies_without_normalization (con_n_e);
-	nmtst_assert_connection_verifies_without_normalization (con_n_s);
-
-	/* randomly compare some pairs that we created. They must all be equal,
-	 * after accounting for normalization. */
-	for (i = 0; i < 10; i++) {
-		NMConnection *cons[] = { con_x_0, con_x_s, con_x_e, con_n_0, con_n_s, con_n_e };
-		guint idx_a = (nmtst_get_rand_uint32 () % G_N_ELEMENTS (cons));
-		guint idx_b = (nmtst_get_rand_uint32 () % G_N_ELEMENTS (cons));
-		gboolean normalize_a, normalize_b;
-
-		if (idx_a <= 2 && idx_b <= 2) {
-			normalize_a = nmtst_get_rand_bool ();
-			normalize_b = normalize_a;
-		} else if (idx_a > 2 && idx_b > 2) {
-			normalize_a = nmtst_get_rand_bool ();
-			normalize_b = nmtst_get_rand_bool ();
-		} else {
-			normalize_a = (idx_a <= 2) ? TRUE : nmtst_get_rand_bool ();
-			normalize_b = (idx_b <= 2) ? TRUE : nmtst_get_rand_bool ();
-		}
-		nmtst_assert_connection_equals (cons[idx_a], normalize_a, cons[idx_b], normalize_b);
-	}
-
-	return (normalize)
-	       ? g_steal_pointer (&con_x_0)
-	       : g_steal_pointer (&con_n_0);
+    gs_unref_object NMConnection *con_x_0 = NULL;
+    gs_unref_object NMConnection *con_x_s = NULL;
+    gs_unref_object NMConnection *con_x_e = NULL;
+    gs_unref_object NMConnection *con_n_0 = NULL;
+    gs_unref_object NMConnection *con_n_s = NULL;
+    gs_unref_object NMConnection *con_n_e = NULL;
+    gs_free_error GError *error           = NULL;
+    guint                 i;
+
+    g_assert(g_variant_is_of_type(dict, NM_VARIANT_TYPE_CONNECTION));
+
+    con_x_0 = _nm_simple_connection_new_from_dbus(dict, NM_SETTING_PARSE_FLAGS_NONE, &error);
+    nmtst_assert_success(NM_IS_CONNECTION(con_x_0), error);
+
+    con_x_s = _nm_simple_connection_new_from_dbus(dict, NM_SETTING_PARSE_FLAGS_STRICT, &error);
+    nmtst_assert_success(NM_IS_CONNECTION(con_x_s), error);
+
+    con_x_e = _nm_simple_connection_new_from_dbus(dict, NM_SETTING_PARSE_FLAGS_BEST_EFFORT, &error);
+    nmtst_assert_success(NM_IS_CONNECTION(con_x_e), error);
+
+    con_n_0 = _nm_simple_connection_new_from_dbus(dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, &error);
+    nmtst_assert_success(NM_IS_CONNECTION(con_n_0), error);
+
+    con_n_s = _nm_simple_connection_new_from_dbus(dict,
+                                                  NM_SETTING_PARSE_FLAGS_STRICT
+                                                      | NM_SETTING_PARSE_FLAGS_NORMALIZE,
+                                                  &error);
+    nmtst_assert_success(NM_IS_CONNECTION(con_n_s), error);
+
+    con_n_e = _nm_simple_connection_new_from_dbus(dict,
+                                                  NM_SETTING_PARSE_FLAGS_BEST_EFFORT
+                                                      | NM_SETTING_PARSE_FLAGS_NORMALIZE,
+                                                  &error);
+    nmtst_assert_success(NM_IS_CONNECTION(con_n_e), error);
+
+    nmtst_assert_connection_verifies(con_x_0);
+    nmtst_assert_connection_verifies(con_x_e);
+    nmtst_assert_connection_verifies(con_x_s);
+
+    nmtst_assert_connection_verifies_without_normalization(con_n_0);
+    nmtst_assert_connection_verifies_without_normalization(con_n_e);
+    nmtst_assert_connection_verifies_without_normalization(con_n_s);
+
+    /* randomly compare some pairs that we created. They must all be equal,
+     * after accounting for normalization. */
+    for (i = 0; i < 10; i++) {
+        NMConnection *cons[] = {con_x_0, con_x_s, con_x_e, con_n_0, con_n_s, con_n_e};
+        guint         idx_a  = (nmtst_get_rand_uint32() % G_N_ELEMENTS(cons));
+        guint         idx_b  = (nmtst_get_rand_uint32() % G_N_ELEMENTS(cons));
+        gboolean      normalize_a, normalize_b;
+
+        if (idx_a <= 2 && idx_b <= 2) {
+            normalize_a = nmtst_get_rand_bool();
+            normalize_b = normalize_a;
+        } else if (idx_a > 2 && idx_b > 2) {
+            normalize_a = nmtst_get_rand_bool();
+            normalize_b = nmtst_get_rand_bool();
+        } else {
+            normalize_a = (idx_a <= 2) ? TRUE : nmtst_get_rand_bool();
+            normalize_b = (idx_b <= 2) ? TRUE : nmtst_get_rand_bool();
+        }
+        nmtst_assert_connection_equals(cons[idx_a], normalize_a, cons[idx_b], normalize_b);
+    }
+
+    return (normalize) ? g_steal_pointer(&con_x_0) : g_steal_pointer(&con_n_0);
 }
 
 /*****************************************************************************/
 
 static char *
-_create_random_ipaddr (int addr_family, gboolean as_service)
+_create_random_ipaddr(int addr_family, gboolean as_service)
 {
-	char delimiter = as_service ? ':' : '/';
-	int num;
-
-	if (addr_family == AF_UNSPEC)
-		addr_family = nmtst_rand_select (AF_INET, AF_INET6);
-
-	g_assert (NM_IN_SET (addr_family, AF_INET, AF_INET6));
-
-	if (as_service)
-		num = (nmtst_get_rand_uint32 () % 1000) + 30000;
-	else
-		num = addr_family == AF_INET ? 32 : 128;
-
-	if (addr_family == AF_INET)
-		return g_strdup_printf ("192.168.%u.%u%c%d", nmtst_get_rand_uint32 () % 256, nmtst_get_rand_uint32 () % 256, delimiter, num);
-	else
-		return g_strdup_printf ("a:b:c::%02x:%02x%c%d", nmtst_get_rand_uint32 () % 256, nmtst_get_rand_uint32 () % 256, delimiter, num);
+    char delimiter = as_service ? ':' : '/';
+    int  num;
+
+    if (addr_family == AF_UNSPEC)
+        addr_family = nmtst_rand_select(AF_INET, AF_INET6);
+
+    g_assert(NM_IN_SET(addr_family, AF_INET, AF_INET6));
+
+    if (as_service)
+        num = (nmtst_get_rand_uint32() % 1000) + 30000;
+    else
+        num = addr_family == AF_INET ? 32 : 128;
+
+    if (addr_family == AF_INET)
+        return g_strdup_printf("192.168.%u.%u%c%d",
+                               nmtst_get_rand_uint32() % 256,
+                               nmtst_get_rand_uint32() % 256,
+                               delimiter,
+                               num);
+    else
+        return g_strdup_printf("a:b:c::%02x:%02x%c%d",
+                               nmtst_get_rand_uint32() % 256,
+                               nmtst_get_rand_uint32() % 256,
+                               delimiter,
+                               num);
 }
 
 /*****************************************************************************/
 
 static void
-compare_blob_data (const char *test,
-                   const char *key_path,
-                   GBytes *key)
+compare_blob_data(const char *test, const char *key_path, GBytes *key)
 {
-	gs_free char *contents = NULL;
-	gsize len = 0;
-	GError *error = NULL;
-	gboolean success;
+    gs_free char *contents = NULL;
+    gsize         len      = 0;
+    GError *      error    = NULL;
+    gboolean      success;
 
-	g_assert (key && g_bytes_get_size (key) > 0);
+    g_assert(key && g_bytes_get_size(key) > 0);
 
-	success = g_file_get_contents (key_path, &contents, &len, &error);
-	nmtst_assert_success (success, error);
+    success = g_file_get_contents(key_path, &contents, &len, &error);
+    nmtst_assert_success(success, error);
 
-	g_assert_cmpmem (contents, len, g_bytes_get_data (key, NULL), g_bytes_get_size (key));
+    g_assert_cmpmem(contents, len, g_bytes_get_data(key, NULL), g_bytes_get_size(key));
 }
 
 static void
-check_scheme_path (GBytes *value, const char *path)
+check_scheme_path(GBytes *value, const char *path)
 {
-	const guint8 *p;
-	gsize l;
-
-	g_assert (value);
-
-	p = g_bytes_get_data (value, &l);
-	g_assert_cmpint (l, ==, strlen (path) + NM_STRLEN (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH) + 1);
-	g_assert (memcmp (p, NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH, strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH)) == 0);
-	p += strlen (NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
-	g_assert (memcmp (p, path, strlen (path)) == 0);
-	p += strlen (path);
-	g_assert (*p == '\0');
+    const guint8 *p;
+    gsize         l;
+
+    g_assert(value);
+
+    p = g_bytes_get_data(value, &l);
+    g_assert_cmpint(l, ==, strlen(path) + NM_STRLEN(NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH) + 1);
+    g_assert(memcmp(p,
+                    NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH,
+                    strlen(NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH))
+             == 0);
+    p += strlen(NM_SETTING_802_1X_CERT_SCHEME_PREFIX_PATH);
+    g_assert(memcmp(p, path, strlen(path)) == 0);
+    p += strlen(path);
+    g_assert(*p == '\0');
 }
 
 static void
-test_private_key_import (const char *path,
-                         const char *password,
-                         NMSetting8021xCKScheme scheme)
+test_private_key_import(const char *path, const char *password, NMSetting8021xCKScheme scheme)
 {
-	NMSetting8021x *s_8021x;
-	gboolean success;
-	NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	NMSetting8021xCKFormat tmp_fmt;
-	GError *error = NULL;
-	GBytes *tmp_key = NULL, *client_cert = NULL;
-	const char *pw;
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	g_assert (s_8021x);
-
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             path,
-	                                             password,
-	                                             scheme,
-	                                             &format,
-	                                             &error);
-	nmtst_assert_success (success, error);
-	g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-	tmp_fmt = nm_setting_802_1x_get_private_key_format (s_8021x);
-	g_assert (tmp_fmt == format);
-
-	/* Make sure the password is what we expect */
-	pw = nm_setting_802_1x_get_private_key_password (s_8021x);
-	g_assert (pw != NULL);
-	g_assert_cmpstr (pw, ==, password);
-
-	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
-		tmp_key = nm_setting_802_1x_get_private_key_blob (s_8021x);
-		compare_blob_data ("private-key-import", path, tmp_key);
-	} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
-		g_object_get (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL);
-		check_scheme_path (tmp_key, path);
-		g_bytes_unref (tmp_key);
-	} else
-		g_assert_not_reached ();
-
-	/* If it's PKCS#12 ensure the client cert is the same value */
-	if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) {
-		g_object_get (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL);
-		g_assert (tmp_key);
-
-		g_object_get (s_8021x, NM_SETTING_802_1X_CLIENT_CERT, &client_cert, NULL);
-		g_assert (client_cert);
-
-		/* make sure they are the same */
-		g_assert (g_bytes_equal (tmp_key, client_cert));
-
-		g_bytes_unref (tmp_key);
-		g_bytes_unref (client_cert);
-	}
-
-	g_object_unref (s_8021x);
+    NMSetting8021x *       s_8021x;
+    gboolean               success;
+    NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    NMSetting8021xCKFormat tmp_fmt;
+    GError *               error   = NULL;
+    GBytes *               tmp_key = NULL, *client_cert = NULL;
+    const char *           pw;
+
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    g_assert(s_8021x);
+
+    success = nm_setting_802_1x_set_private_key(s_8021x, path, password, scheme, &format, &error);
+    nmtst_assert_success(success, error);
+    g_assert(format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+    tmp_fmt = nm_setting_802_1x_get_private_key_format(s_8021x);
+    g_assert(tmp_fmt == format);
+
+    /* Make sure the password is what we expect */
+    pw = nm_setting_802_1x_get_private_key_password(s_8021x);
+    g_assert(pw != NULL);
+    g_assert_cmpstr(pw, ==, password);
+
+    if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+        tmp_key = nm_setting_802_1x_get_private_key_blob(s_8021x);
+        compare_blob_data("private-key-import", path, tmp_key);
+    } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
+        g_object_get(s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL);
+        check_scheme_path(tmp_key, path);
+        g_bytes_unref(tmp_key);
+    } else
+        g_assert_not_reached();
+
+    /* If it's PKCS#12 ensure the client cert is the same value */
+    if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) {
+        g_object_get(s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL);
+        g_assert(tmp_key);
+
+        g_object_get(s_8021x, NM_SETTING_802_1X_CLIENT_CERT, &client_cert, NULL);
+        g_assert(client_cert);
+
+        /* make sure they are the same */
+        g_assert(g_bytes_equal(tmp_key, client_cert));
+
+        g_bytes_unref(tmp_key);
+        g_bytes_unref(client_cert);
+    }
+
+    g_object_unref(s_8021x);
 }
 
 static void
-test_phase2_private_key_import (const char *path,
-                                const char *password,
-                                NMSetting8021xCKScheme scheme)
+test_phase2_private_key_import(const char *           path,
+                               const char *           password,
+                               NMSetting8021xCKScheme scheme)
 {
-	NMSetting8021x *s_8021x;
-	gboolean success;
-	NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	NMSetting8021xCKFormat tmp_fmt;
-	GError *error = NULL;
-	GBytes *tmp_key = NULL, *client_cert = NULL;
-	const char *pw;
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	g_assert (s_8021x);
-
-	success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
-	                                                    path,
-	                                                    password,
-	                                                    scheme,
-	                                                    &format,
-	                                                    &error);
-	nmtst_assert_success (success, error);
-	g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-	tmp_fmt = nm_setting_802_1x_get_phase2_private_key_format (s_8021x);
-	g_assert (tmp_fmt == format);
-
-	/* Make sure the password is what we expect */
-	pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
-	g_assert (pw);
-	g_assert_cmpstr (pw, ==, password);
-
-	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
-		tmp_key = nm_setting_802_1x_get_phase2_private_key_blob (s_8021x);
-		compare_blob_data ("phase2-private-key-import", path, tmp_key);
-	} else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
-		g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL);
-		check_scheme_path (tmp_key, path);
-		g_bytes_unref (tmp_key);
-	} else
-		g_assert_not_reached ();
-
-	/* If it's PKCS#12 ensure the client cert is the same value */
-	if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) {
-		g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL);
-		g_assert (tmp_key);
-
-		g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, &client_cert, NULL);
-		g_assert (client_cert);
-
-		/* make sure they are the same */
-		g_assert (g_bytes_equal (tmp_key, client_cert));
-
-		g_bytes_unref (tmp_key);
-		g_bytes_unref (client_cert);
-	}
-
-	g_object_unref (s_8021x);
+    NMSetting8021x *       s_8021x;
+    gboolean               success;
+    NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    NMSetting8021xCKFormat tmp_fmt;
+    GError *               error   = NULL;
+    GBytes *               tmp_key = NULL, *client_cert = NULL;
+    const char *           pw;
+
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    g_assert(s_8021x);
+
+    success =
+        nm_setting_802_1x_set_phase2_private_key(s_8021x, path, password, scheme, &format, &error);
+    nmtst_assert_success(success, error);
+    g_assert(format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+    tmp_fmt = nm_setting_802_1x_get_phase2_private_key_format(s_8021x);
+    g_assert(tmp_fmt == format);
+
+    /* Make sure the password is what we expect */
+    pw = nm_setting_802_1x_get_phase2_private_key_password(s_8021x);
+    g_assert(pw);
+    g_assert_cmpstr(pw, ==, password);
+
+    if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
+        tmp_key = nm_setting_802_1x_get_phase2_private_key_blob(s_8021x);
+        compare_blob_data("phase2-private-key-import", path, tmp_key);
+    } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
+        g_object_get(s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL);
+        check_scheme_path(tmp_key, path);
+        g_bytes_unref(tmp_key);
+    } else
+        g_assert_not_reached();
+
+    /* If it's PKCS#12 ensure the client cert is the same value */
+    if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) {
+        g_object_get(s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL);
+        g_assert(tmp_key);
+
+        g_object_get(s_8021x, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, &client_cert, NULL);
+        g_assert(client_cert);
+
+        /* make sure they are the same */
+        g_assert(g_bytes_equal(tmp_key, client_cert));
+
+        g_bytes_unref(tmp_key);
+        g_bytes_unref(client_cert);
+    }
+
+    g_object_unref(s_8021x);
 }
 
 static void
-test_wrong_password_keeps_data (const char *path, const char *password)
+test_wrong_password_keeps_data(const char *path, const char *password)
 {
-	NMSetting8021x *s_8021x;
-	gboolean success;
-	NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	GError *error = NULL;
-	const char *pw;
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	g_assert (s_8021x);
-
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             path,
-	                                             password,
-	                                             NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                             &format,
-	                                             &error);
-	nmtst_assert_success (success, error);
-	g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-
-	/* Now try to set it to something that's not a certificate */
-	format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             "Makefile.am",
-	                                             password,
-	                                             NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                             &format,
-	                                             &error);
-	nmtst_assert_no_success (success, error);
-	g_assert (format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-	g_clear_error (&error);
-
-	/* Make sure the password hasn't changed */
-	pw = nm_setting_802_1x_get_private_key_password (s_8021x);
-	g_assert (pw);
-	g_assert_cmpstr (pw, ==, password);
-
-	g_object_unref (s_8021x);
+    NMSetting8021x *       s_8021x;
+    gboolean               success;
+    NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    GError *               error  = NULL;
+    const char *           pw;
+
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    g_assert(s_8021x);
+
+    success = nm_setting_802_1x_set_private_key(s_8021x,
+                                                path,
+                                                password,
+                                                NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                &format,
+                                                &error);
+    nmtst_assert_success(success, error);
+    g_assert(format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+
+    /* Now try to set it to something that's not a certificate */
+    format  = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    success = nm_setting_802_1x_set_private_key(s_8021x,
+                                                "Makefile.am",
+                                                password,
+                                                NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                &format,
+                                                &error);
+    nmtst_assert_no_success(success, error);
+    g_assert(format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+    g_clear_error(&error);
+
+    /* Make sure the password hasn't changed */
+    pw = nm_setting_802_1x_get_private_key_password(s_8021x);
+    g_assert(pw);
+    g_assert_cmpstr(pw, ==, password);
+
+    g_object_unref(s_8021x);
 }
 
 static void
-test_clear_private_key (const char *path, const char *password)
+test_clear_private_key(const char *path, const char *password)
 {
-	NMSetting8021x *s_8021x;
-	gboolean success;
-	NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	GError *error = NULL;
-	const char *pw;
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	g_assert (s_8021x);
-
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             path,
-	                                             password,
-	                                             NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                             &format,
-	                                             &error);
-	nmtst_assert_success (success, error);
-	g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-
-	/* Make sure the password is what we expect */
-	pw = nm_setting_802_1x_get_private_key_password (s_8021x);
-	g_assert (pw);
-	g_assert_cmpstr (pw, ==, password);
-
-	/* Now clear it */
-	success = nm_setting_802_1x_set_private_key (s_8021x,
-	                                             NULL,
-	                                             NULL,
-	                                             NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                             NULL,
-	                                             &error);
-	nmtst_assert_success (success, error);
-
-	/* Ensure the password is also now clear */
-	g_assert (!nm_setting_802_1x_get_private_key_password (s_8021x));
-
-	g_object_unref (s_8021x);
+    NMSetting8021x *       s_8021x;
+    gboolean               success;
+    NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    GError *               error  = NULL;
+    const char *           pw;
+
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    g_assert(s_8021x);
+
+    success = nm_setting_802_1x_set_private_key(s_8021x,
+                                                path,
+                                                password,
+                                                NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                &format,
+                                                &error);
+    nmtst_assert_success(success, error);
+    g_assert(format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+
+    /* Make sure the password is what we expect */
+    pw = nm_setting_802_1x_get_private_key_password(s_8021x);
+    g_assert(pw);
+    g_assert_cmpstr(pw, ==, password);
+
+    /* Now clear it */
+    success = nm_setting_802_1x_set_private_key(s_8021x,
+                                                NULL,
+                                                NULL,
+                                                NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                NULL,
+                                                &error);
+    nmtst_assert_success(success, error);
+
+    /* Ensure the password is also now clear */
+    g_assert(!nm_setting_802_1x_get_private_key_password(s_8021x));
+
+    g_object_unref(s_8021x);
 }
 
 static void
-test_wrong_phase2_password_keeps_data (const char *path, const char *password)
+test_wrong_phase2_password_keeps_data(const char *path, const char *password)
 {
-	NMSetting8021x *s_8021x;
-	gboolean success;
-	NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	GError *error = NULL;
-	const char *pw;
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	g_assert (s_8021x);
-
-	success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
-	                                                    path,
-	                                                    password,
-	                                                    NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                                    &format,
-	                                                    &error);
-	nmtst_assert_success (success, error);
-	g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-
-	/* Now try to set it to something that's not a certificate */
-	format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
-	                                                    "Makefile.am",
-	                                                    password,
-	                                                    NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                                    &format,
-	                                                    &error);
-	nmtst_assert_no_success (success, error);
-	g_assert (format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-	g_clear_error (&error);
-
-	/* Make sure the password hasn't changed */
-	pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
-	g_assert (pw);
-	g_assert_cmpstr (pw, ==, password);
-
-	g_object_unref (s_8021x);
+    NMSetting8021x *       s_8021x;
+    gboolean               success;
+    NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    GError *               error  = NULL;
+    const char *           pw;
+
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    g_assert(s_8021x);
+
+    success = nm_setting_802_1x_set_phase2_private_key(s_8021x,
+                                                       path,
+                                                       password,
+                                                       NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                       &format,
+                                                       &error);
+    nmtst_assert_success(success, error);
+    g_assert(format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+
+    /* Now try to set it to something that's not a certificate */
+    format  = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    success = nm_setting_802_1x_set_phase2_private_key(s_8021x,
+                                                       "Makefile.am",
+                                                       password,
+                                                       NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                       &format,
+                                                       &error);
+    nmtst_assert_no_success(success, error);
+    g_assert(format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+    g_clear_error(&error);
+
+    /* Make sure the password hasn't changed */
+    pw = nm_setting_802_1x_get_phase2_private_key_password(s_8021x);
+    g_assert(pw);
+    g_assert_cmpstr(pw, ==, password);
+
+    g_object_unref(s_8021x);
 }
 
 static void
-test_clear_phase2_private_key (const char *path, const char *password)
+test_clear_phase2_private_key(const char *path, const char *password)
 {
-	NMSetting8021x *s_8021x;
-	gboolean success;
-	NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
-	GError *error = NULL;
-	const char *pw;
-
-	s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
-	g_assert (s_8021x);
-
-	success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
-	                                                    path,
-	                                                    password,
-	                                                    NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                                    &format,
-	                                                    &error);
-	nmtst_assert_success (success, error);
-	g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
-
-	/* Make sure the password is what we expect */
-	pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
-	g_assert (pw);
-	g_assert_cmpstr (pw, ==, password);
-
-	/* Now clear it */
-	success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
-	                                                    NULL,
-	                                                    NULL,
-	                                                    NM_SETTING_802_1X_CK_SCHEME_BLOB,
-	                                                    NULL,
-	                                                    &error);
-	nmtst_assert_success (success, error);
-
-	/* Ensure the password is also now clear */
-	g_assert (!nm_setting_802_1x_get_phase2_private_key_password (s_8021x));
-
-	g_object_unref (s_8021x);
+    NMSetting8021x *       s_8021x;
+    gboolean               success;
+    NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
+    GError *               error  = NULL;
+    const char *           pw;
+
+    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
+    g_assert(s_8021x);
+
+    success = nm_setting_802_1x_set_phase2_private_key(s_8021x,
+                                                       path,
+                                                       password,
+                                                       NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                       &format,
+                                                       &error);
+    nmtst_assert_success(success, error);
+    g_assert(format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN);
+
+    /* Make sure the password is what we expect */
+    pw = nm_setting_802_1x_get_phase2_private_key_password(s_8021x);
+    g_assert(pw);
+    g_assert_cmpstr(pw, ==, password);
+
+    /* Now clear it */
+    success = nm_setting_802_1x_set_phase2_private_key(s_8021x,
+                                                       NULL,
+                                                       NULL,
+                                                       NM_SETTING_802_1X_CK_SCHEME_BLOB,
+                                                       NULL,
+                                                       &error);
+    nmtst_assert_success(success, error);
+
+    /* Ensure the password is also now clear */
+    g_assert(!nm_setting_802_1x_get_phase2_private_key_password(s_8021x));
+
+    g_object_unref(s_8021x);
 }
 
 static void
-test_8021x (gconstpointer test_data)
+test_8021x(gconstpointer test_data)
 {
-	char **parts, *path, *password;
+    char **parts, *path, *password;
 
-	parts = g_strsplit ((const char *) test_data, ", ", -1);
-	g_assert_cmpint (g_strv_length (parts), ==, 2);
+    parts = g_strsplit((const char *) test_data, ", ", -1);
+    g_assert_cmpint(g_strv_length(parts), ==, 2);
 
-	path = g_build_filename (TEST_CERT_DIR, parts[0], NULL);
-	password = parts[1];
+    path     = g_build_filename(TEST_CERT_DIR, parts[0], NULL);
+    password = parts[1];
 
-	/* Test phase1 and phase2 path scheme */
-	test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
-	test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
+    /* Test phase1 and phase2 path scheme */
+    test_private_key_import(path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
+    test_phase2_private_key_import(path, password, NM_SETTING_802_1X_CK_SCHEME_PATH);
 
-	/* Test phase1 and phase2 blob scheme */
-	test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
-	test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    /* Test phase1 and phase2 blob scheme */
+    test_private_key_import(path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
+    test_phase2_private_key_import(path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB);
 
-	/* Test that using a wrong password does not change existing data */
-	test_wrong_password_keeps_data (path, password);
-	test_wrong_phase2_password_keeps_data (path, password);
+    /* Test that using a wrong password does not change existing data */
+    test_wrong_password_keeps_data(path, password);
+    test_wrong_phase2_password_keeps_data(path, password);
 
-	/* Test clearing the private key */
-	test_clear_private_key (path, password);
-	test_clear_phase2_private_key (path, password);
+    /* Test clearing the private key */
+    test_clear_private_key(path, password);
+    test_clear_phase2_private_key(path, password);
 
-	g_free (path);
-	g_strfreev (parts);
+    g_free(path);
+    g_strfreev(parts);
 }
 
 /*****************************************************************************/
 
 static void
-create_bond_connection (NMConnection **con, NMSettingBond **s_bond)
+create_bond_connection(NMConnection **con, NMSettingBond **s_bond)
 {
-	NMSettingConnection *s_con;
+    NMSettingConnection *s_con;
 
-	g_assert (con);
-	g_assert (s_bond);
+    g_assert(con);
+    g_assert(s_bond);
 
-	*con = nmtst_create_minimal_connection ("bond",
-	                                        NULL,
-	                                        NM_SETTING_BOND_SETTING_NAME,
-	                                        &s_con);
+    *con = nmtst_create_minimal_connection("bond", NULL, NM_SETTING_BOND_SETTING_NAME, &s_con);
 
-	g_object_set (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "bond0", NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "bond0", NULL);
 
-	*s_bond = (NMSettingBond *) nm_setting_bond_new ();
-	g_assert (*s_bond);
+    *s_bond = (NMSettingBond *) nm_setting_bond_new();
+    g_assert(*s_bond);
 
-	nm_connection_add_setting (*con, NM_SETTING (*s_bond));
+    nm_connection_add_setting(*con, NM_SETTING(*s_bond));
 }
 
-#define test_verify_options(exp, ...) \
-	_test_verify_options (exp, NM_MAKE_STRV (__VA_ARGS__))
+#define test_verify_options(exp, ...) _test_verify_options(exp, NM_MAKE_STRV(__VA_ARGS__))
 
 static void
-_test_verify_options (gboolean expected_result,
-                      const char *const *options)
+_test_verify_options(gboolean expected_result, const char *const *options)
 {
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingBond *s_bond;
-	const char *const *option;
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingBond *               s_bond;
+    const char *const *           option;
 
-	g_assert (NM_PTRARRAY_LEN (options) % 2 == 0);
+    g_assert(NM_PTRARRAY_LEN(options) % 2 == 0);
 
-	create_bond_connection (&con, &s_bond);
+    create_bond_connection(&con, &s_bond);
 
-	for (option = options; option[0]; option += 2)
-		g_assert (nm_setting_bond_add_option (s_bond, option[0], option[1]));
+    for (option = options; option[0]; option += 2)
+        g_assert(nm_setting_bond_add_option(s_bond, option[0], option[1]));
 
-	if (expected_result) {
-		nmtst_assert_connection_verifies_and_normalizable (con);
-	} else {
-		nmtst_assert_connection_unnormalizable (con,
-		                                        NM_CONNECTION_ERROR,
-		                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	}
+    if (expected_result) {
+        nmtst_assert_connection_verifies_and_normalizable(con);
+    } else {
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    }
 }
 
 static void
-test_bond_verify (void)
+test_bond_verify(void)
 {
-	test_verify_options (TRUE,
-	                     "mode", "3",
-	                     "arp_interval", "0");
-	test_verify_options (FALSE,
-	                     /* arp_interval not supported in balance-alb mode */
-	                     "mode", "balance-alb",
-	                     "arp_interval", "1",
-	                     "arp_ip_target", "1.2.3.4");
-	test_verify_options (FALSE,
-	                     /* arp_ip_target requires arp_interval */
-	                     "mode", "balance-rr",
-	                     "arp_ip_target", "1.2.3.4");
-	test_verify_options (TRUE,
-	                     "mode", "balance-rr",
-	                     "arp_interval", "1",
-	                     "arp_ip_target", "1.2.3.4");
-	test_verify_options (FALSE,
-	                     /* num_grat_arp, num_unsol_na cannot be different */
-	                     "mode", "balance-rr",
-	                     "num_grat_arp", "3",
-	                     "num_unsol_na", "4");
-	test_verify_options (TRUE,
-	                     "mode", "balance-rr",
-	                     "num_grat_arp", "5",
-	                     "num_unsol_na", "5");
-	test_verify_options (TRUE,
-	                     "mode", "active-backup",
-	                     "primary", "eth0");
-	test_verify_options (FALSE,
-	                     /* primary requires mode=active-backup */
-	                     "mode", "802.3ad",
-	                     "primary", "eth0");
-	test_verify_options (TRUE,
-	                     "mode", "802.3ad",
-	                     "lacp_rate", "fast");
-	test_verify_options (FALSE,
-	                     /* lacp_rate=fast requires mode=802.3ad */
-	                     "mode", "balance-rr",
-	                     "lacp_rate", "fast");
-	test_verify_options (TRUE,
-	                     "mode", "802.3ad",
-	                     "ad_actor_system", "ae:00:11:33:44:55");
-	test_verify_options (TRUE,
-	                     "mode", "0",
-	                     "miimon", "0",
-	                     "updelay", "0",
-	                     "downdelay", "0");
-	test_verify_options (TRUE,
-	                     "mode", "0",
-	                     "downdelay", "0",
-	                     "updelay", "0");
-	test_verify_options (TRUE,
-	                     "mode", "0",
-	                     "miimon", "100",
-	                     "arp_ip_target", "1.1.1.1",
-	                     "arp_interval", "200");
-	test_verify_options (TRUE,
-	                     "mode", "0",
-	                     "downdelay", "100",
-	                     "arp_ip_target", "1.1.1.1",
-	                     "arp_interval", "200");
+    test_verify_options(TRUE, "mode", "3", "arp_interval", "0");
+    test_verify_options(FALSE,
+                        /* arp_interval not supported in balance-alb mode */
+                        "mode",
+                        "balance-alb",
+                        "arp_interval",
+                        "1",
+                        "arp_ip_target",
+                        "1.2.3.4");
+    test_verify_options(FALSE,
+                        /* arp_ip_target requires arp_interval */
+                        "mode",
+                        "balance-rr",
+                        "arp_ip_target",
+                        "1.2.3.4");
+    test_verify_options(TRUE,
+                        "mode",
+                        "balance-rr",
+                        "arp_interval",
+                        "1",
+                        "arp_ip_target",
+                        "1.2.3.4");
+    test_verify_options(FALSE,
+                        /* num_grat_arp, num_unsol_na cannot be different */
+                        "mode",
+                        "balance-rr",
+                        "num_grat_arp",
+                        "3",
+                        "num_unsol_na",
+                        "4");
+    test_verify_options(TRUE, "mode", "balance-rr", "num_grat_arp", "5", "num_unsol_na", "5");
+    test_verify_options(TRUE, "mode", "active-backup", "primary", "eth0");
+    test_verify_options(FALSE,
+                        /* primary requires mode=active-backup */
+                        "mode",
+                        "802.3ad",
+                        "primary",
+                        "eth0");
+    test_verify_options(TRUE, "mode", "802.3ad", "lacp_rate", "fast");
+    test_verify_options(FALSE,
+                        /* lacp_rate=fast requires mode=802.3ad */
+                        "mode",
+                        "balance-rr",
+                        "lacp_rate",
+                        "fast");
+    test_verify_options(TRUE, "mode", "802.3ad", "ad_actor_system", "ae:00:11:33:44:55");
+    test_verify_options(TRUE, "mode", "0", "miimon", "0", "updelay", "0", "downdelay", "0");
+    test_verify_options(TRUE, "mode", "0", "downdelay", "0", "updelay", "0");
+    test_verify_options(TRUE,
+                        "mode",
+                        "0",
+                        "miimon",
+                        "100",
+                        "arp_ip_target",
+                        "1.1.1.1",
+                        "arp_interval",
+                        "200");
+    test_verify_options(TRUE,
+                        "mode",
+                        "0",
+                        "downdelay",
+                        "100",
+                        "arp_ip_target",
+                        "1.1.1.1",
+                        "arp_interval",
+                        "200");
 }
 
 static void
-test_bond_compare_options (gboolean exp_res, const char **opts1, const char **opts2)
+test_bond_compare_options(gboolean exp_res, const char **opts1, const char **opts2)
 {
-	gs_unref_object NMSettingBond *s_bond1 = NULL, *s_bond2 = NULL;
-	const char **p;
+    gs_unref_object NMSettingBond *s_bond1 = NULL, *s_bond2 = NULL;
+    const char **                  p;
 
-	s_bond1 = (NMSettingBond *) nm_setting_bond_new ();
-	g_assert (s_bond1);
-	s_bond2 = (NMSettingBond *) nm_setting_bond_new ();
-	g_assert (s_bond2);
+    s_bond1 = (NMSettingBond *) nm_setting_bond_new();
+    g_assert(s_bond1);
+    s_bond2 = (NMSettingBond *) nm_setting_bond_new();
+    g_assert(s_bond2);
 
-	for (p = opts1; p[0] && p[1]; p += 2)
-		g_assert (nm_setting_bond_add_option (s_bond1, p[0], p[1]));
+    for (p = opts1; p[0] && p[1]; p += 2)
+        g_assert(nm_setting_bond_add_option(s_bond1, p[0], p[1]));
 
-	for (p = opts2; p[0] && p[1]; p += 2)
-		g_assert (nm_setting_bond_add_option (s_bond2, p[0], p[1]));
+    for (p = opts2; p[0] && p[1]; p += 2)
+        g_assert(nm_setting_bond_add_option(s_bond2, p[0], p[1]));
 
-	g_assert_cmpint (nm_setting_compare ((NMSetting *) s_bond1,
-	                                     (NMSetting *) s_bond2,
-	                                     NM_SETTING_COMPARE_FLAG_EXACT),
-	                 ==,
-	                 exp_res);
+    g_assert_cmpint(nm_setting_compare((NMSetting *) s_bond1,
+                                       (NMSetting *) s_bond2,
+                                       NM_SETTING_COMPARE_FLAG_EXACT),
+                    ==,
+                    exp_res);
 }
 
 static void
-test_bond_compare (void)
+test_bond_compare(void)
 {
-	test_bond_compare_options (TRUE,
-	                           ((const char *[]){ "mode", "balance-rr", "miimon", "1", NULL }),
-	                           ((const char *[]){ "mode", "balance-rr", "miimon", "1", NULL }));
-	test_bond_compare_options (FALSE,
-	                           ((const char *[]){ "mode", "balance-rr", "miimon", "1", NULL }),
-	                           ((const char *[]){ "mode", "balance-rr", "miimon", "2", NULL }));
-
-	test_bond_compare_options (FALSE,
-	                           ((const char *[]){ "miimon", "1", NULL }),
-	                           ((const char *[]){ "miimon", "1", "updelay", "0", NULL }));
-
-	test_bond_compare_options (FALSE,
-	                           ((const char *[]){ "num_grat_arp", "2", NULL }),
-	                           ((const char *[]){ "num_grat_arp", "1", NULL }));
-	test_bond_compare_options (FALSE,
-	                           ((const char *[]){ "num_grat_arp", "3", NULL }),
-	                           ((const char *[]){ "num_unsol_na", "3", NULL }));
-	test_bond_compare_options (FALSE,
-	                           ((const char *[]){ "num_grat_arp", "4", NULL }),
-	                           ((const char *[]){ "num_unsol_na", "4", "num_grat_arp", "4", NULL }));
-
-	test_bond_compare_options (FALSE,
-	                           ((const char *[]){ "mode", "balance-rr", "miimon", "100", NULL }),
-	                           ((const char *[]){ "mode", "balance-rr", NULL }));
+    test_bond_compare_options(TRUE,
+                              ((const char *[]){"mode", "balance-rr", "miimon", "1", NULL}),
+                              ((const char *[]){"mode", "balance-rr", "miimon", "1", NULL}));
+    test_bond_compare_options(FALSE,
+                              ((const char *[]){"mode", "balance-rr", "miimon", "1", NULL}),
+                              ((const char *[]){"mode", "balance-rr", "miimon", "2", NULL}));
+
+    test_bond_compare_options(FALSE,
+                              ((const char *[]){"miimon", "1", NULL}),
+                              ((const char *[]){"miimon", "1", "updelay", "0", NULL}));
+
+    test_bond_compare_options(FALSE,
+                              ((const char *[]){"num_grat_arp", "2", NULL}),
+                              ((const char *[]){"num_grat_arp", "1", NULL}));
+    test_bond_compare_options(FALSE,
+                              ((const char *[]){"num_grat_arp", "3", NULL}),
+                              ((const char *[]){"num_unsol_na", "3", NULL}));
+    test_bond_compare_options(FALSE,
+                              ((const char *[]){"num_grat_arp", "4", NULL}),
+                              ((const char *[]){"num_unsol_na", "4", "num_grat_arp", "4", NULL}));
+
+    test_bond_compare_options(FALSE,
+                              ((const char *[]){"mode", "balance-rr", "miimon", "100", NULL}),
+                              ((const char *[]){"mode", "balance-rr", NULL}));
 }
 
 static void
-test_bond_normalize_options (const char **opts1, const char **opts2)
+test_bond_normalize_options(const char **opts1, const char **opts2)
 {
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingBond *s_bond;
-	GError *error = NULL;
-	gboolean success;
-	const char **p;
-	int num = 0;
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingBond *               s_bond;
+    GError *                      error = NULL;
+    gboolean                      success;
+    const char **                 p;
+    int                           num = 0;
 
-	create_bond_connection (&con, &s_bond);
+    create_bond_connection(&con, &s_bond);
 
-	for (p = opts1; p[0] && p[1]; p += 2)
-		g_assert (nm_setting_bond_add_option (s_bond, p[0], p[1]));
+    for (p = opts1; p[0] && p[1]; p += 2)
+        g_assert(nm_setting_bond_add_option(s_bond, p[0], p[1]));
 
-	nmtst_assert_connection_verifies_and_normalizable (con);
-	nmtst_connection_normalize (con);
-	success = nm_setting_verify ((NMSetting *) s_bond, con, &error);
-	nmtst_assert_success (success, error);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+    nmtst_connection_normalize(con);
+    success = nm_setting_verify((NMSetting *) s_bond, con, &error);
+    nmtst_assert_success(success, error);
 
-	for (p = opts2; p[0] && p[1]; p += 2) {
-		g_assert_cmpstr (nm_setting_bond_get_option_by_name (s_bond, p[0]), ==, p[1]);
-		num++;
-	}
+    for (p = opts2; p[0] && p[1]; p += 2) {
+        g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, p[0]), ==, p[1]);
+        num++;
+    }
 
-	g_assert_cmpint (num, ==, nm_setting_bond_get_num_options (s_bond));
+    g_assert_cmpint(num, ==, nm_setting_bond_get_num_options(s_bond));
 }
 
 static void
-test_bond_normalize (void)
+test_bond_normalize(void)
 {
-	test_bond_normalize_options (
-		((const char *[]){ "mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL }),
-		((const char *[]){ "mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL }));
-	test_bond_normalize_options (
-		((const char *[]){ "mode", "1", "miimon", "1", NULL }),
-		((const char *[]){ "mode", "active-backup", "miimon", "1", NULL }));
-	test_bond_normalize_options (
-		((const char *[]){ "mode", "balance-alb", "tlb_dynamic_lb", "1", NULL }),
-		((const char *[]){ "mode", "balance-alb", NULL }));
-	test_bond_normalize_options (
-		((const char *[]){ "mode", "balance-tlb", "tlb_dynamic_lb", "1", NULL }),
-		((const char *[]){ "mode", "balance-tlb", "tlb_dynamic_lb", "1", NULL }));
-	test_bond_normalize_options (
-		((const char *[]){ "mode", "balance-rr", "ad_actor_sys_prio", "4", "packets_per_slave", "3", NULL }),
-		((const char *[]){ "mode", "balance-rr", "packets_per_slave", "3", NULL }));
+    test_bond_normalize_options(
+        ((const char *[]){"mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL}),
+        ((const char *[]){"mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL}));
+    test_bond_normalize_options(((const char *[]){"mode", "1", "miimon", "1", NULL}),
+                                ((const char *[]){"mode", "active-backup", "miimon", "1", NULL}));
+    test_bond_normalize_options(
+        ((const char *[]){"mode", "balance-alb", "tlb_dynamic_lb", "1", NULL}),
+        ((const char *[]){"mode", "balance-alb", NULL}));
+    test_bond_normalize_options(
+        ((const char *[]){"mode", "balance-tlb", "tlb_dynamic_lb", "1", NULL}),
+        ((const char *[]){"mode", "balance-tlb", "tlb_dynamic_lb", "1", NULL}));
+    test_bond_normalize_options(
+        ((const char
+              *[]){"mode", "balance-rr", "ad_actor_sys_prio", "4", "packets_per_slave", "3", NULL}),
+        ((const char *[]){"mode", "balance-rr", "packets_per_slave", "3", NULL}));
 }
 
 /*****************************************************************************/
 
-#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \
-                       NM_SETTING_DCB_FLAG_ADVERTISE | \
-                       NM_SETTING_DCB_FLAG_WILLING)
+#define DCB_FLAGS_ALL \
+    (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE | NM_SETTING_DCB_FLAG_WILLING)
 
 static void
-test_dcb_flags_valid (void)
+test_dcb_flags_valid(void)
 {
-	gs_unref_object NMSettingDcb *s_dcb = NULL;
-	GError *error = NULL;
-	gboolean success;
-	guint i;
-
-	s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
-	g_assert (s_dcb);
-
-	g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, 0);
-	g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, 0);
-	g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, 0);
-	g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, 0);
-	g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, 0);
-
-	g_object_set (G_OBJECT (s_dcb),
-	              NM_SETTING_DCB_APP_FCOE_FLAGS, DCB_FLAGS_ALL,
-	              NM_SETTING_DCB_APP_ISCSI_FLAGS, DCB_FLAGS_ALL,
-	              NM_SETTING_DCB_APP_FIP_FLAGS, DCB_FLAGS_ALL,
-	              NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, DCB_FLAGS_ALL,
-	              NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, DCB_FLAGS_ALL,
-	              NULL);
-	/* Priority Group Bandwidth must total 100% */
-	for (i = 0; i < 7; i++)
-		nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, 12);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16);
-
-	success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, DCB_FLAGS_ALL);
-	g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, DCB_FLAGS_ALL);
-	g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, DCB_FLAGS_ALL);
-	g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, DCB_FLAGS_ALL);
-	g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, DCB_FLAGS_ALL);
+    gs_unref_object NMSettingDcb *s_dcb = NULL;
+    GError *                      error = NULL;
+    gboolean                      success;
+    guint                         i;
+
+    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
+    g_assert(s_dcb);
+
+    g_assert_cmpint(nm_setting_dcb_get_app_fcoe_flags(s_dcb), ==, 0);
+    g_assert_cmpint(nm_setting_dcb_get_app_iscsi_flags(s_dcb), ==, 0);
+    g_assert_cmpint(nm_setting_dcb_get_app_fip_flags(s_dcb), ==, 0);
+    g_assert_cmpint(nm_setting_dcb_get_priority_flow_control_flags(s_dcb), ==, 0);
+    g_assert_cmpint(nm_setting_dcb_get_priority_group_flags(s_dcb), ==, 0);
+
+    g_object_set(G_OBJECT(s_dcb),
+                 NM_SETTING_DCB_APP_FCOE_FLAGS,
+                 DCB_FLAGS_ALL,
+                 NM_SETTING_DCB_APP_ISCSI_FLAGS,
+                 DCB_FLAGS_ALL,
+                 NM_SETTING_DCB_APP_FIP_FLAGS,
+                 DCB_FLAGS_ALL,
+                 NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS,
+                 DCB_FLAGS_ALL,
+                 NM_SETTING_DCB_PRIORITY_GROUP_FLAGS,
+                 DCB_FLAGS_ALL,
+                 NULL);
+    /* Priority Group Bandwidth must total 100% */
+    for (i = 0; i < 7; i++)
+        nm_setting_dcb_set_priority_group_bandwidth(s_dcb, i, 12);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 7, 16);
+
+    success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    g_assert_cmpint(nm_setting_dcb_get_app_fcoe_flags(s_dcb), ==, DCB_FLAGS_ALL);
+    g_assert_cmpint(nm_setting_dcb_get_app_iscsi_flags(s_dcb), ==, DCB_FLAGS_ALL);
+    g_assert_cmpint(nm_setting_dcb_get_app_fip_flags(s_dcb), ==, DCB_FLAGS_ALL);
+    g_assert_cmpint(nm_setting_dcb_get_priority_flow_control_flags(s_dcb), ==, DCB_FLAGS_ALL);
+    g_assert_cmpint(nm_setting_dcb_get_priority_group_flags(s_dcb), ==, DCB_FLAGS_ALL);
 }
 
-#define TEST_FLAG(p, f, v) \
-{ \
-	/* GObject property min/max should ensure the property does not get set to \
-	 * the invalid value, so we ensure the value we just tried to set is 0 and \
-	 * that verify is successful since the property never got set. \
-	 */ \
-	g_object_set (G_OBJECT (s_dcb), p, v, NULL); \
-	g_assert_cmpint (f (s_dcb), ==, 0); \
-	success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
-	g_assert_no_error (error); \
-	g_assert (success); \
-}
+#define TEST_FLAG(p, f, v)                                                           \
+    {                                                                                \
+        /* GObject property min/max should ensure the property does not get set to \
+     * the invalid value, so we ensure the value we just tried to set is 0 and \
+     * that verify is successful since the property never got set. \
+     */ \
+        g_object_set(G_OBJECT(s_dcb), p, v, NULL);                                   \
+        g_assert_cmpint(f(s_dcb), ==, 0);                                            \
+        success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);                \
+        g_assert_no_error(error);                                                    \
+        g_assert(success);                                                           \
+    }
 
 static void
-test_dcb_flags_invalid (void)
+test_dcb_flags_invalid(void)
 {
-	gs_unref_object NMSettingDcb *s_dcb = NULL;
-	GError *error = NULL;
-	gboolean success;
-
-	s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
-	g_assert (s_dcb);
-
-	NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
-	TEST_FLAG (NM_SETTING_DCB_APP_FCOE_FLAGS, nm_setting_dcb_get_app_fcoe_flags, 0x332523);
-	g_test_assert_expected_messages ();
-
-	NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
-	TEST_FLAG (NM_SETTING_DCB_APP_ISCSI_FLAGS, nm_setting_dcb_get_app_iscsi_flags, 0xFF);
-	g_test_assert_expected_messages ();
-
-	NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
-	TEST_FLAG (NM_SETTING_DCB_APP_FIP_FLAGS, nm_setting_dcb_get_app_fip_flags, 0x1111);
-	g_test_assert_expected_messages ();
-
-	NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
-	TEST_FLAG (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, nm_setting_dcb_get_priority_flow_control_flags, G_MAXUINT32);
-	g_test_assert_expected_messages ();
-
-	NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
-	TEST_FLAG (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, nm_setting_dcb_get_priority_group_flags,
-	           (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE | NM_SETTING_DCB_FLAG_WILLING) + 1);
-	g_test_assert_expected_messages ();
+    gs_unref_object NMSettingDcb *s_dcb = NULL;
+    GError *                      error = NULL;
+    gboolean                      success;
+
+    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
+    g_assert(s_dcb);
+
+    NMTST_EXPECT("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+    TEST_FLAG(NM_SETTING_DCB_APP_FCOE_FLAGS, nm_setting_dcb_get_app_fcoe_flags, 0x332523);
+    g_test_assert_expected_messages();
+
+    NMTST_EXPECT("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+    TEST_FLAG(NM_SETTING_DCB_APP_ISCSI_FLAGS, nm_setting_dcb_get_app_iscsi_flags, 0xFF);
+    g_test_assert_expected_messages();
+
+    NMTST_EXPECT("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+    TEST_FLAG(NM_SETTING_DCB_APP_FIP_FLAGS, nm_setting_dcb_get_app_fip_flags, 0x1111);
+    g_test_assert_expected_messages();
+
+    NMTST_EXPECT("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+    TEST_FLAG(NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS,
+              nm_setting_dcb_get_priority_flow_control_flags,
+              G_MAXUINT32);
+    g_test_assert_expected_messages();
+
+    NMTST_EXPECT("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*");
+    TEST_FLAG(
+        NM_SETTING_DCB_PRIORITY_GROUP_FLAGS,
+        nm_setting_dcb_get_priority_group_flags,
+        (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE | NM_SETTING_DCB_FLAG_WILLING)
+            + 1);
+    g_test_assert_expected_messages();
 }
 
-#define TEST_APP_PRIORITY(lcprop, ucprop, v) \
-{ \
-	g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_FLAGS, NM_SETTING_DCB_FLAG_NONE, NULL); \
- \
-	g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, v, NULL); \
-	g_assert_cmpint (nm_setting_dcb_get_app_##lcprop##_priority (s_dcb), ==, v); \
- \
-	/* Assert that the setting is invalid while the app is disabled unless v is default */ \
-	success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
-	if (v >= 0) { \
-		g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY); \
-		g_assert (success == FALSE); \
-	} else { \
-		g_assert_no_error (error); \
-		g_assert (success); \
-	} \
-	g_clear_error (&error); \
- \
-	/* Set the enable flag and re-verify, this time it should be valid */ \
-	g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); \
-	success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
-	g_assert_no_error (error); \
-	g_assert (success); \
- \
-	g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, 0, NULL); \
-}
+#define TEST_APP_PRIORITY(lcprop, ucprop, v)                                                   \
+    {                                                                                          \
+        g_object_set(G_OBJECT(s_dcb),                                                          \
+                     NM_SETTING_DCB_APP_##ucprop##_FLAGS,                                      \
+                     NM_SETTING_DCB_FLAG_NONE,                                                 \
+                     NULL);                                                                    \
+                                                                                               \
+        g_object_set(G_OBJECT(s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, v, NULL);        \
+        g_assert_cmpint(nm_setting_dcb_get_app_##lcprop##_priority(s_dcb), ==, v);             \
+                                                                                               \
+        /* Assert that the setting is invalid while the app is disabled unless v is default */ \
+        success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);                          \
+        if (v >= 0) {                                                                          \
+            g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);  \
+            g_assert(success == FALSE);                                                        \
+        } else {                                                                               \
+            g_assert_no_error(error);                                                          \
+            g_assert(success);                                                                 \
+        }                                                                                      \
+        g_clear_error(&error);                                                                 \
+                                                                                               \
+        /* Set the enable flag and re-verify, this time it should be valid */                  \
+        g_object_set(G_OBJECT(s_dcb),                                                          \
+                     NM_SETTING_DCB_APP_##ucprop##_FLAGS,                                      \
+                     NM_SETTING_DCB_FLAG_ENABLE,                                               \
+                     NULL);                                                                    \
+        success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);                          \
+        g_assert_no_error(error);                                                              \
+        g_assert(success);                                                                     \
+                                                                                               \
+        g_object_set(G_OBJECT(s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, 0, NULL);        \
+    }
 
 static void
-test_dcb_app_priorities (void)
+test_dcb_app_priorities(void)
 {
-	gs_unref_object NMSettingDcb *s_dcb = NULL;
-	GError *error = NULL;
-	gboolean success;
+    gs_unref_object NMSettingDcb *s_dcb = NULL;
+    GError *                      error = NULL;
+    gboolean                      success;
 
-	s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
-	g_assert (s_dcb);
+    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
+    g_assert(s_dcb);
 
-	/* Defaults */
-	g_assert_cmpint (nm_setting_dcb_get_app_fcoe_priority (s_dcb), ==, -1);
-	g_assert_cmpint (nm_setting_dcb_get_app_iscsi_priority (s_dcb), ==, -1);
-	g_assert_cmpint (nm_setting_dcb_get_app_fip_priority (s_dcb), ==, -1);
+    /* Defaults */
+    g_assert_cmpint(nm_setting_dcb_get_app_fcoe_priority(s_dcb), ==, -1);
+    g_assert_cmpint(nm_setting_dcb_get_app_iscsi_priority(s_dcb), ==, -1);
+    g_assert_cmpint(nm_setting_dcb_get_app_fip_priority(s_dcb), ==, -1);
 
-	TEST_APP_PRIORITY (fcoe, FCOE, 6);
-	TEST_APP_PRIORITY (iscsi, ISCSI, 5);
-	TEST_APP_PRIORITY (fip, FIP, 4);
+    TEST_APP_PRIORITY(fcoe, FCOE, 6);
+    TEST_APP_PRIORITY(iscsi, ISCSI, 5);
+    TEST_APP_PRIORITY(fip, FIP, 4);
 
-	TEST_APP_PRIORITY (fcoe, FCOE, -1);
-	TEST_APP_PRIORITY (iscsi, ISCSI, -1);
-	TEST_APP_PRIORITY (fip, FIP, -1);
+    TEST_APP_PRIORITY(fcoe, FCOE, -1);
+    TEST_APP_PRIORITY(iscsi, ISCSI, -1);
+    TEST_APP_PRIORITY(fip, FIP, -1);
 }
 
-#define TEST_PRIORITY_VALID(fn, id, val, flagsprop, verify) \
-{ \
-	/* Assert that setting the value gets the same value back out */ \
-	nm_setting_dcb_set_priority_##fn (s_dcb, id, val); \
-	g_assert_cmpint (nm_setting_dcb_get_priority_##fn (s_dcb, id), ==, val); \
- \
-	if (verify) { \
-		if (val != 0) { \
-			/* Assert that verify fails because the flags do not include 'enabled' \
-			 * and a value has been set. \
-			 */ \
-			success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
-			g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY); \
-			g_assert (success == FALSE); \
-			g_clear_error (&error); \
-		} \
- \
-		/* Assert that adding the 'enabled' flag verifies the setting */ \
-		g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); \
-		success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \
-		g_assert_no_error (error); \
-		g_assert (success); \
-	} \
- \
-	/* Reset everything */ \
-	g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS, NM_SETTING_DCB_FLAG_NONE, NULL); \
-	nm_setting_dcb_set_priority_##fn (s_dcb, id, 0); \
-}
+#define TEST_PRIORITY_VALID(fn, id, val, flagsprop, verify)                                       \
+    {                                                                                             \
+        /* Assert that setting the value gets the same value back out */                          \
+        nm_setting_dcb_set_priority_##fn(s_dcb, id, val);                                         \
+        g_assert_cmpint(nm_setting_dcb_get_priority_##fn(s_dcb, id), ==, val);                    \
+                                                                                                  \
+        if (verify) {                                                                             \
+            if (val != 0) {                                                                       \
+                /* Assert that verify fails because the flags do not include 'enabled' \
+             * and a value has been set. \
+             */          \
+                success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);                     \
+                g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY); \
+                g_assert(success == FALSE);                                                       \
+                g_clear_error(&error);                                                            \
+            }                                                                                     \
+                                                                                                  \
+            /* Assert that adding the 'enabled' flag verifies the setting */                      \
+            g_object_set(G_OBJECT(s_dcb),                                                         \
+                         NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS,                             \
+                         NM_SETTING_DCB_FLAG_ENABLE,                                              \
+                         NULL);                                                                   \
+            success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);                         \
+            g_assert_no_error(error);                                                             \
+            g_assert(success);                                                                    \
+        }                                                                                         \
+                                                                                                  \
+        /* Reset everything */                                                                    \
+        g_object_set(G_OBJECT(s_dcb),                                                             \
+                     NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS,                                 \
+                     NM_SETTING_DCB_FLAG_NONE,                                                    \
+                     NULL);                                                                       \
+        nm_setting_dcb_set_priority_##fn(s_dcb, id, 0);                                           \
+    }
 
 /* If Priority Groups are enabled, PG bandwidth must equal 100% */
-#define SET_VALID_PRIORITY_GROUP_BANDWIDTH \
-{ \
-	guint x; \
-	for (x = 0; x < 7; x++) \
-		nm_setting_dcb_set_priority_group_bandwidth (s_dcb, x, 12); \
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16); \
+#define SET_VALID_PRIORITY_GROUP_BANDWIDTH                             \
+    {                                                                  \
+        guint x;                                                       \
+        for (x = 0; x < 7; x++)                                        \
+            nm_setting_dcb_set_priority_group_bandwidth(s_dcb, x, 12); \
+        nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 7, 16);     \
+    }
+
+static void
+test_dcb_priorities_valid(void)
+{
+    gs_unref_object NMSettingDcb *s_dcb = NULL;
+    GError *                      error = NULL;
+    gboolean                      success;
+    guint                         i;
+
+    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
+    g_assert(s_dcb);
+
+    for (i = 0; i < 8; i++)
+        TEST_PRIORITY_VALID(flow_control, i, TRUE, FLOW_CONTROL, TRUE);
+
+    SET_VALID_PRIORITY_GROUP_BANDWIDTH
+    for (i = 0; i < 8; i++) {
+        TEST_PRIORITY_VALID(group_id, i, i, GROUP, TRUE);
+        TEST_PRIORITY_VALID(group_id, i, 7 - i, GROUP, TRUE);
+    }
+
+    /* Clear PG bandwidth from earlier tests */
+    for (i = 0; i < 8; i++)
+        nm_setting_dcb_set_priority_group_bandwidth(s_dcb, i, 0);
+
+    /* Priority Group Bandwidth must add up to 100% if enabled, which requires
+     * some dancing for verifying individual values here.
+     */
+    for (i = 0; i < 8; i++) {
+        guint other = 7 - (i % 8);
+
+        /* Set another priority group to the remaining bandwidth */
+        nm_setting_dcb_set_priority_group_bandwidth(s_dcb, other, 100 - i);
+        TEST_PRIORITY_VALID(group_bandwidth, i, i, GROUP, TRUE);
+
+        /* Set another priority group to the remaining bandwidth */
+        nm_setting_dcb_set_priority_group_bandwidth(s_dcb, other, 100 - (7 - i));
+        TEST_PRIORITY_VALID(group_bandwidth, i, 7 - i, GROUP, TRUE);
+
+        /* Clear remaining bandwidth */
+        nm_setting_dcb_set_priority_group_bandwidth(s_dcb, other, 0);
+    }
+
+    SET_VALID_PRIORITY_GROUP_BANDWIDTH
+    for (i = 0; i < 8; i++) {
+        TEST_PRIORITY_VALID(bandwidth, i, i, GROUP, TRUE);
+        TEST_PRIORITY_VALID(bandwidth, i, 7 - i, GROUP, TRUE);
+    }
+
+    SET_VALID_PRIORITY_GROUP_BANDWIDTH
+    for (i = 0; i < 8; i++)
+        TEST_PRIORITY_VALID(strict_bandwidth, i, TRUE, GROUP, TRUE);
+
+    SET_VALID_PRIORITY_GROUP_BANDWIDTH
+    for (i = 0; i < 8; i++) {
+        TEST_PRIORITY_VALID(traffic_class, i, i, GROUP, TRUE);
+        TEST_PRIORITY_VALID(traffic_class, i, 7 - i, GROUP, TRUE);
+    }
 }
 
 static void
-test_dcb_priorities_valid (void)
+test_dcb_bandwidth_sums(void)
 {
-	gs_unref_object NMSettingDcb *s_dcb = NULL;
-	GError *error = NULL;
-	gboolean success;
-	guint i;
-
-	s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
-	g_assert (s_dcb);
-
-	for (i = 0; i < 8; i++)
-		TEST_PRIORITY_VALID (flow_control, i, TRUE, FLOW_CONTROL, TRUE);
-
-	SET_VALID_PRIORITY_GROUP_BANDWIDTH
-	for (i = 0; i < 8; i++) {
-		TEST_PRIORITY_VALID (group_id, i, i, GROUP, TRUE);
-		TEST_PRIORITY_VALID (group_id, i, 7 - i, GROUP, TRUE);
-	}
-
-	/* Clear PG bandwidth from earlier tests */
-	for (i = 0; i < 8; i++)
-		nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, 0);
-
-	/* Priority Group Bandwidth must add up to 100% if enabled, which requires
-	 * some dancing for verifying individual values here.
-	 */
-	for (i = 0; i < 8; i++) {
-		guint other = 7 - (i % 8);
-
-		/* Set another priority group to the remaining bandwidth */
-		nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 100 - i);
-		TEST_PRIORITY_VALID (group_bandwidth, i, i, GROUP, TRUE);
-
-		/* Set another priority group to the remaining bandwidth */
-		nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 100 - (7 - i));
-		TEST_PRIORITY_VALID (group_bandwidth, i, 7 - i, GROUP, TRUE);
-
-		/* Clear remaining bandwidth */
-		nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 0);
-	}
-
-	SET_VALID_PRIORITY_GROUP_BANDWIDTH
-	for (i = 0; i < 8; i++) {
-		TEST_PRIORITY_VALID (bandwidth, i, i, GROUP, TRUE);
-		TEST_PRIORITY_VALID (bandwidth, i, 7 - i, GROUP, TRUE);
-	}
-
-	SET_VALID_PRIORITY_GROUP_BANDWIDTH
-	for (i = 0; i < 8; i++)
-		TEST_PRIORITY_VALID (strict_bandwidth, i, TRUE, GROUP, TRUE);
-
-	SET_VALID_PRIORITY_GROUP_BANDWIDTH
-	for (i = 0; i < 8; i++) {
-		TEST_PRIORITY_VALID (traffic_class, i, i, GROUP, TRUE);
-		TEST_PRIORITY_VALID (traffic_class, i, 7 - i, GROUP, TRUE);
-	}
+    gs_unref_object NMSettingDcb *s_dcb = NULL;
+    GError *                      error = NULL;
+    gboolean                      success;
+
+    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
+    g_assert(s_dcb);
+
+    /* Assert that setting the value gets the same value back out */
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 0, 9);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 1, 10);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 2, 11);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 3, 12);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 4, 13);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 5, 14);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 6, 15);
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 7, 16);
+
+    /* Assert verify success when sums total 100% */
+    g_object_set(G_OBJECT(s_dcb),
+                 NM_SETTING_DCB_PRIORITY_GROUP_FLAGS,
+                 NM_SETTING_DCB_FLAG_ENABLE,
+                 NULL);
+    success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);
+    g_assert_no_error(error);
+    g_assert(success);
+
+    /* Assert verify fails when sums do not total 100% */
+    nm_setting_dcb_set_priority_group_bandwidth(s_dcb, 4, 20);
+    success = nm_setting_verify(NM_SETTING(s_dcb), NULL, &error);
+    g_assert_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    g_assert(success == FALSE);
+    g_clear_error(&error);
 }
 
+/*****************************************************************************/
+
 static void
-test_dcb_bandwidth_sums (void)
+test_nm_json(void)
 {
-	gs_unref_object NMSettingDcb *s_dcb = NULL;
-	GError *error = NULL;
-	gboolean success;
-
-	s_dcb = (NMSettingDcb *) nm_setting_dcb_new ();
-	g_assert (s_dcb);
-
-	/* Assert that setting the value gets the same value back out */
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 0, 9);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 1, 10);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 2, 11);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 3, 12);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 13);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 5, 14);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 6, 15);
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16);
-
-	/* Assert verify success when sums total 100% */
-	g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL);
-	success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error);
-	g_assert_no_error (error);
-	g_assert (success);
-
-	/* Assert verify fails when sums do not total 100% */
-	nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 20);
-	success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error);
-	g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	g_assert (success == FALSE);
-	g_clear_error (&error);
+    g_assert(NM_IN_SET(WITH_JANSSON, 0, 1));
+
+#if WITH_JANSSON
+    g_assert(nm_json_vt());
+#else
+    g_assert(!nm_json_vt());
+#endif
+
+#if WITH_JANSSON != defined(JANSSON_SONAME)
+    #error "WITH_JANSON and JANSSON_SONAME are defined inconsistently."
+#endif
 }
 
 /*****************************************************************************/
 
 static void
-_test_team_config_sync (const char *team_config,
-                        int notify_peer_count,
-                        int notify_peers_interval,
-                        int mcast_rejoin_count,
-                        int mcast_rejoin_interval,
-                        char *runner,
-                        char *runner_hwaddr_policy,      /* activebackup */
-                        GPtrArray *runner_tx_hash,       /* lacp, loadbalance */
-                        char *runner_tx_balancer,        /* lacp, loadbalance */
-                        int runner_tx_balancer_interval, /* lacp, loadbalance */
-                        gboolean runner_active,          /* lacp */
-                        gboolean runner_fast_rate,       /* lacp */
-                        int runner_sys_prio,             /* lacp */
-                        int runner_min_ports,            /* lacp */
-                        char *runner_agg_select_policy,  /* lacp */
-                        GPtrArray *link_watchers)
+_test_team_config_sync(const char *team_config,
+                       int         notify_peer_count,
+                       int         notify_peers_interval,
+                       int         mcast_rejoin_count,
+                       int         mcast_rejoin_interval,
+                       char *      runner,
+                       char *      runner_hwaddr_policy,        /* activebackup */
+                       GPtrArray * runner_tx_hash,              /* lacp, loadbalance */
+                       char *      runner_tx_balancer,          /* lacp, loadbalance */
+                       int         runner_tx_balancer_interval, /* lacp, loadbalance */
+                       gboolean    runner_active,               /* lacp */
+                       gboolean    runner_fast_rate,            /* lacp */
+                       int         runner_sys_prio,             /* lacp */
+                       int         runner_min_ports,            /* lacp */
+                       char *      runner_agg_select_policy,    /* lacp */
+                       GPtrArray * link_watchers)
 {
-	gs_unref_object NMSettingTeam *s_team = NULL;
-	guint i, j;
-	gboolean found;
-
-	if (!WITH_JSON_VALIDATION) {
-		g_test_skip ("team test requires JSON validation");
-		return;
-	}
-
-	s_team = (NMSettingTeam *) nm_setting_team_new ();
-	g_assert (s_team);
-
-	g_object_set (s_team, NM_SETTING_TEAM_CONFIG, team_config, NULL);
-	g_assert_cmpint (nm_setting_team_get_notify_peers_count (s_team), ==, notify_peer_count);
-	g_assert_cmpint (nm_setting_team_get_notify_peers_interval (s_team), ==, notify_peers_interval);
-	g_assert_cmpint (nm_setting_team_get_mcast_rejoin_count (s_team), ==, mcast_rejoin_count);
-	g_assert_cmpint (nm_setting_team_get_mcast_rejoin_interval (s_team), ==, mcast_rejoin_interval);
-	g_assert_cmpint (nm_setting_team_get_runner_tx_balancer_interval (s_team), ==, runner_tx_balancer_interval);
-	g_assert_cmpint (nm_setting_team_get_runner_active (s_team), ==, runner_active);
-	g_assert_cmpint (nm_setting_team_get_runner_fast_rate (s_team), ==, runner_fast_rate);
-	g_assert_cmpint (nm_setting_team_get_runner_sys_prio (s_team), ==, runner_sys_prio);
-	g_assert_cmpint (nm_setting_team_get_runner_min_ports (s_team), ==, runner_min_ports);
-	g_assert_cmpstr (nm_setting_team_get_runner (s_team), ==, runner);
-	g_assert_cmpstr (nm_setting_team_get_runner_hwaddr_policy (s_team), ==, runner_hwaddr_policy);
-	g_assert_cmpstr (nm_setting_team_get_runner_tx_balancer (s_team), ==, runner_tx_balancer);
-	g_assert_cmpstr (nm_setting_team_get_runner_agg_select_policy (s_team), ==, runner_agg_select_policy);
-
-	if (runner_tx_hash) {
-		g_assert_cmpint (runner_tx_hash->len, ==, nm_setting_team_get_num_runner_tx_hash (s_team));
-		for (i = 0; i < runner_tx_hash->len; i++) {
-			found = FALSE;
-			for (j = 0; j < nm_setting_team_get_num_runner_tx_hash (s_team); j++) {
-				if (nm_streq0 (nm_setting_team_get_runner_tx_hash (s_team, j),
-				               runner_tx_hash->pdata[i])) {
-					found = TRUE;
-					break;
-				}
-			}
-			g_assert (found);
-		}
-	}
-
-	if (link_watchers) {
-		g_assert_cmpint (link_watchers->len, ==, nm_setting_team_get_num_link_watchers (s_team));
-		for (i = 0; i < link_watchers->len; i++) {
-			found = FALSE;
-			for (j = 0; j < nm_setting_team_get_num_link_watchers (s_team); j++) {
-				if (nm_team_link_watcher_equal (link_watchers->pdata[i],
-				                                nm_setting_team_get_link_watcher (s_team, j))) {
-					found = TRUE;
-					break;
-				}
-			}
-			g_assert (found);
-		}
-	}
-
-	g_assert (nm_setting_verify ((NMSetting *) s_team, NULL, NULL));
+    gs_unref_object NMSettingTeam *s_team = NULL;
+    guint                          i, j;
+    gboolean                       found;
+
+    if (!nm_json_vt()) {
+        g_test_skip("team test requires JSON validation");
+        return;
+    }
+
+    s_team = (NMSettingTeam *) nm_setting_team_new();
+    g_assert(s_team);
+
+    g_object_set(s_team, NM_SETTING_TEAM_CONFIG, team_config, NULL);
+    g_assert_cmpint(nm_setting_team_get_notify_peers_count(s_team), ==, notify_peer_count);
+    g_assert_cmpint(nm_setting_team_get_notify_peers_interval(s_team), ==, notify_peers_interval);
+    g_assert_cmpint(nm_setting_team_get_mcast_rejoin_count(s_team), ==, mcast_rejoin_count);
+    g_assert_cmpint(nm_setting_team_get_mcast_rejoin_interval(s_team), ==, mcast_rejoin_interval);
+    g_assert_cmpint(nm_setting_team_get_runner_tx_balancer_interval(s_team),
+                    ==,
+                    runner_tx_balancer_interval);
+    g_assert_cmpint(nm_setting_team_get_runner_active(s_team), ==, runner_active);
+    g_assert_cmpint(nm_setting_team_get_runner_fast_rate(s_team), ==, runner_fast_rate);
+    g_assert_cmpint(nm_setting_team_get_runner_sys_prio(s_team), ==, runner_sys_prio);
+    g_assert_cmpint(nm_setting_team_get_runner_min_ports(s_team), ==, runner_min_ports);
+    g_assert_cmpstr(nm_setting_team_get_runner(s_team), ==, runner);
+    g_assert_cmpstr(nm_setting_team_get_runner_hwaddr_policy(s_team), ==, runner_hwaddr_policy);
+    g_assert_cmpstr(nm_setting_team_get_runner_tx_balancer(s_team), ==, runner_tx_balancer);
+    g_assert_cmpstr(nm_setting_team_get_runner_agg_select_policy(s_team),
+                    ==,
+                    runner_agg_select_policy);
+
+    if (runner_tx_hash) {
+        g_assert_cmpint(runner_tx_hash->len, ==, nm_setting_team_get_num_runner_tx_hash(s_team));
+        for (i = 0; i < runner_tx_hash->len; i++) {
+            found = FALSE;
+            for (j = 0; j < nm_setting_team_get_num_runner_tx_hash(s_team); j++) {
+                if (nm_streq0(nm_setting_team_get_runner_tx_hash(s_team, j),
+                              runner_tx_hash->pdata[i])) {
+                    found = TRUE;
+                    break;
+                }
+            }
+            g_assert(found);
+        }
+    }
+
+    if (link_watchers) {
+        g_assert_cmpint(link_watchers->len, ==, nm_setting_team_get_num_link_watchers(s_team));
+        for (i = 0; i < link_watchers->len; i++) {
+            found = FALSE;
+            for (j = 0; j < nm_setting_team_get_num_link_watchers(s_team); j++) {
+                if (nm_team_link_watcher_equal(link_watchers->pdata[i],
+                                               nm_setting_team_get_link_watcher(s_team, j))) {
+                    found = TRUE;
+                    break;
+                }
+            }
+            g_assert(found);
+        }
+    }
+
+    g_assert(nm_setting_verify((NMSetting *) s_team, NULL, NULL));
 }
 
 static void
-test_runner_roundrobin_sync_from_config (void)
+test_runner_roundrobin_sync_from_config(void)
 {
-	_test_team_config_sync ("",
-	                        -1, -1, -1, -1,
-	                        NULL,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
+    _test_team_config_sync("",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL,
+                           NULL,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL);
 }
 
 static void
-test_runner_broadcast_sync_from_config (void)
+test_runner_broadcast_sync_from_config(void)
 {
-	_test_team_config_sync ("{\"runner\": {\"name\": \"broadcast\"}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_BROADCAST,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
+    _test_team_config_sync("{\"runner\": {\"name\": \"broadcast\"}}",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NM_SETTING_TEAM_RUNNER_BROADCAST,
+                           NULL,
+                           NULL,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL);
 }
 
 static void
-test_runner_random_sync_from_config (void)
+test_runner_random_sync_from_config(void)
 {
-	_test_team_config_sync ("{\"runner\": {\"name\": \"random\"}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_RANDOM,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
+    _test_team_config_sync("{\"runner\": {\"name\": \"random\"}}",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NM_SETTING_TEAM_RUNNER_RANDOM,
+                           NULL,
+                           NULL,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL);
 }
 
 static void
-test_runner_activebackup_sync_from_config (void)
+test_runner_activebackup_sync_from_config(void)
 {
-	_test_team_config_sync ("{\"runner\": {\"name\": \"activebackup\"}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
+    _test_team_config_sync("{\"runner\": {\"name\": \"activebackup\"}}",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP,
+                           NULL,
+                           NULL,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL);
 }
 
 static void
-test_runner_loadbalance_sync_from_config (void)
+test_runner_loadbalance_sync_from_config(void)
 {
-	gs_unref_ptrarray GPtrArray *tx_hash = NULL;
-
-	tx_hash = g_ptr_array_new_with_free_func (g_free);
-	g_ptr_array_add (tx_hash, g_strdup ("eth"));
-	g_ptr_array_add (tx_hash, g_strdup ("ipv4"));
-	g_ptr_array_add (tx_hash, g_strdup ("ipv6"));
-
-	_test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\"}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_LOADBALANCE,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
-
-	_test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\", "
-	                        "\"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_LOADBALANCE,
-	                        NULL,
-	                        tx_hash, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
-
-	_test_team_config_sync ("{\"runner\": {\"name\": \"loadbalance\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], "
-	                        "\"tx_balancer\": {\"name\": \"basic\", \"balancing_interval\": 30}}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_LOADBALANCE,
-	                        NULL,
-	                        tx_hash, "basic", 30,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        NULL);
+    gs_unref_ptrarray GPtrArray *tx_hash = NULL;
+
+    tx_hash = g_ptr_array_new_with_free_func(g_free);
+    g_ptr_array_add(tx_hash, g_strdup("eth"));
+    g_ptr_array_add(tx_hash, g_strdup("ipv4"));
+    g_ptr_array_add(tx_hash, g_strdup("ipv6"));
+
+    _test_team_config_sync("{\"runner\": {\"name\": \"loadbalance\"}}",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NM_SETTING_TEAM_RUNNER_LOADBALANCE,
+                           NULL,
+                           NULL,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL);
+
+    _test_team_config_sync("{\"runner\": {\"name\": \"loadbalance\", "
+                           "\"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NM_SETTING_TEAM_RUNNER_LOADBALANCE,
+                           NULL,
+                           tx_hash,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL);
+
+    _test_team_config_sync(
+        "{\"runner\": {\"name\": \"loadbalance\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], "
+        "\"tx_balancer\": {\"name\": \"basic\", \"balancing_interval\": 30}}}",
+        -1,
+        -1,
+        -1,
+        -1,
+        NM_SETTING_TEAM_RUNNER_LOADBALANCE,
+        NULL,
+        tx_hash,
+        "basic",
+        30,
+        TRUE,
+        FALSE,
+        -1,
+        -1,
+        NULL,
+        NULL);
 }
 
 static void
-test_runner_lacp_sync_from_config (void)
+test_runner_lacp_sync_from_config(void)
 {
-	gs_unref_ptrarray GPtrArray *tx_hash = NULL;
-
-	tx_hash = g_ptr_array_new_with_free_func (g_free);
-	g_ptr_array_add (tx_hash, g_strdup ("eth"));
-	g_ptr_array_add (tx_hash, g_strdup ("ipv4"));
-	g_ptr_array_add (tx_hash, g_strdup ("ipv6"));
-
-	_test_team_config_sync ("{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_LACP,
-	                        NULL,
-	                        tx_hash, NULL, -1,
-	                        TRUE, FALSE, -1, -1,
-	                        NULL,
-	                        NULL);
-
-	_test_team_config_sync ("{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], "
-	                        "\"active\": false, \"fast_rate\": true, \"sys_prio\": 10, \"min_ports\": 5, "
-	                        "\"agg_select_policy\": \"port_config\"}}",
-	                        -1, -1, -1, -1,
-	                        NM_SETTING_TEAM_RUNNER_LACP,
-	                        NULL,
-	                        tx_hash, NULL, -1,
-	                        FALSE, TRUE, 10, 5, "port_config",
-	                        NULL);
+    gs_unref_ptrarray GPtrArray *tx_hash = NULL;
+
+    tx_hash = g_ptr_array_new_with_free_func(g_free);
+    g_ptr_array_add(tx_hash, g_strdup("eth"));
+    g_ptr_array_add(tx_hash, g_strdup("ipv4"));
+    g_ptr_array_add(tx_hash, g_strdup("ipv6"));
+
+    _test_team_config_sync(
+        "{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"]}}",
+        -1,
+        -1,
+        -1,
+        -1,
+        NM_SETTING_TEAM_RUNNER_LACP,
+        NULL,
+        tx_hash,
+        NULL,
+        -1,
+        TRUE,
+        FALSE,
+        -1,
+        -1,
+        NULL,
+        NULL);
+
+    _test_team_config_sync(
+        "{\"runner\": {\"name\": \"lacp\", \"tx_hash\": [\"eth\", \"ipv4\", \"ipv6\"], "
+        "\"active\": false, \"fast_rate\": true, \"sys_prio\": 10, \"min_ports\": 5, "
+        "\"agg_select_policy\": \"port_config\"}}",
+        -1,
+        -1,
+        -1,
+        -1,
+        NM_SETTING_TEAM_RUNNER_LACP,
+        NULL,
+        tx_hash,
+        NULL,
+        -1,
+        FALSE,
+        TRUE,
+        10,
+        5,
+        "port_config",
+        NULL);
 }
 
 static void
-test_watcher_ethtool_sync_from_config (void)
+test_watcher_ethtool_sync_from_config(void)
 {
-	gs_unref_ptrarray GPtrArray *link_watchers = NULL;
-
-	link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
-	g_ptr_array_add (link_watchers, nm_team_link_watcher_new_ethtool (0, 0, NULL));
-	_test_team_config_sync ("{\"link_watch\": {\"name\": \"ethtool\"}}",
-	                        -1, -1, -1, -1,
-	                        NULL,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        link_watchers);
+    gs_unref_ptrarray GPtrArray *link_watchers = NULL;
+
+    link_watchers = g_ptr_array_new_with_free_func((GDestroyNotify) nm_team_link_watcher_unref);
+    g_ptr_array_add(link_watchers, nm_team_link_watcher_new_ethtool(0, 0, NULL));
+    _test_team_config_sync("{\"link_watch\": {\"name\": \"ethtool\"}}",
+                           -1,
+                           -1,
+                           -1,
+                           -1,
+                           NULL,
+                           NULL,
+                           NULL,
+                           NULL,
+                           -1,
+                           TRUE,
+                           FALSE,
+                           -1,
+                           -1,
+                           NULL,
+                           link_watchers);
 }
 
 static void
-test_watcher_nsna_ping_sync_from_config (void)
+test_watcher_nsna_ping_sync_from_config(void)
 {
-	gs_unref_ptrarray GPtrArray *link_watchers = NULL;
-
-	link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
-	g_ptr_array_add (link_watchers, nm_team_link_watcher_new_nsna_ping (0, 0, 3, "target.host", NULL));
-	_test_team_config_sync ("{\"link_watch\": {\"name\": \"nsna_ping\", \"target_host\": \"target.host\"}}",
-	                        -1, -1, -1, -1,
-	                        NULL,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        link_watchers);
+    gs_unref_ptrarray GPtrArray *link_watchers = NULL;
+
+    link_watchers = g_ptr_array_new_with_free_func((GDestroyNotify) nm_team_link_watcher_unref);
+    g_ptr_array_add(link_watchers,
+                    nm_team_link_watcher_new_nsna_ping(0, 0, 3, "target.host", NULL));
+    _test_team_config_sync(
+        "{\"link_watch\": {\"name\": \"nsna_ping\", \"target_host\": \"target.host\"}}",
+        -1,
+        -1,
+        -1,
+        -1,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        -1,
+        TRUE,
+        FALSE,
+        -1,
+        -1,
+        NULL,
+        link_watchers);
 }
 
 static void
-test_watcher_arp_ping_sync_from_config (void)
+test_watcher_arp_ping_sync_from_config(void)
 {
-	gs_unref_ptrarray GPtrArray *link_watchers = NULL;
-
-	link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
-	g_ptr_array_add (link_watchers,
-	                 nm_team_link_watcher_new_arp_ping (0, 0, 3, "target.host", "source.host", 0, NULL));
-	_test_team_config_sync ("{\"link_watch\": {\"name\": \"arp_ping\", \"target_host\": \"target.host\", "
-	                        "\"source_host\": \"source.host\"}}",
-	                        -1, -1, -1, -1,
-	                        NULL,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        link_watchers);
+    gs_unref_ptrarray GPtrArray *link_watchers = NULL;
+
+    link_watchers = g_ptr_array_new_with_free_func((GDestroyNotify) nm_team_link_watcher_unref);
+    g_ptr_array_add(
+        link_watchers,
+        nm_team_link_watcher_new_arp_ping(0, 0, 3, "target.host", "source.host", 0, NULL));
+    _test_team_config_sync(
+        "{\"link_watch\": {\"name\": \"arp_ping\", \"target_host\": \"target.host\", "
+        "\"source_host\": \"source.host\"}}",
+        -1,
+        -1,
+        -1,
+        -1,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        -1,
+        TRUE,
+        FALSE,
+        -1,
+        -1,
+        NULL,
+        link_watchers);
 }
 
 static void
-test_multiple_watchers_sync_from_config (void)
+test_multiple_watchers_sync_from_config(void)
 {
-	gs_unref_ptrarray GPtrArray *link_watchers = NULL;
-
-	link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
-	g_ptr_array_add (link_watchers, nm_team_link_watcher_new_ethtool (2, 4, NULL));
-	g_ptr_array_add (link_watchers, nm_team_link_watcher_new_nsna_ping (3, 6, 9, "target.host", NULL));
-	g_ptr_array_add (link_watchers,
-	                 nm_team_link_watcher_new_arp_ping (5, 10, 15, "target.host", "source.host",
-	                                                      NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE
-	                                                    | NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE
-	                                                    | NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS,
-	                                                    NULL));
-	_test_team_config_sync ("{\"link_watch\": ["
-	                        "{\"name\": \"ethtool\", \"delay_up\": 2, \"delay_down\": 4}, "
-	                        "{\"name\": \"arp_ping\", \"init_wait\": 5, \"interval\": 10, \"missed_max\": 15, "
-	                        "\"target_host\": \"target.host\", \"source_host\": \"source.host\", "
-	                        "\"validate_active\": true, \"validate_inactive\": true, \"send_always\": true}, "
-	                        "{\"name\": \"nsna_ping\", \"init_wait\": 3, \"interval\": 6, \"missed_max\": 9, "
-	                        "\"target_host\": \"target.host\"}]}",
-	                        -1, -1, -1, -1,
-	                        NULL,
-	                        NULL,
-	                        NULL, NULL, -1,
-	                        TRUE, FALSE, -1, -1, NULL,
-	                        link_watchers);
+    gs_unref_ptrarray GPtrArray *link_watchers = NULL;
+
+    link_watchers = g_ptr_array_new_with_free_func((GDestroyNotify) nm_team_link_watcher_unref);
+    g_ptr_array_add(link_watchers, nm_team_link_watcher_new_ethtool(2, 4, NULL));
+    g_ptr_array_add(link_watchers,
+                    nm_team_link_watcher_new_nsna_ping(3, 6, 9, "target.host", NULL));
+    g_ptr_array_add(
+        link_watchers,
+        nm_team_link_watcher_new_arp_ping(5,
+                                          10,
+                                          15,
+                                          "target.host",
+                                          "source.host",
+                                          NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_ACTIVE
+                                              | NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE
+                                              | NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS,
+                                          NULL));
+    _test_team_config_sync(
+        "{\"link_watch\": ["
+        "{\"name\": \"ethtool\", \"delay_up\": 2, \"delay_down\": 4}, "
+        "{\"name\": \"arp_ping\", \"init_wait\": 5, \"interval\": 10, \"missed_max\": 15, "
+        "\"target_host\": \"target.host\", \"source_host\": \"source.host\", "
+        "\"validate_active\": true, \"validate_inactive\": true, \"send_always\": true}, "
+        "{\"name\": \"nsna_ping\", \"init_wait\": 3, \"interval\": 6, \"missed_max\": 9, "
+        "\"target_host\": \"target.host\"}]}",
+        -1,
+        -1,
+        -1,
+        -1,
+        NULL,
+        NULL,
+        NULL,
+        NULL,
+        -1,
+        TRUE,
+        FALSE,
+        -1,
+        -1,
+        NULL,
+        link_watchers);
 }
 
 /*****************************************************************************/
 
 static void
-_test_team_port_config_sync (const char *team_port_config,
-                             int queue_id,
-                             int prio,
-                             gboolean sticky,
-                             int lacp_prio,
-                             int lacp_key,
-                             GPtrArray *link_watchers)
+_test_team_port_config_sync(const char *team_port_config,
+                            int         queue_id,
+                            int         prio,
+                            gboolean    sticky,
+                            int         lacp_prio,
+                            int         lacp_key,
+                            GPtrArray * link_watchers)
 {
-	gs_unref_object NMSettingTeamPort *s_team_port = NULL;
-	guint i, j;
-	gboolean found;
-
-	if (!WITH_JSON_VALIDATION) {
-		g_test_skip ("team test requires JSON validation");
-		return;
-	}
-
-	s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new ();
-	g_assert (s_team_port);
-
-	g_object_set (s_team_port, NM_SETTING_TEAM_CONFIG, team_port_config, NULL);
-	g_assert (nm_setting_team_port_get_queue_id (s_team_port) == queue_id);
-	g_assert (nm_setting_team_port_get_prio (s_team_port) == prio);
-	g_assert (nm_setting_team_port_get_sticky (s_team_port) == sticky);
-	g_assert (nm_setting_team_port_get_lacp_prio (s_team_port) == lacp_prio);
-	g_assert (nm_setting_team_port_get_lacp_key (s_team_port) == lacp_key);
-
-	if (link_watchers) {
-		g_assert (link_watchers->len == nm_setting_team_port_get_num_link_watchers (s_team_port));
-		for (i = 0; i < link_watchers->len; i++) {
-			found = FALSE;
-			for (j = 0; j < nm_setting_team_port_get_num_link_watchers (s_team_port); j++) {
-				if (nm_team_link_watcher_equal (link_watchers->pdata[i],
-				                                nm_setting_team_port_get_link_watcher (s_team_port,
-				                                                                       j))) {
-					found = TRUE;
-					break;
-				}
-			}
-			g_assert (found);
-		}
-	}
-
-	g_assert (nm_setting_verify ((NMSetting *) s_team_port, NULL, NULL));
+    gs_unref_object NMSettingTeamPort *s_team_port = NULL;
+    guint                              i, j;
+    gboolean                           found;
+
+    if (!nm_json_vt()) {
+        g_test_skip("team test requires JSON validation");
+        return;
+    }
+
+    s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new();
+    g_assert(s_team_port);
+
+    g_object_set(s_team_port, NM_SETTING_TEAM_CONFIG, team_port_config, NULL);
+    g_assert(nm_setting_team_port_get_queue_id(s_team_port) == queue_id);
+    g_assert(nm_setting_team_port_get_prio(s_team_port) == prio);
+    g_assert(nm_setting_team_port_get_sticky(s_team_port) == sticky);
+    g_assert(nm_setting_team_port_get_lacp_prio(s_team_port) == lacp_prio);
+    g_assert(nm_setting_team_port_get_lacp_key(s_team_port) == lacp_key);
+
+    if (link_watchers) {
+        g_assert(link_watchers->len == nm_setting_team_port_get_num_link_watchers(s_team_port));
+        for (i = 0; i < link_watchers->len; i++) {
+            found = FALSE;
+            for (j = 0; j < nm_setting_team_port_get_num_link_watchers(s_team_port); j++) {
+                if (nm_team_link_watcher_equal(
+                        link_watchers->pdata[i],
+                        nm_setting_team_port_get_link_watcher(s_team_port, j))) {
+                    found = TRUE;
+                    break;
+                }
+            }
+            g_assert(found);
+        }
+    }
+
+    g_assert(nm_setting_verify((NMSetting *) s_team_port, NULL, NULL));
 }
 
 static void
-test_team_port_default (void)
+test_team_port_default(void)
 {
-	_test_team_port_config_sync ("", -1, 0, FALSE, -1, -1, NULL);
+    _test_team_port_config_sync("", -1, 0, FALSE, -1, -1, NULL);
 }
 
 static void
-test_team_port_queue_id (void)
+test_team_port_queue_id(void)
 {
-	_test_team_port_config_sync ("{\"queue_id\": 3}",
-	                             3, 0, FALSE, -1, -1, NULL);
-	_test_team_port_config_sync ("{\"queue_id\": 0}",
-	                             0, 0, FALSE, -1, -1, NULL);
+    _test_team_port_config_sync("{\"queue_id\": 3}", 3, 0, FALSE, -1, -1, NULL);
+    _test_team_port_config_sync("{\"queue_id\": 0}", 0, 0, FALSE, -1, -1, NULL);
 }
 
 static void
-test_team_port_prio (void)
+test_team_port_prio(void)
 {
-	_test_team_port_config_sync ("{\"prio\": 6}",
-	                             -1, 6, FALSE, -1, -1, NULL);
-	_test_team_port_config_sync ("{\"prio\": 0}",
-	                             -1, 0, FALSE, -1, -1, NULL);
+    _test_team_port_config_sync("{\"prio\": 6}", -1, 6, FALSE, -1, -1, NULL);
+    _test_team_port_config_sync("{\"prio\": 0}", -1, 0, FALSE, -1, -1, NULL);
 }
 
 static void
-test_team_port_sticky (void)
+test_team_port_sticky(void)
 {
-	_test_team_port_config_sync ("{\"sticky\": true}",
-	                             -1, 0, TRUE, -1, -1, NULL);
-	_test_team_port_config_sync ("{\"sticky\": false}",
-	                             -1, 0, FALSE, -1, -1, NULL);
+    _test_team_port_config_sync("{\"sticky\": true}", -1, 0, TRUE, -1, -1, NULL);
+    _test_team_port_config_sync("{\"sticky\": false}", -1, 0, FALSE, -1, -1, NULL);
 }
 
 static void
-test_team_port_lacp_prio (void)
+test_team_port_lacp_prio(void)
 {
-	_test_team_port_config_sync ("{\"lacp_prio\": 9}",
-	                             -1, 0, FALSE, 9, -1, NULL);
-	_test_team_port_config_sync ("{\"lacp_prio\": 0}",
-	                             -1, 0, FALSE, 0, -1, NULL);
+    _test_team_port_config_sync("{\"lacp_prio\": 9}", -1, 0, FALSE, 9, -1, NULL);
+    _test_team_port_config_sync("{\"lacp_prio\": 0}", -1, 0, FALSE, 0, -1, NULL);
 }
 
 static void
-test_team_port_lacp_key (void)
+test_team_port_lacp_key(void)
 {
-	_test_team_port_config_sync ("{\"lacp_key\": 12}",
-	                             -1, 0, FALSE, -1, 12, NULL);
-	_test_team_port_config_sync ("{\"lacp_key\": 0}",
-	                             -1, 0, FALSE, -1, 0, NULL);
+    _test_team_port_config_sync("{\"lacp_key\": 12}", -1, 0, FALSE, -1, 12, NULL);
+    _test_team_port_config_sync("{\"lacp_key\": 0}", -1, 0, FALSE, -1, 0, NULL);
 }
 
 static void
-test_team_port_full_config (void)
+test_team_port_full_config(void)
 {
-	gs_unref_ptrarray GPtrArray *link_watchers = NULL;
-
-	link_watchers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref);
-	g_ptr_array_add (link_watchers,
-	                 nm_team_link_watcher_new_arp_ping (0, 3, 3, "1.2.3.2", "1.2.3.1",
-	                                                    NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE,
-	                                                    NULL));
-	g_ptr_array_add (link_watchers,
-	                 nm_team_link_watcher_new_arp_ping (1, 1, 0, "1.2.3.4", "1.2.3.1",
-	                                                     NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS,
-	                                                     NULL));
-
-	_test_team_port_config_sync ("{\"queue_id\": 10, \"prio\": 20, \"sticky\": true, \"lacp_prio\": 30, "
-	                             "\"lacp_key\": 40, \"link_watch\": ["
-	                             "{\"name\": \"arp_ping\", \"interval\": 3, \"target_host\": \"1.2.3.2\", "
-	                             "\"source_host\": \"1.2.3.1\", \"validate_inactive\": true}, "
-	                             "{\"name\": \"arp_ping\", \"init_wait\": 1, \"interval\": 1, "
-	                             "\"target_host\": \"1.2.3.4\", \"source_host\": \"1.2.3.1\", "
-	                             "\"send_always\": true}]}",
-	                             10, 20, true, 30, 40, NULL);
+    gs_unref_ptrarray GPtrArray *link_watchers = NULL;
+
+    link_watchers = g_ptr_array_new_with_free_func((GDestroyNotify) nm_team_link_watcher_unref);
+    g_ptr_array_add(
+        link_watchers,
+        nm_team_link_watcher_new_arp_ping(0,
+                                          3,
+                                          3,
+                                          "1.2.3.2",
+                                          "1.2.3.1",
+                                          NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_VALIDATE_INACTIVE,
+                                          NULL));
+    g_ptr_array_add(
+        link_watchers,
+        nm_team_link_watcher_new_arp_ping(1,
+                                          1,
+                                          0,
+                                          "1.2.3.4",
+                                          "1.2.3.1",
+                                          NM_TEAM_LINK_WATCHER_ARP_PING_FLAG_SEND_ALWAYS,
+                                          NULL));
+
+    _test_team_port_config_sync(
+        "{\"queue_id\": 10, \"prio\": 20, \"sticky\": true, \"lacp_prio\": 30, "
+        "\"lacp_key\": 40, \"link_watch\": ["
+        "{\"name\": \"arp_ping\", \"interval\": 3, \"target_host\": \"1.2.3.2\", "
+        "\"source_host\": \"1.2.3.1\", \"validate_inactive\": true}, "
+        "{\"name\": \"arp_ping\", \"init_wait\": 1, \"interval\": 1, "
+        "\"target_host\": \"1.2.3.4\", \"source_host\": \"1.2.3.1\", "
+        "\"send_always\": true}]}",
+        10,
+        20,
+        true,
+        30,
+        40,
+        NULL);
 }
 
 /*****************************************************************************/
 
 static void
-_check_team_setting (NMSetting *setting)
+_check_team_setting(NMSetting *setting)
 {
-	gs_unref_object NMSetting *setting2 = NULL;
-	gs_unref_object NMSetting *setting_clone = NULL;
-	gboolean is_port = NM_IS_SETTING_TEAM_PORT (setting);
-	gs_unref_variant GVariant *variant2 = NULL;
-	gs_unref_variant GVariant *variant3 = NULL;
-
-	g_assert (NM_IS_SETTING_TEAM (setting) || is_port);
-
-	setting2 = g_object_new (G_OBJECT_TYPE (setting),
-	                           is_port
-	                         ? NM_SETTING_TEAM_PORT_CONFIG
-	                         : NM_SETTING_TEAM_CONFIG,
-	                           is_port
-	                         ? nm_setting_team_port_get_config (NM_SETTING_TEAM_PORT (setting))
-	                         : nm_setting_team_get_config (NM_SETTING_TEAM (setting)),
-	                         NULL);
-
-	if (WITH_JSON_VALIDATION)
-		nmtst_assert_setting_is_equal (setting, setting2, NM_SETTING_COMPARE_FLAG_EXACT);
-
-	g_clear_object (&setting2);
-
-	nmtst_assert_setting_dbus_roundtrip (setting);
-
-	/* OK, now parse the setting only from the D-Bus variant, but removing the JSON config.
-	 * For that, we have to "drop" the JSON and we do that by resetting the property.
-	 * This causes JSON to be regenerated and it's in a normalized form that will compare
-	 * equal. */
-	setting_clone = nm_setting_duplicate (setting);
-	setting = setting_clone;
-	if (is_port) {
-		g_object_set (setting,
-		              NM_SETTING_TEAM_PORT_STICKY,
-		              nm_setting_team_port_get_sticky (NM_SETTING_TEAM_PORT (setting)),
-		              NULL);
-	} else {
-		g_object_set (setting,
-		              NM_SETTING_TEAM_RUNNER_SYS_PRIO,
-		              nm_setting_team_get_runner_sys_prio (NM_SETTING_TEAM (setting)),
-		              NULL);
-	}
-	variant2 = _nm_setting_to_dbus (setting, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
-	variant3 = nm_utils_gvariant_vardict_filter_drop_one (variant2, "config");
-	setting2 = nmtst_assert_setting_dbus_new (G_OBJECT_TYPE (setting), variant3);
-	nmtst_assert_setting_is_equal (setting, setting2, NM_SETTING_COMPARE_FLAG_EXACT);
+    gs_unref_object NMSetting *setting2      = NULL;
+    gs_unref_object NMSetting *setting_clone = NULL;
+    gboolean                   is_port       = NM_IS_SETTING_TEAM_PORT(setting);
+    gs_unref_variant GVariant *variant2      = NULL;
+    gs_unref_variant GVariant *variant3      = NULL;
+
+    g_assert(NM_IS_SETTING_TEAM(setting) || is_port);
+
+    setting2 = g_object_new(G_OBJECT_TYPE(setting),
+                            is_port ? NM_SETTING_TEAM_PORT_CONFIG : NM_SETTING_TEAM_CONFIG,
+                            is_port ? nm_setting_team_port_get_config(NM_SETTING_TEAM_PORT(setting))
+                                    : nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+                            NULL);
+
+    if (nm_json_vt())
+        nmtst_assert_setting_is_equal(setting, setting2, NM_SETTING_COMPARE_FLAG_EXACT);
+
+    g_clear_object(&setting2);
+
+    nmtst_assert_setting_dbus_roundtrip(setting);
+
+    /* OK, now parse the setting only from the D-Bus variant, but removing the JSON config.
+     * For that, we have to "drop" the JSON and we do that by resetting the property.
+     * This causes JSON to be regenerated and it's in a normalized form that will compare
+     * equal. */
+    setting_clone = nm_setting_duplicate(setting);
+    setting       = setting_clone;
+    if (is_port) {
+        g_object_set(setting,
+                     NM_SETTING_TEAM_PORT_STICKY,
+                     nm_setting_team_port_get_sticky(NM_SETTING_TEAM_PORT(setting)),
+                     NULL);
+    } else {
+        g_object_set(setting,
+                     NM_SETTING_TEAM_RUNNER_SYS_PRIO,
+                     nm_setting_team_get_runner_sys_prio(NM_SETTING_TEAM(setting)),
+                     NULL);
+    }
+    variant2 = _nm_setting_to_dbus(setting, NULL, NM_CONNECTION_SERIALIZE_ALL, NULL);
+    variant3 = nm_utils_gvariant_vardict_filter_drop_one(variant2, "config");
+    setting2 = nmtst_assert_setting_dbus_new(G_OBJECT_TYPE(setting), variant3);
+    nmtst_assert_setting_is_equal(setting, setting2, NM_SETTING_COMPARE_FLAG_EXACT);
 }
 
 static void
-test_team_setting (void)
+test_team_setting(void)
 {
-	gs_unref_variant GVariant *variant = nmtst_variant_from_string (G_VARIANT_TYPE_VARDICT,
-	                                                                "{'config': <'{\"link_watch\": {\"name\": \"ethtool\"}}'>, 'interface-name': <'nm-team'>, 'link-watchers': <[{'name': <'ethtool'>}]>}");
-	gs_free_error GError *error = NULL;
-	gs_unref_object NMSetting *setting = NULL;
-	nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher1 = nm_team_link_watcher_new_nsna_ping (1, 3, 4, "bbb", NULL);
-	nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher2 = nm_team_link_watcher_new_arp_ping2 (1, 3, 4, -1, "ccc", "ddd", 0, NULL);
-
-	g_assert (watcher1);
-	g_assert (watcher2);
-
-	setting = _nm_setting_new_from_dbus (NM_TYPE_SETTING_TEAM,
-	                                     variant,
-	                                     NULL,
-	                                     NM_SETTING_PARSE_FLAGS_STRICT,
-	                                     &error);
-	nmtst_assert_success (setting, error);
-	_check_team_setting (setting);
-
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{\"link_watch\": {\"name\": \"ethtool\"}}");
-	g_assert_cmpint (nm_setting_team_get_num_link_watchers (NM_SETTING_TEAM (setting)), ==, 1);
-
-	g_object_set (setting,
-	              NM_SETTING_TEAM_RUNNER_SYS_PRIO,
-	              (int) 10,
-	              NULL);
-
-	_check_team_setting (setting);
-	g_assert_cmpint (nm_setting_team_get_num_link_watchers (NM_SETTING_TEAM (setting)), ==, 1);
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"ethtool\" } }");
-
-	nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0);
-
-	_check_team_setting (setting);
-	g_assert_cmpint (nm_setting_team_get_num_link_watchers (NM_SETTING_TEAM (setting)), ==, 0);
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 } }");
-
-	nm_setting_team_add_link_watcher (NM_SETTING_TEAM (setting), watcher1);
-	_check_team_setting (setting);
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"nsna_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"target_host\": \"bbb\" } }");
-
-	nm_setting_team_add_link_watcher (NM_SETTING_TEAM (setting), watcher2);
-	_check_team_setting (setting);
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": [ { \"name\": \"nsna_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"target_host\": \"bbb\" }, { \"name\": \"arp_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"source_host\": \"ddd\", \"target_host\": \"ccc\" } ] }");
-
-	nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0);
-	nm_setting_team_remove_link_watcher (NM_SETTING_TEAM (setting), 0);
-	g_object_set (setting,
-	              NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL,
-	              (int) 5,
-	              NULL);
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"tx_balancer\": { \"balancing_interval\": 5 }, \"sys_prio\": 10 } }");
-
-	g_object_set (setting,
-	              NM_SETTING_TEAM_RUNNER,
-	              NULL,
-	              NULL);
-	_check_team_setting (setting);
-	g_assert_cmpstr (nm_setting_team_get_config (NM_SETTING_TEAM (setting)), ==, "{ \"runner\": { \"tx_balancer\": { \"balancing_interval\": 5 }, \"sys_prio\": 10 } }");
-
-	g_object_set (setting,
-	              NM_SETTING_TEAM_CONFIG,
-	              "{ \"runner\": { \"tx_hash\": [ \"eth\", \"l3\" ] } }",
-	              NULL);
-	_check_team_setting (setting);
+    gs_unref_variant GVariant *variant = nmtst_variant_from_string(
+        G_VARIANT_TYPE_VARDICT,
+        "{'config': <'{\"link_watch\": {\"name\": \"ethtool\"}}'>, 'interface-name': <'nm-team'>, "
+        "'link-watchers': <[{'name': <'ethtool'>}]>}");
+    gs_free_error GError *error             = NULL;
+    gs_unref_object NMSetting *     setting = NULL;
+    nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher1 =
+        nm_team_link_watcher_new_nsna_ping(1, 3, 4, "bbb", NULL);
+    nm_auto_unref_team_link_watcher NMTeamLinkWatcher *watcher2 =
+        nm_team_link_watcher_new_arp_ping2(1, 3, 4, -1, "ccc", "ddd", 0, NULL);
+
+    g_assert(watcher1);
+    g_assert(watcher2);
+
+    setting = _nm_setting_new_from_dbus(NM_TYPE_SETTING_TEAM,
+                                        variant,
+                                        NULL,
+                                        NM_SETTING_PARSE_FLAGS_STRICT,
+                                        &error);
+    nmtst_assert_success(setting, error);
+    _check_team_setting(setting);
+
+    g_assert_cmpstr(nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+                    ==,
+                    "{\"link_watch\": {\"name\": \"ethtool\"}}");
+    g_assert_cmpint(nm_setting_team_get_num_link_watchers(NM_SETTING_TEAM(setting)), ==, 1);
+
+    g_object_set(setting, NM_SETTING_TEAM_RUNNER_SYS_PRIO, (int) 10, NULL);
+
+    _check_team_setting(setting);
+    g_assert_cmpint(nm_setting_team_get_num_link_watchers(NM_SETTING_TEAM(setting)), ==, 1);
+    g_assert_cmpstr(
+        nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+        ==,
+        "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"ethtool\" } }");
+
+    nm_setting_team_remove_link_watcher(NM_SETTING_TEAM(setting), 0);
+
+    _check_team_setting(setting);
+    g_assert_cmpint(nm_setting_team_get_num_link_watchers(NM_SETTING_TEAM(setting)), ==, 0);
+    g_assert_cmpstr(nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+                    ==,
+                    "{ \"runner\": { \"sys_prio\": 10 } }");
+
+    nm_setting_team_add_link_watcher(NM_SETTING_TEAM(setting), watcher1);
+    _check_team_setting(setting);
+    g_assert_cmpstr(
+        nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+        ==,
+        "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": { \"name\": \"nsna_ping\", "
+        "\"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"target_host\": \"bbb\" } }");
+
+    nm_setting_team_add_link_watcher(NM_SETTING_TEAM(setting), watcher2);
+    _check_team_setting(setting);
+    g_assert_cmpstr(
+        nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+        ==,
+        "{ \"runner\": { \"sys_prio\": 10 }, \"link_watch\": [ { \"name\": \"nsna_ping\", "
+        "\"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, \"target_host\": \"bbb\" }, { "
+        "\"name\": \"arp_ping\", \"interval\": 3, \"init_wait\": 1, \"missed_max\": 4, "
+        "\"source_host\": \"ddd\", \"target_host\": \"ccc\" } ] }");
+
+    nm_setting_team_remove_link_watcher(NM_SETTING_TEAM(setting), 0);
+    nm_setting_team_remove_link_watcher(NM_SETTING_TEAM(setting), 0);
+    g_object_set(setting, NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL, (int) 5, NULL);
+    g_assert_cmpstr(
+        nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+        ==,
+        "{ \"runner\": { \"tx_balancer\": { \"balancing_interval\": 5 }, \"sys_prio\": 10 } }");
+
+    g_object_set(setting, NM_SETTING_TEAM_RUNNER, NULL, NULL);
+    _check_team_setting(setting);
+    g_assert_cmpstr(
+        nm_setting_team_get_config(NM_SETTING_TEAM(setting)),
+        ==,
+        "{ \"runner\": { \"tx_balancer\": { \"balancing_interval\": 5 }, \"sys_prio\": 10 } }");
+
+    g_object_set(setting,
+                 NM_SETTING_TEAM_CONFIG,
+                 "{ \"runner\": { \"tx_hash\": [ \"eth\", \"l3\" ] } }",
+                 NULL);
+    _check_team_setting(setting);
 }
 
 /*****************************************************************************/
 
 static void
-_setting_ethtool_set_feature (NMSettingEthtool *s_ethtool,
-                              const char *opt_name,
-                              NMTernary value)
+_setting_ethtool_set_feature(NMSettingEthtool *s_ethtool, const char *opt_name, NMTernary value)
 {
-	g_assert (NM_IS_SETTING_ETHTOOL (s_ethtool));
-
-	if (nmtst_get_rand_bool ()) {
-		nm_setting_ethtool_set_feature (s_ethtool, opt_name, value);
-		return;
-	}
-
-	if (value == NM_TERNARY_DEFAULT) {
-		nm_setting_option_set (NM_SETTING (s_ethtool), opt_name, NULL);
-		return;
-	}
-
-	if (nmtst_get_rand_bool ())
-		nm_setting_option_set_boolean (NM_SETTING (s_ethtool), opt_name, value);
-	else
-		nm_setting_option_set (NM_SETTING (s_ethtool), opt_name, g_variant_new_boolean (value));
+    g_assert(NM_IS_SETTING_ETHTOOL(s_ethtool));
+
+    if (nmtst_get_rand_bool()) {
+        nm_setting_ethtool_set_feature(s_ethtool, opt_name, value);
+        return;
+    }
+
+    if (value == NM_TERNARY_DEFAULT) {
+        nm_setting_option_set(NM_SETTING(s_ethtool), opt_name, NULL);
+        return;
+    }
+
+    if (nmtst_get_rand_bool())
+        nm_setting_option_set_boolean(NM_SETTING(s_ethtool), opt_name, value);
+    else
+        nm_setting_option_set(NM_SETTING(s_ethtool), opt_name, g_variant_new_boolean(value));
 }
 
 static NMTernary
-_setting_ethtool_get_feature (NMSettingEthtool *s_ethtool,
-                              const char *opt_name)
+_setting_ethtool_get_feature(NMSettingEthtool *s_ethtool, const char *opt_name)
 {
-	GVariant *v;
-	gboolean b;
-
-	switch (nmtst_get_rand_uint32 () % 3) {
-	case 0:
-		return nm_setting_ethtool_get_feature (s_ethtool, opt_name);
-	case 1:
-		if (!nm_setting_option_get_boolean (NM_SETTING (s_ethtool), opt_name, &b))
-			return NM_TERNARY_DEFAULT;
-		return b;
-	default:
-		v = nm_setting_option_get (NM_SETTING (s_ethtool), opt_name);
-		if (   !v
-		    || !g_variant_is_of_type (v, G_VARIANT_TYPE_BOOLEAN))
-			return NM_TERNARY_DEFAULT;
-		return g_variant_get_boolean (v);
-	}
+    GVariant *v;
+    gboolean  b;
+
+    switch (nmtst_get_rand_uint32() % 3) {
+    case 0:
+        return nm_setting_ethtool_get_feature(s_ethtool, opt_name);
+    case 1:
+        if (!nm_setting_option_get_boolean(NM_SETTING(s_ethtool), opt_name, &b))
+            return NM_TERNARY_DEFAULT;
+        return b;
+    default:
+        v = nm_setting_option_get(NM_SETTING(s_ethtool), opt_name);
+        if (!v || !g_variant_is_of_type(v, G_VARIANT_TYPE_BOOLEAN))
+            return NM_TERNARY_DEFAULT;
+        return g_variant_get_boolean(v);
+    }
 }
 
 static void
-test_ethtool_features (void)
+test_ethtool_features(void)
 {
-	gs_unref_object NMConnection *con = NULL;
-	gs_unref_object NMConnection *con2 = NULL;
-	gs_unref_object NMConnection *con3 = NULL;
-	gs_unref_variant GVariant *variant = NULL;
-	gs_free_error GError *error = NULL;
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	NMSettingConnection *s_con;
-	NMSettingEthtool *s_ethtool;
-	NMSettingEthtool *s_ethtool2;
-	NMSettingEthtool *s_ethtool3;
-
-	con = nmtst_create_minimal_connection ("ethtool-1",
-	                                        NULL,
-	                                        NM_SETTING_WIRED_SETTING_NAME,
-	                                        &s_con);
-	s_ethtool = NM_SETTING_ETHTOOL (nm_setting_ethtool_new ());
-	nm_connection_add_setting (con, NM_SETTING (s_ethtool));
-
-	_setting_ethtool_set_feature (s_ethtool,
-	                              NM_ETHTOOL_OPTNAME_FEATURE_RX,
-	                              NM_TERNARY_TRUE);
-	_setting_ethtool_set_feature (s_ethtool,
-	                              NM_ETHTOOL_OPTNAME_FEATURE_LRO,
-	                              NM_TERNARY_FALSE);
-
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_RX), ==, NM_TERNARY_TRUE);
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_LRO), ==, NM_TERNARY_FALSE);
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_SG),  ==, NM_TERNARY_DEFAULT);
-
-	nmtst_connection_normalize (con);
-
-	variant = nm_connection_to_dbus (con, NM_CONNECTION_SERIALIZE_ALL);
-
-	con2 = nm_simple_connection_new_from_dbus (variant, &error);
-	nmtst_assert_success (con2, error);
-
-	s_ethtool2 = NM_SETTING_ETHTOOL (nm_connection_get_setting (con2, NM_TYPE_SETTING_ETHTOOL));
-
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool2, NM_ETHTOOL_OPTNAME_FEATURE_RX),  ==, NM_TERNARY_TRUE);
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool2, NM_ETHTOOL_OPTNAME_FEATURE_LRO), ==, NM_TERNARY_FALSE);
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool2, NM_ETHTOOL_OPTNAME_FEATURE_SG),  ==, NM_TERNARY_DEFAULT);
-
-	nmtst_assert_connection_verifies_without_normalization (con2);
-
-	nmtst_assert_connection_equals (con, FALSE, con2, FALSE);
-
-	keyfile = nm_keyfile_write (con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
-	nmtst_assert_success (keyfile, error);
-
-	con3 = nm_keyfile_read (keyfile,
-	                        "/ignored/current/working/directory/for/loading/relative/paths",
-	                        NM_KEYFILE_HANDLER_FLAGS_NONE,
-	                        NULL,
-	                        NULL,
-	                        &error);
-	nmtst_assert_success (con3, error);
-
-	nm_keyfile_read_ensure_id (con3, "unused-because-already-has-id");
-	nm_keyfile_read_ensure_uuid (con3, "unused-because-already-has-uuid");
-
-	nmtst_connection_normalize (con3);
-
-	nmtst_assert_connection_equals (con, FALSE, con3, FALSE);
-
-	s_ethtool3 = NM_SETTING_ETHTOOL (nm_connection_get_setting (con3, NM_TYPE_SETTING_ETHTOOL));
-
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool3, NM_ETHTOOL_OPTNAME_FEATURE_RX),  ==, NM_TERNARY_TRUE);
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool3, NM_ETHTOOL_OPTNAME_FEATURE_LRO), ==, NM_TERNARY_FALSE);
-	g_assert_cmpint (_setting_ethtool_get_feature (s_ethtool3, NM_ETHTOOL_OPTNAME_FEATURE_SG),  ==, NM_TERNARY_DEFAULT);
+    gs_unref_object NMConnection *con       = NULL;
+    gs_unref_object NMConnection *con2      = NULL;
+    gs_unref_object NMConnection *con3      = NULL;
+    gs_unref_variant GVariant *variant      = NULL;
+    gs_free_error GError *error             = NULL;
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    NMSettingConnection *           s_con;
+    NMSettingEthtool *              s_ethtool;
+    NMSettingEthtool *              s_ethtool2;
+    NMSettingEthtool *              s_ethtool3;
+
+    con = nmtst_create_minimal_connection("ethtool-1", NULL, NM_SETTING_WIRED_SETTING_NAME, &s_con);
+    s_ethtool = NM_SETTING_ETHTOOL(nm_setting_ethtool_new());
+    nm_connection_add_setting(con, NM_SETTING(s_ethtool));
+
+    _setting_ethtool_set_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_RX, NM_TERNARY_TRUE);
+    _setting_ethtool_set_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_LRO, NM_TERNARY_FALSE);
+
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_RX),
+                    ==,
+                    NM_TERNARY_TRUE);
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_LRO),
+                    ==,
+                    NM_TERNARY_FALSE);
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_SG),
+                    ==,
+                    NM_TERNARY_DEFAULT);
+
+    nmtst_connection_normalize(con);
+
+    variant = nm_connection_to_dbus(con, NM_CONNECTION_SERIALIZE_ALL);
+
+    con2 = nm_simple_connection_new_from_dbus(variant, &error);
+    nmtst_assert_success(con2, error);
+
+    s_ethtool2 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con2, NM_TYPE_SETTING_ETHTOOL));
+
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool2, NM_ETHTOOL_OPTNAME_FEATURE_RX),
+                    ==,
+                    NM_TERNARY_TRUE);
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool2, NM_ETHTOOL_OPTNAME_FEATURE_LRO),
+                    ==,
+                    NM_TERNARY_FALSE);
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool2, NM_ETHTOOL_OPTNAME_FEATURE_SG),
+                    ==,
+                    NM_TERNARY_DEFAULT);
+
+    nmtst_assert_connection_verifies_without_normalization(con2);
+
+    nmtst_assert_connection_equals(con, FALSE, con2, FALSE);
+
+    keyfile = nm_keyfile_write(con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
+    nmtst_assert_success(keyfile, error);
+
+    con3 = nm_keyfile_read(keyfile,
+                           "/ignored/current/working/directory/for/loading/relative/paths",
+                           NM_KEYFILE_HANDLER_FLAGS_NONE,
+                           NULL,
+                           NULL,
+                           &error);
+    nmtst_assert_success(con3, error);
+
+    nm_keyfile_read_ensure_id(con3, "unused-because-already-has-id");
+    nm_keyfile_read_ensure_uuid(con3, "unused-because-already-has-uuid");
+
+    nmtst_connection_normalize(con3);
+
+    nmtst_assert_connection_equals(con, FALSE, con3, FALSE);
+
+    s_ethtool3 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con3, NM_TYPE_SETTING_ETHTOOL));
+
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool3, NM_ETHTOOL_OPTNAME_FEATURE_RX),
+                    ==,
+                    NM_TERNARY_TRUE);
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool3, NM_ETHTOOL_OPTNAME_FEATURE_LRO),
+                    ==,
+                    NM_TERNARY_FALSE);
+    g_assert_cmpint(_setting_ethtool_get_feature(s_ethtool3, NM_ETHTOOL_OPTNAME_FEATURE_SG),
+                    ==,
+                    NM_TERNARY_DEFAULT);
 }
 
 static void
-test_ethtool_coalesce (void)
+test_ethtool_coalesce(void)
 {
-	gs_unref_object NMConnection *con = NULL;
-	gs_unref_object NMConnection *con2 = NULL;
-	gs_unref_object NMConnection *con3 = NULL;
-	gs_unref_variant GVariant *variant = NULL;
-	gs_free_error GError *error = NULL;
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	NMSettingConnection *s_con;
-	NMSettingEthtool *s_ethtool;
-	NMSettingEthtool *s_ethtool2;
-	NMSettingEthtool *s_ethtool3;
-	guint32 u32;
-
-	con = nmtst_create_minimal_connection ("ethtool-coalesce",
-	                                        NULL,
-	                                        NM_SETTING_WIRED_SETTING_NAME,
-	                                        &s_con);
-	s_ethtool = NM_SETTING_ETHTOOL (nm_setting_ethtool_new ());
-	nm_connection_add_setting (con, NM_SETTING (s_ethtool));
-
-	nm_setting_option_set_uint32 (NM_SETTING (s_ethtool),
-	                              NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES,
-	                              4);
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, &u32));
-	g_assert_cmpuint (u32, ==, 4);
-
-	nmtst_connection_normalize (con);
-
-	variant = nm_connection_to_dbus (con, NM_CONNECTION_SERIALIZE_ALL);
-
-	con2 = nm_simple_connection_new_from_dbus (variant, &error);
-	nmtst_assert_success (con2, error);
-
-	s_ethtool2 = NM_SETTING_ETHTOOL (nm_connection_get_setting (con2, NM_TYPE_SETTING_ETHTOOL));
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool2), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, &u32));
-	g_assert_cmpuint (u32, ==, 4);
-
-	nmtst_assert_connection_verifies_without_normalization (con2);
-
-	nmtst_assert_connection_equals (con, FALSE, con2, FALSE);
-
-	keyfile = nm_keyfile_write (con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
-	nmtst_assert_success (keyfile, error);
-
-	con3 = nm_keyfile_read (keyfile,
-	                        "/ignored/current/working/directory/for/loading/relative/paths",
-	                        NM_KEYFILE_HANDLER_FLAGS_NONE,
-	                        NULL,
-	                        NULL,
-	                        &error);
-	nmtst_assert_success (con3, error);
-
-	nm_keyfile_read_ensure_id (con3, "unused-because-already-has-id");
-	nm_keyfile_read_ensure_uuid (con3, "unused-because-already-has-uuid");
-
-	nmtst_connection_normalize (con3);
-
-	nmtst_assert_connection_equals (con, FALSE, con3, FALSE);
-
-	s_ethtool3 = NM_SETTING_ETHTOOL (nm_connection_get_setting (con3, NM_TYPE_SETTING_ETHTOOL));
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool3), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, &u32));
-	g_assert_cmpuint (u32, ==, 4);
-
-
-	nm_setting_option_set (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, NULL);
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, NULL));
-
-	nm_setting_option_set_uint32 (NM_SETTING (s_ethtool),
-	                              NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES,
-	                              8);
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES, &u32));
-	g_assert_cmpuint (u32, ==, 8);
-
-	nm_setting_option_clear_by_name (NM_SETTING (s_ethtool), nm_ethtool_optname_is_coalesce);
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, NULL));
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES, NULL));
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS, NULL));
+    gs_unref_object NMConnection *con       = NULL;
+    gs_unref_object NMConnection *con2      = NULL;
+    gs_unref_object NMConnection *con3      = NULL;
+    gs_unref_variant GVariant *variant      = NULL;
+    gs_free_error GError *error             = NULL;
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    NMSettingConnection *           s_con;
+    NMSettingEthtool *              s_ethtool;
+    NMSettingEthtool *              s_ethtool2;
+    NMSettingEthtool *              s_ethtool3;
+    guint32                         u32;
+
+    con       = nmtst_create_minimal_connection("ethtool-coalesce",
+                                          NULL,
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          &s_con);
+    s_ethtool = NM_SETTING_ETHTOOL(nm_setting_ethtool_new());
+    nm_connection_add_setting(con, NM_SETTING(s_ethtool));
+
+    nm_setting_option_set_uint32(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, 4);
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                               NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES,
+                                               &u32));
+    g_assert_cmpuint(u32, ==, 4);
+
+    nmtst_connection_normalize(con);
+
+    variant = nm_connection_to_dbus(con, NM_CONNECTION_SERIALIZE_ALL);
+
+    con2 = nm_simple_connection_new_from_dbus(variant, &error);
+    nmtst_assert_success(con2, error);
+
+    s_ethtool2 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con2, NM_TYPE_SETTING_ETHTOOL));
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool2),
+                                               NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES,
+                                               &u32));
+    g_assert_cmpuint(u32, ==, 4);
+
+    nmtst_assert_connection_verifies_without_normalization(con2);
+
+    nmtst_assert_connection_equals(con, FALSE, con2, FALSE);
+
+    keyfile = nm_keyfile_write(con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
+    nmtst_assert_success(keyfile, error);
+
+    con3 = nm_keyfile_read(keyfile,
+                           "/ignored/current/working/directory/for/loading/relative/paths",
+                           NM_KEYFILE_HANDLER_FLAGS_NONE,
+                           NULL,
+                           NULL,
+                           &error);
+    nmtst_assert_success(con3, error);
+
+    nm_keyfile_read_ensure_id(con3, "unused-because-already-has-id");
+    nm_keyfile_read_ensure_uuid(con3, "unused-because-already-has-uuid");
+
+    nmtst_connection_normalize(con3);
+
+    nmtst_assert_connection_equals(con, FALSE, con3, FALSE);
+
+    s_ethtool3 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con3, NM_TYPE_SETTING_ETHTOOL));
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool3),
+                                               NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES,
+                                               &u32));
+    g_assert_cmpuint(u32, ==, 4);
+
+    nm_setting_option_set(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES, NULL);
+    g_assert_false(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                                NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES,
+                                                NULL));
+
+    nm_setting_option_set_uint32(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES, 8);
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                               NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES,
+                                               &u32));
+    g_assert_cmpuint(u32, ==, 8);
+
+    nm_setting_option_clear_by_name(NM_SETTING(s_ethtool), nm_ethtool_optname_is_coalesce);
+    g_assert_false(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                                NM_ETHTOOL_OPTNAME_COALESCE_RX_FRAMES,
+                                                NULL));
+    g_assert_false(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                                NM_ETHTOOL_OPTNAME_COALESCE_TX_FRAMES,
+                                                NULL));
+    g_assert_false(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                                NM_ETHTOOL_OPTNAME_COALESCE_TX_USECS,
+                                                NULL));
 }
 
 static void
-test_ethtool_ring (void)
+test_ethtool_ring(void)
 {
-	gs_unref_object NMConnection *con = NULL;
-	gs_unref_object NMConnection *con2 = NULL;
-	gs_unref_object NMConnection *con3 = NULL;
-	gs_unref_variant GVariant *variant = NULL;
-	gs_free_error GError *error = NULL;
-	gs_unref_keyfile GKeyFile *keyfile = NULL;
-	NMSettingConnection *s_con;
-	NMSettingEthtool *s_ethtool;
-	NMSettingEthtool *s_ethtool2;
-	NMSettingEthtool *s_ethtool3;
-	guint32 out_value;
-
-	con = nmtst_create_minimal_connection ("ethtool-ring",
-	                                        NULL,
-	                                        NM_SETTING_WIRED_SETTING_NAME,
-	                                        &s_con);
-	s_ethtool = NM_SETTING_ETHTOOL (nm_setting_ethtool_new ());
-	nm_connection_add_setting (con, NM_SETTING (s_ethtool));
-
-	nm_setting_option_set_uint32 (NM_SETTING (s_ethtool),
-	                              NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
-	                              4);
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, &out_value));
-	g_assert_cmpuint (out_value, ==, 4);
-
-	nmtst_connection_normalize (con);
-
-	variant = nm_connection_to_dbus (con, NM_CONNECTION_SERIALIZE_ALL);
-
-	con2 = nm_simple_connection_new_from_dbus (variant, &error);
-	nmtst_assert_success (con2, error);
-
-	s_ethtool2 = NM_SETTING_ETHTOOL (nm_connection_get_setting (con2, NM_TYPE_SETTING_ETHTOOL));
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool2), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, &out_value));
-	g_assert_cmpuint (out_value, ==, 4);
-
-	nmtst_assert_connection_verifies_without_normalization (con2);
-
-	nmtst_assert_connection_equals (con, FALSE, con2, FALSE);
-
-	keyfile = nm_keyfile_write (con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
-	nmtst_assert_success (keyfile, error);
-
-	con3 = nm_keyfile_read (keyfile,
-	                        "/ignored/current/working/directory/for/loading/relative/paths",
-	                        NM_KEYFILE_HANDLER_FLAGS_NONE,
-	                        NULL,
-	                        NULL,
-	                        &error);
-	nmtst_assert_success (con3, error);
-
-	nm_keyfile_read_ensure_id (con3, "unused-because-already-has-id");
-	nm_keyfile_read_ensure_uuid (con3, "unused-because-already-has-uuid");
-
-	nmtst_connection_normalize (con3);
-
-	nmtst_assert_connection_equals (con, FALSE, con3, FALSE);
-
-	s_ethtool3 = NM_SETTING_ETHTOOL (nm_connection_get_setting (con3, NM_TYPE_SETTING_ETHTOOL));
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool3), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, &out_value));
-	g_assert_cmpuint (out_value, ==, 4);
-
-
-	nm_setting_option_set (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, NULL);
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, NULL));
-
-	nm_setting_option_set_uint32 (NM_SETTING (s_ethtool),
-	                              NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
-	                              8);
-
-	g_assert_true (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, &out_value));
-	g_assert_cmpuint (out_value, ==, 8);
-
-	nm_setting_option_clear_by_name (NM_SETTING (s_ethtool), nm_ethtool_optname_is_ring);
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, NULL));
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX, NULL));
-	g_assert_false (nm_setting_option_get_uint32 (NM_SETTING (s_ethtool), NM_ETHTOOL_OPTNAME_RING_TX, NULL));
+    gs_unref_object NMConnection *con       = NULL;
+    gs_unref_object NMConnection *con2      = NULL;
+    gs_unref_object NMConnection *con3      = NULL;
+    gs_unref_variant GVariant *variant      = NULL;
+    gs_free_error GError *error             = NULL;
+    nm_auto_unref_keyfile GKeyFile *keyfile = NULL;
+    NMSettingConnection *           s_con;
+    NMSettingEthtool *              s_ethtool;
+    NMSettingEthtool *              s_ethtool2;
+    NMSettingEthtool *              s_ethtool3;
+    guint32                         out_value;
+
+    con       = nmtst_create_minimal_connection("ethtool-ring",
+                                          NULL,
+                                          NM_SETTING_WIRED_SETTING_NAME,
+                                          &s_con);
+    s_ethtool = NM_SETTING_ETHTOOL(nm_setting_ethtool_new());
+    nm_connection_add_setting(con, NM_SETTING(s_ethtool));
+
+    nm_setting_option_set_uint32(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, 4);
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                               NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
+                                               &out_value));
+    g_assert_cmpuint(out_value, ==, 4);
+
+    nmtst_connection_normalize(con);
+
+    variant = nm_connection_to_dbus(con, NM_CONNECTION_SERIALIZE_ALL);
+
+    con2 = nm_simple_connection_new_from_dbus(variant, &error);
+    nmtst_assert_success(con2, error);
+
+    s_ethtool2 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con2, NM_TYPE_SETTING_ETHTOOL));
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool2),
+                                               NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
+                                               &out_value));
+    g_assert_cmpuint(out_value, ==, 4);
+
+    nmtst_assert_connection_verifies_without_normalization(con2);
+
+    nmtst_assert_connection_equals(con, FALSE, con2, FALSE);
+
+    keyfile = nm_keyfile_write(con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
+    nmtst_assert_success(keyfile, error);
+
+    con3 = nm_keyfile_read(keyfile,
+                           "/ignored/current/working/directory/for/loading/relative/paths",
+                           NM_KEYFILE_HANDLER_FLAGS_NONE,
+                           NULL,
+                           NULL,
+                           &error);
+    nmtst_assert_success(con3, error);
+
+    nm_keyfile_read_ensure_id(con3, "unused-because-already-has-id");
+    nm_keyfile_read_ensure_uuid(con3, "unused-because-already-has-uuid");
+
+    nmtst_connection_normalize(con3);
+
+    nmtst_assert_connection_equals(con, FALSE, con3, FALSE);
+
+    s_ethtool3 = NM_SETTING_ETHTOOL(nm_connection_get_setting(con3, NM_TYPE_SETTING_ETHTOOL));
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool3),
+                                               NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
+                                               &out_value));
+    g_assert_cmpuint(out_value, ==, 4);
+
+    nm_setting_option_set(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, NULL);
+    g_assert_false(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                                NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
+                                                NULL));
+
+    nm_setting_option_set_uint32(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX_JUMBO, 8);
+
+    g_assert_true(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                               NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
+                                               &out_value));
+    g_assert_cmpuint(out_value, ==, 8);
+
+    nm_setting_option_clear_by_name(NM_SETTING(s_ethtool), nm_ethtool_optname_is_ring);
+    g_assert_false(nm_setting_option_get_uint32(NM_SETTING(s_ethtool),
+                                                NM_ETHTOOL_OPTNAME_RING_RX_JUMBO,
+                                                NULL));
+    g_assert_false(
+        nm_setting_option_get_uint32(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_RING_RX, NULL));
+    g_assert_false(
+        nm_setting_option_get_uint32(NM_SETTING(s_ethtool), NM_ETHTOOL_OPTNAME_RING_TX, NULL));
 }
 
 /*****************************************************************************/
 
 static void
-test_sriov_vf (void)
+test_sriov_vf(void)
 {
-	NMSriovVF *vf1, *vf2;
-	GError *error = NULL;
-	char *str;
-
-	vf1 = nm_sriov_vf_new (1);
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_MAC, g_variant_new_string ("00:11:22:33:44:55"));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK, g_variant_new_boolean (TRUE));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean (FALSE));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_MIN_TX_RATE, g_variant_new_uint32 (100));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_MAX_TX_RATE, g_variant_new_uint32 (500));
-
-	str = nm_utils_sriov_vf_to_str (vf1, FALSE, &error);
-	g_assert_no_error (error);
-	g_assert_cmpstr (str, ==, "1 mac=00:11:22:33:44:55 max-tx-rate=500 min-tx-rate=100 spoof-check=true trust=false");
-	g_free (str);
-
-	vf2 = nm_utils_sriov_vf_from_str (" 1  mac=00:11:22:33:44:55  max-tx-rate=500 min-tx-rate=100", &error);
-	nmtst_assert_success (vf2, error);
-	nm_sriov_vf_set_attribute (vf2, NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK, g_variant_new_boolean (FALSE));
-	nm_sriov_vf_set_attribute (vf2, NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK, g_variant_new_boolean (TRUE));
-	nm_sriov_vf_set_attribute (vf2, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean (TRUE));
-	nm_sriov_vf_set_attribute (vf2, NM_SRIOV_VF_ATTRIBUTE_TRUST, NULL);
-	nm_sriov_vf_set_attribute (vf2, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean (FALSE));
-
-	g_assert (nm_sriov_vf_equal (vf1, vf2));
-
-	nm_sriov_vf_unref (vf1);
-	nm_sriov_vf_unref (vf2);
+    NMSriovVF *vf1, *vf2;
+    GError *   error = NULL;
+    char *     str;
+
+    vf1 = nm_sriov_vf_new(1);
+    nm_sriov_vf_set_attribute(vf1,
+                              NM_SRIOV_VF_ATTRIBUTE_MAC,
+                              g_variant_new_string("00:11:22:33:44:55"));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK, g_variant_new_boolean(TRUE));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean(FALSE));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_MIN_TX_RATE, g_variant_new_uint32(100));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_MAX_TX_RATE, g_variant_new_uint32(500));
+
+    str = nm_utils_sriov_vf_to_str(vf1, FALSE, &error);
+    g_assert_no_error(error);
+    g_assert_cmpstr(
+        str,
+        ==,
+        "1 mac=00:11:22:33:44:55 max-tx-rate=500 min-tx-rate=100 spoof-check=true trust=false");
+    g_free(str);
+
+    vf2 = nm_utils_sriov_vf_from_str(" 1  mac=00:11:22:33:44:55  max-tx-rate=500 min-tx-rate=100",
+                                     &error);
+    nmtst_assert_success(vf2, error);
+    nm_sriov_vf_set_attribute(vf2, NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK, g_variant_new_boolean(FALSE));
+    nm_sriov_vf_set_attribute(vf2, NM_SRIOV_VF_ATTRIBUTE_SPOOF_CHECK, g_variant_new_boolean(TRUE));
+    nm_sriov_vf_set_attribute(vf2, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean(TRUE));
+    nm_sriov_vf_set_attribute(vf2, NM_SRIOV_VF_ATTRIBUTE_TRUST, NULL);
+    nm_sriov_vf_set_attribute(vf2, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean(FALSE));
+
+    g_assert(nm_sriov_vf_equal(vf1, vf2));
+
+    nm_sriov_vf_unref(vf1);
+    nm_sriov_vf_unref(vf2);
 }
 
 static void
-test_sriov_vf_dup (void)
+test_sriov_vf_dup(void)
 {
-	NMSriovVF *vf1, *vf2;
+    NMSriovVF *vf1, *vf2;
 
-	vf1 = nm_sriov_vf_new (1);
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_MAC, g_variant_new_string ("foobar"));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean (FALSE));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_MIN_TX_RATE, g_variant_new_uint32 (10));
-	nm_sriov_vf_set_attribute (vf1, NM_SRIOV_VF_ATTRIBUTE_MAX_TX_RATE, g_variant_new_uint32 (1000));
-	nm_sriov_vf_add_vlan (vf1, 80);
-	nm_sriov_vf_set_vlan_qos (vf1, 80, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
+    vf1 = nm_sriov_vf_new(1);
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_MAC, g_variant_new_string("foobar"));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_TRUST, g_variant_new_boolean(FALSE));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_MIN_TX_RATE, g_variant_new_uint32(10));
+    nm_sriov_vf_set_attribute(vf1, NM_SRIOV_VF_ATTRIBUTE_MAX_TX_RATE, g_variant_new_uint32(1000));
+    nm_sriov_vf_add_vlan(vf1, 80);
+    nm_sriov_vf_set_vlan_qos(vf1, 80, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
 
-	vf2 = nm_sriov_vf_dup (vf1);
-	g_assert (nm_sriov_vf_equal (vf1, vf2));
+    vf2 = nm_sriov_vf_dup(vf1);
+    g_assert(nm_sriov_vf_equal(vf1, vf2));
 
-	nm_sriov_vf_unref (vf1);
-	nm_sriov_vf_unref (vf2);
+    nm_sriov_vf_unref(vf1);
+    nm_sriov_vf_unref(vf2);
 }
 
 static void
-test_sriov_vf_vlan (void)
+test_sriov_vf_vlan(void)
 {
-	NMSriovVF *vf;
-	const guint *vlan_ids;
-	guint num;
-	GError *error = NULL;
-	gs_free char *str = NULL;
-
-	vf = nm_sriov_vf_new (19);
-	nm_sriov_vf_set_attribute (vf, NM_SRIOV_VF_ATTRIBUTE_MAC, g_variant_new_string ("00:11:22"));
-	g_assert (nm_sriov_vf_add_vlan (vf, 80));
-	g_assert (!nm_sriov_vf_add_vlan (vf, 80));
-	g_assert (nm_sriov_vf_add_vlan (vf, 82));
-	g_assert (nm_sriov_vf_add_vlan (vf, 83));
-	g_assert (nm_sriov_vf_add_vlan (vf, 81));
-	g_assert (!nm_sriov_vf_remove_vlan (vf, 100));
-	g_assert (nm_sriov_vf_remove_vlan (vf, 82));
-	nm_sriov_vf_set_vlan_qos (vf, 81, 0xabba);
-	nm_sriov_vf_set_vlan_protocol (vf, 81, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
-
-	vlan_ids = nm_sriov_vf_get_vlan_ids (vf, &num);
-	g_assert (vlan_ids);
-	g_assert_cmpint (num, ==, 3);
-	g_assert_cmpint (vlan_ids[0], ==, 80);
-	g_assert_cmpint (vlan_ids[1], ==, 81);
-	g_assert_cmpint (vlan_ids[2], ==, 83);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, 80), ==, 0x0);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, 80), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, 81), ==, 0xabba);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, 81), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
-
-	nm_sriov_vf_unref (vf);
-
-	vf = nm_utils_sriov_vf_from_str ("20 spoof-check=false vlans=85.0.q;4000.0x20.ad;81.10;83", &error);
-	nmtst_assert_success (vf, error);
-	vlan_ids = nm_sriov_vf_get_vlan_ids (vf, &num);
-	g_assert (vlan_ids);
-	g_assert_cmpint (num, ==, 4);
-	g_assert_cmpint (vlan_ids[0], ==, 81);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, 81), ==, 10);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, 81), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
-	g_assert_cmpint (vlan_ids[1], ==, 83);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, 83), ==, 0);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, 83), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
-	g_assert_cmpint (vlan_ids[2], ==, 85);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, 85), ==, 0);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, 85), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
-	g_assert_cmpint (vlan_ids[3], ==, 4000);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, 4000), ==, 0x20);
-	g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, 4000), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
-
-	str = nm_utils_sriov_vf_to_str (vf, FALSE, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "20 spoof-check=false vlans=81.10;83;85;4000.32.ad");
-
-	nm_sriov_vf_unref (vf);
+    NMSriovVF *   vf;
+    const guint * vlan_ids;
+    guint         num;
+    GError *      error = NULL;
+    gs_free char *str   = NULL;
+
+    vf = nm_sriov_vf_new(19);
+    nm_sriov_vf_set_attribute(vf, NM_SRIOV_VF_ATTRIBUTE_MAC, g_variant_new_string("00:11:22"));
+    g_assert(nm_sriov_vf_add_vlan(vf, 80));
+    g_assert(!nm_sriov_vf_add_vlan(vf, 80));
+    g_assert(nm_sriov_vf_add_vlan(vf, 82));
+    g_assert(nm_sriov_vf_add_vlan(vf, 83));
+    g_assert(nm_sriov_vf_add_vlan(vf, 81));
+    g_assert(!nm_sriov_vf_remove_vlan(vf, 100));
+    g_assert(nm_sriov_vf_remove_vlan(vf, 82));
+    nm_sriov_vf_set_vlan_qos(vf, 81, 0xabba);
+    nm_sriov_vf_set_vlan_protocol(vf, 81, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
+
+    vlan_ids = nm_sriov_vf_get_vlan_ids(vf, &num);
+    g_assert(vlan_ids);
+    g_assert_cmpint(num, ==, 3);
+    g_assert_cmpint(vlan_ids[0], ==, 80);
+    g_assert_cmpint(vlan_ids[1], ==, 81);
+    g_assert_cmpint(vlan_ids[2], ==, 83);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, 80), ==, 0x0);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, 80), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, 81), ==, 0xabba);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, 81), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
+
+    nm_sriov_vf_unref(vf);
+
+    vf = nm_utils_sriov_vf_from_str("20 spoof-check=false vlans=85.0.q;4000.0x20.ad;81.10;83",
+                                    &error);
+    nmtst_assert_success(vf, error);
+    vlan_ids = nm_sriov_vf_get_vlan_ids(vf, &num);
+    g_assert(vlan_ids);
+    g_assert_cmpint(num, ==, 4);
+    g_assert_cmpint(vlan_ids[0], ==, 81);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, 81), ==, 10);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, 81), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
+    g_assert_cmpint(vlan_ids[1], ==, 83);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, 83), ==, 0);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, 83), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
+    g_assert_cmpint(vlan_ids[2], ==, 85);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, 85), ==, 0);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, 85), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
+    g_assert_cmpint(vlan_ids[3], ==, 4000);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, 4000), ==, 0x20);
+    g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, 4000), ==, NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD);
+
+    str = nm_utils_sriov_vf_to_str(vf, FALSE, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "20 spoof-check=false vlans=81.10;83;85;4000.32.ad");
+
+    nm_sriov_vf_unref(vf);
 }
 
 static void
-test_sriov_setting (void)
+test_sriov_setting(void)
 {
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingConnection *s_con;
-	NMSettingSriov *s_sriov = NULL;
-	NMSriovVF *vf1, *vf2, *vf3;
-	GError *error = NULL;
-	gboolean success;
-
-	con = nm_simple_connection_new ();
-
-	s_con = (NMSettingConnection *) nm_setting_connection_new ();
-	nm_connection_add_setting (con, NM_SETTING (s_con));
-
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_ID, "Test SR-IOV connection",
-	              NM_SETTING_CONNECTION_UUID, nm_utils_uuid_generate_a (),
-	              NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "eth0",
-	              NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
-	              NULL);
-
-	nm_connection_add_setting (con, nm_setting_wired_new ());
-
-	s_sriov = (NMSettingSriov *) nm_setting_sriov_new ();
-	nm_connection_add_setting (con, NM_SETTING (s_sriov));
-
-	g_object_set (s_sriov, NM_SETTING_SRIOV_TOTAL_VFS, 16, NULL);
-	nm_setting_sriov_add_vf (s_sriov, (vf1 = nm_sriov_vf_new (0)));
-	nm_setting_sriov_add_vf (s_sriov, (vf2 = nm_sriov_vf_new (4)));
-	nm_setting_sriov_add_vf (s_sriov, (vf3 = nm_sriov_vf_new (10)));
-	g_assert (nm_setting_sriov_remove_vf_by_index (s_sriov, 4));
-	nm_sriov_vf_unref (vf2);
-	nm_setting_sriov_add_vf (s_sriov, (vf2 = nm_sriov_vf_new (2)));
-
-	nmtst_assert_connection_verifies_and_normalizable (con);
-	nmtst_connection_normalize (con);
-	success = nm_setting_verify ((NMSetting *) s_sriov, con, &error);
-	nmtst_assert_success (success, error);
-
-	g_assert_cmpint (nm_setting_sriov_get_num_vfs (s_sriov), ==, 3);
-	g_assert_cmpint (nm_sriov_vf_get_index (nm_setting_sriov_get_vf (s_sriov, 0)), ==, 0);
-	g_assert_cmpint (nm_sriov_vf_get_index (nm_setting_sriov_get_vf (s_sriov, 1)), ==, 2);
-	g_assert_cmpint (nm_sriov_vf_get_index (nm_setting_sriov_get_vf (s_sriov, 2)), ==, 10);
-
-	nm_sriov_vf_unref (vf1);
-	nm_sriov_vf_unref (vf2);
-	nm_sriov_vf_unref (vf3);
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingSriov *              s_sriov = NULL;
+    NMSriovVF *                   vf1, *vf2, *vf3;
+    GError *                      error = NULL;
+    gboolean                      success;
+
+    con = nm_simple_connection_new();
+
+    s_con = (NMSettingConnection *) nm_setting_connection_new();
+    nm_connection_add_setting(con, NM_SETTING(s_con));
+
+    g_object_set(s_con,
+                 NM_SETTING_CONNECTION_ID,
+                 "Test SR-IOV connection",
+                 NM_SETTING_CONNECTION_UUID,
+                 nm_utils_uuid_generate_a(),
+                 NM_SETTING_CONNECTION_AUTOCONNECT,
+                 TRUE,
+                 NM_SETTING_CONNECTION_INTERFACE_NAME,
+                 "eth0",
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_WIRED_SETTING_NAME,
+                 NULL);
+
+    nm_connection_add_setting(con, nm_setting_wired_new());
+
+    s_sriov = (NMSettingSriov *) nm_setting_sriov_new();
+    nm_connection_add_setting(con, NM_SETTING(s_sriov));
+
+    g_object_set(s_sriov, NM_SETTING_SRIOV_TOTAL_VFS, 16, NULL);
+    nm_setting_sriov_add_vf(s_sriov, (vf1 = nm_sriov_vf_new(0)));
+    nm_setting_sriov_add_vf(s_sriov, (vf2 = nm_sriov_vf_new(4)));
+    nm_setting_sriov_add_vf(s_sriov, (vf3 = nm_sriov_vf_new(10)));
+    g_assert(nm_setting_sriov_remove_vf_by_index(s_sriov, 4));
+    nm_sriov_vf_unref(vf2);
+    nm_setting_sriov_add_vf(s_sriov, (vf2 = nm_sriov_vf_new(2)));
+
+    nmtst_assert_connection_verifies_and_normalizable(con);
+    nmtst_connection_normalize(con);
+    success = nm_setting_verify((NMSetting *) s_sriov, con, &error);
+    nmtst_assert_success(success, error);
+
+    g_assert_cmpint(nm_setting_sriov_get_num_vfs(s_sriov), ==, 3);
+    g_assert_cmpint(nm_sriov_vf_get_index(nm_setting_sriov_get_vf(s_sriov, 0)), ==, 0);
+    g_assert_cmpint(nm_sriov_vf_get_index(nm_setting_sriov_get_vf(s_sriov, 1)), ==, 2);
+    g_assert_cmpint(nm_sriov_vf_get_index(nm_setting_sriov_get_vf(s_sriov, 2)), ==, 10);
+
+    nm_sriov_vf_unref(vf1);
+    nm_sriov_vf_unref(vf2);
+    nm_sriov_vf_unref(vf3);
 }
 
 typedef struct {
-	guint id;
-	guint qos;
-	bool  proto_ad;
+    guint id;
+    guint qos;
+    bool  proto_ad;
 } VlanData;
 
 static void
-_test_sriov_parse_vlan_one (const char *string, gboolean exp_res, VlanData *data, guint data_length)
+_test_sriov_parse_vlan_one(const char *string, gboolean exp_res, VlanData *data, guint data_length)
 {
-	NMSriovVF *vf;
-	gboolean res;
-	guint i, num_vlans;
-	const guint *vlan_ids;
-
-	vf = nm_sriov_vf_new (1);
-	g_assert (vf);
-
-	res = _nm_sriov_vf_parse_vlans (vf, string, NULL);
-	g_assert_cmpint (res, ==, exp_res);
-
-	if (exp_res) {
-		vlan_ids = nm_sriov_vf_get_vlan_ids (vf, &num_vlans);
-		g_assert_cmpint (num_vlans, ==, data_length);
-		for (i = 0; i < num_vlans; i++) {
-			g_assert_cmpint (vlan_ids[i], ==, data[i].id);
-			g_assert_cmpint (nm_sriov_vf_get_vlan_qos (vf, vlan_ids[i]), ==, data[i].qos);
-			g_assert_cmpint (nm_sriov_vf_get_vlan_protocol (vf, vlan_ids[i]),
-			                 ==,
-			                 data[i].proto_ad ? NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD: NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
-		}
-	}
-
-	nm_sriov_vf_unref (vf);
+    NMSriovVF *  vf;
+    gboolean     res;
+    guint        i, num_vlans;
+    const guint *vlan_ids;
+
+    vf = nm_sriov_vf_new(1);
+    g_assert(vf);
+
+    res = _nm_sriov_vf_parse_vlans(vf, string, NULL);
+    g_assert_cmpint(res, ==, exp_res);
+
+    if (exp_res) {
+        vlan_ids = nm_sriov_vf_get_vlan_ids(vf, &num_vlans);
+        g_assert_cmpint(num_vlans, ==, data_length);
+        for (i = 0; i < num_vlans; i++) {
+            g_assert_cmpint(vlan_ids[i], ==, data[i].id);
+            g_assert_cmpint(nm_sriov_vf_get_vlan_qos(vf, vlan_ids[i]), ==, data[i].qos);
+            g_assert_cmpint(nm_sriov_vf_get_vlan_protocol(vf, vlan_ids[i]),
+                            ==,
+                            data[i].proto_ad ? NM_SRIOV_VF_VLAN_PROTOCOL_802_1AD
+                                             : NM_SRIOV_VF_VLAN_PROTOCOL_802_1Q);
+        }
+    }
+
+    nm_sriov_vf_unref(vf);
 }
 
-#define test_sriov_parse_vlan_one(string, result, ...) \
-	{ \
-		VlanData _data[] = { __VA_ARGS__ }; \
-		guint _length = G_N_ELEMENTS (_data); \
-		\
-		_test_sriov_parse_vlan_one (string, result, _data, _length); \
-	}
+#define test_sriov_parse_vlan_one(string, result, ...)              \
+    {                                                               \
+        VlanData _data[] = {__VA_ARGS__};                           \
+        guint    _length = G_N_ELEMENTS(_data);                     \
+                                                                    \
+        _test_sriov_parse_vlan_one(string, result, _data, _length); \
+    }
 
 static void
-test_sriov_parse_vlans (void)
+test_sriov_parse_vlans(void)
 {
-	test_sriov_parse_vlan_one ("",  FALSE, {});
-	test_sriov_parse_vlan_one ("1", TRUE, {1, 0, 0});
-	test_sriov_parse_vlan_one ("1;2", TRUE, {1, 0, 0}, {2, 0, 0});
-	test_sriov_parse_vlan_one ("4095;;2", TRUE, {2, 0, 0}, {4095, 0, 0});
-	test_sriov_parse_vlan_one ("1 2", FALSE, {});
-	test_sriov_parse_vlan_one ("4096", FALSE, {});
-	test_sriov_parse_vlan_one ("1.10", TRUE, {1, 10, 0});
-	test_sriov_parse_vlan_one ("1.20.ad", TRUE, {1, 20, 1});
-	test_sriov_parse_vlan_one ("1.21.q", TRUE, {1, 21, 0});
-	test_sriov_parse_vlan_one ("9.20.foo", FALSE, {});
-	test_sriov_parse_vlan_one ("1.20.ad.12", FALSE, {});
-	test_sriov_parse_vlan_one ("1;1.10", FALSE, {});
-	test_sriov_parse_vlan_one ("1..1;2", FALSE, {});
-	test_sriov_parse_vlan_one ("1..ad;2", FALSE, {});
-	test_sriov_parse_vlan_one ("1.2.ad;2.0.q;5;3", TRUE, {1, 2, 1}, {2, 0, 0}, {3, 0, 0}, {5, 0, 0});
+    test_sriov_parse_vlan_one("", FALSE, {});
+    test_sriov_parse_vlan_one("1", TRUE, {1, 0, 0});
+    test_sriov_parse_vlan_one("1;2", TRUE, {1, 0, 0}, {2, 0, 0});
+    test_sriov_parse_vlan_one("4095;;2", TRUE, {2, 0, 0}, {4095, 0, 0});
+    test_sriov_parse_vlan_one("1 2", FALSE, {});
+    test_sriov_parse_vlan_one("4096", FALSE, {});
+    test_sriov_parse_vlan_one("1.10", TRUE, {1, 10, 0});
+    test_sriov_parse_vlan_one("1.20.ad", TRUE, {1, 20, 1});
+    test_sriov_parse_vlan_one("1.21.q", TRUE, {1, 21, 0});
+    test_sriov_parse_vlan_one("9.20.foo", FALSE, {});
+    test_sriov_parse_vlan_one("1.20.ad.12", FALSE, {});
+    test_sriov_parse_vlan_one("1;1.10", FALSE, {});
+    test_sriov_parse_vlan_one("1..1;2", FALSE, {});
+    test_sriov_parse_vlan_one("1..ad;2", FALSE, {});
+    test_sriov_parse_vlan_one("1.2.ad;2.0.q;5;3", TRUE, {1, 2, 1}, {2, 0, 0}, {3, 0, 0}, {5, 0, 0});
 }
 
 static void
-test_bridge_vlans (void)
+test_bridge_vlans(void)
 {
-	NMBridgeVlan *v1, *v2;
-	GError *error = NULL;
-	guint16 vid_start, vid_end;
-	char *str;
-
-	v1 = nm_bridge_vlan_from_str ("1 foobar", &error);
-	nmtst_assert_no_success (v1, error);
-	g_clear_error (&error);
-
-	v1 = nm_bridge_vlan_from_str ("4095", &error);
-	nmtst_assert_no_success (v1, error);
-	g_clear_error (&error);
-
-	/* test ranges */
-	v1 = nm_bridge_vlan_from_str ("2-1000 untagged", &error);
-	nmtst_assert_success (v1, error);
-	g_assert_cmpint (nm_bridge_vlan_get_vid_range (v1, &vid_start, &vid_end), ==, TRUE);
-	g_assert_cmpuint (vid_start, ==, 2);
-	g_assert_cmpuint (vid_end, ==, 1000);
-	g_assert_cmpint (nm_bridge_vlan_is_pvid (v1), ==, FALSE);
-	g_assert_cmpint (nm_bridge_vlan_is_untagged (v1), ==, TRUE);
-	nm_bridge_vlan_unref (v1);
-
-	/* test comparison (1) */
-	v1 = nm_bridge_vlan_from_str ("10 untagged", &error);
-	nmtst_assert_success (v1, error);
-
-	g_assert_cmpint (nm_bridge_vlan_get_vid_range (v1, &vid_start, &vid_end), ==, FALSE);
-	g_assert_cmpuint (vid_start, ==, 10);
-	g_assert_cmpuint (vid_end, ==, 10);
-	g_assert_cmpint (nm_bridge_vlan_is_sealed (v1), ==, FALSE);
-	g_assert_cmpint (nm_bridge_vlan_is_pvid (v1), ==, FALSE);
-	g_assert_cmpint (nm_bridge_vlan_is_untagged (v1), ==, TRUE);
-
-	nm_bridge_vlan_set_pvid (v1, TRUE);
-	nm_bridge_vlan_set_untagged (v1, FALSE);
-	nm_bridge_vlan_seal (v1);
-
-	g_assert_cmpint (nm_bridge_vlan_is_sealed (v1), ==, TRUE);
-	g_assert_cmpint (nm_bridge_vlan_is_pvid (v1), ==, TRUE);
-	g_assert_cmpint (nm_bridge_vlan_is_untagged (v1), ==, FALSE);
-
-	str = nm_bridge_vlan_to_str (v1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "10 pvid");
-	nm_clear_g_free (&str);
-
-	v2 = nm_bridge_vlan_from_str ("  10  pvid  ", &error);
-	nmtst_assert_success (v2, error);
-
-	g_assert_cmpint (nm_bridge_vlan_cmp (v1, v2), ==, 0);
-
-	nm_bridge_vlan_unref (v1);
-	nm_bridge_vlan_unref (v2);
-
-	/* test comparison (2) */
-	v1 = nm_bridge_vlan_from_str ("10", &error);
-	nmtst_assert_success (v1, error);
-	v2 = nm_bridge_vlan_from_str ("20", &error);
-	nmtst_assert_success (v2, error);
-
-	g_assert_cmpint (nm_bridge_vlan_cmp (v1, v2), <, 0);
-
-	nm_bridge_vlan_unref (v1);
-	nm_bridge_vlan_unref (v2);
+    NMBridgeVlan *v1, *v2;
+    GError *      error = NULL;
+    guint16       vid_start, vid_end;
+    char *        str;
+
+    v1 = nm_bridge_vlan_from_str("1 foobar", &error);
+    nmtst_assert_no_success(v1, error);
+    g_clear_error(&error);
+
+    v1 = nm_bridge_vlan_from_str("4095", &error);
+    nmtst_assert_no_success(v1, error);
+    g_clear_error(&error);
+
+    /* test ranges */
+    v1 = nm_bridge_vlan_from_str("2-1000 untagged", &error);
+    nmtst_assert_success(v1, error);
+    g_assert_cmpint(nm_bridge_vlan_get_vid_range(v1, &vid_start, &vid_end), ==, TRUE);
+    g_assert_cmpuint(vid_start, ==, 2);
+    g_assert_cmpuint(vid_end, ==, 1000);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(v1), ==, FALSE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(v1), ==, TRUE);
+    nm_bridge_vlan_unref(v1);
+
+    /* test comparison (1) */
+    v1 = nm_bridge_vlan_from_str("10 untagged", &error);
+    nmtst_assert_success(v1, error);
+
+    g_assert_cmpint(nm_bridge_vlan_get_vid_range(v1, &vid_start, &vid_end), ==, FALSE);
+    g_assert_cmpuint(vid_start, ==, 10);
+    g_assert_cmpuint(vid_end, ==, 10);
+    g_assert_cmpint(nm_bridge_vlan_is_sealed(v1), ==, FALSE);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(v1), ==, FALSE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(v1), ==, TRUE);
+
+    nm_bridge_vlan_set_pvid(v1, TRUE);
+    nm_bridge_vlan_set_untagged(v1, FALSE);
+    nm_bridge_vlan_seal(v1);
+
+    g_assert_cmpint(nm_bridge_vlan_is_sealed(v1), ==, TRUE);
+    g_assert_cmpint(nm_bridge_vlan_is_pvid(v1), ==, TRUE);
+    g_assert_cmpint(nm_bridge_vlan_is_untagged(v1), ==, FALSE);
+
+    str = nm_bridge_vlan_to_str(v1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "10 pvid");
+    nm_clear_g_free(&str);
+
+    v2 = nm_bridge_vlan_from_str("  10  pvid  ", &error);
+    nmtst_assert_success(v2, error);
+
+    g_assert_cmpint(nm_bridge_vlan_cmp(v1, v2), ==, 0);
+
+    nm_bridge_vlan_unref(v1);
+    nm_bridge_vlan_unref(v2);
+
+    /* test comparison (2) */
+    v1 = nm_bridge_vlan_from_str("10", &error);
+    nmtst_assert_success(v1, error);
+    v2 = nm_bridge_vlan_from_str("20", &error);
+    nmtst_assert_success(v2, error);
+
+    g_assert_cmpint(nm_bridge_vlan_cmp(v1, v2), <, 0);
+
+    nm_bridge_vlan_unref(v1);
+    nm_bridge_vlan_unref(v2);
 }
 
 static void
-create_bridge_connection (NMConnection **con, NMSettingBridge **s_bridge)
+create_bridge_connection(NMConnection **con, NMSettingBridge **s_bridge)
 {
-	NMSettingConnection *s_con;
+    NMSettingConnection *s_con;
 
-	g_assert (con);
-	g_assert (s_bridge);
+    g_assert(con);
+    g_assert(s_bridge);
 
-	*con = nmtst_create_minimal_connection ("bridge",
-	                                        NULL,
-	                                        NM_SETTING_BOND_SETTING_NAME,
-	                                        &s_con);
+    *con = nmtst_create_minimal_connection("bridge", NULL, NM_SETTING_BOND_SETTING_NAME, &s_con);
 
-	g_object_set (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "bridge0", NULL);
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "bridge0", NULL);
 
-	*s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
-	g_assert (*s_bridge);
+    *s_bridge = (NMSettingBridge *) nm_setting_bridge_new();
+    g_assert(*s_bridge);
 
-	nm_connection_add_setting (*con, NM_SETTING (*s_bridge));
+    nm_connection_add_setting(*con, NM_SETTING(*s_bridge));
 }
 
 #define test_verify_options_bridge(exp, ...) \
-	_test_verify_options_bridge (exp, NM_MAKE_STRV (__VA_ARGS__))
+    _test_verify_options_bridge(exp, NM_MAKE_STRV(__VA_ARGS__))
 
 static void
-_test_verify_options_bridge (gboolean expected_result,
-                             const char *const *options)
+_test_verify_options_bridge(gboolean expected_result, const char *const *options)
 {
-	gs_unref_object NMConnection *con = NULL;
-	NMSettingBridge *s_bridge;
-	const char *const *option;
-
-	g_assert (NM_PTRARRAY_LEN (options) % 2 == 0);
-
-	create_bridge_connection (&con, &s_bridge);
-
-	for (option = options; option[0]; option += 2) {
-		const char *option_key = option[0];
-		const char *option_val = option[1];
-		GParamSpec *pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (s_bridge), option_key);
-
-		g_assert (pspec);
-		g_assert (option_val);
-
-		switch (G_PARAM_SPEC_VALUE_TYPE (pspec)) {
-		case G_TYPE_UINT: {
-				guint uvalue;
-
-				uvalue = _nm_utils_ascii_str_to_uint64 (option_val, 10, 0, G_MAXUINT, -1);
-				g_assert (errno == 0);
-				g_object_set (s_bridge, option_key, uvalue, NULL);
-			}
-			break;
-		case G_TYPE_BOOLEAN: {
-				int bvalue;
-
-				bvalue = _nm_utils_ascii_str_to_bool (option_val, -1);
-				g_assert (bvalue != -1);
-				g_object_set (s_bridge, option_key, bvalue, NULL);
-			}
-			break;
-		case G_TYPE_STRING:
-			g_object_set (s_bridge, option_key, option_val, NULL);
-			break;
-		default:
-			g_assert_not_reached();
-			break;
-		}
-	}
-
-	if (expected_result)
-		nmtst_assert_connection_verifies_and_normalizable (con);
-	else {
-		nmtst_assert_connection_unnormalizable (con,
-		                                        NM_CONNECTION_ERROR,
-		                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-	}
+    gs_unref_object NMConnection *con = NULL;
+    NMSettingBridge *             s_bridge;
+    const char *const *           option;
+
+    g_assert(NM_PTRARRAY_LEN(options) % 2 == 0);
+
+    create_bridge_connection(&con, &s_bridge);
+
+    for (option = options; option[0]; option += 2) {
+        const char *option_key = option[0];
+        const char *option_val = option[1];
+        GParamSpec *pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(s_bridge), option_key);
+
+        g_assert(pspec);
+        g_assert(option_val);
+
+        switch (G_PARAM_SPEC_VALUE_TYPE(pspec)) {
+        case G_TYPE_UINT:
+        {
+            guint uvalue;
+
+            uvalue = _nm_utils_ascii_str_to_uint64(option_val, 10, 0, G_MAXUINT, -1);
+            g_assert(errno == 0);
+            g_object_set(s_bridge, option_key, uvalue, NULL);
+        } break;
+        case G_TYPE_BOOLEAN:
+        {
+            int bvalue;
+
+            bvalue = _nm_utils_ascii_str_to_bool(option_val, -1);
+            g_assert(bvalue != -1);
+            g_object_set(s_bridge, option_key, bvalue, NULL);
+        } break;
+        case G_TYPE_STRING:
+            g_object_set(s_bridge, option_key, option_val, NULL);
+            break;
+        default:
+            g_assert_not_reached();
+            break;
+        }
+    }
+
+    if (expected_result)
+        nmtst_assert_connection_verifies_and_normalizable(con);
+    else {
+        nmtst_assert_connection_unnormalizable(con,
+                                               NM_CONNECTION_ERROR,
+                                               NM_CONNECTION_ERROR_INVALID_PROPERTY);
+    }
 }
 
 static void
-test_bridge_verify (void)
+test_bridge_verify(void)
 {
-	/* group-address */
-	test_verify_options_bridge (FALSE,
-	                            "group-address", "nonsense");
-	test_verify_options_bridge (FALSE,
-	                            "group-address", "FF:FF:FF:FF:FF:FF");
-	test_verify_options_bridge (FALSE,
-	                            "group-address", "01:02:03:04:05:06");
-	test_verify_options_bridge (TRUE,
-	                            "group-address", "01:80:C2:00:00:00");
-	test_verify_options_bridge (FALSE,
-	                            "group-address", "01:80:C2:00:00:02");
-	test_verify_options_bridge (FALSE,
-	                            "group-address", "01:80:C2:00:00:03");
-	test_verify_options_bridge (TRUE,
-	                            "group-address", "01:80:C2:00:00:00");
-	test_verify_options_bridge (TRUE,
-	                            "group-address", "01:80:C2:00:00:0A");
-	/* vlan-protocol */
-	test_verify_options_bridge (FALSE,
-	                            "vlan-protocol", "nonsense124");
-	test_verify_options_bridge (FALSE,
-	                            "vlan-protocol", "802.11");
-	test_verify_options_bridge (FALSE,
-	                            "vlan-protocol", "802.1Q1");
-	test_verify_options_bridge (TRUE,
-	                            "vlan-protocol", "802.1Q");
-	test_verify_options_bridge (TRUE,
-	                            "vlan-protocol", "802.1ad");
-	/* multicast-router */
-	test_verify_options_bridge (FALSE,
-	                            "multicast-router",   "nonsense");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-snooping", "no",
-	                            "multicast-router",   "auto");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-snooping", "no",
-	                            "multicast-router",   "enabled");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-snooping", "no",
-	                            "multicast-router",   "disabled");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-snooping", "yes",
-	                            "multicast-router",   "enabled");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-snooping", "yes",
-	                            "multicast-router",   "auto");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-snooping", "yes",
-	                            "multicast-router",   "disabled");
-	/* multicast-hash-max */
-	test_verify_options_bridge (TRUE,
-	                            "multicast-hash-max",   "1024");
-	test_verify_options_bridge (TRUE,
-	                            "multicast-hash-max",   "8192");
-	test_verify_options_bridge (FALSE,
-	                            "multicast-hash-max",   "3");
+    /* group-address */
+    test_verify_options_bridge(FALSE, "group-address", "nonsense");
+    test_verify_options_bridge(FALSE, "group-address", "FF:FF:FF:FF:FF:FF");
+    test_verify_options_bridge(FALSE, "group-address", "01:02:03:04:05:06");
+    test_verify_options_bridge(TRUE, "group-address", "01:80:C2:00:00:00");
+    test_verify_options_bridge(FALSE, "group-address", "01:80:C2:00:00:02");
+    test_verify_options_bridge(FALSE, "group-address", "01:80:C2:00:00:03");
+    test_verify_options_bridge(TRUE, "group-address", "01:80:C2:00:00:00");
+    test_verify_options_bridge(TRUE, "group-address", "01:80:C2:00:00:0A");
+    /* vlan-protocol */
+    test_verify_options_bridge(FALSE, "vlan-protocol", "nonsense124");
+    test_verify_options_bridge(FALSE, "vlan-protocol", "802.11");
+    test_verify_options_bridge(FALSE, "vlan-protocol", "802.1Q1");
+    test_verify_options_bridge(TRUE, "vlan-protocol", "802.1Q");
+    test_verify_options_bridge(TRUE, "vlan-protocol", "802.1ad");
+    /* multicast-router */
+    test_verify_options_bridge(FALSE, "multicast-router", "nonsense");
+    test_verify_options_bridge(TRUE, "multicast-snooping", "no", "multicast-router", "auto");
+    test_verify_options_bridge(TRUE, "multicast-snooping", "no", "multicast-router", "enabled");
+    test_verify_options_bridge(TRUE, "multicast-snooping", "no", "multicast-router", "disabled");
+    test_verify_options_bridge(TRUE, "multicast-snooping", "yes", "multicast-router", "enabled");
+    test_verify_options_bridge(TRUE, "multicast-snooping", "yes", "multicast-router", "auto");
+    test_verify_options_bridge(TRUE, "multicast-snooping", "yes", "multicast-router", "disabled");
+    /* multicast-hash-max */
+    test_verify_options_bridge(TRUE, "multicast-hash-max", "1024");
+    test_verify_options_bridge(TRUE, "multicast-hash-max", "8192");
+    test_verify_options_bridge(FALSE, "multicast-hash-max", "3");
 }
 
 /*****************************************************************************/
 
 static void
-test_tc_config_qdisc (void)
+test_tc_config_qdisc(void)
 {
-	NMTCQdisc *qdisc1, *qdisc2;
-	char *str;
-	GError *error = NULL;
-	GVariant *variant;
+    NMTCQdisc *qdisc1, *qdisc2;
+    char *     str;
+    GError *   error = NULL;
+    GVariant * variant;
 
-	qdisc1 = nm_tc_qdisc_new ("fq_codel", TC_H_ROOT, &error);
-	nmtst_assert_success (qdisc1, error);
+    qdisc1 = nm_tc_qdisc_new("fq_codel", TC_H_ROOT, &error);
+    nmtst_assert_success(qdisc1, error);
 
-	qdisc2 = nm_tc_qdisc_new ("fq_codel", TC_H_ROOT, &error);
-	nmtst_assert_success (qdisc2, error);
+    qdisc2 = nm_tc_qdisc_new("fq_codel", TC_H_ROOT, &error);
+    nmtst_assert_success(qdisc2, error);
 
-	g_assert (nm_tc_qdisc_equal (qdisc1, qdisc2));
+    g_assert(nm_tc_qdisc_equal(qdisc1, qdisc2));
 
-	nm_tc_qdisc_unref (qdisc2);
-	qdisc2 = nm_tc_qdisc_dup (qdisc1);
+    nm_tc_qdisc_unref(qdisc2);
+    qdisc2 = nm_tc_qdisc_dup(qdisc1);
 
-	g_assert (nm_tc_qdisc_equal (qdisc1, qdisc2));
+    g_assert(nm_tc_qdisc_equal(qdisc1, qdisc2));
 
-	g_assert_cmpstr (nm_tc_qdisc_get_kind (qdisc1), ==, "fq_codel");
-	g_assert (nm_tc_qdisc_get_handle (qdisc1) == TC_H_UNSPEC);
-	g_assert (nm_tc_qdisc_get_parent (qdisc1) == TC_H_ROOT);
+    g_assert_cmpstr(nm_tc_qdisc_get_kind(qdisc1), ==, "fq_codel");
+    g_assert(nm_tc_qdisc_get_handle(qdisc1) == TC_H_UNSPEC);
+    g_assert(nm_tc_qdisc_get_parent(qdisc1) == TC_H_ROOT);
 
-	str = nm_utils_tc_qdisc_to_str (qdisc1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "root fq_codel");
-	g_free (str);
+    str = nm_utils_tc_qdisc_to_str(qdisc1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "root fq_codel");
+    g_free(str);
 
-	nm_tc_qdisc_unref (qdisc1);
-	qdisc1 = nm_tc_qdisc_new ("ingress", TC_H_INGRESS, &error);
-	nmtst_assert_success (qdisc1, error);
+    nm_tc_qdisc_unref(qdisc1);
+    qdisc1 = nm_tc_qdisc_new("ingress", TC_H_INGRESS, &error);
+    nmtst_assert_success(qdisc1, error);
 
-	g_assert (!nm_tc_qdisc_equal (qdisc1, qdisc2));
+    g_assert(!nm_tc_qdisc_equal(qdisc1, qdisc2));
 
-	str = nm_utils_tc_qdisc_to_str (qdisc1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "ingress");
-	g_free (str);
+    str = nm_utils_tc_qdisc_to_str(qdisc1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "ingress");
+    g_free(str);
 
-	nm_tc_qdisc_unref (qdisc1);
-	qdisc1 = nm_utils_tc_qdisc_from_str ("narodil sa kristus pan",  &error);
-	nmtst_assert_no_success (qdisc1, error);
-	g_clear_error (&error);
+    nm_tc_qdisc_unref(qdisc1);
+    qdisc1 = nm_utils_tc_qdisc_from_str("narodil sa kristus pan", &error);
+    nmtst_assert_no_success(qdisc1, error);
+    g_clear_error(&error);
 
-	qdisc1 = nm_utils_tc_qdisc_from_str ("handle 1234 parent fff1:1 pfifo_fast",  &error);
-	nmtst_assert_success (qdisc1, error);
+    qdisc1 = nm_utils_tc_qdisc_from_str("handle 1234 parent fff1:1 pfifo_fast", &error);
+    nmtst_assert_success(qdisc1, error);
 
-	g_assert_cmpstr (nm_tc_qdisc_get_kind (qdisc1), ==, "pfifo_fast");
-	g_assert (nm_tc_qdisc_get_handle (qdisc1) == TC_H_MAKE (0x1234u << 16, 0x0000u));
-	g_assert (nm_tc_qdisc_get_parent (qdisc1) == TC_H_MAKE (0xfff1u << 16, 0x0001u));
+    g_assert_cmpstr(nm_tc_qdisc_get_kind(qdisc1), ==, "pfifo_fast");
+    g_assert(nm_tc_qdisc_get_handle(qdisc1) == TC_H_MAKE(0x1234u << 16, 0x0000u));
+    g_assert(nm_tc_qdisc_get_parent(qdisc1) == TC_H_MAKE(0xfff1u << 16, 0x0001u));
 
-	str = nm_utils_tc_qdisc_to_str (qdisc1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "parent fff1:1 handle 1234: pfifo_fast");
-	g_free (str);
+    str = nm_utils_tc_qdisc_to_str(qdisc1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "parent fff1:1 handle 1234: pfifo_fast");
+    g_free(str);
 
-	nm_tc_qdisc_unref (qdisc2);
-	str = nm_utils_tc_qdisc_to_str (qdisc1, &error);
-	nmtst_assert_success (str, error);
-	qdisc2 = nm_utils_tc_qdisc_from_str (str, &error);
-	nmtst_assert_success (qdisc2, error);
-	g_free (str);
+    nm_tc_qdisc_unref(qdisc2);
+    str = nm_utils_tc_qdisc_to_str(qdisc1, &error);
+    nmtst_assert_success(str, error);
+    qdisc2 = nm_utils_tc_qdisc_from_str(str, &error);
+    nmtst_assert_success(qdisc2, error);
+    g_free(str);
 
-	g_assert (nm_tc_qdisc_equal (qdisc1, qdisc2));
+    g_assert(nm_tc_qdisc_equal(qdisc1, qdisc2));
 
-	nm_tc_qdisc_unref (qdisc1);
-	nm_tc_qdisc_unref (qdisc2);
+    nm_tc_qdisc_unref(qdisc1);
+    nm_tc_qdisc_unref(qdisc2);
 
-	qdisc1 = nm_utils_tc_qdisc_from_str ("clsact", &error);
-	nmtst_assert_success (qdisc1, error);
-	str = nm_utils_tc_qdisc_to_str (qdisc1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "clsact");
-	nm_tc_qdisc_unref (qdisc1);
-	g_free (str);
+    qdisc1 = nm_utils_tc_qdisc_from_str("clsact", &error);
+    nmtst_assert_success(qdisc1, error);
+    str = nm_utils_tc_qdisc_to_str(qdisc1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "clsact");
+    nm_tc_qdisc_unref(qdisc1);
+    g_free(str);
 
 #define CHECK_ATTRIBUTE(qdisc, name, vtype, type, value) \
-	variant = nm_tc_qdisc_get_attribute (qdisc, name); \
-	g_assert (variant); \
-	g_assert (g_variant_is_of_type (variant, vtype)); \
-	g_assert_cmpint (g_variant_get_ ## type(variant), ==, value);
-
-	qdisc1 = nm_utils_tc_qdisc_from_str ("handle 1235 root sfq perturb 10 quantum 1480 "
-	                                     "limit 9000 flows 1024 divisor 500 depth 12",
-	                                     &error);
-	nmtst_assert_success (qdisc1, error);
-
-	g_assert_cmpstr (nm_tc_qdisc_get_kind (qdisc1), ==, "sfq");
-	g_assert (nm_tc_qdisc_get_handle (qdisc1) == TC_H_MAKE (0x1235u << 16, 0x0000u));
-	g_assert (nm_tc_qdisc_get_parent (qdisc1) == TC_H_ROOT);
-	CHECK_ATTRIBUTE (qdisc1, "perturb", G_VARIANT_TYPE_INT32,  int32,  10);
-	CHECK_ATTRIBUTE (qdisc1, "quantum", G_VARIANT_TYPE_UINT32, uint32, 1480);
-	CHECK_ATTRIBUTE (qdisc1, "limit",   G_VARIANT_TYPE_UINT32, uint32, 9000);
-	CHECK_ATTRIBUTE (qdisc1, "flows",   G_VARIANT_TYPE_UINT32, uint32, 1024);
-	CHECK_ATTRIBUTE (qdisc1, "divisor", G_VARIANT_TYPE_UINT32, uint32, 500);
-	CHECK_ATTRIBUTE (qdisc1, "depth",   G_VARIANT_TYPE_UINT32, uint32, 12);
-	nm_tc_qdisc_unref (qdisc1);
-
-	qdisc1 = nm_utils_tc_qdisc_from_str ("handle 1235 root tbf rate 1000000 burst 5000 limit 10000",
-	                                     &error);
-	nmtst_assert_success (qdisc1, error);
-
-	g_assert_cmpstr (nm_tc_qdisc_get_kind (qdisc1), ==, "tbf");
-	g_assert (nm_tc_qdisc_get_handle (qdisc1) == TC_H_MAKE (0x1235u << 16, 0x0000u));
-	g_assert (nm_tc_qdisc_get_parent (qdisc1) == TC_H_ROOT);
-	CHECK_ATTRIBUTE (qdisc1, "rate",  G_VARIANT_TYPE_UINT64, uint64, 1000000);
-	CHECK_ATTRIBUTE (qdisc1, "burst", G_VARIANT_TYPE_UINT32, uint32, 5000);
-	CHECK_ATTRIBUTE (qdisc1, "limit", G_VARIANT_TYPE_UINT32, uint32, 10000);
-	nm_tc_qdisc_unref (qdisc1);
-
+    variant = nm_tc_qdisc_get_attribute(qdisc, name);    \
+    g_assert(variant);                                   \
+    g_assert(g_variant_is_of_type(variant, vtype));      \
+    g_assert_cmpint(g_variant_get_##type(variant), ==, value);
+
+    qdisc1 = nm_utils_tc_qdisc_from_str("handle 1235 root sfq perturb 10 quantum 1480 "
+                                        "limit 9000 flows 1024 divisor 500 depth 12",
+                                        &error);
+    nmtst_assert_success(qdisc1, error);
+
+    g_assert_cmpstr(nm_tc_qdisc_get_kind(qdisc1), ==, "sfq");
+    g_assert(nm_tc_qdisc_get_handle(qdisc1) == TC_H_MAKE(0x1235u << 16, 0x0000u));
+    g_assert(nm_tc_qdisc_get_parent(qdisc1) == TC_H_ROOT);
+    CHECK_ATTRIBUTE(qdisc1, "perturb", G_VARIANT_TYPE_INT32, int32, 10);
+    CHECK_ATTRIBUTE(qdisc1, "quantum", G_VARIANT_TYPE_UINT32, uint32, 1480);
+    CHECK_ATTRIBUTE(qdisc1, "limit", G_VARIANT_TYPE_UINT32, uint32, 9000);
+    CHECK_ATTRIBUTE(qdisc1, "flows", G_VARIANT_TYPE_UINT32, uint32, 1024);
+    CHECK_ATTRIBUTE(qdisc1, "divisor", G_VARIANT_TYPE_UINT32, uint32, 500);
+    CHECK_ATTRIBUTE(qdisc1, "depth", G_VARIANT_TYPE_UINT32, uint32, 12);
+    nm_tc_qdisc_unref(qdisc1);
+
+    qdisc1 = nm_utils_tc_qdisc_from_str("handle 1235 root tbf rate 1000000 burst 5000 limit 10000",
+                                        &error);
+    nmtst_assert_success(qdisc1, error);
+
+    g_assert_cmpstr(nm_tc_qdisc_get_kind(qdisc1), ==, "tbf");
+    g_assert(nm_tc_qdisc_get_handle(qdisc1) == TC_H_MAKE(0x1235u << 16, 0x0000u));
+    g_assert(nm_tc_qdisc_get_parent(qdisc1) == TC_H_ROOT);
+    CHECK_ATTRIBUTE(qdisc1, "rate", G_VARIANT_TYPE_UINT64, uint64, 1000000);
+    CHECK_ATTRIBUTE(qdisc1, "burst", G_VARIANT_TYPE_UINT32, uint32, 5000);
+    CHECK_ATTRIBUTE(qdisc1, "limit", G_VARIANT_TYPE_UINT32, uint32, 10000);
+    nm_tc_qdisc_unref(qdisc1);
 
 #undef CHECK_ATTRIBUTE
 }
 
 static void
-test_tc_config_action (void)
+test_tc_config_action(void)
 {
-	NMTCAction *action1, *action2;
-	char *str;
-	GError *error = NULL;
+    NMTCAction *action1, *action2;
+    char *      str;
+    GError *    error = NULL;
 
-	action1 = nm_tc_action_new ("drop", &error);
-	nmtst_assert_success (action1, error);
-	action2 = nm_tc_action_new ("drop", &error);
-	nmtst_assert_success (action2, error);
+    action1 = nm_tc_action_new("drop", &error);
+    nmtst_assert_success(action1, error);
+    action2 = nm_tc_action_new("drop", &error);
+    nmtst_assert_success(action2, error);
 
-	g_assert (nm_tc_action_equal (action1, action2));
-	g_assert_cmpstr (nm_tc_action_get_kind (action1), ==, "drop");
+    g_assert(nm_tc_action_equal(action1, action2));
+    g_assert_cmpstr(nm_tc_action_get_kind(action1), ==, "drop");
 
-	nm_tc_action_unref (action1);
-	action1 = nm_tc_action_new ("simple", &error);
-	nmtst_assert_success (action1, error);
-	nm_tc_action_set_attribute (action1, "sdata", g_variant_new_bytestring ("Hello"));
+    nm_tc_action_unref(action1);
+    action1 = nm_tc_action_new("simple", &error);
+    nmtst_assert_success(action1, error);
+    nm_tc_action_set_attribute(action1, "sdata", g_variant_new_bytestring("Hello"));
 
-	g_assert (!nm_tc_action_equal (action1, action2));
+    g_assert(!nm_tc_action_equal(action1, action2));
 
-	str = nm_utils_tc_action_to_str (action1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "simple sdata Hello");
-	g_free (str);
+    str = nm_utils_tc_action_to_str(action1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "simple sdata Hello");
+    g_free(str);
 
-	str = nm_utils_tc_action_to_str (action2, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "drop");
-	g_free (str);
+    str = nm_utils_tc_action_to_str(action2, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "drop");
+    g_free(str);
 
-	nm_tc_action_unref (action2);
-	action2 = nm_tc_action_dup (action1);
+    nm_tc_action_unref(action2);
+    action2 = nm_tc_action_dup(action1);
 
-	g_assert (nm_tc_action_equal (action1, action2));
+    g_assert(nm_tc_action_equal(action1, action2));
 
-	nm_tc_action_unref (action1);
-	action1 = nm_utils_tc_action_from_str ("narodil sa kristus pan",  &error);
-	nmtst_assert_no_success (action1, error);
-	g_clear_error (&error);
+    nm_tc_action_unref(action1);
+    action1 = nm_utils_tc_action_from_str("narodil sa kristus pan", &error);
+    nmtst_assert_no_success(action1, error);
+    g_clear_error(&error);
 
-	action1 = nm_utils_tc_action_from_str ("simple sdata Hello",  &error);
-	nmtst_assert_success (action1, error);
+    action1 = nm_utils_tc_action_from_str("simple sdata Hello", &error);
+    nmtst_assert_success(action1, error);
 
-	g_assert_cmpstr (nm_tc_action_get_kind (action1), ==, "simple");
-	g_assert_cmpstr (g_variant_get_bytestring (nm_tc_action_get_attribute (action1, "sdata")), ==, "Hello");
+    g_assert_cmpstr(nm_tc_action_get_kind(action1), ==, "simple");
+    g_assert_cmpstr(g_variant_get_bytestring(nm_tc_action_get_attribute(action1, "sdata")),
+                    ==,
+                    "Hello");
 
-	nm_tc_action_unref (action1);
-	nm_tc_action_unref (action2);
+    nm_tc_action_unref(action1);
+    nm_tc_action_unref(action2);
 }
 
 static void
-test_tc_config_tfilter (void)
+test_tc_config_tfilter_matchall_sdata(void)
 {
-	NMTCAction *action1;
-	NMTCTfilter *tfilter1, *tfilter2;
-	char *str;
-	GError *error = NULL;
+    NMTCAction * action1;
+    NMTCTfilter *tfilter1, *tfilter2;
+    char *       str;
+    GError *     error = NULL;
+
+    tfilter1 = nm_tc_tfilter_new("matchall", TC_H_MAKE(0x1234u << 16, 0x0000u), &error);
+    nmtst_assert_success(tfilter1, error);
 
-	tfilter1 = nm_tc_tfilter_new ("matchall",
-	                              TC_H_MAKE (0x1234u << 16, 0x0000u),
-	                              &error);
-	nmtst_assert_success (tfilter1, error);
+    tfilter2 = nm_tc_tfilter_new("matchall", TC_H_MAKE(0x1234u << 16, 0x0000u), &error);
+    nmtst_assert_success(tfilter2, error);
 
-	tfilter2 = nm_tc_tfilter_new ("matchall",
-	                              TC_H_MAKE (0x1234u << 16, 0x0000u),
-	                              &error);
-	nmtst_assert_success (tfilter2, error);
+    g_assert(nm_tc_tfilter_equal(tfilter1, tfilter2));
 
-	g_assert (nm_tc_tfilter_equal (tfilter1, tfilter2));
+    action1 = nm_tc_action_new("simple", &error);
+    nmtst_assert_success(action1, error);
+    nm_tc_action_set_attribute(action1, "sdata", g_variant_new_bytestring("Hello"));
+    nm_tc_tfilter_set_action(tfilter1, action1);
+    nm_tc_action_unref(action1);
 
-	action1 = nm_tc_action_new ("simple", &error);
-	nmtst_assert_success (action1, error);
-	nm_tc_action_set_attribute (action1, "sdata", g_variant_new_bytestring ("Hello"));
-	nm_tc_tfilter_set_action (tfilter1, action1);
-	nm_tc_action_unref (action1);
+    g_assert(!nm_tc_tfilter_equal(tfilter1, tfilter2));
 
-	g_assert (!nm_tc_tfilter_equal (tfilter1, tfilter2));
+    str = nm_utils_tc_tfilter_to_str(tfilter1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "parent 1234: matchall action simple sdata Hello");
+    g_free(str);
 
-	str = nm_utils_tc_tfilter_to_str (tfilter1, &error);
-	nmtst_assert_success (str, error);
-	g_assert_cmpstr (str, ==, "parent 1234: matchall action simple sdata Hello");
-	g_free (str);
+    nm_tc_tfilter_unref(tfilter2);
+    tfilter2 = nm_tc_tfilter_dup(tfilter1);
 
-	nm_tc_tfilter_unref (tfilter2);
-	tfilter2 = nm_tc_tfilter_dup (tfilter1);
+    g_assert(nm_tc_tfilter_equal(tfilter1, tfilter2));
 
-	g_assert (nm_tc_tfilter_equal (tfilter1, tfilter2));
+    nm_tc_tfilter_unref(tfilter1);
+    tfilter1 = nm_utils_tc_tfilter_from_str("narodil sa kristus pan", &error);
+    nmtst_assert_no_success(tfilter1, error);
+    g_clear_error(&error);
 
-	nm_tc_tfilter_unref (tfilter1);
-	tfilter1 = nm_utils_tc_tfilter_from_str ("narodil sa kristus pan",  &error);
-	nmtst_assert_no_success (tfilter1, error);
-	g_clear_error (&error);
+    str = nm_utils_tc_tfilter_to_str(tfilter2, &error);
+    nmtst_assert_success(str, error);
+    tfilter1 = nm_utils_tc_tfilter_from_str(str, &error);
+    nmtst_assert_success(tfilter1, error);
+    g_free(str);
 
-	str = nm_utils_tc_tfilter_to_str (tfilter2, &error);
-	nmtst_assert_success (str, error);
-	tfilter1 = nm_utils_tc_tfilter_from_str (str, &error);
-	nmtst_assert_success (tfilter1, error);
-	g_free (str);
+    g_assert(nm_tc_tfilter_equal(tfilter1, tfilter2));
 
-	g_assert (nm_tc_tfilter_equal (tfilter1, tfilter2));
+    nm_tc_tfilter_unref(tfilter1);
+    nm_tc_tfilter_unref(tfilter2);
+}
 
-	nm_tc_tfilter_unref (tfilter1);
-	nm_tc_tfilter_unref (tfilter2);
+static void
+test_tc_config_tfilter_matchall_mirred(void)
+{
+    NMTCAction *       action;
+    NMTCTfilter *      tfilter1;
+    GError *           error      = NULL;
+    gs_strfreev char **attr_names = NULL;
+    gs_free char *     str;
+    GVariant *         variant;
+
+    tfilter1 =
+        nm_utils_tc_tfilter_from_str("parent ffff: matchall action mirred ingress mirror dev eth0",
+                                     &error);
+    nmtst_assert_success(tfilter1, error);
+    g_assert_cmpint(nm_tc_tfilter_get_parent(tfilter1), ==, TC_H_MAKE(0xffff << 16, 0));
+    g_assert_cmpstr(nm_tc_tfilter_get_kind(tfilter1), ==, "matchall");
+
+    action = nm_tc_tfilter_get_action(tfilter1);
+    nm_assert(action);
+    g_assert_cmpstr(nm_tc_action_get_kind(action), ==, "mirred");
+    attr_names = nm_tc_action_get_attribute_names(action);
+    g_assert(attr_names);
+    g_assert_cmpint(g_strv_length(attr_names), ==, 3);
+
+    variant = nm_tc_action_get_attribute(action, "ingress");
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_BOOLEAN));
+    g_assert(g_variant_get_boolean(variant));
+
+    variant = nm_tc_action_get_attribute(action, "mirror");
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_BOOLEAN));
+    g_assert(g_variant_get_boolean(variant));
+
+    variant = nm_tc_action_get_attribute(action, "dev");
+    g_assert(variant);
+    g_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_STRING));
+    g_assert_cmpstr(g_variant_get_string(variant, NULL), ==, "eth0");
+
+    str = nm_utils_tc_tfilter_to_str(tfilter1, &error);
+    nmtst_assert_success(str, error);
+    g_assert_cmpstr(str, ==, "parent ffff: matchall action mirred dev eth0 ingress mirror");
+
+    nm_tc_tfilter_unref(tfilter1);
 }
 
 static void
-test_tc_config_setting_valid (void)
+test_tc_config_setting_valid(void)
 {
-	gs_unref_object NMSettingTCConfig *s_tc = NULL;
-	NMTCQdisc *qdisc1, *qdisc2;
-	GError *error = NULL;
-
-	s_tc = (NMSettingTCConfig *) nm_setting_tc_config_new ();
-
-	qdisc1 = nm_tc_qdisc_new ("fq_codel", TC_H_ROOT, &error);
-	nmtst_assert_success (qdisc1, error);
-
-	qdisc2 = nm_tc_qdisc_new ("pfifo_fast",
-	                          TC_H_MAKE (0xfff1u << 16, 0x0001u),
-	                          &error);
-	nmtst_assert_success (qdisc2, error);
-	nm_tc_qdisc_set_handle (qdisc2, TC_H_MAKE (0x1234u << 16, 0x0000u));
-
-	g_assert (nm_setting_tc_config_get_num_qdiscs (s_tc) == 0);
-	g_assert (nm_setting_tc_config_add_qdisc (s_tc, qdisc1) == TRUE);
-	g_assert (nm_setting_tc_config_get_num_qdiscs (s_tc) == 1);
-	g_assert (nm_setting_tc_config_get_qdisc (s_tc, 0) != NULL);
-	g_assert (nm_setting_tc_config_remove_qdisc_by_value (s_tc, qdisc2) == FALSE);
-	g_assert (nm_setting_tc_config_add_qdisc (s_tc, qdisc2) == TRUE);
-	g_assert (nm_setting_tc_config_get_num_qdiscs (s_tc) == 2);
-	g_assert (nm_setting_tc_config_remove_qdisc_by_value (s_tc, qdisc1) == TRUE);
-	g_assert (nm_setting_tc_config_get_num_qdiscs (s_tc) == 1);
-	nm_setting_tc_config_clear_qdiscs (s_tc);
-	g_assert (nm_setting_tc_config_get_num_qdiscs (s_tc) == 0);
-
-	nm_tc_qdisc_unref (qdisc1);
-	nm_tc_qdisc_unref (qdisc2);
+    gs_unref_object NMSettingTCConfig *s_tc = NULL;
+    NMTCQdisc *                        qdisc1, *qdisc2;
+    GError *                           error = NULL;
+
+    s_tc = (NMSettingTCConfig *) nm_setting_tc_config_new();
+
+    qdisc1 = nm_tc_qdisc_new("fq_codel", TC_H_ROOT, &error);
+    nmtst_assert_success(qdisc1, error);
+
+    qdisc2 = nm_tc_qdisc_new("pfifo_fast", TC_H_MAKE(0xfff1u << 16, 0x0001u), &error);
+    nmtst_assert_success(qdisc2, error);
+    nm_tc_qdisc_set_handle(qdisc2, TC_H_MAKE(0x1234u << 16, 0x0000u));
+
+    g_assert(nm_setting_tc_config_get_num_qdiscs(s_tc) == 0);
+    g_assert(nm_setting_tc_config_add_qdisc(s_tc, qdisc1) == TRUE);
+    g_assert(nm_setting_tc_config_get_num_qdiscs(s_tc) == 1);
+    g_assert(nm_setting_tc_config_get_qdisc(s_tc, 0) != NULL);
+    g_assert(nm_setting_tc_config_remove_qdisc_by_value(s_tc, qdisc2) == FALSE);
+    g_assert(nm_setting_tc_config_add_qdisc(s_tc, qdisc2) == TRUE);
+    g_assert(nm_setting_tc_config_get_num_qdiscs(s_tc) == 2);
+    g_assert(nm_setting_tc_config_remove_qdisc_by_value(s_tc, qdisc1) == TRUE);
+    g_assert(nm_setting_tc_config_get_num_qdiscs(s_tc) == 1);
+    nm_setting_tc_config_clear_qdiscs(s_tc);
+    g_assert(nm_setting_tc_config_get_num_qdiscs(s_tc) == 0);
+
+    nm_tc_qdisc_unref(qdisc1);
+    nm_tc_qdisc_unref(qdisc2);
 }
 
 static void
-test_tc_config_setting_duplicates (void)
+test_tc_config_setting_duplicates(void)
 {
-	gs_unref_ptrarray GPtrArray *qdiscs = NULL;
-	gs_unref_ptrarray GPtrArray *tfilters = NULL;
-	NMSettingConnection *s_con;
-	NMConnection *con;
-	NMSetting *s_tc;
-	NMTCQdisc *qdisc;
-	NMTCTfilter *tfilter;
-	GError *error = NULL;
-
-	con = nmtst_create_minimal_connection ("dummy",
-	                                       NULL,
-	                                       NM_SETTING_DUMMY_SETTING_NAME,
-	                                       &s_con);
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, "dummy1",
-	              NULL);
-
-	s_tc = nm_setting_tc_config_new ();
-	nm_connection_add_setting (con, s_tc);
-	qdiscs = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_tc_qdisc_unref);
-	tfilters = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_tc_tfilter_unref);
-
-	/* 1. add duplicate qdiscs */
-	qdisc = nm_utils_tc_qdisc_from_str ("handle 1234 parent fff1:1 pfifo_fast", &error);
-	nmtst_assert_success (qdisc, error);
-	g_ptr_array_add (qdiscs, qdisc);
-
-	qdisc = nm_utils_tc_qdisc_from_str ("handle 1234 parent fff1:1 pfifo_fast", &error);
-	nmtst_assert_success (qdisc, error);
-	g_ptr_array_add (qdiscs, qdisc);
-
-	g_object_set (s_tc, NM_SETTING_TC_CONFIG_QDISCS, qdiscs, NULL);
-	nmtst_assert_connection_unnormalizable (con,
-	                                        NM_CONNECTION_ERROR,
-	                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-
-	/* 2. make qdiscs unique */
-	g_ptr_array_remove_index (qdiscs, 0);
-	g_object_set (s_tc, NM_SETTING_TC_CONFIG_QDISCS, qdiscs, NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
-
-	/* 3. add duplicate filters */
-	tfilter = nm_utils_tc_tfilter_from_str ("parent 1234: matchall action simple sdata Hello", &error);
-	nmtst_assert_success (tfilter, error);
-	g_ptr_array_add (tfilters, tfilter);
-
-	tfilter = nm_utils_tc_tfilter_from_str ("parent 1234: matchall action simple sdata Hello", &error);
-	nmtst_assert_success (tfilter, error);
-	g_ptr_array_add (tfilters, tfilter);
-
-	g_object_set (s_tc, NM_SETTING_TC_CONFIG_TFILTERS, tfilters, NULL);
-	nmtst_assert_connection_unnormalizable (con,
-	                                        NM_CONNECTION_ERROR,
-	                                        NM_CONNECTION_ERROR_INVALID_PROPERTY);
-
-	/* 4. make filters unique */
-	g_ptr_array_remove_index (tfilters, 0);
-	g_object_set (s_tc, NM_SETTING_TC_CONFIG_TFILTERS, tfilters, NULL);
-	nmtst_assert_connection_verifies_and_normalizable (con);
+    gs_unref_ptrarray GPtrArray *qdiscs   = NULL;
+    gs_unref_ptrarray GPtrArray *tfilters = NULL;
+    NMSettingConnection *        s_con;
+    NMConnection *               con;
+    NMSetting *                  s_tc;
+    NMTCQdisc *                  qdisc;
+    NMTCTfilter *                tfilter;
+    GError *                     error = NULL;
+
+    con = nmtst_create_minimal_connection("dummy", NULL, NM_SETTING_DUMMY_SETTING_NAME, &s_con);
+    g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, "dummy1", NULL);
+
+    s_tc = nm_setting_tc_config_new();
+    nm_connection_add_setting(con, s_tc);
+    qdiscs   = g_ptr_array_new_with_free_func((GDestroyNotify) nm_tc_qdisc_unref);
+    tfilters = g_ptr_array_new_with_free_func((GDestroyNotify) nm_tc_tfilter_unref);
+
+    /* 1. add duplicate qdiscs */
+    qdisc = nm_utils_tc_qdisc_from_str("handle 1234 parent fff1:1 pfifo_fast", &error);
+    nmtst_assert_success(qdisc, error);
+    g_ptr_array_add(qdiscs, qdisc);
+
+    qdisc = nm_utils_tc_qdisc_from_str("handle 1234 parent fff1:1 pfifo_fast", &error);
+    nmtst_assert_success(qdisc, error);
+    g_ptr_array_add(qdiscs, qdisc);
+
+    g_object_set(s_tc, NM_SETTING_TC_CONFIG_QDISCS, qdiscs, NULL);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_INVALID_PROPERTY);
+
+    /* 2. make qdiscs unique */
+    g_ptr_array_remove_index(qdiscs, 0);
+    g_object_set(s_tc, NM_SETTING_TC_CONFIG_QDISCS, qdiscs, NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
+
+    /* 3. add duplicate filters */
+    tfilter =
+        nm_utils_tc_tfilter_from_str("parent 1234: matchall action simple sdata Hello", &error);
+    nmtst_assert_success(tfilter, error);
+    g_ptr_array_add(tfilters, tfilter);
+
+    tfilter =
+        nm_utils_tc_tfilter_from_str("parent 1234: matchall action simple sdata Hello", &error);
+    nmtst_assert_success(tfilter, error);
+    g_ptr_array_add(tfilters, tfilter);
+
+    g_object_set(s_tc, NM_SETTING_TC_CONFIG_TFILTERS, tfilters, NULL);
+    nmtst_assert_connection_unnormalizable(con,
+                                           NM_CONNECTION_ERROR,
+                                           NM_CONNECTION_ERROR_INVALID_PROPERTY);
+
+    /* 4. make filters unique */
+    g_ptr_array_remove_index(tfilters, 0);
+    g_object_set(s_tc, NM_SETTING_TC_CONFIG_TFILTERS, tfilters, NULL);
+    nmtst_assert_connection_verifies_and_normalizable(con);
 }
 
 static void
-test_tc_config_dbus (void)
+test_tc_config_dbus(void)
 {
-	NMConnection *connection1, *connection2;
-	NMSetting *s_tc;
-	NMTCQdisc *qdisc1, *qdisc2;
-	NMTCTfilter *tfilter1, *tfilter2;
-	NMTCAction *action;
-	GVariant *dbus, *tc_dbus, *var1, *var2;
-	GError *error = NULL;
-	gboolean success;
-
-	connection1 = nmtst_create_minimal_connection ("dummy",
-	                                               NULL,
-	                                               NM_SETTING_DUMMY_SETTING_NAME,
-	                                               NULL);
-
-	s_tc = nm_setting_tc_config_new ();
-
-	qdisc1 = nm_tc_qdisc_new ("fq_codel", TC_H_ROOT, &error);
-	nmtst_assert_success (qdisc1, error);
-	nm_tc_qdisc_set_handle (qdisc1, TC_H_MAKE (0x1234u << 16, 0x0000u));
-	nm_setting_tc_config_add_qdisc (NM_SETTING_TC_CONFIG (s_tc), qdisc1);
-
-	qdisc2 = nm_tc_qdisc_new ("ingress", TC_H_INGRESS, &error);
-	nmtst_assert_success (qdisc2, error);
-	nm_tc_qdisc_set_handle (qdisc2, TC_H_MAKE (TC_H_INGRESS, 0u));
-	nm_setting_tc_config_add_qdisc (NM_SETTING_TC_CONFIG (s_tc), qdisc2);
-
-	tfilter1 = nm_tc_tfilter_new ("matchall",
-	                              TC_H_MAKE (0x1234u << 16, 0x0000u),
-	                              &error);
-	nmtst_assert_success (tfilter1, error);
-	action = nm_tc_action_new ("drop", &error);
-	nmtst_assert_success (action, error);
-	nm_tc_tfilter_set_action (tfilter1, action);
-	nm_tc_action_unref (action);
-	nm_setting_tc_config_add_tfilter (NM_SETTING_TC_CONFIG (s_tc), tfilter1);
-	nm_tc_tfilter_unref (tfilter1);
-
-	tfilter2 = nm_tc_tfilter_new ("matchall",
-	                              TC_H_MAKE (TC_H_INGRESS, 0u),
-	                              &error);
-	nmtst_assert_success (tfilter2, error);
-	action = nm_tc_action_new ("simple", &error);
-	nmtst_assert_success (action, error);
-	nm_tc_action_set_attribute (action, "sdata", g_variant_new_bytestring ("Hello"));
-	nm_tc_tfilter_set_action (tfilter2, action);
-	nm_tc_action_unref (action);
-	nm_setting_tc_config_add_tfilter (NM_SETTING_TC_CONFIG (s_tc), tfilter2);
-	nm_tc_tfilter_unref (tfilter2);
-
-	nm_connection_add_setting (connection1, s_tc);
-
-	dbus = nm_connection_to_dbus (connection1, NM_CONNECTION_SERIALIZE_ALL);
-
-	tc_dbus = g_variant_lookup_value (dbus, "tc", G_VARIANT_TYPE_VARDICT);
-	g_assert (tc_dbus);
-
-	var1 = g_variant_lookup_value (tc_dbus, "qdiscs", G_VARIANT_TYPE ("aa{sv}"));
-	var2 = g_variant_new_parsed ("[{'kind':   <'fq_codel'>,"
-	                             "  'handle': <uint32 0x12340000>,"
-	                             "  'parent': <uint32 0xffffffff>},"
-	                             " {'kind':   <'ingress'>,"
-	                             "  'handle': <uint32 0xffff0000>,"
-	                             "  'parent': <uint32 0xfffffff1>}]");
-	g_assert (g_variant_equal (var1, var2));
-	g_variant_unref (var1);
-	g_variant_unref (var2);
-
-	var1 = g_variant_lookup_value (tc_dbus, "tfilters", G_VARIANT_TYPE ("aa{sv}"));
-	var2 = g_variant_new_parsed ("[{'kind':   <'matchall'>,"
-	                             "  'handle': <uint32 0>,"
-	                             "  'parent': <uint32 0x12340000>,"
-	                             "  'action': <{'kind': <'drop'>}>},"
-	                             " {'kind':   <'matchall'>,"
-	                             "  'handle': <uint32 0>,"
-	                             "  'parent': <uint32 0xffff0000>,"
-	                             "  'action': <{'kind':  <'simple'>,"
-	                             "              'sdata': <b'Hello'>}>}]");
-	g_variant_unref (var1);
-	g_variant_unref (var2);
-
-	g_variant_unref (tc_dbus);
-
-	connection2 = nm_simple_connection_new ();
-	success = nm_connection_replace_settings (connection2, dbus, &error);
-	nmtst_assert_success (success, error);
-
-	g_assert (nm_connection_diff (connection1, connection2, NM_SETTING_COMPARE_FLAG_EXACT, NULL));
-
-	g_variant_unref (dbus);
-
-	nm_tc_qdisc_unref (qdisc1);
-	nm_tc_qdisc_unref (qdisc2);
-
-	g_object_unref (connection1);
-	g_object_unref (connection2);
+    NMConnection *connection1, *connection2;
+    NMSetting *   s_tc;
+    NMTCQdisc *   qdisc1, *qdisc2;
+    NMTCTfilter * tfilter1, *tfilter2;
+    NMTCAction *  action;
+    GVariant *    dbus, *tc_dbus, *var1, *var2;
+    GError *      error = NULL;
+    gboolean      success;
+
+    connection1 =
+        nmtst_create_minimal_connection("dummy", NULL, NM_SETTING_DUMMY_SETTING_NAME, NULL);
+
+    s_tc = nm_setting_tc_config_new();
+
+    qdisc1 = nm_tc_qdisc_new("fq_codel", TC_H_ROOT, &error);
+    nmtst_assert_success(qdisc1, error);
+    nm_tc_qdisc_set_handle(qdisc1, TC_H_MAKE(0x1234u << 16, 0x0000u));
+    nm_setting_tc_config_add_qdisc(NM_SETTING_TC_CONFIG(s_tc), qdisc1);
+
+    qdisc2 = nm_tc_qdisc_new("ingress", TC_H_INGRESS, &error);
+    nmtst_assert_success(qdisc2, error);
+    nm_tc_qdisc_set_handle(qdisc2, TC_H_MAKE(TC_H_INGRESS, 0u));
+    nm_setting_tc_config_add_qdisc(NM_SETTING_TC_CONFIG(s_tc), qdisc2);
+
+    tfilter1 = nm_tc_tfilter_new("matchall", TC_H_MAKE(0x1234u << 16, 0x0000u), &error);
+    nmtst_assert_success(tfilter1, error);
+    action = nm_tc_action_new("drop", &error);
+    nmtst_assert_success(action, error);
+    nm_tc_tfilter_set_action(tfilter1, action);
+    nm_tc_action_unref(action);
+    nm_setting_tc_config_add_tfilter(NM_SETTING_TC_CONFIG(s_tc), tfilter1);
+    nm_tc_tfilter_unref(tfilter1);
+
+    tfilter2 = nm_tc_tfilter_new("matchall", TC_H_MAKE(TC_H_INGRESS, 0u), &error);
+    nmtst_assert_success(tfilter2, error);
+    action = nm_tc_action_new("simple", &error);
+    nmtst_assert_success(action, error);
+    nm_tc_action_set_attribute(action, "sdata", g_variant_new_bytestring("Hello"));
+    nm_tc_tfilter_set_action(tfilter2, action);
+    nm_tc_action_unref(action);
+    nm_setting_tc_config_add_tfilter(NM_SETTING_TC_CONFIG(s_tc), tfilter2);
+    nm_tc_tfilter_unref(tfilter2);
+
+    nm_connection_add_setting(connection1, s_tc);
+
+    dbus = nm_connection_to_dbus(connection1, NM_CONNECTION_SERIALIZE_ALL);
+
+    tc_dbus = g_variant_lookup_value(dbus, "tc", G_VARIANT_TYPE_VARDICT);
+    g_assert(tc_dbus);
+
+    var1 = g_variant_lookup_value(tc_dbus, "qdiscs", G_VARIANT_TYPE("aa{sv}"));
+    var2 = g_variant_new_parsed("[{'kind':   <'fq_codel'>,"
+                                "  'handle': <uint32 0x12340000>,"
+                                "  'parent': <uint32 0xffffffff>},"
+                                " {'kind':   <'ingress'>,"
+                                "  'handle': <uint32 0xffff0000>,"
+                                "  'parent': <uint32 0xfffffff1>}]");
+    g_assert(g_variant_equal(var1, var2));
+    g_variant_unref(var1);
+    g_variant_unref(var2);
+
+    var1 = g_variant_lookup_value(tc_dbus, "tfilters", G_VARIANT_TYPE("aa{sv}"));
+    var2 = g_variant_new_parsed("[{'kind':   <'matchall'>,"
+                                "  'handle': <uint32 0>,"
+                                "  'parent': <uint32 0x12340000>,"
+                                "  'action': <{'kind': <'drop'>}>},"
+                                " {'kind':   <'matchall'>,"
+                                "  'handle': <uint32 0>,"
+                                "  'parent': <uint32 0xffff0000>,"
+                                "  'action': <{'kind':  <'simple'>,"
+                                "              'sdata': <b'Hello'>}>}]");
+    g_variant_unref(var1);
+    g_variant_unref(var2);
+
+    g_variant_unref(tc_dbus);
+
+    connection2 = nm_simple_connection_new();
+    success     = nm_connection_replace_settings(connection2, dbus, &error);
+    nmtst_assert_success(success, error);
+
+    g_assert(nm_connection_diff(connection1, connection2, NM_SETTING_COMPARE_FLAG_EXACT, NULL));
+
+    g_variant_unref(dbus);
+
+    nm_tc_qdisc_unref(qdisc1);
+    nm_tc_qdisc_unref(qdisc2);
+
+    g_object_unref(connection1);
+    g_object_unref(connection2);
 }
 
 /*****************************************************************************/
 
 static void
-_rndt_wired_add_s390_options (NMSettingWired *s_wired,
-                              char **out_keyfile_entries)
+_rndt_wired_add_s390_options(NMSettingWired *s_wired, char **out_keyfile_entries)
 {
-	gsize n_opts;
-	gsize i, j;
-	const char *const*option_names;
-	gs_free const char **opt_keys = NULL;
-	gs_strfreev char **opt_vals = NULL;
-	gs_free bool *opt_found = NULL;
-	GString *keyfile_entries;
-	nm_auto_free_gstring GString *str_tmp = NULL;
-
-	option_names = nm_setting_wired_get_valid_s390_options (nmtst_get_rand_bool () ? NULL : s_wired);
-
-	n_opts = NM_PTRARRAY_LEN (option_names);
-	opt_keys = g_new (const char *, (n_opts + 1));
-	nmtst_rand_perm (NULL, opt_keys, option_names, sizeof (const char *), n_opts);
-	n_opts = nmtst_get_rand_uint32 () % (n_opts + 1);
-	opt_keys[n_opts] = NULL;
-
-	opt_vals = g_new0 (char *, n_opts + 1);
-	opt_found = g_new0 (bool, n_opts + 1);
-	for (i = 0; i < n_opts; i++) {
-		guint p = nmtst_get_rand_uint32 () % 1000;
-
-		if (p < 200)
-			opt_vals[i] = nm_strdup_int (i);
-		else {
-			opt_vals[i] = g_strdup_printf ("%s%s%s%s-%zu",
-			                               ((p % 5)  % 2) ? "\n" : "",
-			                               ((p % 7)  % 2) ? "\t" : "",
-			                               ((p % 11) % 2) ? "x" : "",
-			                               ((p % 13) % 2) ? "=" : "",
-			                               i);
-		}
-	}
-
-	if (nmtst_get_rand_bool ()) {
-		gs_unref_hashtable GHashTable *hash = NULL;
-
-		hash = g_hash_table_new (nm_str_hash, g_str_equal);
-		for (i = 0; i < n_opts; i++)
-			g_hash_table_insert (hash, (char *) opt_keys[i], opt_vals[i]);
-		g_object_set (s_wired,
-		              NM_SETTING_WIRED_S390_OPTIONS,
-		              hash,
-		              NULL);
-	} else {
-		_nm_setting_wired_clear_s390_options (s_wired);
-		for (i = 0; i < n_opts; i++) {
-			if (!nm_setting_wired_add_s390_option (s_wired, opt_keys[i], opt_vals[i]))
-				g_assert_not_reached ();
-		}
-	}
-
-	g_assert_cmpint (nm_setting_wired_get_num_s390_options (s_wired), ==, n_opts);
-
-	keyfile_entries = g_string_new (NULL);
-	str_tmp = g_string_new (NULL);
-	if (n_opts > 0)
-		g_string_append_printf (keyfile_entries, "[ethernet-s390-options]\n");
-	for (i = 0; i < n_opts; i++) {
-		gssize idx;
-		const char *k, *v;
-
-		nm_setting_wired_get_s390_option (s_wired, i, &k, &v);
-		g_assert (k);
-		g_assert (v);
-
-		idx = nm_utils_strv_find_first ((char **) opt_keys, n_opts, k);
-		g_assert (idx >= 0);
-		g_assert (!opt_found[idx]);
-		opt_found[idx] = TRUE;
-		g_assert_cmpstr (opt_keys[idx], ==, k);
-		g_assert_cmpstr (opt_vals[idx], ==, v);
-
-		g_string_truncate (str_tmp, 0);
-		for (j = 0; v[j] != '\0'; j++) {
-			if (v[j] == '\n')
-				g_string_append (str_tmp, "\\n");
-			else if (v[j] == '\t')
-				g_string_append (str_tmp, "\\t");
-			else
-				g_string_append_c (str_tmp, v[j]);
-		}
-
-		g_string_append_printf (keyfile_entries,
-		                        "%s=%s\n",
-		                        k,
-		                        str_tmp->str);
-	}
-	for (i = 0; i < n_opts; i++)
-		g_assert (opt_found[i]);
-	if (n_opts > 0)
-		g_string_append_printf (keyfile_entries, "\n");
-	*out_keyfile_entries = g_string_free (keyfile_entries, FALSE);
+    gsize                n_opts;
+    gsize                i, j;
+    const char *const *  option_names;
+    gs_free const char **opt_keys  = NULL;
+    gs_strfreev char **  opt_vals  = NULL;
+    gs_free bool *       opt_found = NULL;
+    GString *            keyfile_entries;
+    nm_auto_free_gstring GString *str_tmp = NULL;
+
+    option_names = nm_setting_wired_get_valid_s390_options(nmtst_get_rand_bool() ? NULL : s_wired);
+
+    n_opts   = NM_PTRARRAY_LEN(option_names);
+    opt_keys = g_new(const char *, (n_opts + 1));
+    nmtst_rand_perm(NULL, opt_keys, option_names, sizeof(const char *), n_opts);
+    n_opts           = nmtst_get_rand_uint32() % (n_opts + 1);
+    opt_keys[n_opts] = NULL;
+
+    opt_vals  = g_new0(char *, n_opts + 1);
+    opt_found = g_new0(bool, n_opts + 1);
+    for (i = 0; i < n_opts; i++) {
+        guint p = nmtst_get_rand_uint32() % 1000;
+
+        if (p < 200)
+            opt_vals[i] = nm_strdup_int(i);
+        else {
+            opt_vals[i] = g_strdup_printf("%s%s%s%s-%zu",
+                                          ((p % 5) % 2) ? "\n" : "",
+                                          ((p % 7) % 2) ? "\t" : "",
+                                          ((p % 11) % 2) ? "x" : "",
+                                          ((p % 13) % 2) ? "=" : "",
+                                          i);
+        }
+    }
+
+    if (nmtst_get_rand_bool()) {
+        gs_unref_hashtable GHashTable *hash = NULL;
+
+        hash = g_hash_table_new(nm_str_hash, g_str_equal);
+        for (i = 0; i < n_opts; i++)
+            g_hash_table_insert(hash, (char *) opt_keys[i], opt_vals[i]);
+        g_object_set(s_wired, NM_SETTING_WIRED_S390_OPTIONS, hash, NULL);
+    } else {
+        _nm_setting_wired_clear_s390_options(s_wired);
+        for (i = 0; i < n_opts; i++) {
+            if (!nm_setting_wired_add_s390_option(s_wired, opt_keys[i], opt_vals[i]))
+                g_assert_not_reached();
+        }
+    }
+
+    g_assert_cmpint(nm_setting_wired_get_num_s390_options(s_wired), ==, n_opts);
+
+    keyfile_entries = g_string_new(NULL);
+    str_tmp         = g_string_new(NULL);
+    if (n_opts > 0)
+        g_string_append_printf(keyfile_entries, "[ethernet-s390-options]\n");
+    for (i = 0; i < n_opts; i++) {
+        gssize      idx;
+        const char *k, *v;
+
+        nm_setting_wired_get_s390_option(s_wired, i, &k, &v);
+        g_assert(k);
+        g_assert(v);
+
+        idx = nm_utils_strv_find_first((char **) opt_keys, n_opts, k);
+        g_assert(idx >= 0);
+        g_assert(!opt_found[idx]);
+        opt_found[idx] = TRUE;
+        g_assert_cmpstr(opt_keys[idx], ==, k);
+        g_assert_cmpstr(opt_vals[idx], ==, v);
+
+        g_string_truncate(str_tmp, 0);
+        for (j = 0; v[j] != '\0'; j++) {
+            if (v[j] == '\n')
+                g_string_append(str_tmp, "\\n");
+            else if (v[j] == '\t')
+                g_string_append(str_tmp, "\\t");
+            else
+                g_string_append_c(str_tmp, v[j]);
+        }
+
+        g_string_append_printf(keyfile_entries, "%s=%s\n", k, str_tmp->str);
+    }
+    for (i = 0; i < n_opts; i++)
+        g_assert(opt_found[i]);
+    if (n_opts > 0)
+        g_string_append_printf(keyfile_entries, "\n");
+    *out_keyfile_entries = g_string_free(keyfile_entries, FALSE);
 }
 
 static GPtrArray *
-_rndt_wg_peers_create (void)
+_rndt_wg_peers_create(void)
 {
-	GPtrArray *wg_peers;
-	guint i, n;
-
-	wg_peers = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_wireguard_peer_unref);
-
-	n = nmtst_get_rand_uint32 () % 10;
-	for (i = 0; i < n; i++) {
-		NMWireGuardPeer *peer;
-		guint8 public_key_buf[NM_WIREGUARD_PUBLIC_KEY_LEN];
-		guint8 preshared_key_buf[NM_WIREGUARD_SYMMETRIC_KEY_LEN];
-		gs_free char *public_key = NULL;
-		gs_free char *preshared_key = NULL;
-		gs_free char *s_endpoint = NULL;
-		guint i_aip, n_aip;
-
-		/* we don't bother to create a valid curve25519 public key. Of course, libnm cannot
-		 * check whether the public key is bogus or not. Hence, for our purpose a random
-		 * bogus key is good enough. */
-		public_key = g_base64_encode (nmtst_rand_buf (NULL, public_key_buf, sizeof (public_key_buf)), sizeof (public_key_buf));
-
-		preshared_key = g_base64_encode (nmtst_rand_buf (NULL, preshared_key_buf, sizeof (preshared_key_buf)), sizeof (preshared_key_buf));
-
-		s_endpoint = _create_random_ipaddr (AF_UNSPEC, TRUE);
-
-		peer = nm_wireguard_peer_new ();
-		if (!nm_wireguard_peer_set_public_key (peer, public_key, TRUE))
-			g_assert_not_reached ();
-
-		if (!nm_wireguard_peer_set_preshared_key (peer, nmtst_rand_select (NULL, preshared_key), TRUE))
-			g_assert_not_reached ();
-
-		nm_wireguard_peer_set_preshared_key_flags (peer, nmtst_rand_select (NM_SETTING_SECRET_FLAG_NONE,
-		                                                                    NM_SETTING_SECRET_FLAG_NOT_SAVED,
-		                                                                    NM_SETTING_SECRET_FLAG_AGENT_OWNED));
-
-		nm_wireguard_peer_set_persistent_keepalive (peer,
-		                                            nmtst_rand_select ((guint32) 0, nmtst_get_rand_uint32 ()));
-
-		if (!nm_wireguard_peer_set_endpoint (peer, nmtst_rand_select (s_endpoint, NULL), TRUE))
-			g_assert_not_reached ();
-
-		n_aip = nmtst_rand_select (0, nmtst_get_rand_uint32 () % 10);
-		for (i_aip = 0; i_aip < n_aip; i_aip++) {
-			gs_free char *aip = NULL;
-
-			aip = _create_random_ipaddr (AF_UNSPEC, FALSE);
-			if (!nm_wireguard_peer_append_allowed_ip (peer, aip, FALSE))
-				g_assert_not_reached ();
-		}
-
-		g_assert (nm_wireguard_peer_is_valid (peer, TRUE, TRUE, NULL));
-
-		nm_wireguard_peer_seal (peer);
-		g_ptr_array_add (wg_peers, peer);
-	}
-
-	return wg_peers;
+    GPtrArray *wg_peers;
+    guint      i, n;
+
+    wg_peers = g_ptr_array_new_with_free_func((GDestroyNotify) nm_wireguard_peer_unref);
+
+    n = nmtst_get_rand_uint32() % 10;
+    for (i = 0; i < n; i++) {
+        NMWireGuardPeer *peer;
+        guint8           public_key_buf[NM_WIREGUARD_PUBLIC_KEY_LEN];
+        guint8           preshared_key_buf[NM_WIREGUARD_SYMMETRIC_KEY_LEN];
+        gs_free char *   public_key    = NULL;
+        gs_free char *   preshared_key = NULL;
+        gs_free char *   s_endpoint    = NULL;
+        guint            i_aip, n_aip;
+
+        /* we don't bother to create a valid curve25519 public key. Of course, libnm cannot
+         * check whether the public key is bogus or not. Hence, for our purpose a random
+         * bogus key is good enough. */
+        public_key = g_base64_encode(nmtst_rand_buf(NULL, public_key_buf, sizeof(public_key_buf)),
+                                     sizeof(public_key_buf));
+
+        preshared_key =
+            g_base64_encode(nmtst_rand_buf(NULL, preshared_key_buf, sizeof(preshared_key_buf)),
+                            sizeof(preshared_key_buf));
+
+        s_endpoint = _create_random_ipaddr(AF_UNSPEC, TRUE);
+
+        peer = nm_wireguard_peer_new();
+        if (!nm_wireguard_peer_set_public_key(peer, public_key, TRUE))
+            g_assert_not_reached();
+
+        if (!nm_wireguard_peer_set_preshared_key(peer,
+                                                 nmtst_rand_select(NULL, preshared_key),
+                                                 TRUE))
+            g_assert_not_reached();
+
+        nm_wireguard_peer_set_preshared_key_flags(
+            peer,
+            nmtst_rand_select(NM_SETTING_SECRET_FLAG_NONE,
+                              NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                              NM_SETTING_SECRET_FLAG_AGENT_OWNED));
+
+        nm_wireguard_peer_set_persistent_keepalive(
+            peer,
+            nmtst_rand_select((guint32) 0, nmtst_get_rand_uint32()));
+
+        if (!nm_wireguard_peer_set_endpoint(peer, nmtst_rand_select(s_endpoint, NULL), TRUE))
+            g_assert_not_reached();
+
+        n_aip = nmtst_rand_select(0, nmtst_get_rand_uint32() % 10);
+        for (i_aip = 0; i_aip < n_aip; i_aip++) {
+            gs_free char *aip = NULL;
+
+            aip = _create_random_ipaddr(AF_UNSPEC, FALSE);
+            if (!nm_wireguard_peer_append_allowed_ip(peer, aip, FALSE))
+                g_assert_not_reached();
+        }
+
+        g_assert(nm_wireguard_peer_is_valid(peer, TRUE, TRUE, NULL));
+
+        nm_wireguard_peer_seal(peer);
+        g_ptr_array_add(wg_peers, peer);
+    }
+
+    return wg_peers;
 }
 
 static const char *
-_rndt_wg_peers_to_keyfile (GPtrArray *wg_peers,
-                           gboolean strict,
-                           char **out_str)
+_rndt_wg_peers_to_keyfile(GPtrArray *wg_peers, gboolean strict, char **out_str)
 {
-	nm_auto_free_gstring GString *gstr = NULL;
-	nm_auto_free_gstring GString *gstr_aip = NULL;
-	guint i, j;
-
-	g_assert (wg_peers);
-	g_assert (out_str && !*out_str);
-
-	nm_gstring_prepare (&gstr);
-	for (i = 0; i < wg_peers->len; i++) {
-		const NMWireGuardPeer *peer = wg_peers->pdata[i];
-		gs_free char *s_endpoint = NULL;
-		gs_free char *s_preshared_key = NULL;
-		gs_free char *s_preshared_key_flags = NULL;
-		gs_free char *s_persistent_keepalive = NULL;
-		gs_free char *s_allowed_ips = NULL;
-
-		if (nm_wireguard_peer_get_endpoint (peer))
-			s_endpoint = g_strdup_printf ("endpoint=%s\n", nm_wireguard_peer_get_endpoint (peer));
-		else if (!strict)
-			s_endpoint = g_strdup_printf ("endpoint=\n");
-
-		if (   nm_wireguard_peer_get_preshared_key (peer)
-		    || !strict) {
-			if (nm_wireguard_peer_get_preshared_key_flags (peer) == NM_SETTING_SECRET_FLAG_NONE)
-				s_preshared_key = g_strdup_printf ("preshared-key=%s\n", nm_wireguard_peer_get_preshared_key (peer) ?: "");
-		}
-
-		if (   nm_wireguard_peer_get_preshared_key_flags (peer) != NM_SETTING_SECRET_FLAG_NOT_REQUIRED
-		    || !strict)
-			s_preshared_key_flags = g_strdup_printf ("preshared-key-flags=%d\n", (int) nm_wireguard_peer_get_preshared_key_flags (peer));
-
-		if (   nm_wireguard_peer_get_persistent_keepalive (peer) != 0
-		    || !strict)
-			s_persistent_keepalive = g_strdup_printf ("persistent-keepalive=%u\n", nm_wireguard_peer_get_persistent_keepalive (peer));
-
-		if (   nm_wireguard_peer_get_allowed_ips_len (peer) > 0
-		    || !strict) {
-			nm_gstring_prepare (&gstr_aip);
-			for (j = 0; j < nm_wireguard_peer_get_allowed_ips_len (peer); j++)
-				g_string_append_printf (gstr_aip, "%s;", nm_wireguard_peer_get_allowed_ip (peer, j, NULL));
-			s_allowed_ips = g_strdup_printf ("allowed-ips=%s\n", gstr_aip->str);
-		}
-
-		if (   !s_endpoint
-		    && !s_preshared_key
-		    && !s_preshared_key_flags
-		    && !s_persistent_keepalive
-		    && !s_allowed_ips)
-			s_endpoint = g_strdup_printf ("endpoint=\n");
-
-		g_string_append_printf (gstr,
-		                        "\n"
-		                        "[wireguard-peer.%s]\n"
-		                        "%s" /* endpoint */
-		                        "%s" /* preshared-key */
-		                        "%s" /* preshared-key-flags */
-		                        "%s" /* persistent-keepalive */
-		                        "%s" /* allowed-ips */
-		                        "",
-		                        nm_wireguard_peer_get_public_key (peer),
-		                        s_endpoint ?: "",
-		                        s_preshared_key ?: "",
-		                        s_preshared_key_flags ?: "",
-		                        s_persistent_keepalive ?: "",
-		                        s_allowed_ips ?: "");
-	}
-
-	return (*out_str = g_string_free (g_steal_pointer (&gstr), FALSE));
+    nm_auto_free_gstring GString *gstr     = NULL;
+    nm_auto_free_gstring GString *gstr_aip = NULL;
+    guint                         i, j;
+
+    g_assert(wg_peers);
+    g_assert(out_str && !*out_str);
+
+    nm_gstring_prepare(&gstr);
+    for (i = 0; i < wg_peers->len; i++) {
+        const NMWireGuardPeer *peer                   = wg_peers->pdata[i];
+        gs_free char *         s_endpoint             = NULL;
+        gs_free char *         s_preshared_key        = NULL;
+        gs_free char *         s_preshared_key_flags  = NULL;
+        gs_free char *         s_persistent_keepalive = NULL;
+        gs_free char *         s_allowed_ips          = NULL;
+
+        if (nm_wireguard_peer_get_endpoint(peer))
+            s_endpoint = g_strdup_printf("endpoint=%s\n", nm_wireguard_peer_get_endpoint(peer));
+        else if (!strict)
+            s_endpoint = g_strdup_printf("endpoint=\n");
+
+        if (nm_wireguard_peer_get_preshared_key(peer) || !strict) {
+            if (nm_wireguard_peer_get_preshared_key_flags(peer) == NM_SETTING_SECRET_FLAG_NONE)
+                s_preshared_key = g_strdup_printf("preshared-key=%s\n",
+                                                  nm_wireguard_peer_get_preshared_key(peer) ?: "");
+        }
+
+        if (nm_wireguard_peer_get_preshared_key_flags(peer) != NM_SETTING_SECRET_FLAG_NOT_REQUIRED
+            || !strict)
+            s_preshared_key_flags =
+                g_strdup_printf("preshared-key-flags=%d\n",
+                                (int) nm_wireguard_peer_get_preshared_key_flags(peer));
+
+        if (nm_wireguard_peer_get_persistent_keepalive(peer) != 0 || !strict)
+            s_persistent_keepalive =
+                g_strdup_printf("persistent-keepalive=%u\n",
+                                nm_wireguard_peer_get_persistent_keepalive(peer));
+
+        if (nm_wireguard_peer_get_allowed_ips_len(peer) > 0 || !strict) {
+            nm_gstring_prepare(&gstr_aip);
+            for (j = 0; j < nm_wireguard_peer_get_allowed_ips_len(peer); j++)
+                g_string_append_printf(gstr_aip,
+                                       "%s;",
+                                       nm_wireguard_peer_get_allowed_ip(peer, j, NULL));
+            s_allowed_ips = g_strdup_printf("allowed-ips=%s\n", gstr_aip->str);
+        }
+
+        if (!s_endpoint && !s_preshared_key && !s_preshared_key_flags && !s_persistent_keepalive
+            && !s_allowed_ips)
+            s_endpoint = g_strdup_printf("endpoint=\n");
+
+        g_string_append_printf(gstr,
+                               "\n"
+                               "[wireguard-peer.%s]\n"
+                               "%s" /* endpoint */
+                               "%s" /* preshared-key */
+                               "%s" /* preshared-key-flags */
+                               "%s" /* persistent-keepalive */
+                               "%s" /* allowed-ips */
+                               "",
+                               nm_wireguard_peer_get_public_key(peer),
+                               s_endpoint ?: "",
+                               s_preshared_key ?: "",
+                               s_preshared_key_flags ?: "",
+                               s_persistent_keepalive ?: "",
+                               s_allowed_ips ?: "");
+    }
+
+    return (*out_str = g_string_free(g_steal_pointer(&gstr), FALSE));
 }
 
 static void
-_rndt_wg_peers_assert_equal (NMSettingWireGuard *s_wg,
-                             GPtrArray *peers,
-                             gboolean consider_persistent_secrets,
-                             gboolean consider_all_secrets,
-                             gboolean expect_no_secrets)
+_rndt_wg_peers_assert_equal(NMSettingWireGuard *s_wg,
+                            GPtrArray *         peers,
+                            gboolean            consider_persistent_secrets,
+                            gboolean            consider_all_secrets,
+                            gboolean            expect_no_secrets)
 {
-	guint i;
-
-	g_assert (NM_IS_SETTING_WIREGUARD (s_wg));
-	g_assert (peers);
-
-	g_assert_cmpint (peers->len, ==, nm_setting_wireguard_get_peers_len (s_wg));
-
-	for (i = 0; i < peers->len; i++) {
-		const NMWireGuardPeer *a = peers->pdata[i];
-		const NMWireGuardPeer *b = nm_setting_wireguard_get_peer (s_wg, i);
-		gboolean consider_secrets;
-
-		g_assert (a);
-		g_assert (b);
-
-		g_assert_cmpint (nm_wireguard_peer_cmp (a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS), ==, 0);
-
-		if (   consider_all_secrets
-		    || !nm_wireguard_peer_get_preshared_key (a))
-			consider_secrets = TRUE;
-		else if (nm_wireguard_peer_get_preshared_key (b))
-			consider_secrets = TRUE;
-		else if (   consider_persistent_secrets
-		         && nm_wireguard_peer_get_preshared_key_flags (b) == NM_SETTING_SECRET_FLAG_NONE)
-			consider_secrets = TRUE;
-		else
-			consider_secrets = FALSE;
-
-		if (consider_secrets) {
-			g_assert_cmpstr (nm_wireguard_peer_get_preshared_key (a), ==, nm_wireguard_peer_get_preshared_key (b));
-			g_assert_cmpint (nm_wireguard_peer_cmp (a, b, NM_SETTING_COMPARE_FLAG_EXACT), ==, 0);
-		}
-
-		if (expect_no_secrets)
-			g_assert_cmpstr (nm_wireguard_peer_get_preshared_key (b), ==, NULL);
-	}
+    guint i;
+
+    g_assert(NM_IS_SETTING_WIREGUARD(s_wg));
+    g_assert(peers);
+
+    g_assert_cmpint(peers->len, ==, nm_setting_wireguard_get_peers_len(s_wg));
+
+    for (i = 0; i < peers->len; i++) {
+        const NMWireGuardPeer *a = peers->pdata[i];
+        const NMWireGuardPeer *b = nm_setting_wireguard_get_peer(s_wg, i);
+        gboolean               consider_secrets;
+
+        g_assert(a);
+        g_assert(b);
+
+        g_assert_cmpint(nm_wireguard_peer_cmp(a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS), ==, 0);
+
+        if (consider_all_secrets || !nm_wireguard_peer_get_preshared_key(a))
+            consider_secrets = TRUE;
+        else if (nm_wireguard_peer_get_preshared_key(b))
+            consider_secrets = TRUE;
+        else if (consider_persistent_secrets
+                 && nm_wireguard_peer_get_preshared_key_flags(b) == NM_SETTING_SECRET_FLAG_NONE)
+            consider_secrets = TRUE;
+        else
+            consider_secrets = FALSE;
+
+        if (consider_secrets) {
+            g_assert_cmpstr(nm_wireguard_peer_get_preshared_key(a),
+                            ==,
+                            nm_wireguard_peer_get_preshared_key(b));
+            g_assert_cmpint(nm_wireguard_peer_cmp(a, b, NM_SETTING_COMPARE_FLAG_EXACT), ==, 0);
+        }
+
+        if (expect_no_secrets)
+            g_assert_cmpstr(nm_wireguard_peer_get_preshared_key(b), ==, NULL);
+    }
 }
 
 static void
-_rndt_wg_peers_fix_secrets (NMSettingWireGuard *s_wg,
-                            GPtrArray *peers)
+_rndt_wg_peers_fix_secrets(NMSettingWireGuard *s_wg, GPtrArray *peers)
 {
-	guint i;
-
-	g_assert (NM_IS_SETTING_WIREGUARD (s_wg));
-	g_assert (peers);
-
-	g_assert_cmpint (peers->len, ==, nm_setting_wireguard_get_peers_len (s_wg));
-
-	for (i = 0; i < peers->len; i++) {
-		const NMWireGuardPeer *a = peers->pdata[i];
-		const NMWireGuardPeer *b = nm_setting_wireguard_get_peer (s_wg, i);
-		nm_auto_unref_wgpeer NMWireGuardPeer *b_clone = NULL;
-
-		g_assert (a);
-		g_assert (b);
-
-		g_assert_cmpint (nm_wireguard_peer_get_preshared_key_flags (a), ==, nm_wireguard_peer_get_preshared_key_flags (b));
-		g_assert_cmpint (nm_wireguard_peer_cmp (a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS), ==, 0);
-
-		if (!nm_streq0 (nm_wireguard_peer_get_preshared_key (a),
-		                nm_wireguard_peer_get_preshared_key (b))) {
-			g_assert_cmpstr (nm_wireguard_peer_get_preshared_key (a), !=, NULL);
-			g_assert_cmpstr (nm_wireguard_peer_get_preshared_key (b), ==, NULL);
-			g_assert (NM_IN_SET (nm_wireguard_peer_get_preshared_key_flags (a), NM_SETTING_SECRET_FLAG_AGENT_OWNED,
-			                                                                    NM_SETTING_SECRET_FLAG_NOT_SAVED));
-			b_clone = nm_wireguard_peer_new_clone (b, TRUE);
-			if (!nm_wireguard_peer_set_preshared_key (b_clone, nm_wireguard_peer_get_preshared_key (a), TRUE))
-				g_assert_not_reached ();
-			nm_setting_wireguard_set_peer (s_wg, b_clone, i);
-			b = nm_setting_wireguard_get_peer (s_wg, i);
-			g_assert (b == b_clone);
-		} else {
-			if (nm_wireguard_peer_get_preshared_key (a)) {
-				g_assert (NM_IN_SET (nm_wireguard_peer_get_preshared_key_flags (a), NM_SETTING_SECRET_FLAG_NONE,
-				                                                                    NM_SETTING_SECRET_FLAG_NOT_REQUIRED));
-			} else {
-				g_assert (NM_IN_SET (nm_wireguard_peer_get_preshared_key_flags (a), NM_SETTING_SECRET_FLAG_AGENT_OWNED,
-				                                                                    NM_SETTING_SECRET_FLAG_NONE,
-				                                                                    NM_SETTING_SECRET_FLAG_NOT_SAVED,
-				                                                                    NM_SETTING_SECRET_FLAG_NOT_REQUIRED));
-			}
-		}
-
-		g_assert_cmpstr (nm_wireguard_peer_get_preshared_key (a), ==, nm_wireguard_peer_get_preshared_key (b));
-		g_assert_cmpint (nm_wireguard_peer_cmp (a, b, NM_SETTING_COMPARE_FLAG_EXACT), ==, 0);
-	}
+    guint i;
+
+    g_assert(NM_IS_SETTING_WIREGUARD(s_wg));
+    g_assert(peers);
+
+    g_assert_cmpint(peers->len, ==, nm_setting_wireguard_get_peers_len(s_wg));
+
+    for (i = 0; i < peers->len; i++) {
+        const NMWireGuardPeer *a                      = peers->pdata[i];
+        const NMWireGuardPeer *b                      = nm_setting_wireguard_get_peer(s_wg, i);
+        nm_auto_unref_wgpeer NMWireGuardPeer *b_clone = NULL;
+
+        g_assert(a);
+        g_assert(b);
+
+        g_assert_cmpint(nm_wireguard_peer_get_preshared_key_flags(a),
+                        ==,
+                        nm_wireguard_peer_get_preshared_key_flags(b));
+        g_assert_cmpint(nm_wireguard_peer_cmp(a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS), ==, 0);
+
+        if (!nm_streq0(nm_wireguard_peer_get_preshared_key(a),
+                       nm_wireguard_peer_get_preshared_key(b))) {
+            g_assert_cmpstr(nm_wireguard_peer_get_preshared_key(a), !=, NULL);
+            g_assert_cmpstr(nm_wireguard_peer_get_preshared_key(b), ==, NULL);
+            g_assert(NM_IN_SET(nm_wireguard_peer_get_preshared_key_flags(a),
+                               NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                               NM_SETTING_SECRET_FLAG_NOT_SAVED));
+            b_clone = nm_wireguard_peer_new_clone(b, TRUE);
+            if (!nm_wireguard_peer_set_preshared_key(b_clone,
+                                                     nm_wireguard_peer_get_preshared_key(a),
+                                                     TRUE))
+                g_assert_not_reached();
+            nm_setting_wireguard_set_peer(s_wg, b_clone, i);
+            b = nm_setting_wireguard_get_peer(s_wg, i);
+            g_assert(b == b_clone);
+        } else {
+            if (nm_wireguard_peer_get_preshared_key(a)) {
+                g_assert(NM_IN_SET(nm_wireguard_peer_get_preshared_key_flags(a),
+                                   NM_SETTING_SECRET_FLAG_NONE,
+                                   NM_SETTING_SECRET_FLAG_NOT_REQUIRED));
+            } else {
+                g_assert(NM_IN_SET(nm_wireguard_peer_get_preshared_key_flags(a),
+                                   NM_SETTING_SECRET_FLAG_AGENT_OWNED,
+                                   NM_SETTING_SECRET_FLAG_NONE,
+                                   NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                                   NM_SETTING_SECRET_FLAG_NOT_REQUIRED));
+            }
+        }
+
+        g_assert_cmpstr(nm_wireguard_peer_get_preshared_key(a),
+                        ==,
+                        nm_wireguard_peer_get_preshared_key(b));
+        g_assert_cmpint(nm_wireguard_peer_cmp(a, b, NM_SETTING_COMPARE_FLAG_EXACT), ==, 0);
+    }
 }
 
 static void
-test_roundtrip_conversion (gconstpointer test_data)
+test_roundtrip_conversion(gconstpointer test_data)
 {
-	const int MODE = GPOINTER_TO_INT (test_data);
-	const char *ID= nm_sprintf_bufa (100, "roundtrip-conversion-%d", MODE);
-	const char *UUID= "63376701-b61e-4318-bf7e-664a1c1eeaab";
-	const char *INTERFACE_NAME = nm_sprintf_bufa (100, "ifname%d", MODE);
-	guint32 ETH_MTU = nmtst_rand_select ((guint32) 0u,
-	                                     nmtst_get_rand_uint32 ());
-	const char *WG_PRIVATE_KEY = nmtst_get_rand_bool ()
-	                             ? "yGXGK+5bVnxSJUejH4vbpXbq+ZtaG4NB8IHRK/aVtE0="
-	                             : NULL;
-	const NMSettingSecretFlags WG_PRIVATE_KEY_FLAGS = nmtst_rand_select (NM_SETTING_SECRET_FLAG_NONE,
-	                                                                     NM_SETTING_SECRET_FLAG_NOT_SAVED,
-	                                                                     NM_SETTING_SECRET_FLAG_AGENT_OWNED);
-	const guint WG_LISTEN_PORT = nmtst_rand_select (0u,
-	                                                nmtst_get_rand_uint32 () % 0x10000);
-	const guint WG_FWMARK = nmtst_rand_select (0u,
-	                                           nmtst_get_rand_uint32 ());
-	gs_unref_ptrarray GPtrArray *kf_data_arr = g_ptr_array_new_with_free_func (g_free);
-	gs_unref_ptrarray GPtrArray *wg_peers = NULL;
-	const NMConnectionSerializationFlags dbus_serialization_flags[] = {
-		NM_CONNECTION_SERIALIZE_ALL,
-		NM_CONNECTION_SERIALIZE_NO_SECRETS,
-		NM_CONNECTION_SERIALIZE_ONLY_SECRETS,
-	};
-	guint dbus_serialization_flags_idx;
-	gs_unref_object NMConnection *con = NULL;
-	gs_free_error GError *error = NULL;
-	gs_free char *tmp_str = NULL;
-	guint kf_data_idx;
-	NMSettingConnection *s_con = NULL;
-	NMSettingWired *s_eth = NULL;
-	NMSettingWireGuard *s_wg = NULL;
-	union {
-		struct {
-			NMSettingIPConfig  *s_6;
-			NMSettingIPConfig  *s_4;
-		};
-		NMSettingIPConfig *s_x[2];
-	} s_ip;
-	int is_ipv4;
-	guint i;
-	gboolean success;
-	gs_free char *s390_keyfile_entries = NULL;
-
-	switch (MODE) {
-	case 0:
-		con = nmtst_create_minimal_connection (ID, UUID, NM_SETTING_WIRED_SETTING_NAME, &s_con);
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME,
-		              INTERFACE_NAME,
-		              NULL);
-		nmtst_connection_normalize (con);
-
-		s_eth = NM_SETTING_WIRED (nm_connection_get_setting (con, NM_TYPE_SETTING_WIRED));
-		g_assert (NM_IS_SETTING_WIRED (s_eth));
-
-		g_object_set (s_eth,
-		              NM_SETTING_WIRED_MTU,
-		              ETH_MTU,
-		              NULL);
-
-		_rndt_wired_add_s390_options (s_eth, &s390_keyfile_entries);
-
-		g_ptr_array_add (kf_data_arr,
-		    g_strdup_printf ("[connection]\n"
-		                     "id=%s\n"
-		                     "uuid=%s\n"
-		                     "type=ethernet\n"
-		                     "interface-name=%s\n"
-		                     "permissions=\n"
-		                     "\n"
-		                     "[ethernet]\n"
-		                     "mac-address-blacklist=\n"
-		                     "%s" /* mtu */
-		                     "\n"
-		                     "%s" /* [ethernet-s390-options] */
-		                     "[ipv4]\n"
-		                     "dns-search=\n"
-		                     "method=auto\n"
-		                     "\n"
-		                     "[ipv6]\n"
-		                     "addr-gen-mode=stable-privacy\n"
-		                     "dns-search=\n"
-		                     "method=auto\n"
-		                     "\n"
-		                     "[proxy]\n"
-		                     "",
-		                     ID,
-		                     UUID,
-		                     INTERFACE_NAME,
-		                       (ETH_MTU != 0)
-		                     ? nm_sprintf_bufa (100, "mtu=%u\n", ETH_MTU)
-		                     : "",
-		                     s390_keyfile_entries));
-
-		g_ptr_array_add (kf_data_arr,
-		    g_strdup_printf ("[connection]\n"
-		                     "id=%s\n"
-		                     "uuid=%s\n"
-		                     "type=ethernet\n"
-		                     "interface-name=%s\n"
-		                     "permissions=\n"
-		                     "\n"
-		                     "[ethernet]\n"
-		                     "mac-address-blacklist=\n"
-		                     "%s" /* mtu */
-		                     "\n"
-		                     "%s" /* [ethernet-s390-options] */
-		                     "[ipv4]\n"
-		                     "dns-search=\n"
-		                     "method=auto\n"
-		                     "\n"
-		                     "[ipv6]\n"
-		                     "addr-gen-mode=stable-privacy\n"
-		                     "dns-search=\n"
-		                     "method=auto\n"
-		                     "",
-		                     ID,
-		                     UUID,
-		                     INTERFACE_NAME,
-		                       (ETH_MTU != 0)
-		                     ? nm_sprintf_bufa (100, "mtu=%d\n", (int) ETH_MTU)
-		                     : "",
-		                     s390_keyfile_entries));
-
-		break;
-
-	case 1:
-		con = nmtst_create_minimal_connection (ID, UUID, "wireguard", &s_con);
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME,
-		              INTERFACE_NAME,
-		              NULL);
-		nmtst_connection_normalize (con);
-
-		s_wg = NM_SETTING_WIREGUARD (nm_connection_get_setting (con, NM_TYPE_SETTING_WIREGUARD));
-
-		g_ptr_array_add (kf_data_arr,
-		    g_strdup_printf ("[connection]\n"
-		                     "id=%s\n"
-		                     "uuid=%s\n"
-		                     "type=wireguard\n"
-		                     "interface-name=%s\n"
-		                     "permissions=\n"
-		                     "\n"
-		                     "[wireguard]\n"
-		                     "\n"
-		                     "[ipv4]\n"
-		                     "dns-search=\n"
-		                     "method=disabled\n"
-		                     "\n"
-		                     "[ipv6]\n"
-		                     "addr-gen-mode=stable-privacy\n"
-		                     "dns-search=\n"
-		                     "method=ignore\n"
-		                     "\n"
-		                     "[proxy]\n"
-		                     "",
-		                     ID,
-		                     UUID,
-		                     INTERFACE_NAME));
-		break;
-
-	case 2:
-		con = nmtst_create_minimal_connection (ID, UUID, "wireguard", &s_con);
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME,
-		              INTERFACE_NAME,
-		              NULL);
-		nmtst_connection_normalize (con);
-
-		s_wg = NM_SETTING_WIREGUARD (nm_connection_get_setting (con, NM_TYPE_SETTING_WIREGUARD));
-		g_object_set (s_wg,
-		              NM_SETTING_WIREGUARD_PRIVATE_KEY,
-		              WG_PRIVATE_KEY,
-		              NM_SETTING_WIREGUARD_PRIVATE_KEY_FLAGS,
-		              WG_PRIVATE_KEY_FLAGS,
-		              NM_SETTING_WIREGUARD_LISTEN_PORT,
-		              WG_LISTEN_PORT,
-		              NM_SETTING_WIREGUARD_FWMARK,
-		              WG_FWMARK,
-		              NULL);
-
-		wg_peers = _rndt_wg_peers_create ();
-
-		for (i = 0; i < wg_peers->len; i++)
-			nm_setting_wireguard_append_peer (s_wg, wg_peers->pdata[i]);
-
-		nm_clear_g_free (&tmp_str);
-
-		g_ptr_array_add (kf_data_arr,
-		    g_strdup_printf ("[connection]\n"
-		                     "id=%s\n"
-		                     "uuid=%s\n"
-		                     "type=wireguard\n"
-		                     "interface-name=%s\n"
-		                     "permissions=\n"
-		                     "\n"
-		                     "[wireguard]\n"
-		                     "%s" /* fwmark */
-		                     "%s" /* listen-port */
-		                     "%s" /* private-key-flags */
-		                     "%s" /* private-key */
-		                     "%s" /* [wireguard-peers*] */
-		                     "\n"
-		                     "[ipv4]\n"
-		                     "dns-search=\n"
-		                     "method=disabled\n"
-		                     "\n"
-		                     "[ipv6]\n"
-		                     "addr-gen-mode=stable-privacy\n"
-		                     "dns-search=\n"
-		                     "method=ignore\n"
-		                     "\n"
-		                     "[proxy]\n"
-		                     "",
-		                     ID,
-		                     UUID,
-		                     INTERFACE_NAME,
-		                     (  (WG_FWMARK != 0)
-		                      ? nm_sprintf_bufa (100, "fwmark=%u\n", WG_FWMARK)
-		                      : ""),
-		                     (  (WG_LISTEN_PORT != 0)
-		                      ? nm_sprintf_bufa (100, "listen-port=%u\n", WG_LISTEN_PORT)
-		                      : ""),
-		                     (  (WG_PRIVATE_KEY_FLAGS != NM_SETTING_SECRET_FLAG_NONE)
-		                      ? nm_sprintf_bufa (100, "private-key-flags=%u\n", (guint) WG_PRIVATE_KEY_FLAGS)
-		                      : ""),
-		                     (  (   WG_PRIVATE_KEY
-		                         && WG_PRIVATE_KEY_FLAGS == NM_SETTING_SECRET_FLAG_NONE)
-		                      ? nm_sprintf_bufa (100, "private-key=%s\n", WG_PRIVATE_KEY)
-		                      : ""),
-		                     _rndt_wg_peers_to_keyfile (wg_peers, TRUE, &tmp_str)));
-
-		_rndt_wg_peers_assert_equal (s_wg, wg_peers, TRUE, TRUE, FALSE);
-		break;
-
-	case 3:
-		con = nmtst_create_minimal_connection (ID, UUID, NM_SETTING_WIRED_SETTING_NAME, &s_con);
-		g_object_set (s_con,
-		              NM_SETTING_CONNECTION_INTERFACE_NAME,
-		              INTERFACE_NAME,
-		              NULL);
-		nmtst_connection_normalize (con);
-
-		s_eth = NM_SETTING_WIRED (nm_connection_get_setting (con, NM_TYPE_SETTING_WIRED));
-		g_assert (NM_IS_SETTING_WIRED (s_eth));
-
-		g_object_set (s_eth,
-		              NM_SETTING_WIRED_MTU,
-		              ETH_MTU,
-		              NULL);
-
-		s_ip.s_4 = NM_SETTING_IP_CONFIG (nm_connection_get_setting (con, NM_TYPE_SETTING_IP4_CONFIG));
-		g_assert (NM_IS_SETTING_IP4_CONFIG (s_ip.s_4));
-
-		s_ip.s_6 = NM_SETTING_IP_CONFIG (nm_connection_get_setting (con, NM_TYPE_SETTING_IP6_CONFIG));
-		g_assert (NM_IS_SETTING_IP6_CONFIG (s_ip.s_6));
-
-		for (is_ipv4 = 0; is_ipv4 < 2; is_ipv4++) {
-			g_assert (NM_IS_SETTING_IP_CONFIG (s_ip.s_x[is_ipv4]));
-			for (i = 0; i < 3; i++) {
-				char addrstr[NM_UTILS_INET_ADDRSTRLEN];
-
-				nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr = NULL;
-
-				rr = nm_ip_routing_rule_new (is_ipv4 ? AF_INET : AF_INET6);
-				nm_ip_routing_rule_set_priority (rr, i + 1);
-				if (i > 0) {
-					if (is_ipv4)
-						nm_sprintf_buf (addrstr, "192.168.%u.0", i);
-					else
-						nm_sprintf_buf (addrstr, "1:2:3:%x::", 10 + i);
-					nm_ip_routing_rule_set_from (rr, addrstr, is_ipv4 ? 24 + i : 64 + i);
-				}
-				nm_ip_routing_rule_set_table (rr, 1000 + i);
-
-				success = nm_ip_routing_rule_validate (rr, &error);
-				nmtst_assert_success (success, error);
-
-				nm_setting_ip_config_add_routing_rule (s_ip.s_x[is_ipv4], rr);
-			}
-		}
-
-		g_ptr_array_add (kf_data_arr,
-		    g_strdup_printf ("[connection]\n"
-		                     "id=%s\n"
-		                     "uuid=%s\n"
-		                     "type=ethernet\n"
-		                     "interface-name=%s\n"
-		                     "permissions=\n"
-		                     "\n"
-		                     "[ethernet]\n"
-		                     "mac-address-blacklist=\n"
-		                     "%s" /* mtu */
-		                     "\n"
-		                     "[ipv4]\n"
-		                     "dns-search=\n"
-		                     "method=auto\n"
-		                     "routing-rule1=priority 1 from 0.0.0.0/0 table 1000\n"
-		                     "routing-rule2=priority 2 from 192.168.1.0/25 table 1001\n"
-		                     "routing-rule3=priority 3 from 192.168.2.0/26 table 1002\n"
-		                     "\n"
-		                     "[ipv6]\n"
-		                     "addr-gen-mode=stable-privacy\n"
-		                     "dns-search=\n"
-		                     "method=auto\n"
-		                     "routing-rule1=priority 1 from ::/0 table 1000\n"
-		                     "routing-rule2=priority 2 from 1:2:3:b::/65 table 1001\n"
-		                     "routing-rule3=priority 3 from 1:2:3:c::/66 table 1002\n"
-		                     "\n"
-		                     "[proxy]\n"
-		                     "",
-		                     ID,
-		                     UUID,
-		                     INTERFACE_NAME,
-		                       (ETH_MTU != 0)
-		                     ? nm_sprintf_bufa (100, "mtu=%u\n", ETH_MTU)
-		                     : ""));
-
-		break;
-
-	default:
-		g_assert_not_reached ();
-	}
-
-	/* the first kf_data_arr entry is special: it is the exact result of what we expect
-	 * when converting @con to keyfile. Write @con to keyfile and compare the expected result
-	 * literally. */
-	{
-		gs_unref_keyfile GKeyFile *kf = NULL;
-
-		kf = nm_keyfile_write (con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
-		nmtst_assert_success (kf, error);
-
-		/* the first kf_data_arr entry is special: it must be what the writer would
-		 * produce again. */
-		nmtst_keyfile_assert_data (kf, kf_data_arr->pdata[0], -1);
-	}
-
-	/* check that reading any of kf_data_arr yields the same result that we expect. */
-	for (kf_data_idx = 0; kf_data_idx < kf_data_arr->len; kf_data_idx++) {
-		gs_unref_object NMConnection *con2 = NULL;
-		NMSettingWireGuard *s_wg2 = NULL;
-		NMSettingWired *s_eth2 = NULL;
-
-		con2 = nmtst_create_connection_from_keyfile (kf_data_arr->pdata[kf_data_idx], "/no/where/file.nmconnection");
-
-		switch (MODE) {
-		case 0:
-			s_eth2 = NM_SETTING_WIRED (nm_connection_get_setting (con2, NM_TYPE_SETTING_WIRED));
-			g_assert (NM_IS_SETTING_WIRED (s_eth2));
-
-			if (   ETH_MTU > (guint32) G_MAXINT
-			    && kf_data_idx == 1) {
-				/* older versions wrote values > 2^21 as signed integers, but the reader would
-				 * always reject such negative values for G_TYPE_UINT.
-				 *
-				 * The test case kf_data_idx #1 still writes the values in the old style.
-				 * The behavior was fixed, but such values are still rejected as invalid.
-				 *
-				 * Patch the setting so that the comparison below succeeds are usual. */
-				g_assert_cmpint (nm_setting_wired_get_mtu (s_eth2), ==, 0);
-				g_object_set (s_eth2,
-				              NM_SETTING_WIRED_MTU,
-				              ETH_MTU,
-				              NULL);
-			}
-
-			g_assert_cmpint (nm_setting_wired_get_mtu (s_eth), ==, ETH_MTU);
-			g_assert_cmpint (nm_setting_wired_get_mtu (s_eth2), ==, ETH_MTU);
-
-			g_assert_cmpint (nm_setting_wired_get_num_s390_options (s_eth2), ==, nm_setting_wired_get_num_s390_options (s_eth));
-
-			break;
-
-		case 1:
-			s_wg2 = NM_SETTING_WIREGUARD (nm_connection_get_setting (con2, NM_TYPE_SETTING_WIREGUARD));
-			g_assert (NM_IS_SETTING_WIREGUARD (s_wg2));
-
-			g_assert_cmpstr (nm_setting_wireguard_get_private_key (s_wg), ==, NULL);
-			g_assert_cmpstr (nm_setting_wireguard_get_private_key (s_wg2), ==, NULL);
-			break;
-
-		case 2:
-			s_wg2 = NM_SETTING_WIREGUARD (nm_connection_get_setting (con2, NM_TYPE_SETTING_WIREGUARD));
-			g_assert (NM_IS_SETTING_WIREGUARD (s_wg2));
-
-			/* the private key was lost due to the secret-flags. Patch it. */
-			if (WG_PRIVATE_KEY_FLAGS != NM_SETTING_SECRET_FLAG_NONE) {
-				g_assert_cmpstr (nm_setting_wireguard_get_private_key (s_wg2), ==, NULL);
-				g_object_set (s_wg2,
-				              NM_SETTING_WIREGUARD_PRIVATE_KEY,
-				              WG_PRIVATE_KEY,
-				              NULL);
-			}
-
-			g_assert_cmpstr (nm_setting_wireguard_get_private_key (s_wg), ==, WG_PRIVATE_KEY);
-			g_assert_cmpstr (nm_setting_wireguard_get_private_key (s_wg2), ==, WG_PRIVATE_KEY);
-
-			_rndt_wg_peers_assert_equal (s_wg2, wg_peers, TRUE, FALSE, FALSE);
-			_rndt_wg_peers_fix_secrets (s_wg2, wg_peers);
-			_rndt_wg_peers_assert_equal (s_wg2, wg_peers, TRUE, TRUE, FALSE);
-			break;
-		}
-
-		nmtst_assert_connection_equals (con, nmtst_get_rand_bool (), con2, nmtst_get_rand_bool ());
-	}
-
-	for (dbus_serialization_flags_idx = 0; dbus_serialization_flags_idx < G_N_ELEMENTS (dbus_serialization_flags); dbus_serialization_flags_idx++) {
-		NMConnectionSerializationFlags flag = dbus_serialization_flags[dbus_serialization_flags_idx];
-		gs_unref_variant GVariant *con_var = NULL;
-		gs_unref_object NMConnection *con2 = NULL;
-		NMSettingWireGuard *s_wg2 = NULL;
-
-		con_var = nm_connection_to_dbus (con, flag);
-		g_assert (g_variant_is_of_type (con_var, NM_VARIANT_TYPE_CONNECTION));
-		g_assert (g_variant_is_floating (con_var));
-		g_variant_ref_sink (con_var);
-
-		if (flag == NM_CONNECTION_SERIALIZE_ALL) {
-			con2 = _connection_new_from_dbus_strict (con_var, TRUE);
-			nmtst_assert_connection_equals (con, nmtst_get_rand_bool (), con2, nmtst_get_rand_bool ());
-
-			{
-				gs_unref_keyfile GKeyFile *kf = NULL;
-
-				kf = nm_keyfile_write (con2, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
-				nmtst_assert_success (kf, error);
-				nmtst_keyfile_assert_data (kf, kf_data_arr->pdata[0], -1);
-			}
-		}
-
-		switch (MODE) {
-		case 2:
-			if (flag == NM_CONNECTION_SERIALIZE_ALL) {
-				s_wg2 = NM_SETTING_WIREGUARD (nm_connection_get_setting (con2, NM_TYPE_SETTING_WIREGUARD));
-
-				if (flag == NM_CONNECTION_SERIALIZE_ALL)
-					_rndt_wg_peers_assert_equal (s_wg2, wg_peers, TRUE, TRUE, FALSE);
-				else if (flag == NM_CONNECTION_SERIALIZE_NO_SECRETS)
-					_rndt_wg_peers_assert_equal (s_wg2, wg_peers, FALSE, FALSE, TRUE);
-				else
-					g_assert_not_reached ();
-			}
-			break;
-		}
-	}
+    const int   MODE           = GPOINTER_TO_INT(test_data);
+    const char *ID             = nm_sprintf_bufa(100, "roundtrip-conversion-%d", MODE);
+    const char *UUID           = "63376701-b61e-4318-bf7e-664a1c1eeaab";
+    const char *INTERFACE_NAME = nm_sprintf_bufa(100, "ifname%d", MODE);
+    guint32     ETH_MTU        = nmtst_rand_select((guint32) 0u, nmtst_get_rand_uint32());
+    const char *WG_PRIVATE_KEY =
+        nmtst_get_rand_bool() ? "yGXGK+5bVnxSJUejH4vbpXbq+ZtaG4NB8IHRK/aVtE0=" : NULL;
+    const NMSettingSecretFlags WG_PRIVATE_KEY_FLAGS =
+        nmtst_rand_select(NM_SETTING_SECRET_FLAG_NONE,
+                          NM_SETTING_SECRET_FLAG_NOT_SAVED,
+                          NM_SETTING_SECRET_FLAG_AGENT_OWNED);
+    const guint       WG_LISTEN_PORT = nmtst_rand_select(0u, nmtst_get_rand_uint32() % 0x10000);
+    const guint       WG_FWMARK      = nmtst_rand_select(0u, nmtst_get_rand_uint32());
+    gs_unref_ptrarray GPtrArray *kf_data_arr      = g_ptr_array_new_with_free_func(g_free);
+    gs_unref_ptrarray GPtrArray *        wg_peers = NULL;
+    const NMConnectionSerializationFlags dbus_serialization_flags[] = {
+        NM_CONNECTION_SERIALIZE_ALL,
+        NM_CONNECTION_SERIALIZE_NO_SECRETS,
+        NM_CONNECTION_SERIALIZE_ONLY_SECRETS,
+    };
+    guint           dbus_serialization_flags_idx;
+    gs_unref_object NMConnection *con = NULL;
+    gs_free_error GError *error       = NULL;
+    gs_free char *        tmp_str     = NULL;
+    guint                 kf_data_idx;
+    NMSettingConnection * s_con = NULL;
+    NMSettingWired *      s_eth = NULL;
+    NMSettingWireGuard *  s_wg  = NULL;
+    union {
+        struct {
+            NMSettingIPConfig *s_6;
+            NMSettingIPConfig *s_4;
+        };
+        NMSettingIPConfig *s_x[2];
+    } s_ip;
+    int           is_ipv4;
+    guint         i;
+    gboolean      success;
+    gs_free char *s390_keyfile_entries = NULL;
+
+    switch (MODE) {
+    case 0:
+        con = nmtst_create_minimal_connection(ID, UUID, NM_SETTING_WIRED_SETTING_NAME, &s_con);
+        g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, INTERFACE_NAME, NULL);
+        nmtst_connection_normalize(con);
+
+        s_eth = NM_SETTING_WIRED(nm_connection_get_setting(con, NM_TYPE_SETTING_WIRED));
+        g_assert(NM_IS_SETTING_WIRED(s_eth));
+
+        g_object_set(s_eth, NM_SETTING_WIRED_MTU, ETH_MTU, NULL);
+
+        _rndt_wired_add_s390_options(s_eth, &s390_keyfile_entries);
+
+        g_ptr_array_add(
+            kf_data_arr,
+            g_strdup_printf("[connection]\n"
+                            "id=%s\n"
+                            "uuid=%s\n"
+                            "type=ethernet\n"
+                            "interface-name=%s\n"
+                            "permissions=\n"
+                            "\n"
+                            "[ethernet]\n"
+                            "mac-address-blacklist=\n"
+                            "%s" /* mtu */
+                            "\n"
+                            "%s" /* [ethernet-s390-options] */
+                            "[ipv4]\n"
+                            "dns-search=\n"
+                            "method=auto\n"
+                            "\n"
+                            "[ipv6]\n"
+                            "addr-gen-mode=stable-privacy\n"
+                            "dns-search=\n"
+                            "method=auto\n"
+                            "\n"
+                            "[proxy]\n"
+                            "",
+                            ID,
+                            UUID,
+                            INTERFACE_NAME,
+                            (ETH_MTU != 0) ? nm_sprintf_bufa(100, "mtu=%u\n", ETH_MTU) : "",
+                            s390_keyfile_entries));
+
+        g_ptr_array_add(
+            kf_data_arr,
+            g_strdup_printf("[connection]\n"
+                            "id=%s\n"
+                            "uuid=%s\n"
+                            "type=ethernet\n"
+                            "interface-name=%s\n"
+                            "permissions=\n"
+                            "\n"
+                            "[ethernet]\n"
+                            "mac-address-blacklist=\n"
+                            "%s" /* mtu */
+                            "\n"
+                            "%s" /* [ethernet-s390-options] */
+                            "[ipv4]\n"
+                            "dns-search=\n"
+                            "method=auto\n"
+                            "\n"
+                            "[ipv6]\n"
+                            "addr-gen-mode=stable-privacy\n"
+                            "dns-search=\n"
+                            "method=auto\n"
+                            "",
+                            ID,
+                            UUID,
+                            INTERFACE_NAME,
+                            (ETH_MTU != 0) ? nm_sprintf_bufa(100, "mtu=%d\n", (int) ETH_MTU) : "",
+                            s390_keyfile_entries));
+
+        break;
+
+    case 1:
+        con = nmtst_create_minimal_connection(ID, UUID, "wireguard", &s_con);
+        g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, INTERFACE_NAME, NULL);
+        nmtst_connection_normalize(con);
+
+        s_wg = NM_SETTING_WIREGUARD(nm_connection_get_setting(con, NM_TYPE_SETTING_WIREGUARD));
+
+        g_ptr_array_add(kf_data_arr,
+                        g_strdup_printf("[connection]\n"
+                                        "id=%s\n"
+                                        "uuid=%s\n"
+                                        "type=wireguard\n"
+                                        "interface-name=%s\n"
+                                        "permissions=\n"
+                                        "\n"
+                                        "[wireguard]\n"
+                                        "\n"
+                                        "[ipv4]\n"
+                                        "dns-search=\n"
+                                        "method=disabled\n"
+                                        "\n"
+                                        "[ipv6]\n"
+                                        "addr-gen-mode=stable-privacy\n"
+                                        "dns-search=\n"
+                                        "method=ignore\n"
+                                        "\n"
+                                        "[proxy]\n"
+                                        "",
+                                        ID,
+                                        UUID,
+                                        INTERFACE_NAME));
+        break;
+
+    case 2:
+        con = nmtst_create_minimal_connection(ID, UUID, "wireguard", &s_con);
+        g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, INTERFACE_NAME, NULL);
+        nmtst_connection_normalize(con);
+
+        s_wg = NM_SETTING_WIREGUARD(nm_connection_get_setting(con, NM_TYPE_SETTING_WIREGUARD));
+        g_object_set(s_wg,
+                     NM_SETTING_WIREGUARD_PRIVATE_KEY,
+                     WG_PRIVATE_KEY,
+                     NM_SETTING_WIREGUARD_PRIVATE_KEY_FLAGS,
+                     WG_PRIVATE_KEY_FLAGS,
+                     NM_SETTING_WIREGUARD_LISTEN_PORT,
+                     WG_LISTEN_PORT,
+                     NM_SETTING_WIREGUARD_FWMARK,
+                     WG_FWMARK,
+                     NULL);
+
+        wg_peers = _rndt_wg_peers_create();
+
+        for (i = 0; i < wg_peers->len; i++)
+            nm_setting_wireguard_append_peer(s_wg, wg_peers->pdata[i]);
+
+        nm_clear_g_free(&tmp_str);
+
+        g_ptr_array_add(
+            kf_data_arr,
+            g_strdup_printf(
+                "[connection]\n"
+                "id=%s\n"
+                "uuid=%s\n"
+                "type=wireguard\n"
+                "interface-name=%s\n"
+                "permissions=\n"
+                "\n"
+                "[wireguard]\n"
+                "%s" /* fwmark */
+                "%s" /* listen-port */
+                "%s" /* private-key-flags */
+                "%s" /* private-key */
+                "%s" /* [wireguard-peers*] */
+                "\n"
+                "[ipv4]\n"
+                "dns-search=\n"
+                "method=disabled\n"
+                "\n"
+                "[ipv6]\n"
+                "addr-gen-mode=stable-privacy\n"
+                "dns-search=\n"
+                "method=ignore\n"
+                "\n"
+                "[proxy]\n"
+                "",
+                ID,
+                UUID,
+                INTERFACE_NAME,
+                ((WG_FWMARK != 0) ? nm_sprintf_bufa(100, "fwmark=%u\n", WG_FWMARK) : ""),
+                ((WG_LISTEN_PORT != 0) ? nm_sprintf_bufa(100, "listen-port=%u\n", WG_LISTEN_PORT)
+                                       : ""),
+                ((WG_PRIVATE_KEY_FLAGS != NM_SETTING_SECRET_FLAG_NONE)
+                     ? nm_sprintf_bufa(100, "private-key-flags=%u\n", (guint) WG_PRIVATE_KEY_FLAGS)
+                     : ""),
+                ((WG_PRIVATE_KEY && WG_PRIVATE_KEY_FLAGS == NM_SETTING_SECRET_FLAG_NONE)
+                     ? nm_sprintf_bufa(100, "private-key=%s\n", WG_PRIVATE_KEY)
+                     : ""),
+                _rndt_wg_peers_to_keyfile(wg_peers, TRUE, &tmp_str)));
+
+        _rndt_wg_peers_assert_equal(s_wg, wg_peers, TRUE, TRUE, FALSE);
+        break;
+
+    case 3:
+        con = nmtst_create_minimal_connection(ID, UUID, NM_SETTING_WIRED_SETTING_NAME, &s_con);
+        g_object_set(s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, INTERFACE_NAME, NULL);
+        nmtst_connection_normalize(con);
+
+        s_eth = NM_SETTING_WIRED(nm_connection_get_setting(con, NM_TYPE_SETTING_WIRED));
+        g_assert(NM_IS_SETTING_WIRED(s_eth));
+
+        g_object_set(s_eth, NM_SETTING_WIRED_MTU, ETH_MTU, NULL);
+
+        s_ip.s_4 = NM_SETTING_IP_CONFIG(nm_connection_get_setting(con, NM_TYPE_SETTING_IP4_CONFIG));
+        g_assert(NM_IS_SETTING_IP4_CONFIG(s_ip.s_4));
+
+        s_ip.s_6 = NM_SETTING_IP_CONFIG(nm_connection_get_setting(con, NM_TYPE_SETTING_IP6_CONFIG));
+        g_assert(NM_IS_SETTING_IP6_CONFIG(s_ip.s_6));
+
+        for (is_ipv4 = 0; is_ipv4 < 2; is_ipv4++) {
+            g_assert(NM_IS_SETTING_IP_CONFIG(s_ip.s_x[is_ipv4]));
+            for (i = 0; i < 3; i++) {
+                char addrstr[NM_UTILS_INET_ADDRSTRLEN];
+
+                nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr = NULL;
+
+                rr = nm_ip_routing_rule_new(is_ipv4 ? AF_INET : AF_INET6);
+                nm_ip_routing_rule_set_priority(rr, i + 1);
+                if (i > 0) {
+                    if (is_ipv4)
+                        nm_sprintf_buf(addrstr, "192.168.%u.0", i);
+                    else
+                        nm_sprintf_buf(addrstr, "1:2:3:%x::", 10 + i);
+                    nm_ip_routing_rule_set_from(rr, addrstr, is_ipv4 ? 24 + i : 64 + i);
+                }
+                nm_ip_routing_rule_set_table(rr, 1000 + i);
+
+                success = nm_ip_routing_rule_validate(rr, &error);
+                nmtst_assert_success(success, error);
+
+                nm_setting_ip_config_add_routing_rule(s_ip.s_x[is_ipv4], rr);
+            }
+        }
+
+        g_ptr_array_add(
+            kf_data_arr,
+            g_strdup_printf("[connection]\n"
+                            "id=%s\n"
+                            "uuid=%s\n"
+                            "type=ethernet\n"
+                            "interface-name=%s\n"
+                            "permissions=\n"
+                            "\n"
+                            "[ethernet]\n"
+                            "mac-address-blacklist=\n"
+                            "%s" /* mtu */
+                            "\n"
+                            "[ipv4]\n"
+                            "dns-search=\n"
+                            "method=auto\n"
+                            "routing-rule1=priority 1 from 0.0.0.0/0 table 1000\n"
+                            "routing-rule2=priority 2 from 192.168.1.0/25 table 1001\n"
+                            "routing-rule3=priority 3 from 192.168.2.0/26 table 1002\n"
+                            "\n"
+                            "[ipv6]\n"
+                            "addr-gen-mode=stable-privacy\n"
+                            "dns-search=\n"
+                            "method=auto\n"
+                            "routing-rule1=priority 1 from ::/0 table 1000\n"
+                            "routing-rule2=priority 2 from 1:2:3:b::/65 table 1001\n"
+                            "routing-rule3=priority 3 from 1:2:3:c::/66 table 1002\n"
+                            "\n"
+                            "[proxy]\n"
+                            "",
+                            ID,
+                            UUID,
+                            INTERFACE_NAME,
+                            (ETH_MTU != 0) ? nm_sprintf_bufa(100, "mtu=%u\n", ETH_MTU) : ""));
+
+        break;
+
+    default:
+        g_assert_not_reached();
+    }
+
+    /* the first kf_data_arr entry is special: it is the exact result of what we expect
+     * when converting @con to keyfile. Write @con to keyfile and compare the expected result
+     * literally. */
+    {
+        nm_auto_unref_keyfile GKeyFile *kf = NULL;
+
+        kf = nm_keyfile_write(con, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
+        nmtst_assert_success(kf, error);
+
+        /* the first kf_data_arr entry is special: it must be what the writer would
+         * produce again. */
+        nmtst_keyfile_assert_data(kf, kf_data_arr->pdata[0], -1);
+    }
+
+    /* check that reading any of kf_data_arr yields the same result that we expect. */
+    for (kf_data_idx = 0; kf_data_idx < kf_data_arr->len; kf_data_idx++) {
+        gs_unref_object NMConnection *con2   = NULL;
+        NMSettingWireGuard *          s_wg2  = NULL;
+        NMSettingWired *              s_eth2 = NULL;
+
+        con2 = nmtst_create_connection_from_keyfile(kf_data_arr->pdata[kf_data_idx],
+                                                    "/no/where/file.nmconnection");
+
+        switch (MODE) {
+        case 0:
+            s_eth2 = NM_SETTING_WIRED(nm_connection_get_setting(con2, NM_TYPE_SETTING_WIRED));
+            g_assert(NM_IS_SETTING_WIRED(s_eth2));
+
+            if (ETH_MTU > (guint32) G_MAXINT && kf_data_idx == 1) {
+                /* older versions wrote values > 2^21 as signed integers, but the reader would
+                 * always reject such negative values for G_TYPE_UINT.
+                 *
+                 * The test case kf_data_idx #1 still writes the values in the old style.
+                 * The behavior was fixed, but such values are still rejected as invalid.
+                 *
+                 * Patch the setting so that the comparison below succeeds are usual. */
+                g_assert_cmpint(nm_setting_wired_get_mtu(s_eth2), ==, 0);
+                g_object_set(s_eth2, NM_SETTING_WIRED_MTU, ETH_MTU, NULL);
+            }
+
+            g_assert_cmpint(nm_setting_wired_get_mtu(s_eth), ==, ETH_MTU);
+            g_assert_cmpint(nm_setting_wired_get_mtu(s_eth2), ==, ETH_MTU);
+
+            g_assert_cmpint(nm_setting_wired_get_num_s390_options(s_eth2),
+                            ==,
+                            nm_setting_wired_get_num_s390_options(s_eth));
+
+            break;
+
+        case 1:
+            s_wg2 =
+                NM_SETTING_WIREGUARD(nm_connection_get_setting(con2, NM_TYPE_SETTING_WIREGUARD));
+            g_assert(NM_IS_SETTING_WIREGUARD(s_wg2));
+
+            g_assert_cmpstr(nm_setting_wireguard_get_private_key(s_wg), ==, NULL);
+            g_assert_cmpstr(nm_setting_wireguard_get_private_key(s_wg2), ==, NULL);
+            break;
+
+        case 2:
+            s_wg2 =
+                NM_SETTING_WIREGUARD(nm_connection_get_setting(con2, NM_TYPE_SETTING_WIREGUARD));
+            g_assert(NM_IS_SETTING_WIREGUARD(s_wg2));
+
+            /* the private key was lost due to the secret-flags. Patch it. */
+            if (WG_PRIVATE_KEY_FLAGS != NM_SETTING_SECRET_FLAG_NONE) {
+                g_assert_cmpstr(nm_setting_wireguard_get_private_key(s_wg2), ==, NULL);
+                g_object_set(s_wg2, NM_SETTING_WIREGUARD_PRIVATE_KEY, WG_PRIVATE_KEY, NULL);
+            }
+
+            g_assert_cmpstr(nm_setting_wireguard_get_private_key(s_wg), ==, WG_PRIVATE_KEY);
+            g_assert_cmpstr(nm_setting_wireguard_get_private_key(s_wg2), ==, WG_PRIVATE_KEY);
+
+            _rndt_wg_peers_assert_equal(s_wg2, wg_peers, TRUE, FALSE, FALSE);
+            _rndt_wg_peers_fix_secrets(s_wg2, wg_peers);
+            _rndt_wg_peers_assert_equal(s_wg2, wg_peers, TRUE, TRUE, FALSE);
+            break;
+        }
+
+        nmtst_assert_connection_equals(con, nmtst_get_rand_bool(), con2, nmtst_get_rand_bool());
+    }
+
+    for (dbus_serialization_flags_idx = 0;
+         dbus_serialization_flags_idx < G_N_ELEMENTS(dbus_serialization_flags);
+         dbus_serialization_flags_idx++) {
+        NMConnectionSerializationFlags flag =
+            dbus_serialization_flags[dbus_serialization_flags_idx];
+        gs_unref_variant GVariant *con_var  = NULL;
+        gs_unref_object NMConnection *con2  = NULL;
+        NMSettingWireGuard *          s_wg2 = NULL;
+
+        con_var = nm_connection_to_dbus(con, flag);
+        g_assert(g_variant_is_of_type(con_var, NM_VARIANT_TYPE_CONNECTION));
+        g_assert(g_variant_is_floating(con_var));
+        g_variant_ref_sink(con_var);
+
+        if (flag == NM_CONNECTION_SERIALIZE_ALL) {
+            con2 = _connection_new_from_dbus_strict(con_var, TRUE);
+            nmtst_assert_connection_equals(con, nmtst_get_rand_bool(), con2, nmtst_get_rand_bool());
+
+            {
+                nm_auto_unref_keyfile GKeyFile *kf = NULL;
+
+                kf = nm_keyfile_write(con2, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
+                nmtst_assert_success(kf, error);
+                nmtst_keyfile_assert_data(kf, kf_data_arr->pdata[0], -1);
+            }
+        }
+
+        switch (MODE) {
+        case 2:
+            if (flag == NM_CONNECTION_SERIALIZE_ALL) {
+                s_wg2 = NM_SETTING_WIREGUARD(
+                    nm_connection_get_setting(con2, NM_TYPE_SETTING_WIREGUARD));
+
+                if (flag == NM_CONNECTION_SERIALIZE_ALL)
+                    _rndt_wg_peers_assert_equal(s_wg2, wg_peers, TRUE, TRUE, FALSE);
+                else if (flag == NM_CONNECTION_SERIALIZE_NO_SECRETS)
+                    _rndt_wg_peers_assert_equal(s_wg2, wg_peers, FALSE, FALSE, TRUE);
+                else
+                    g_assert_not_reached();
+            }
+            break;
+        }
+    }
 }
 
 /*****************************************************************************/
 
 static NMIPRoutingRule *
-_rr_from_str_get_impl (const char *str, const char *const*aliases)
+_rr_from_str_get_impl(const char *str, const char *const *aliases)
 {
-	nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr = NULL;
-	gs_free_error GError *error = NULL;
-	gboolean vbool;
-	int addr_family;
-	int i;
-	NMIPRoutingRuleAsStringFlags to_string_flags;
-
-	rr = nm_ip_routing_rule_from_string (str,
-	                                     NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE,
-	                                     NULL,
-	                                     &error);
-	nmtst_assert_success (rr, error);
-
-	addr_family = nm_ip_routing_rule_get_addr_family (rr);
-	g_assert (NM_IN_SET (addr_family, AF_INET, AF_INET6));
-
-	if (addr_family == AF_INET)
-		to_string_flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET;
-	else
-		to_string_flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6;
-
-	for (i = 0; TRUE; i++) {
-		nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr2 = NULL;
-		gs_free char *str1 = NULL;
-		gs_unref_variant GVariant *variant1 = NULL;
-		const char *cstr1;
-
-		switch (i) {
-		case 0:
-			rr2 = nm_ip_routing_rule_ref (rr);
-			break;
-
-		case 1:
-			rr2 = nm_ip_routing_rule_from_string (str,
-			                                        NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
-			                                      | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
-			                                      NULL,
-			                                      &error);
-			nmtst_assert_success (rr, error);
-			break;
-
-		case 2:
-			str1 = nm_ip_routing_rule_to_string (rr,
-			                                       NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
-			                                      | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
-			                                     NULL,
-			                                     &error);
-			nmtst_assert_success (str1 && str1[0], error);
-
-			g_assert_cmpstr (str, ==, str1);
-
-			rr2 = nm_ip_routing_rule_from_string (str1,
-			                                        NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
-			                                      | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
-			                                      NULL,
-			                                      &error);
-			nmtst_assert_success (rr, error);
-			break;
-
-		case 3:
-			variant1 = nm_ip_routing_rule_to_dbus (rr);
-			g_assert (variant1);
-			g_assert (g_variant_is_floating (variant1));
-			g_assert (g_variant_is_of_type (variant1, G_VARIANT_TYPE_VARDICT));
-
-			rr2 = nm_ip_routing_rule_from_dbus (variant1,
-			                                    TRUE,
-			                                    &error);
-			nmtst_assert_success (rr, error);
-			break;
-
-		default:
-			if (!aliases || !aliases[0])
-				goto done;
-			cstr1 = (aliases++)[0];
-			rr2 = nm_ip_routing_rule_from_string (cstr1,
-			                                        NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
-			                                      | (nmtst_get_rand_bool () ? to_string_flags : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
-			                                      NULL,
-			                                      &error);
-			nmtst_assert_success (rr, error);
-			break;
-		}
-
-		g_assert (rr2);
-		vbool = nm_ip_routing_rule_validate (rr, &error);
-		nmtst_assert_success (vbool, error);
-		vbool = nm_ip_routing_rule_validate (rr2, &error);
-		nmtst_assert_success (vbool, error);
-
-		g_assert_cmpint (nm_ip_routing_rule_cmp (rr, rr2), ==, 0);
-		g_assert_cmpint (nm_ip_routing_rule_cmp (rr2, rr), ==, 0);
-	}
+    nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr = NULL;
+    gs_free_error GError *       error                = NULL;
+    gboolean                     vbool;
+    int                          addr_family;
+    int                          i;
+    NMIPRoutingRuleAsStringFlags to_string_flags;
+
+    rr = nm_ip_routing_rule_from_string(str,
+                                        NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE,
+                                        NULL,
+                                        &error);
+    nmtst_assert_success(rr, error);
+
+    addr_family = nm_ip_routing_rule_get_addr_family(rr);
+    g_assert(NM_IN_SET(addr_family, AF_INET, AF_INET6));
+
+    if (addr_family == AF_INET)
+        to_string_flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET;
+    else
+        to_string_flags = NM_IP_ROUTING_RULE_AS_STRING_FLAGS_AF_INET6;
+
+    for (i = 0; TRUE; i++) {
+        nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr2  = NULL;
+        gs_free char *                                 str1 = NULL;
+        gs_unref_variant GVariant *variant1                 = NULL;
+        const char *               cstr1;
+
+        switch (i) {
+        case 0:
+            rr2 = nm_ip_routing_rule_ref(rr);
+            break;
+
+        case 1:
+            rr2 = nm_ip_routing_rule_from_string(
+                str,
+                NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+                    | (nmtst_get_rand_bool() ? to_string_flags
+                                             : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+                NULL,
+                &error);
+            nmtst_assert_success(rr, error);
+            break;
+
+        case 2:
+            str1 = nm_ip_routing_rule_to_string(
+                rr,
+                NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+                    | (nmtst_get_rand_bool() ? to_string_flags
+                                             : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+                NULL,
+                &error);
+            nmtst_assert_success(str1 && str1[0], error);
+
+            g_assert_cmpstr(str, ==, str1);
+
+            rr2 = nm_ip_routing_rule_from_string(
+                str1,
+                NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+                    | (nmtst_get_rand_bool() ? to_string_flags
+                                             : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+                NULL,
+                &error);
+            nmtst_assert_success(rr, error);
+            break;
+
+        case 3:
+            variant1 = nm_ip_routing_rule_to_dbus(rr);
+            g_assert(variant1);
+            g_assert(g_variant_is_floating(variant1));
+            g_assert(g_variant_is_of_type(variant1, G_VARIANT_TYPE_VARDICT));
+
+            rr2 = nm_ip_routing_rule_from_dbus(variant1, TRUE, &error);
+            nmtst_assert_success(rr, error);
+            break;
+
+        default:
+            if (!aliases || !aliases[0])
+                goto done;
+            cstr1 = (aliases++)[0];
+            rr2   = nm_ip_routing_rule_from_string(
+                cstr1,
+                NM_IP_ROUTING_RULE_AS_STRING_FLAGS_VALIDATE
+                    | (nmtst_get_rand_bool() ? to_string_flags
+                                               : NM_IP_ROUTING_RULE_AS_STRING_FLAGS_NONE),
+                NULL,
+                &error);
+            nmtst_assert_success(rr, error);
+            break;
+        }
+
+        g_assert(rr2);
+        vbool = nm_ip_routing_rule_validate(rr, &error);
+        nmtst_assert_success(vbool, error);
+        vbool = nm_ip_routing_rule_validate(rr2, &error);
+        nmtst_assert_success(vbool, error);
+
+        g_assert_cmpint(nm_ip_routing_rule_cmp(rr, rr2), ==, 0);
+        g_assert_cmpint(nm_ip_routing_rule_cmp(rr2, rr), ==, 0);
+    }
 
 done:
-	return g_steal_pointer (&rr);
+    return g_steal_pointer(&rr);
 }
-#define _rr_from_str_get(a, ...) _rr_from_str_get_impl (a, &(NM_MAKE_STRV (NULL, ##__VA_ARGS__))[1])
-
-#define _rr_from_str(...) \
-	G_STMT_START { \
-		nm_auto_unref_ip_routing_rule NMIPRoutingRule *_rr = NULL; \
-		\
-		_rr = _rr_from_str_get (__VA_ARGS__); \
-		g_assert (_rr); \
-	} G_STMT_END
+#define _rr_from_str_get(a, ...) _rr_from_str_get_impl(a, &(NM_MAKE_STRV(NULL, ##__VA_ARGS__))[1])
+
+#define _rr_from_str(...)                                          \
+    G_STMT_START                                                   \
+    {                                                              \
+        nm_auto_unref_ip_routing_rule NMIPRoutingRule *_rr = NULL; \
+                                                                   \
+        _rr = _rr_from_str_get(__VA_ARGS__);                       \
+        g_assert(_rr);                                             \
+    }                                                              \
+    G_STMT_END
 
 static void
-test_routing_rule (gconstpointer test_data)
+test_routing_rule(gconstpointer test_data)
 {
-	nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr1 = NULL;
-	gboolean success;
-	char ifname_buf[16];
-
-	_rr_from_str ("priority 5 from 0.0.0.0 table 1",
-	              "  from 0.0.0.0  priority  5 lookup 1 ");
-	_rr_from_str ("priority 5 from 0.0.0.0/0 table 4");
-	_rr_from_str ("priority 5 to 0.0.0.0 table 6");
-	_rr_from_str ("priority 5 to 0.0.0.0 table 254",
-	              "priority 5 to 0.0.0.0/32");
-	_rr_from_str ("priority 5 from 1.2.3.4 table 15",
-	              "priority 5 from 1.2.3.4/32 table  0xF ",
-	              "priority 5 from 1.2.3.4/32 to 0.0.0.0/0 lookup 15 ");
-	_rr_from_str ("priority 5 from 1.2.3.4 to 0.0.0.0 table 8");
-	_rr_from_str ("priority 5 to a:b:c:: tos 0x16 table 25",
-	              "priority 5 to a:b:c::/128 table 0x19 tos 16",
-	              "priority 5 to a:b:c::/128 lookup 0x19 dsfield 16",
-	              "priority 5 to a:b:c::/128 lookup 0x19 dsfield 16 fwmark 0/0x00",
-	              "priority 5 to a:b:c:: from all lookup 0x19 dsfield 16 fwmark 0x0/0");
-	_rr_from_str ("priority 5 from :: fwmark 0 table 25",
-	              "priority 5 from ::/128 to all table 0x19 fwmark 0/0xFFFFFFFF",
-	              "priority 5 from :: to ::/0 table 0x19 fwmark 0x00/4294967295");
-	_rr_from_str ("priority 5 from :: iif aab table 25");
-	_rr_from_str ("priority 5 from :: iif aab oif er table 25",
-	              "priority 5 from :: table 0x19 dev aab oif er");
-	_rr_from_str ("priority 5 from :: iif a\\\\303b table 25");
-	_rr_from_str ("priority 5 to 0.0.0.0 sport 10 table 6",
-	              "priority 5 to 0.0.0.0 sport 10-10 table 6");
-	_rr_from_str ("priority 5 not to 0.0.0.0 dport 10-133 table 6",
-	              "not priority 5 to 0.0.0.0 dport 10-133 table 6",
-	              "not priority 5 not to 0.0.0.0 dport 10-133 table 6",
-	              "priority 5 to 0.0.0.0 not dport 10-133 not table 6",
-	              "priority 5 to 0.0.0.0 not dport 10-\\ 133 not table 6");
-	_rr_from_str ("priority 5 to 0.0.0.0 ipproto 10 sport 10 table 6");
-
-	rr1 = _rr_from_str_get ("priority 5 from :: iif aab table 25");
-	g_assert_cmpstr (nm_ip_routing_rule_get_iifname (rr1), ==, "aab");
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
-	g_assert (!success);
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
-	g_assert_cmpstr (ifname_buf, ==, "aab");
-	g_assert (success);
-	nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
-
-	rr1 = _rr_from_str_get ("priority 5 from :: iif a\\\\303\\\\261xb table 254");
-	g_assert_cmpstr (nm_ip_routing_rule_get_iifname (rr1), ==, "a\\303\\261xb");
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
-	g_assert (!success);
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
-	g_assert_cmpstr (ifname_buf, ==, "a\303\261xb");
-	g_assert (success);
-	nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
-
-	rr1 = _rr_from_str_get ("priority 5 from :: oif \\\\101=\\\\303\\\\261xb table 7");
-	g_assert_cmpstr (nm_ip_routing_rule_get_oifname (rr1), ==, "\\101=\\303\\261xb");
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
-	g_assert_cmpstr (ifname_buf, ==, "A=\303\261xb");
-	g_assert (success);
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
-	g_assert (!success);
-	nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
-
-	rr1 = _rr_from_str_get ("priority 5 to 0.0.0.0 tos 0x10 table 7");
-	g_assert_cmpstr (NULL, ==, nm_ip_routing_rule_get_from (rr1));
-	g_assert (!nm_ip_routing_rule_get_from_bin (rr1));
-	g_assert_cmpint (0, ==, nm_ip_routing_rule_get_from_len (rr1));
-	g_assert_cmpstr ("0.0.0.0", ==, nm_ip_routing_rule_get_to (rr1));
-	g_assert (nm_ip_addr_is_null (AF_INET, nm_ip_routing_rule_get_to_bin (rr1)));
-	g_assert_cmpint (32, ==, nm_ip_routing_rule_get_to_len (rr1));
-	g_assert_cmpint (7, ==, nm_ip_routing_rule_get_table (rr1));
-	g_assert_cmpint (0x10, ==, nm_ip_routing_rule_get_tos (rr1));
-	nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
-
-	rr1 = _rr_from_str_get ("priority 5 from :: iif a\\\\303\\\\261,x;b table 254",
-	                        "priority 5 from :: iif a\\\\303\\\\261,x;b table 254");
-	g_assert_cmpstr (nm_ip_routing_rule_get_iifname (rr1), ==, "a\\303\\261,x;b");
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, FALSE, ifname_buf);
-	g_assert (!success);
-	success = nm_ip_routing_rule_get_xifname_bin (rr1, TRUE, ifname_buf);
-	g_assert_cmpstr (ifname_buf, ==, "a\303\261,x;b");
-	g_assert (success);
-	nm_clear_pointer (&rr1, nm_ip_routing_rule_unref);
-
+    nm_auto_unref_ip_routing_rule NMIPRoutingRule *rr1 = NULL;
+    gboolean                                       success;
+    char                                           ifname_buf[16];
+
+    _rr_from_str("priority 5 from 0.0.0.0 table 1", "  from 0.0.0.0  priority  5 lookup 1 ");
+    _rr_from_str("priority 5 from 0.0.0.0/0 table 4");
+    _rr_from_str("priority 5 to 0.0.0.0 table 6");
+    _rr_from_str("priority 5 to 0.0.0.0 table 254", "priority 5 to 0.0.0.0/32");
+    _rr_from_str("priority 5 from 1.2.3.4 table 15",
+                 "priority 5 from 1.2.3.4/32 table  0xF ",
+                 "priority 5 from 1.2.3.4/32 to 0.0.0.0/0 lookup 15 ");
+    _rr_from_str("priority 5 from 1.2.3.4 to 0.0.0.0 table 8");
+    _rr_from_str("priority 5 to a:b:c:: tos 0x16 table 25",
+                 "priority 5 to a:b:c::/128 table 0x19 tos 16",
+                 "priority 5 to a:b:c::/128 lookup 0x19 dsfield 16",
+                 "priority 5 to a:b:c::/128 lookup 0x19 dsfield 16 fwmark 0/0x00",
+                 "priority 5 to a:b:c:: from all lookup 0x19 dsfield 16 fwmark 0x0/0");
+    _rr_from_str("priority 5 from :: fwmark 0 table 25",
+                 "priority 5 from ::/128 to all table 0x19 fwmark 0/0xFFFFFFFF",
+                 "priority 5 from :: to ::/0 table 0x19 fwmark 0x00/4294967295");
+    _rr_from_str("priority 5 from :: iif aab table 25");
+    _rr_from_str("priority 5 from :: iif aab oif er table 25",
+                 "priority 5 from :: table 0x19 dev aab oif er");
+    _rr_from_str("priority 5 from :: iif a\\\\303b table 25");
+    _rr_from_str("priority 5 to 0.0.0.0 sport 10 table 6",
+                 "priority 5 to 0.0.0.0 sport 10-10 table 6");
+    _rr_from_str("priority 5 not to 0.0.0.0 dport 10-133 table 6",
+                 "not priority 5 to 0.0.0.0 dport 10-133 table 6",
+                 "not priority 5 not to 0.0.0.0 dport 10-133 table 6",
+                 "priority 5 to 0.0.0.0 not dport 10-133 not table 6",
+                 "priority 5 to 0.0.0.0 not dport 10-\\ 133 not table 6");
+    _rr_from_str("priority 5 to 0.0.0.0 ipproto 10 sport 10 table 6");
+
+    rr1 = _rr_from_str_get("priority 5 from :: iif aab table 25");
+    g_assert_cmpstr(nm_ip_routing_rule_get_iifname(rr1), ==, "aab");
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, FALSE, ifname_buf);
+    g_assert(!success);
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, TRUE, ifname_buf);
+    g_assert_cmpstr(ifname_buf, ==, "aab");
+    g_assert(success);
+    nm_clear_pointer(&rr1, nm_ip_routing_rule_unref);
+
+    rr1 = _rr_from_str_get("priority 5 from :: iif a\\\\303\\\\261xb table 254");
+    g_assert_cmpstr(nm_ip_routing_rule_get_iifname(rr1), ==, "a\\303\\261xb");
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, FALSE, ifname_buf);
+    g_assert(!success);
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, TRUE, ifname_buf);
+    g_assert_cmpstr(ifname_buf, ==, "a\303\261xb");
+    g_assert(success);
+    nm_clear_pointer(&rr1, nm_ip_routing_rule_unref);
+
+    rr1 = _rr_from_str_get("priority 5 from :: oif \\\\101=\\\\303\\\\261xb table 7");
+    g_assert_cmpstr(nm_ip_routing_rule_get_oifname(rr1), ==, "\\101=\\303\\261xb");
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, FALSE, ifname_buf);
+    g_assert_cmpstr(ifname_buf, ==, "A=\303\261xb");
+    g_assert(success);
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, TRUE, ifname_buf);
+    g_assert(!success);
+    nm_clear_pointer(&rr1, nm_ip_routing_rule_unref);
+
+    rr1 = _rr_from_str_get("priority 5 to 0.0.0.0 tos 0x10 table 7");
+    g_assert_cmpstr(NULL, ==, nm_ip_routing_rule_get_from(rr1));
+    g_assert(!nm_ip_routing_rule_get_from_bin(rr1));
+    g_assert_cmpint(0, ==, nm_ip_routing_rule_get_from_len(rr1));
+    g_assert_cmpstr("0.0.0.0", ==, nm_ip_routing_rule_get_to(rr1));
+    g_assert(nm_ip_addr_is_null(AF_INET, nm_ip_routing_rule_get_to_bin(rr1)));
+    g_assert_cmpint(32, ==, nm_ip_routing_rule_get_to_len(rr1));
+    g_assert_cmpint(7, ==, nm_ip_routing_rule_get_table(rr1));
+    g_assert_cmpint(0x10, ==, nm_ip_routing_rule_get_tos(rr1));
+    nm_clear_pointer(&rr1, nm_ip_routing_rule_unref);
+
+    rr1 = _rr_from_str_get("priority 5 from :: iif a\\\\303\\\\261,x;b table 254",
+                           "priority 5 from :: iif a\\\\303\\\\261,x;b table 254");
+    g_assert_cmpstr(nm_ip_routing_rule_get_iifname(rr1), ==, "a\\303\\261,x;b");
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, FALSE, ifname_buf);
+    g_assert(!success);
+    success = nm_ip_routing_rule_get_xifname_bin(rr1, TRUE, ifname_buf);
+    g_assert_cmpstr(ifname_buf, ==, "a\303\261,x;b");
+    g_assert(success);
+    nm_clear_pointer(&rr1, nm_ip_routing_rule_unref);
 }
 
 /*****************************************************************************/
 
 static void
-test_parse_tc_handle (void)
+test_parse_tc_handle(void)
 {
-#define _parse_tc_handle(str, exp) \
-	G_STMT_START { \
-		gs_free_error GError *_error = NULL; \
-		GError **_perror = nmtst_get_rand_bool () ? &_error : NULL; \
-		guint32 _v; \
-		const guint32 _v_exp = (exp); \
-		\
-		_v = _nm_utils_parse_tc_handle (""str"", _perror); \
-		\
-		if (_v != _v_exp) \
-			g_error ("%s:%d: \"%s\" gave %08x but %08x expected.", __FILE__, __LINE__, ""str"", _v, _v_exp); \
-		\
-		if (_v == TC_H_UNSPEC) \
-			g_assert (!_perror || *_perror); \
-		else \
-			g_assert (!_perror || !*_perror); \
-		\
-	} G_STMT_END
-
-#define _parse_tc_handle_inval(str)           _parse_tc_handle (str, TC_H_UNSPEC)
-#define _parse_tc_handle_valid(str, maj, min) _parse_tc_handle (str, TC_H_MAKE (((guint32) (maj)) << 16, ((guint16) (min))))
-
-	_parse_tc_handle_inval ("");
-	_parse_tc_handle_inval (" ");
-	_parse_tc_handle_inval (" \n");
-	_parse_tc_handle_valid ("1", 1, 0);
-	_parse_tc_handle_valid(" 1 ", 1, 0);
-	_parse_tc_handle_valid ("1:", 1, 0);
-	_parse_tc_handle_valid ("1:  ", 1, 0);
-	_parse_tc_handle_valid ("1:0", 1, 0);
-	_parse_tc_handle_valid ("1   :0", 1, 0);
-	_parse_tc_handle_valid ("1   \t\n\f\r:0", 1, 0);
-	_parse_tc_handle_inval ("1   \t\n\f\r\v:0");
-	_parse_tc_handle_valid (" 1 : 0  ", 1, 0);
-	_parse_tc_handle_inval (" \t\v\n1: 0");
-	_parse_tc_handle_valid ("1:2", 1, 2);
-	_parse_tc_handle_valid ("01:02", 1, 2);
-	_parse_tc_handle_inval ("0x01:0x02");
-	_parse_tc_handle_valid ("  01:   02", 1, 2);
-	_parse_tc_handle_valid ("019:   020", 0x19, 0x20);
-	_parse_tc_handle_valid ("FFFF:   020", 0xFFFF, 0x20);
-	_parse_tc_handle_valid ("FfFF:   ffff", 0xFFFF, 0xFFFF);
-	_parse_tc_handle_valid ("FFFF", 0xFFFF, 0);
-	_parse_tc_handle_inval ("0xFFFF");
-	_parse_tc_handle_inval ("10000");
-	_parse_tc_handle_valid ("\t\n\f\r FFFF", 0xFFFF, 0);
-	_parse_tc_handle_inval ("\t\n\f\r \vFFFF");
+#define _parse_tc_handle(str, exp)                                              \
+    G_STMT_START                                                                \
+    {                                                                           \
+        gs_free_error GError *_error  = NULL;                                   \
+        GError **             _perror = nmtst_get_rand_bool() ? &_error : NULL; \
+        guint32               _v;                                               \
+        const guint32         _v_exp = (exp);                                   \
+                                                                                \
+        _v = _nm_utils_parse_tc_handle("" str "", _perror);                     \
+                                                                                \
+        if (_v != _v_exp)                                                       \
+            g_error("%s:%d: \"%s\" gave %08x but %08x expected.",               \
+                    __FILE__,                                                   \
+                    __LINE__,                                                   \
+                    "" str "",                                                  \
+                    _v,                                                         \
+                    _v_exp);                                                    \
+                                                                                \
+        if (_v == TC_H_UNSPEC)                                                  \
+            g_assert(!_perror || *_perror);                                     \
+        else                                                                    \
+            g_assert(!_perror || !*_perror);                                    \
+    }                                                                           \
+    G_STMT_END
+
+#define _parse_tc_handle_inval(str) _parse_tc_handle(str, TC_H_UNSPEC)
+#define _parse_tc_handle_valid(str, maj, min) \
+    _parse_tc_handle(str, TC_H_MAKE(((guint32)(maj)) << 16, ((guint16)(min))))
+
+    _parse_tc_handle_inval("");
+    _parse_tc_handle_inval(" ");
+    _parse_tc_handle_inval(" \n");
+    _parse_tc_handle_valid("1", 1, 0);
+    _parse_tc_handle_valid(" 1 ", 1, 0);
+    _parse_tc_handle_valid("1:", 1, 0);
+    _parse_tc_handle_valid("1:  ", 1, 0);
+    _parse_tc_handle_valid("1:0", 1, 0);
+    _parse_tc_handle_valid("1   :0", 1, 0);
+    _parse_tc_handle_valid("1   \t\n\f\r:0", 1, 0);
+    _parse_tc_handle_inval("1   \t\n\f\r\v:0");
+    _parse_tc_handle_valid(" 1 : 0  ", 1, 0);
+    _parse_tc_handle_inval(" \t\v\n1: 0");
+    _parse_tc_handle_valid("1:2", 1, 2);
+    _parse_tc_handle_valid("01:02", 1, 2);
+    _parse_tc_handle_inval("0x01:0x02");
+    _parse_tc_handle_valid("  01:   02", 1, 2);
+    _parse_tc_handle_valid("019:   020", 0x19, 0x20);
+    _parse_tc_handle_valid("FFFF:   020", 0xFFFF, 0x20);
+    _parse_tc_handle_valid("FfFF:   ffff", 0xFFFF, 0xFFFF);
+    _parse_tc_handle_valid("FFFF", 0xFFFF, 0);
+    _parse_tc_handle_inval("0xFFFF");
+    _parse_tc_handle_inval("10000");
+    _parse_tc_handle_valid("\t\n\f\r FFFF", 0xFFFF, 0);
+    _parse_tc_handle_inval("\t\n\f\r \vFFFF");
 }
 
 /*****************************************************************************/
 
 static void
-test_empty_setting (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, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
-	nmtst_assert_success (kf, error);
-
-	g_assert (g_key_file_has_group (kf, "gsm"));
-	g_assert_cmpint (nmtst_keyfile_get_num_keys (kf, "gsm"), ==, 0);
-
-	con2 = nm_keyfile_read (kf,
-	                        "/ignored/current/working/directory/for/loading/relative/paths",
-	                        NM_KEYFILE_HANDLER_FLAGS_NONE,
-	                        NULL,
-	                        NULL,
-	                        &error);
-	nmtst_assert_success (con2, error);
-
-	g_assert (nm_connection_get_setting (con2, NM_TYPE_SETTING_GSM));
-
-	nmtst_assert_connection_verifies_without_normalization (con2);
+    gs_unref_object NMConnection *con  = NULL;
+    gs_unref_object NMConnection *con2 = NULL;
+    NMSettingBluetooth *          s_bt;
+    NMSettingGsm *                s_gsm;
+    nm_auto_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, NM_KEYFILE_HANDLER_FLAGS_NONE, NULL, NULL, &error);
+    nmtst_assert_success(kf, error);
+
+    g_assert(g_key_file_has_group(kf, "gsm"));
+    g_assert_cmpint(nmtst_keyfile_get_num_keys(kf, "gsm"), ==, 0);
+
+    con2 = nm_keyfile_read(kf,
+                           "/ignored/current/working/directory/for/loading/relative/paths",
+                           NM_KEYFILE_HANDLER_FLAGS_NONE,
+                           NULL,
+                           NULL,
+                           &error);
+    nmtst_assert_success(con2, error);
+
+    g_assert(nm_connection_get_setting(con2, NM_TYPE_SETTING_GSM));
+
+    nmtst_assert_connection_verifies_without_normalization(con2);
 }
 
 /*****************************************************************************/
 
 static guint
-_PROP_IDX_PACK (NMMetaSettingType meta_type,
-                guint idx)
+_PROP_IDX_PACK(NMMetaSettingType meta_type, guint idx)
 {
-	return   (((guint) meta_type) & 0xFFu)
-	       | (idx << 8);
+    return (((guint) meta_type) & 0xFFu) | (idx << 8);
 }
 
 static const char *
-_PROP_IDX_OWNER (GHashTable *h_property_types,
-                 const NMSettInfoPropertType *property_type)
+_PROP_IDX_OWNER(GHashTable *h_property_types, const NMSettInfoPropertType *property_type)
 {
-	const NMSettInfoSetting *sett_info_settings = nmtst_sett_info_settings ();
-	const NMSettInfoSetting *sis;
-	const NMMetaSettingInfo *msi;
-	GArray *arr;
-	guint idx;
-	NMMetaSettingType meta_type;
-	guint prop_idx;
-	char sbuf[300];
+    const NMSettInfoSetting *sett_info_settings = nmtst_sett_info_settings();
+    const NMSettInfoSetting *sis;
+    const NMMetaSettingInfo *msi;
+    GArray *                 arr;
+    guint                    idx;
+    NMMetaSettingType        meta_type;
+    guint                    prop_idx;
+    char                     sbuf[300];
 
-	g_assert (h_property_types);
-	g_assert (property_type);
+    g_assert(h_property_types);
+    g_assert(property_type);
 
-	arr = g_hash_table_lookup (h_property_types, property_type);
+    arr = g_hash_table_lookup(h_property_types, property_type);
 
-	g_assert (arr);
-	g_assert (arr->len > 0);
+    g_assert(arr);
+    g_assert(arr->len > 0);
 
-	idx = g_array_index (arr, guint, 0);
+    idx = g_array_index(arr, guint, 0);
 
-	meta_type = (idx & 0xFFu);
-	prop_idx = idx >> 8;
+    meta_type = (idx & 0xFFu);
+    prop_idx  = idx >> 8;
 
-	g_assert (meta_type < _NM_META_SETTING_TYPE_NUM);
+    g_assert(meta_type < _NM_META_SETTING_TYPE_NUM);
 
-	sis = &sett_info_settings[meta_type];
-	msi = &nm_meta_setting_infos[meta_type];
+    sis = &sett_info_settings[meta_type];
+    msi = &nm_meta_setting_infos[meta_type];
 
-	g_assert (prop_idx < sis->property_infos_len);
+    g_assert(prop_idx < sis->property_infos_len);
 
-	nm_sprintf_buf (sbuf, "%s.%s", msi->setting_name, sis->property_infos[prop_idx].name);
+    nm_sprintf_buf(sbuf, "%s.%s", msi->setting_name, sis->property_infos[prop_idx].name);
 
-	return g_intern_string (sbuf);
+    return g_intern_string(sbuf);
 }
 
 static void
-test_setting_metadata (void)
+test_setting_metadata(void)
 {
-	const NMSettInfoSetting *sett_info_settings = nmtst_sett_info_settings ();
-	NMMetaSettingType meta_type;
-	gs_unref_hashtable GHashTable *h_property_types = NULL;
-
-	G_STATIC_ASSERT (_NM_META_SETTING_TYPE_NUM == NM_META_SETTING_TYPE_UNKNOWN);
-
-	h_property_types = g_hash_table_new_full (nm_direct_hash, NULL, NULL, (GDestroyNotify) g_array_unref);
-
-	for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) {
-		const NMMetaSettingInfo *msi = &nm_meta_setting_infos[meta_type];
-		nm_auto_unref_gtypeclass NMSettingClass *klass = NULL;
-		GType gtype;
-
-		g_assert (msi->setting_name);
-		g_assert (msi->get_setting_gtype);
-		g_assert (msi->meta_type == meta_type);
-		g_assert (msi->setting_priority >= NM_SETTING_PRIORITY_CONNECTION);
-		g_assert (msi->setting_priority <= NM_SETTING_PRIORITY_USER);
-
-		if (meta_type > 0)
-			g_assert_cmpint (strcmp (nm_meta_setting_infos[meta_type - 1].setting_name, msi->setting_name), <, 0);
-
-		gtype = msi->get_setting_gtype ();
-
-		g_assert (g_type_is_a (gtype, NM_TYPE_SETTING));
-		g_assert (gtype != NM_TYPE_SETTING);
-
-		klass = g_type_class_ref (gtype);
-		g_assert (klass);
-		g_assert (NM_IS_SETTING_CLASS (klass));
-
-		g_assert (msi == klass->setting_info);
-	}
+    const NMSettInfoSetting *sett_info_settings = nmtst_sett_info_settings();
+    NMMetaSettingType        meta_type;
+    gs_unref_hashtable GHashTable *h_property_types = NULL;
 
-	g_assert (sett_info_settings);
+    G_STATIC_ASSERT(_NM_META_SETTING_TYPE_NUM == NM_META_SETTING_TYPE_UNKNOWN);
 
-	for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) {
-		const NMSettInfoSetting *sis = &sett_info_settings[meta_type];
-		const NMMetaSettingInfo *msi = &nm_meta_setting_infos[meta_type];
-		gs_unref_hashtable GHashTable *h_properties = NULL;
-		GType gtype;
-		gs_unref_object NMSetting *setting = NULL;
-		guint prop_idx;
-		gs_free GParamSpec **property_specs = NULL;
-		guint n_property_specs;
+    h_property_types =
+        g_hash_table_new_full(nm_direct_hash, NULL, NULL, (GDestroyNotify) g_array_unref);
 
-		g_assert (sis);
+    for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) {
+        const NMMetaSettingInfo *msi                   = &nm_meta_setting_infos[meta_type];
+        nm_auto_unref_gtypeclass NMSettingClass *klass = NULL;
+        GType                                    gtype;
 
-		g_assert (NM_IS_SETTING_CLASS (sis->setting_class));
+        g_assert(msi->setting_name);
+        g_assert(msi->get_setting_gtype);
+        g_assert(msi->meta_type == meta_type);
+        g_assert(msi->setting_priority >= NM_SETTING_PRIORITY_CONNECTION);
+        g_assert(msi->setting_priority <= NM_SETTING_PRIORITY_USER);
 
-		gtype = msi->get_setting_gtype ();
+        if (meta_type > 0)
+            g_assert_cmpint(
+                strcmp(nm_meta_setting_infos[meta_type - 1].setting_name, msi->setting_name),
+                <,
+                0);
 
-		g_assert (G_TYPE_FROM_CLASS (sis->setting_class) == gtype);
+        gtype = msi->get_setting_gtype();
 
-		setting = g_object_new (gtype, NULL);
+        g_assert(g_type_is_a(gtype, NM_TYPE_SETTING));
+        g_assert(gtype != NM_TYPE_SETTING);
 
-		g_assert (NM_IS_SETTING (setting));
+        klass = g_type_class_ref(gtype);
+        g_assert(klass);
+        g_assert(NM_IS_SETTING_CLASS(klass));
 
-		g_assert_cmpint (sis->property_infos_len, >, 0);
-		g_assert (sis->property_infos);
+        g_assert(msi == klass->setting_info);
+    }
 
-		h_properties = g_hash_table_new (nm_str_hash, g_str_equal);
+    g_assert(sett_info_settings);
+
+    for (meta_type = 0; meta_type < _NM_META_SETTING_TYPE_NUM; meta_type++) {
+        const NMSettInfoSetting *sis                = &sett_info_settings[meta_type];
+        const NMMetaSettingInfo *msi                = &nm_meta_setting_infos[meta_type];
+        gs_unref_hashtable GHashTable *h_properties = NULL;
+        GType                          gtype;
+        gs_unref_object NMSetting *setting = NULL;
+        guint                      prop_idx;
+        gs_free GParamSpec **property_specs = NULL;
+        guint                n_property_specs;
 
-		for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) {
-			const NMSettInfoProperty *sip = &sis->property_infos[prop_idx];
-			GArray *property_types_data;
-			guint prop_idx_val;
+        g_assert(sis);
 
-			g_assert (sip->name);
+        g_assert(NM_IS_SETTING_CLASS(sis->setting_class));
 
-			if (prop_idx > 0)
-				g_assert_cmpint (strcmp (sis->property_infos[prop_idx - 1].name, sip->name), <, 0);
+        gtype = msi->get_setting_gtype();
 
-			g_assert (sip->property_type);
-			g_assert (sip->property_type->dbus_type);
-			g_assert (g_variant_type_string_is_valid ((const char *) sip->property_type->dbus_type));
-
-			g_assert (!sip->property_type->to_dbus_fcn || !sip->property_type->gprop_to_dbus_fcn);
-			g_assert (!sip->property_type->from_dbus_fcn || !sip->property_type->gprop_from_dbus_fcn);
+        g_assert(G_TYPE_FROM_CLASS(sis->setting_class) == gtype);
 
-			if (!g_hash_table_insert (h_properties, (char *) sip->name, sip->param_spec))
-				g_assert_not_reached ();
+        setting = g_object_new(gtype, NULL);
+
+        g_assert(NM_IS_SETTING(setting));
 
-			property_types_data = g_hash_table_lookup (h_property_types, sip->property_type);
-			if (!property_types_data) {
-				property_types_data = g_array_new (FALSE, FALSE, sizeof (guint));
-				if (!g_hash_table_insert (h_property_types, (gpointer) sip->property_type, property_types_data))
-					g_assert_not_reached ();
-			}
-			prop_idx_val = _PROP_IDX_PACK (meta_type, prop_idx);
-			g_array_append_val (property_types_data, prop_idx_val);
-
-			if (sip->param_spec) {
-				nm_auto_unset_gvalue GValue val = G_VALUE_INIT;
+        g_assert_cmpint(sis->property_infos_len, >, 0);
+        g_assert(sis->property_infos);
+
+        h_properties = g_hash_table_new(nm_str_hash, g_str_equal);
 
-				g_assert_cmpstr (sip->name, ==, sip->param_spec->name);
-
-				g_value_init (&val, sip->param_spec->value_type);
-				g_object_get_property (G_OBJECT (setting), sip->name, &val);
-
-				if (sip->param_spec->value_type == G_TYPE_STRING) {
-					const char *default_value;
-
-					default_value = ((const GParamSpecString *) sip->param_spec)->default_value;
-					if (default_value) {
-						/* having a string property with a default != NULL is really ugly. They
-						 * should be best avoided... */
-						if (   meta_type == NM_META_SETTING_TYPE_DCB
-						    && nm_streq (sip->name, NM_SETTING_DCB_APP_FCOE_MODE)) {
-							/* Whitelist the properties that have a non-NULL default value. */
-							g_assert_cmpstr (default_value, ==, NM_SETTING_DCB_FCOE_MODE_FABRIC);
-						} else
-							g_assert_not_reached ();
-					}
-
-					if (nm_streq (sip->name, NM_SETTING_NAME))
-						g_assert_cmpstr (g_value_get_string (&val), ==, msi->setting_name);
-					else
-						g_assert_cmpstr (g_value_get_string (&val), ==, default_value);
-				}
-
-				if (NM_FLAGS_HAS (sip->param_spec->flags, NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS))
-					g_assert (sip->property_type->to_dbus_fcn);
-			}
-		}
-
-		/* check that all GObject based properties are tracked by the settings. */
-		property_specs = g_object_class_list_properties (G_OBJECT_CLASS (sis->setting_class),
-		                                                 &n_property_specs);
-		g_assert (property_specs);
-		g_assert_cmpint (n_property_specs, >, 0);
-		for (prop_idx = 0; prop_idx < n_property_specs; prop_idx++) {
-			const GParamSpec *pip = property_specs[prop_idx];
-
-			g_assert (g_hash_table_lookup (h_properties, pip->name) == pip);
-		}
-
-		/* check that property_infos_sorted is as expected. */
-		if (sis->property_infos_sorted) {
-			gs_unref_hashtable GHashTable *h = g_hash_table_new (nm_direct_hash, NULL);
-
-			/* property_infos_sorted is only implemented for [connection] type */
-			g_assert_cmpint (meta_type, ==, NM_META_SETTING_TYPE_CONNECTION);
-
-			/* ensure that there are no duplicates, and that all properties are also
-			 * tracked by sis->property_infos. */
-			for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) {
-				const NMSettInfoProperty *sip = sis->property_infos_sorted[prop_idx];
-
-				if (!g_hash_table_add (h, (gpointer) sip))
-					g_assert_not_reached ();
-			}
-			for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) {
-				const NMSettInfoProperty *sip = &sis->property_infos[prop_idx];
-
-				g_assert (g_hash_table_contains (h, sip));
-			}
-		} else
-			g_assert_cmpint (meta_type, !=, NM_META_SETTING_TYPE_CONNECTION);
-
-		/* consistency check for gendata-info. */
-		if (sis->detail.gendata_info) {
-			g_assert_cmpint (meta_type, ==, NM_META_SETTING_TYPE_ETHTOOL);
-			g_assert (sis->detail.gendata_info->get_variant_type);
-
-			/* the gendata info based setting has only one regular property: the "name". */
-			g_assert_cmpint (sis->property_infos_len, ==, 1);
-			g_assert_cmpstr (sis->property_infos[0].name, ==, NM_SETTING_NAME);
-		} else
-			g_assert_cmpint (meta_type, !=, NM_META_SETTING_TYPE_ETHTOOL);
-	}
-
-	{
-		gs_free NMSettInfoPropertType **a_property_types = NULL;
-		guint a_property_types_len;
-		guint prop_idx;
-		guint prop_idx_2;
-
-		a_property_types = (NMSettInfoPropertType **) g_hash_table_get_keys_as_array (h_property_types, &a_property_types_len);
-
-		for (prop_idx = 0; prop_idx < a_property_types_len; prop_idx++) {
-			const NMSettInfoPropertType *pt = a_property_types[prop_idx];
-
-			for (prop_idx_2 = prop_idx + 1; prop_idx_2 < a_property_types_len; prop_idx_2++) {
-				const NMSettInfoPropertType *pt_2 = a_property_types[prop_idx_2];
-
-				if (   !g_variant_type_equal (pt->dbus_type, pt_2->dbus_type)
-				    || pt->to_dbus_fcn != pt_2->to_dbus_fcn
-				    || pt->from_dbus_fcn != pt_2->from_dbus_fcn
-				    || pt->missing_from_dbus_fcn != pt_2->missing_from_dbus_fcn
-				    || pt->gprop_to_dbus_fcn != pt_2->gprop_to_dbus_fcn
-				    || pt->gprop_from_dbus_fcn != pt_2->gprop_from_dbus_fcn)
-					continue;
-
-				if (   (pt   == &nm_sett_info_propert_type_plain_i && pt_2 == &nm_sett_info_propert_type_deprecated_ignore_i)
-				    || (pt_2 == &nm_sett_info_propert_type_plain_i && pt   == &nm_sett_info_propert_type_deprecated_ignore_i)
-				    || (pt   == &nm_sett_info_propert_type_plain_u && pt_2 == &nm_sett_info_propert_type_deprecated_ignore_u)
-				    || (pt_2 == &nm_sett_info_propert_type_plain_u && pt   == &nm_sett_info_propert_type_deprecated_ignore_u)) {
-					/* These are known to be duplicated. This is the case for
-					 *   "gsm.network-type"  and plain properies like "802-11-wireless-security.fils" ("i" D-Bus type)
-					 *   "gsm.allowed-bands" and plain properies like "802-11-olpc-mesh.channel" ("u" D-Bus type)
-					 * While the content/behaviour of the property types are identical, their purpose
-					 * is different. So allowe them.
-					 */
-					continue;
-				}
-
-				/* the property-types with same content should all be shared. Here we have two that
-				 * are the same content, but different instances. Bug. */
-				g_error ("The identical property type for D-Bus type \"%s\" is used by: %s and %s",
-				         (const char *) pt->dbus_type,
-				         _PROP_IDX_OWNER (h_property_types, pt),
-				         _PROP_IDX_OWNER (h_property_types, pt_2));
-			}
-		}
-	}
+        for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) {
+            const NMSettInfoProperty *sip = &sis->property_infos[prop_idx];
+            GArray *                  property_types_data;
+            guint                     prop_idx_val;
+
+            g_assert(sip->name);
+
+            if (prop_idx > 0)
+                g_assert_cmpint(strcmp(sis->property_infos[prop_idx - 1].name, sip->name), <, 0);
+
+            g_assert(sip->property_type);
+            g_assert(sip->property_type->dbus_type);
+            g_assert(g_variant_type_string_is_valid((const char *) sip->property_type->dbus_type));
+
+            g_assert(!sip->property_type->to_dbus_fcn || !sip->property_type->gprop_to_dbus_fcn);
+            g_assert(!sip->property_type->from_dbus_fcn
+                     || !sip->property_type->gprop_from_dbus_fcn);
+
+            if (!g_hash_table_insert(h_properties, (char *) sip->name, sip->param_spec))
+                g_assert_not_reached();
+
+            property_types_data = g_hash_table_lookup(h_property_types, sip->property_type);
+            if (!property_types_data) {
+                property_types_data = g_array_new(FALSE, FALSE, sizeof(guint));
+                if (!g_hash_table_insert(h_property_types,
+                                         (gpointer) sip->property_type,
+                                         property_types_data))
+                    g_assert_not_reached();
+            }
+            prop_idx_val = _PROP_IDX_PACK(meta_type, prop_idx);
+            g_array_append_val(property_types_data, prop_idx_val);
+
+            if (sip->param_spec) {
+                nm_auto_unset_gvalue GValue val = G_VALUE_INIT;
+
+                g_assert_cmpstr(sip->name, ==, sip->param_spec->name);
+
+                g_value_init(&val, sip->param_spec->value_type);
+                g_object_get_property(G_OBJECT(setting), sip->name, &val);
+
+                if (sip->param_spec->value_type == G_TYPE_STRING) {
+                    const char *default_value;
+
+                    default_value = ((const GParamSpecString *) sip->param_spec)->default_value;
+                    if (default_value) {
+                        /* having a string property with a default != NULL is really ugly. They
+                         * should be best avoided... */
+                        if (meta_type == NM_META_SETTING_TYPE_DCB
+                            && nm_streq(sip->name, NM_SETTING_DCB_APP_FCOE_MODE)) {
+                            /* Whitelist the properties that have a non-NULL default value. */
+                            g_assert_cmpstr(default_value, ==, NM_SETTING_DCB_FCOE_MODE_FABRIC);
+                        } else
+                            g_assert_not_reached();
+                    }
+
+                    if (nm_streq(sip->name, NM_SETTING_NAME))
+                        g_assert_cmpstr(g_value_get_string(&val), ==, msi->setting_name);
+                    else
+                        g_assert_cmpstr(g_value_get_string(&val), ==, default_value);
+                }
+
+                if (NM_FLAGS_HAS(sip->param_spec->flags, NM_SETTING_PARAM_TO_DBUS_IGNORE_FLAGS))
+                    g_assert(sip->property_type->to_dbus_fcn);
+            }
+        }
+
+        /* check that all GObject based properties are tracked by the settings. */
+        property_specs =
+            g_object_class_list_properties(G_OBJECT_CLASS(sis->setting_class), &n_property_specs);
+        g_assert(property_specs);
+        g_assert_cmpint(n_property_specs, >, 0);
+        for (prop_idx = 0; prop_idx < n_property_specs; prop_idx++) {
+            const GParamSpec *pip = property_specs[prop_idx];
+
+            g_assert(g_hash_table_lookup(h_properties, pip->name) == pip);
+        }
+
+        /* check that property_infos_sorted is as expected. */
+        if (sis->property_infos_sorted) {
+            gs_unref_hashtable GHashTable *h = g_hash_table_new(nm_direct_hash, NULL);
+
+            /* property_infos_sorted is only implemented for [connection] type */
+            g_assert_cmpint(meta_type, ==, NM_META_SETTING_TYPE_CONNECTION);
+
+            /* ensure that there are no duplicates, and that all properties are also
+             * tracked by sis->property_infos. */
+            for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) {
+                const NMSettInfoProperty *sip = sis->property_infos_sorted[prop_idx];
+
+                if (!g_hash_table_add(h, (gpointer) sip))
+                    g_assert_not_reached();
+            }
+            for (prop_idx = 0; prop_idx < sis->property_infos_len; prop_idx++) {
+                const NMSettInfoProperty *sip = &sis->property_infos[prop_idx];
+
+                g_assert(g_hash_table_contains(h, sip));
+            }
+        } else
+            g_assert_cmpint(meta_type, !=, NM_META_SETTING_TYPE_CONNECTION);
+
+        /* consistency check for gendata-info. */
+        if (sis->detail.gendata_info) {
+            g_assert_cmpint(meta_type, ==, NM_META_SETTING_TYPE_ETHTOOL);
+            g_assert(sis->detail.gendata_info->get_variant_type);
+
+            /* the gendata info based setting has only one regular property: the "name". */
+            g_assert_cmpint(sis->property_infos_len, ==, 1);
+            g_assert_cmpstr(sis->property_infos[0].name, ==, NM_SETTING_NAME);
+        } else
+            g_assert_cmpint(meta_type, !=, NM_META_SETTING_TYPE_ETHTOOL);
+    }
+
+    {
+        gs_free NMSettInfoPropertType **a_property_types = NULL;
+        guint                           a_property_types_len;
+        guint                           prop_idx;
+        guint                           prop_idx_2;
+
+        a_property_types =
+            (NMSettInfoPropertType **) g_hash_table_get_keys_as_array(h_property_types,
+                                                                      &a_property_types_len);
+
+        for (prop_idx = 0; prop_idx < a_property_types_len; prop_idx++) {
+            const NMSettInfoPropertType *pt = a_property_types[prop_idx];
+
+            for (prop_idx_2 = prop_idx + 1; prop_idx_2 < a_property_types_len; prop_idx_2++) {
+                const NMSettInfoPropertType *pt_2 = a_property_types[prop_idx_2];
+
+                if (!g_variant_type_equal(pt->dbus_type, pt_2->dbus_type)
+                    || pt->to_dbus_fcn != pt_2->to_dbus_fcn
+                    || pt->from_dbus_fcn != pt_2->from_dbus_fcn
+                    || pt->missing_from_dbus_fcn != pt_2->missing_from_dbus_fcn
+                    || pt->gprop_to_dbus_fcn != pt_2->gprop_to_dbus_fcn
+                    || pt->gprop_from_dbus_fcn != pt_2->gprop_from_dbus_fcn)
+                    continue;
+
+                if ((pt == &nm_sett_info_propert_type_plain_i
+                     && pt_2 == &nm_sett_info_propert_type_deprecated_ignore_i)
+                    || (pt_2 == &nm_sett_info_propert_type_plain_i
+                        && pt == &nm_sett_info_propert_type_deprecated_ignore_i)
+                    || (pt == &nm_sett_info_propert_type_plain_u
+                        && pt_2 == &nm_sett_info_propert_type_deprecated_ignore_u)
+                    || (pt_2 == &nm_sett_info_propert_type_plain_u
+                        && pt == &nm_sett_info_propert_type_deprecated_ignore_u)) {
+                    /* These are known to be duplicated. This is the case for
+                     *   "gsm.network-type"  and plain properties like "802-11-wireless-security.fils" ("i" D-Bus type)
+                     *   "gsm.allowed-bands" and plain properties like "802-11-olpc-mesh.channel" ("u" D-Bus type)
+                     * While the content/behaviour of the property types are identical, their purpose
+                     * is different. So allow them.
+                     */
+                    continue;
+                }
+
+                /* the property-types with same content should all be shared. Here we have two that
+                 * are the same content, but different instances. Bug. */
+                g_error("The identical property type for D-Bus type \"%s\" is used by: %s and %s",
+                        (const char *) pt->dbus_type,
+                        _PROP_IDX_OWNER(h_property_types, pt),
+                        _PROP_IDX_OWNER(h_property_types, pt_2));
+            }
+        }
+    }
 }
 
 /*****************************************************************************/
 
-NMTST_DEFINE ();
+NMTST_DEFINE();
 
 int
-main (int argc, char **argv)
+main(int argc, char **argv)
 {
-	nmtst_init (&argc, &argv, TRUE);
-
-	g_test_add_data_func ("/libnm/setting-8021x/key-and-cert",
-	                      "test_key_and_cert.pem, test",
-	                      test_8021x);
-	g_test_add_data_func ("/libnm/setting-8021x/key-only",
-	                      "test-key-only.pem, test",
-	                      test_8021x);
-	g_test_add_data_func ("/libnm/setting-8021x/pkcs8-enc-key",
-	                      "pkcs8-enc-key.pem, 1234567890",
-	                      test_8021x);
-	g_test_add_data_func ("/libnm/setting-8021x/pkcs12",
-	                      "test-cert.p12, test",
-	                      test_8021x);
-
-	g_test_add_func ("/libnm/settings/bond/verify", test_bond_verify);
-	g_test_add_func ("/libnm/settings/bond/compare", test_bond_compare);
-	g_test_add_func ("/libnm/settings/bond/normalize", test_bond_normalize);
-
-	g_test_add_func ("/libnm/settings/dcb/flags-valid", test_dcb_flags_valid);
-	g_test_add_func ("/libnm/settings/dcb/flags-invalid", test_dcb_flags_invalid);
-	g_test_add_func ("/libnm/settings/dcb/app-priorities", test_dcb_app_priorities);
-	g_test_add_func ("/libnm/settings/dcb/priorities", test_dcb_priorities_valid);
-	g_test_add_func ("/libnm/settings/dcb/bandwidth-sums", test_dcb_bandwidth_sums);
-
-	g_test_add_func ("/libnm/settings/ethtool/features", test_ethtool_features);
-	g_test_add_func ("/libnm/settings/ethtool/coalesce", test_ethtool_coalesce);
-	g_test_add_func ("/libnm/settings/ethtool/ring", test_ethtool_ring);
-
-	g_test_add_func ("/libnm/settings/sriov/vf", test_sriov_vf);
-	g_test_add_func ("/libnm/settings/sriov/vf-dup", test_sriov_vf_dup);
-	g_test_add_func ("/libnm/settings/sriov/vf-vlan", test_sriov_vf_vlan);
-	g_test_add_func ("/libnm/settings/sriov/setting", test_sriov_setting);
-	g_test_add_func ("/libnm/settings/sriov/vlans", test_sriov_parse_vlans);
-
-	g_test_add_func ("/libnm/settings/tc_config/qdisc", test_tc_config_qdisc);
-	g_test_add_func ("/libnm/settings/tc_config/action", test_tc_config_action);
-	g_test_add_func ("/libnm/settings/tc_config/tfilter", test_tc_config_tfilter);
-	g_test_add_func ("/libnm/settings/tc_config/setting/valid", test_tc_config_setting_valid);
-	g_test_add_func ("/libnm/settings/tc_config/setting/duplicates", test_tc_config_setting_duplicates);
-	g_test_add_func ("/libnm/settings/tc_config/dbus", test_tc_config_dbus);
-
-	g_test_add_func ("/libnm/settings/bridge/vlans", test_bridge_vlans);
-	g_test_add_func ("/libnm/settings/bridge/verify", test_bridge_verify);
-
-	g_test_add_func ("/libnm/settings/team/sync_runner_from_config_roundrobin",
-	                 test_runner_roundrobin_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_runner_from_config_broadcast",
-	                 test_runner_broadcast_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_runner_from_config_random",
-	                 test_runner_random_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_runner_from_config_activebackup",
-	                 test_runner_activebackup_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_runner_from_config_loadbalance",
-	                 test_runner_loadbalance_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_runner_from_config_lacp",
-	                 test_runner_lacp_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_watcher_from_config_ethtool",
-	                 test_watcher_ethtool_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_watcher_from_config_nsna_ping",
-	                 test_watcher_nsna_ping_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_watcher_from_config_arp_ping",
-	                 test_watcher_arp_ping_sync_from_config);
-	g_test_add_func ("/libnm/settings/team/sync_watcher_from_config_all",
-	                 test_multiple_watchers_sync_from_config);
-
-	g_test_add_func ("/libnm/settings/team-port/sync_from_config_defaults", test_team_port_default);
-	g_test_add_func ("/libnm/settings/team-port/sync_from_config_queue_id", test_team_port_queue_id);
-	g_test_add_func ("/libnm/settings/team-port/sync_from_config_prio", test_team_port_prio);
-	g_test_add_func ("/libnm/settings/team-port/sync_from_config_sticky", test_team_port_sticky);
-	g_test_add_func ("/libnm/settings/team-port/sync_from_config_lacp_prio", test_team_port_lacp_prio);
-	g_test_add_func ("/libnm/settings/team-port/sync_from_config_lacp_key", test_team_port_lacp_key);
-	g_test_add_func ("/libnm/settings/team-port/sycn_from_config_full", test_team_port_full_config);
-
-	g_test_add_data_func ("/libnm/settings/roundtrip-conversion/general/0",   GINT_TO_POINTER (0), test_roundtrip_conversion);
-	g_test_add_data_func ("/libnm/settings/roundtrip-conversion/wireguard/1", GINT_TO_POINTER (1), test_roundtrip_conversion);
-	g_test_add_data_func ("/libnm/settings/roundtrip-conversion/wireguard/2", GINT_TO_POINTER (2), test_roundtrip_conversion);
-	g_test_add_data_func ("/libnm/settings/roundtrip-conversion/general/3",   GINT_TO_POINTER (3), test_roundtrip_conversion);
-
-	g_test_add_data_func ("/libnm/settings/routing-rule/1", GINT_TO_POINTER (0), test_routing_rule);
-
-	g_test_add_func ("/libnm/parse-tc-handle", test_parse_tc_handle);
-
-	g_test_add_func ("/libnm/test_team_setting", test_team_setting);
-
-	g_test_add_func ("/libnm/test_empty_setting", test_empty_setting);
-
-	g_test_add_func ("/libnm/test_setting_metadata", test_setting_metadata);
-
-	return g_test_run ();
+    nmtst_init(&argc, &argv, TRUE);
+
+    g_test_add_data_func("/libnm/setting-8021x/key-and-cert",
+                         "test_key_and_cert.pem, test",
+                         test_8021x);
+    g_test_add_data_func("/libnm/setting-8021x/key-only", "test-key-only.pem, test", test_8021x);
+    g_test_add_data_func("/libnm/setting-8021x/pkcs8-enc-key",
+                         "pkcs8-enc-key.pem, 1234567890",
+                         test_8021x);
+    g_test_add_data_func("/libnm/setting-8021x/pkcs12", "test-cert.p12, test", test_8021x);
+
+    g_test_add_func("/libnm/settings/bond/verify", test_bond_verify);
+    g_test_add_func("/libnm/settings/bond/compare", test_bond_compare);
+    g_test_add_func("/libnm/settings/bond/normalize", test_bond_normalize);
+
+    g_test_add_func("/libnm/settings/dcb/flags-valid", test_dcb_flags_valid);
+    g_test_add_func("/libnm/settings/dcb/flags-invalid", test_dcb_flags_invalid);
+    g_test_add_func("/libnm/settings/dcb/app-priorities", test_dcb_app_priorities);
+    g_test_add_func("/libnm/settings/dcb/priorities", test_dcb_priorities_valid);
+    g_test_add_func("/libnm/settings/dcb/bandwidth-sums", test_dcb_bandwidth_sums);
+
+    g_test_add_func("/libnm/settings/ethtool/features", test_ethtool_features);
+    g_test_add_func("/libnm/settings/ethtool/coalesce", test_ethtool_coalesce);
+    g_test_add_func("/libnm/settings/ethtool/ring", test_ethtool_ring);
+
+    g_test_add_func("/libnm/settings/sriov/vf", test_sriov_vf);
+    g_test_add_func("/libnm/settings/sriov/vf-dup", test_sriov_vf_dup);
+    g_test_add_func("/libnm/settings/sriov/vf-vlan", test_sriov_vf_vlan);
+    g_test_add_func("/libnm/settings/sriov/setting", test_sriov_setting);
+    g_test_add_func("/libnm/settings/sriov/vlans", test_sriov_parse_vlans);
+
+    g_test_add_func("/libnm/settings/tc_config/qdisc", test_tc_config_qdisc);
+    g_test_add_func("/libnm/settings/tc_config/action", test_tc_config_action);
+    g_test_add_func("/libnm/settings/tc_config/tfilter/matchall_sdata",
+                    test_tc_config_tfilter_matchall_sdata);
+    g_test_add_func("/libnm/settings/tc_config/tfilter/matchall_mirred",
+                    test_tc_config_tfilter_matchall_mirred);
+    g_test_add_func("/libnm/settings/tc_config/setting/valid", test_tc_config_setting_valid);
+    g_test_add_func("/libnm/settings/tc_config/setting/duplicates",
+                    test_tc_config_setting_duplicates);
+    g_test_add_func("/libnm/settings/tc_config/dbus", test_tc_config_dbus);
+
+    g_test_add_func("/libnm/settings/bridge/vlans", test_bridge_vlans);
+    g_test_add_func("/libnm/settings/bridge/verify", test_bridge_verify);
+
+    g_test_add_func("/libnm/test_nm_json", test_nm_json);
+    g_test_add_func("/libnm/settings/team/sync_runner_from_config_roundrobin",
+                    test_runner_roundrobin_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_runner_from_config_broadcast",
+                    test_runner_broadcast_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_runner_from_config_random",
+                    test_runner_random_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_runner_from_config_activebackup",
+                    test_runner_activebackup_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_runner_from_config_loadbalance",
+                    test_runner_loadbalance_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_runner_from_config_lacp",
+                    test_runner_lacp_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_watcher_from_config_ethtool",
+                    test_watcher_ethtool_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_watcher_from_config_nsna_ping",
+                    test_watcher_nsna_ping_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_watcher_from_config_arp_ping",
+                    test_watcher_arp_ping_sync_from_config);
+    g_test_add_func("/libnm/settings/team/sync_watcher_from_config_all",
+                    test_multiple_watchers_sync_from_config);
+
+    g_test_add_func("/libnm/settings/team-port/sync_from_config_defaults", test_team_port_default);
+    g_test_add_func("/libnm/settings/team-port/sync_from_config_queue_id", test_team_port_queue_id);
+    g_test_add_func("/libnm/settings/team-port/sync_from_config_prio", test_team_port_prio);
+    g_test_add_func("/libnm/settings/team-port/sync_from_config_sticky", test_team_port_sticky);
+    g_test_add_func("/libnm/settings/team-port/sync_from_config_lacp_prio",
+                    test_team_port_lacp_prio);
+    g_test_add_func("/libnm/settings/team-port/sync_from_config_lacp_key", test_team_port_lacp_key);
+    g_test_add_func("/libnm/settings/team-port/sycn_from_config_full", test_team_port_full_config);
+
+    g_test_add_data_func("/libnm/settings/roundtrip-conversion/general/0",
+                         GINT_TO_POINTER(0),
+                         test_roundtrip_conversion);
+    g_test_add_data_func("/libnm/settings/roundtrip-conversion/wireguard/1",
+                         GINT_TO_POINTER(1),
+                         test_roundtrip_conversion);
+    g_test_add_data_func("/libnm/settings/roundtrip-conversion/wireguard/2",
+                         GINT_TO_POINTER(2),
+                         test_roundtrip_conversion);
+    g_test_add_data_func("/libnm/settings/roundtrip-conversion/general/3",
+                         GINT_TO_POINTER(3),
+                         test_roundtrip_conversion);
+
+    g_test_add_data_func("/libnm/settings/routing-rule/1", GINT_TO_POINTER(0), test_routing_rule);
+
+    g_test_add_func("/libnm/parse-tc-handle", test_parse_tc_handle);
+
+    g_test_add_func("/libnm/test_team_setting", test_team_setting);
+
+    g_test_add_func("/libnm/test_empty_setting", test_empty_setting);
+
+    g_test_add_func("/libnm/test_setting_metadata", test_setting_metadata);
+
+    return g_test_run();
 }
diff --git a/libnm-core/tests/test-settings-defaults.c b/libnm-core/tests/test-settings-defaults.c
index 7cba245c..9e4b09a1 100644
--- a/libnm-core/tests/test-settings-defaults.c
+++ b/libnm-core/tests/test-settings-defaults.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2008 - 2011 Red Hat, Inc.
  */
@@ -23,88 +23,87 @@
 #include "nm-utils/nm-test-utils.h"
 
 static void
-test_defaults (GType type, const char *name)
+test_defaults(GType type, const char *name)
 {
-	GParamSpec **property_specs;
-	guint n_property_specs;
-	GObject *setting;
-	int i;
-
-	setting = g_object_new (type, NULL);
-
-	property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs);
-	g_assert (property_specs);
-
-	for (i = 0; i < n_property_specs; i++) {
-		GParamSpec *prop_spec = property_specs[i];
-		GValue value = G_VALUE_INIT;
-		GValue defvalue = G_VALUE_INIT;
-		char *actual, *expected;
-		gboolean ok = FALSE;
-
-		/* Ignore non-fundamental types since they won't really have
-		 * defaults.
-		 */
-		if (!G_TYPE_IS_FUNDAMENTAL (prop_spec->value_type))
-			continue;
-
-		g_value_init (&value, prop_spec->value_type);
-		g_object_get_property (G_OBJECT (setting), prop_spec->name, &value);
-
-		g_value_init (&defvalue, prop_spec->value_type);
-		g_param_value_set_default (prop_spec, &defvalue);
-
-		actual = g_strdup_value_contents (&value);
-		expected = g_strdup_value_contents (&defvalue);
-
-		if (!strcmp (prop_spec->name, NM_SETTING_NAME)) {
-			/* 'name' is always the setting name, not the default value */
-			ok = !strcmp (nm_setting_get_name (NM_SETTING (setting)), name);
-			g_free (expected);
-			expected = g_strdup (name);
-		} else
-			ok = g_param_value_defaults (prop_spec, &value);
-
-		g_assert (ok);
-
-		g_free (actual);
-		g_free (expected);
-		g_value_unset (&value);
-		g_value_unset (&defvalue);
-	}
-
-	g_free (property_specs);
-	g_object_unref (setting);
+    GParamSpec **property_specs;
+    guint        n_property_specs;
+    GObject *    setting;
+    int          i;
+
+    setting = g_object_new(type, NULL);
+
+    property_specs = g_object_class_list_properties(G_OBJECT_GET_CLASS(setting), &n_property_specs);
+    g_assert(property_specs);
+
+    for (i = 0; i < n_property_specs; i++) {
+        GParamSpec *prop_spec = property_specs[i];
+        GValue      value     = G_VALUE_INIT;
+        GValue      defvalue  = G_VALUE_INIT;
+        char *      actual, *expected;
+        gboolean    ok = FALSE;
+
+        /* Ignore non-fundamental types since they won't really have
+         * defaults.
+         */
+        if (!G_TYPE_IS_FUNDAMENTAL(prop_spec->value_type))
+            continue;
+
+        g_value_init(&value, prop_spec->value_type);
+        g_object_get_property(G_OBJECT(setting), prop_spec->name, &value);
+
+        g_value_init(&defvalue, prop_spec->value_type);
+        g_param_value_set_default(prop_spec, &defvalue);
+
+        actual   = g_strdup_value_contents(&value);
+        expected = g_strdup_value_contents(&defvalue);
+
+        if (!strcmp(prop_spec->name, NM_SETTING_NAME)) {
+            /* 'name' is always the setting name, not the default value */
+            ok = !strcmp(nm_setting_get_name(NM_SETTING(setting)), name);
+            g_free(expected);
+            expected = g_strdup(name);
+        } else
+            ok = g_param_value_defaults(prop_spec, &value);
+
+        g_assert(ok);
+
+        g_free(actual);
+        g_free(expected);
+        g_value_unset(&value);
+        g_value_unset(&defvalue);
+    }
+
+    g_free(property_specs);
+    g_object_unref(setting);
 }
 
 static void
-defaults (void)
+defaults(void)
 {
-	/* The tests */
-	test_defaults (NM_TYPE_SETTING_CONNECTION, NM_SETTING_CONNECTION_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_802_1X, NM_SETTING_802_1X_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_CDMA, NM_SETTING_CDMA_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_GSM, NM_SETTING_GSM_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_IP4_CONFIG, NM_SETTING_IP4_CONFIG_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_IP6_CONFIG, NM_SETTING_IP6_CONFIG_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_PPP, NM_SETTING_PPP_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_PPPOE, NM_SETTING_PPPOE_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_SERIAL, NM_SETTING_SERIAL_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_VPN, NM_SETTING_VPN_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_WIRED, NM_SETTING_WIRED_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_WIRELESS, NM_SETTING_WIRELESS_SETTING_NAME);
-	test_defaults (NM_TYPE_SETTING_WIRELESS_SECURITY, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
+    /* The tests */
+    test_defaults(NM_TYPE_SETTING_CONNECTION, NM_SETTING_CONNECTION_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_802_1X, NM_SETTING_802_1X_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_CDMA, NM_SETTING_CDMA_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_GSM, NM_SETTING_GSM_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_IP4_CONFIG, NM_SETTING_IP4_CONFIG_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_IP6_CONFIG, NM_SETTING_IP6_CONFIG_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_PPP, NM_SETTING_PPP_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_PPPOE, NM_SETTING_PPPOE_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_SERIAL, NM_SETTING_SERIAL_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_VPN, NM_SETTING_VPN_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_WIRED, NM_SETTING_WIRED_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_WIRELESS, NM_SETTING_WIRELESS_SETTING_NAME);
+    test_defaults(NM_TYPE_SETTING_WIRELESS_SECURITY, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
 }
 
-NMTST_DEFINE ();
+NMTST_DEFINE();
 
 int
-main (int argc, char **argv)
+main(int argc, char **argv)
 {
-	nmtst_init (&argc, &argv, TRUE);
+    nmtst_init(&argc, &argv, TRUE);
 
-	g_test_add_func ("/libnm/defaults", defaults);
+    g_test_add_func("/libnm/defaults", defaults);
 
-	return g_test_run ();
+    return g_test_run();
 }
-