about summary refs log tree commit diff
path: root/src/core/settings
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-01-13 22:30:39 +0100
committerMichael Biebl <biebl@debian.org>2022-01-13 22:30:39 +0100
commit88c227d90a6b7b388c5c85d72802a0ca8f05ed5c (patch)
tree71f32df6617802270e8a78574bd8e1637dc532f4 /src/core/settings
parente74c568b07b50b97873fb4ee1d776dedefbd54d6 (diff)
New upstream version 1.34.0 upstream/1.34.0
Diffstat (limited to 'src/core/settings')
-rw-r--r--src/core/settings/nm-settings-connection.c4
-rw-r--r--src/core/settings/nm-settings.c10
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c214
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c111
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-System_test-wired-802-1X-subj-matches.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Bond_Main.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Permissions.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_LEAP.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_WEP_104_ASCII.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_Static_Routes.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_match.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-dcb-test.cexpected1
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection_2.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port9
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ip6-disabled.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-sriov-write.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-static-routes-legacy.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write-empty.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write.cexpected3
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-vlanid-use.cexpected2
-rw-r--r--src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c3788
-rw-r--r--src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c2
-rw-r--r--src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c8
-rw-r--r--src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c6
-rw-r--r--src/core/settings/plugins/keyfile/nms-keyfile-plugin.c18
-rw-r--r--src/core/settings/plugins/keyfile/nms-keyfile-storage.c2
-rw-r--r--src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c8
33 files changed, 1445 insertions, 2783 deletions
diff --git a/src/core/settings/nm-settings-connection.c b/src/core/settings/nm-settings-connection.c
index b423bf5b..71da97d0 100644
--- a/src/core/settings/nm-settings-connection.c
+++ b/src/core/settings/nm-settings-connection.c
@@ -346,7 +346,7 @@ _getsettings_cached_get(NMSettingsConnection *self, const NMConnectionSerializat
 
     priv->getsettings_cached.options = *options;
     priv->getsettings_cached.options.seen_bssids =
-        nm_utils_strv_dup_packed(priv->getsettings_cached.options.seen_bssids, -1);
+        nm_strv_dup_packed(priv->getsettings_cached.options.seen_bssids, -1);
 
     return priv->getsettings_cached.variant;
 }
@@ -382,7 +382,7 @@ _nm_settings_connection_set_connection(NMSettingsConnection *           self,
                                   NM_SETTING_COMPARE_FLAG_EXACT)) {
         connection_old   = priv->connection;
         priv->connection = g_object_ref(new_connection);
-        nmtst_connection_assert_unchanging(priv->connection);
+        nm_assert_connection_unchanging(priv->connection);
 
         _getsettings_cached_clear(priv);
         _nm_settings_notify_sorted_by_autoconnect_priority_maybe_changed(priv->settings);
diff --git a/src/core/settings/nm-settings.c b/src/core/settings/nm-settings.c
index f9f98de7..b71b9d18 100644
--- a/src/core/settings/nm-settings.c
+++ b/src/core/settings/nm-settings.c
@@ -17,7 +17,7 @@
 #include <pwd.h>
 
 #if HAVE_SELINUX
-    #include <selinux/selinux.h>
+#include <selinux/selinux.h>
 #endif
 
 #include "libnm-core-aux-intern/nm-common-macros.h"
@@ -1352,7 +1352,7 @@ _connection_changed_track(NMSettings *       self,
               || (_nm_connection_verify(connection, NULL) == NM_SETTING_VERIFY_SUCCESS));
     nm_assert(!connection || nm_streq0(uuid, nm_connection_get_uuid(connection)));
 
-    nmtst_connection_assert_unchanging(connection);
+    nm_assert_connection_unchanging(connection);
 
     sett_conn_entry =
         _sett_conn_entries_get(self, uuid) ?: _sett_conn_entries_create_and_add(self, uuid);
@@ -3372,7 +3372,7 @@ load_plugins(NMSettings *self, const char *const *plugins, GError **error)
             continue;
         }
 
-        if (nm_utils_strv_find_first((char **) plugins, iter - plugins, pname) >= 0) {
+        if (nm_strv_find_first(plugins, iter - plugins, pname) >= 0) {
             /* the plugin is already mentioned in the list previously.
              * Don't load a duplicate. */
             continue;
@@ -3452,7 +3452,7 @@ impl_settings_save_hostname(NMDBusObject *                     obj,
     g_variant_get(parameters, "(&s)", &hostname);
 
     /* Minimal validation of the hostname */
-    if (!nm_hostname_manager_validate_hostname(hostname)) {
+    if (!nm_utils_validate_hostname(hostname)) {
         error_code   = NM_SETTINGS_ERROR_INVALID_HOSTNAME;
         error_reason = "The hostname was too long or contained invalid characters";
         goto err;
@@ -3938,7 +3938,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
             priv->connections_len,
             G_STRUCT_OFFSET(NMSettingsConnection, _connections_lst),
             TRUE);
-        g_value_take_boxed(value, nm_utils_strv_make_deep_copied(strv));
+        g_value_take_boxed(value, nm_strv_make_deep_copied(strv));
         break;
     case PROP_STARTUP_COMPLETE:
         g_value_set_boolean(value, !nm_settings_get_startup_complete_blocked_reason(self, FALSE));
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c
index 5038ac6a..8fdc01fb 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c
@@ -848,7 +848,7 @@ _unhandled_specs_from_hashtable(GHashTable *hash)
     GSList *             list = NULL;
     guint                i, l;
 
-    keys = nm_utils_strdict_get_keys(hash, TRUE, &l);
+    keys = nm_strdict_get_keys(hash, TRUE, &l);
     for (i = l; i > 0;) {
         i--;
         list = g_slist_prepend(list, g_strdup(keys[i]));
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
index 03b347f9..6dd5ef05 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -31,6 +31,7 @@
 #include "nm-setting-ethtool.h"
 #include "nm-setting-8021x.h"
 #include "nm-setting-bond.h"
+#include "nm-setting-bond-port.h"
 #include "nm-setting-team.h"
 #include "nm-setting-team-port.h"
 #include "nm-setting-bridge.h"
@@ -474,7 +475,7 @@ make_connection_setting(const char *file,
     if (v) {
         gs_free const char **items = NULL;
 
-        items = nm_utils_strsplit_set(v, " ");
+        items = nm_strsplit_set(v, " ");
         for (iter = items; iter && *iter; iter++) {
             if (!nm_setting_connection_add_permission(s_con, "user", *iter, NULL))
                 PARSE_WARNING("invalid USERS item '%s'", *iter);
@@ -490,7 +491,7 @@ make_connection_setting(const char *file,
     if (v) {
         gs_free const char **items = NULL;
 
-        items = nm_utils_strsplit_set(v, " \t");
+        items = nm_strsplit_set(v, " \t");
         for (iter = items; iter && *iter; iter++) {
             if (!nm_setting_connection_add_secondary(s_con, *iter))
                 PARSE_WARNING("secondary connection UUID '%s' already added", *iter);
@@ -633,6 +634,15 @@ make_connection_setting(const char *file,
         PARSE_WARNING("invalid LLMNR setting");
     g_object_set(s_con, NM_SETTING_CONNECTION_LLMNR, i_val, NULL);
 
+    i_val = NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT;
+    if (!svGetValueEnum(ifcfg,
+                        "DNS_OVER_TLS",
+                        nm_setting_connection_dns_over_tls_get_type(),
+                        &i_val,
+                        NULL))
+        PARSE_WARNING("invalid DNS_OVER_TLS setting");
+    g_object_set(s_con, NM_SETTING_CONNECTION_DNS_OVER_TLS, i_val, NULL);
+
     return NM_SETTING(s_con);
 }
 
@@ -1036,7 +1046,7 @@ parse_route_line(const char *line,
      * Maybe later we want to support some form of quotation here.
      * Which of course, would be incompatible with initscripts.
      */
-    words_free = nm_utils_strsplit_set(line, " \t\n");
+    words_free = nm_strsplit_set(line, " \t\n");
 
     words = words_free ?: NM_PTRARRAY_EMPTY(const char *);
 
@@ -1582,7 +1592,7 @@ parse_dns_options(NMSettingIPConfig *ip_config, const char *value)
     if (!nm_setting_ip_config_has_dns_options(ip_config))
         nm_setting_ip_config_clear_dns_options(ip_config, TRUE);
 
-    options = nm_utils_strsplit_set(value, " ");
+    options = nm_strsplit_set(value, " ");
     if (options) {
         for (item = options; *item; item++) {
             if (!nm_setting_ip_config_add_dns_option(ip_config, *item))
@@ -1974,26 +1984,27 @@ make_ip4_setting(shvarFile *ifcfg,
         /* DNS servers
          * Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
          */
-        for (i = 1; i <= 10; i++) {
+        for (i = 1; i < 10000; i++) {
             char tag[256];
 
             numbered_tag(tag, "DNS", i);
             nm_clear_g_free(&value);
             v = svGetValueStr(ifcfg, tag, &value);
-            if (v) {
-                if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
-                    if (!nm_setting_ip_config_add_dns(s_ip4, v))
-                        PARSE_WARNING("duplicate DNS server %s", tag);
-                } else if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
-                    /* Ignore IPv6 addresses */
-                } else {
-                    g_set_error(error,
-                                NM_SETTINGS_ERROR,
-                                NM_SETTINGS_ERROR_INVALID_CONNECTION,
-                                "Invalid DNS server address '%s'",
-                                v);
-                    return NULL;
-                }
+            if (!v)
+                break;
+
+            if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
+                if (!nm_setting_ip_config_add_dns(s_ip4, v))
+                    PARSE_WARNING("duplicate DNS server %s", tag);
+            } else if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
+                /* Ignore IPv6 addresses */
+            } else {
+                g_set_error(error,
+                            NM_SETTINGS_ERROR,
+                            NM_SETTINGS_ERROR_INVALID_CONNECTION,
+                            "Invalid DNS server address '%s'",
+                            v);
+                return NULL;
             }
         }
 
@@ -2003,7 +2014,7 @@ make_ip4_setting(shvarFile *ifcfg,
         if (v) {
             gs_free const char **searches = NULL;
 
-            searches = nm_utils_strsplit_set(v, " ");
+            searches = nm_strsplit_set(v, " ");
             if (searches) {
                 for (item = searches; *item; item++) {
                     if (!nm_setting_ip_config_add_dns_search(s_ip4, *item))
@@ -2063,7 +2074,7 @@ make_ip4_setting(shvarFile *ifcfg,
         if (v) {
             gs_free const char **searches = NULL;
 
-            searches = nm_utils_strsplit_set(v, " ");
+            searches = nm_strsplit_set(v, " ");
             if (searches) {
                 for (item = searches; *item; item++) {
                     if (!nm_setting_ip_config_add_dns_search(s_ip4, *item))
@@ -2249,6 +2260,7 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
     gboolean                           ip6_privacy   = FALSE, ip6_privacy_prefer_public_ip;
     NMSettingIP6ConfigPrivacy          ip6_privacy_val;
     guint32                            route_table;
+    gboolean                           is_disabled;
 
     s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
 
@@ -2375,10 +2387,9 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
                  NULL);
 
     /* Don't bother to read IP, DNS and routes when IPv6 is disabled */
-    if (NM_IN_STRSET(method,
-                     NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
-                     NM_SETTING_IP6_CONFIG_METHOD_DISABLED))
-        return NM_SETTING(g_steal_pointer(&s_ip6));
+    is_disabled = NM_IN_STRSET(method,
+                               NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+                               NM_SETTING_IP6_CONFIG_METHOD_DISABLED);
 
     nm_clear_g_free(&value);
     v = svGetValueStr(ifcfg, "DHCPV6_DUID", &value);
@@ -2437,16 +2448,24 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
                       ipv6addr_secondaries ?: "",
                       NULL);
 
-    list = nm_utils_strsplit_set(value, " ");
-    for (iter = list, i = 0; iter && *iter; iter++, i++) {
-        NMIPAddress *addr = NULL;
+    list = nm_strsplit_set(value, " ");
+    if (list) {
+        if (is_disabled)
+            PARSE_WARNING("ignore IPv6 addresses with method disabled/ignore");
+        else {
+            for (iter = list, i = 0; *iter; iter++, i++) {
+                nm_auto_unref_ip_address NMIPAddress *addr = NULL;
 
-        if (!parse_full_ip6_address(ifcfg, *iter, i, &addr, error))
-            return NULL;
+                if (!parse_full_ip6_address(ifcfg, *iter, i, &addr, is_disabled ? NULL : error)) {
+                    if (is_disabled)
+                        break;
+                    return NULL;
+                }
 
-        if (!nm_setting_ip_config_add_address(s_ip6, addr))
-            PARSE_WARNING("duplicate IP6 address");
-        nm_ip_address_unref(addr);
+                if (!nm_setting_ip_config_add_address(s_ip6, addr))
+                    PARSE_WARNING("duplicate IP6 address");
+            }
+        }
     }
 
     /* Gateway */
@@ -2462,18 +2481,20 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
         }
         if (v) {
             char *ptr;
+
             if ((ptr = strchr(v, '%')) != NULL)
                 *ptr = '\0'; /* remove %interface prefix if present */
             if (!nm_utils_ipaddr_is_valid(AF_INET6, v)) {
-                g_set_error(error,
-                            NM_SETTINGS_ERROR,
-                            NM_SETTINGS_ERROR_INVALID_CONNECTION,
-                            "Invalid IP6 address '%s'",
-                            v);
-                return NULL;
-            }
-
-            g_object_set(s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, v, NULL);
+                if (!is_disabled) {
+                    g_set_error(error,
+                                NM_SETTINGS_ERROR,
+                                NM_SETTINGS_ERROR_INVALID_CONNECTION,
+                                "Invalid IP6 address '%s'",
+                                v);
+                    return NULL;
+                }
+            } else
+                g_object_set(s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, v, NULL);
         }
     }
 
@@ -2497,23 +2518,27 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
     /* DNS servers
      * Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
      */
-    for (i = 1; i <= 10; i++) {
+    for (i = 1; i < 10000; i++) {
         char tag[256];
 
         numbered_tag(tag, "DNS", i);
         nm_clear_g_free(&value);
         v = svGetValueStr(ifcfg, tag, &value);
-        if (!v) {
-            /* all done */
+        if (!v)
             break;
-        }
 
         if (nm_utils_ipaddr_is_valid(AF_INET6, v)) {
+            if (is_disabled) {
+                PARSE_WARNING("ignore DNS server addresses with method disabled/ignore");
+                break;
+            }
             if (!nm_setting_ip_config_add_dns(s_ip6, v))
                 PARSE_WARNING("duplicate DNS server %s", tag);
         } else if (nm_utils_ipaddr_is_valid(AF_INET, v)) {
             /* Ignore IPv4 addresses */
         } else {
+            if (is_disabled)
+                continue;
             g_set_error(error,
                         NM_SETTINGS_ERROR,
                         NM_SETTINGS_ERROR_INVALID_CONNECTION,
@@ -2540,11 +2565,15 @@ make_ip6_setting(shvarFile *ifcfg, shvarFile *network_ifcfg, gboolean routes_rea
     if (v) {
         gs_free const char **searches = NULL;
 
-        searches = nm_utils_strsplit_set(v, " ");
+        searches = nm_strsplit_set(v, " ");
         if (searches) {
-            for (iter = searches; *iter; iter++) {
-                if (!nm_setting_ip_config_add_dns_search(s_ip6, *iter))
-                    PARSE_WARNING("duplicate DNS domain '%s'", *iter);
+            if (is_disabled) {
+                PARSE_WARNING("ignore IPV6_DOMAIN with method disabled/ignore");
+            } else {
+                for (iter = searches; *iter; iter++) {
+                    if (!nm_setting_ip_config_add_dns_search(s_ip6, *iter))
+                        PARSE_WARNING("duplicate DNS domain '%s'", *iter);
+                }
             }
         }
     }
@@ -2957,7 +2986,7 @@ read_dcb_percent_array(shvarFile *       ifcfg,
         return TRUE;
     }
 
-    split = nm_utils_strsplit_set(val, ",");
+    split = nm_strsplit_set(val, ",");
     if (NM_PTRARRAY_LEN(split) != 8) {
         PARSE_WARNING("invalid %s percentage list value '%s'", prop, val);
         g_set_error_literal(error,
@@ -3001,6 +3030,7 @@ make_dcb_setting(shvarFile *ifcfg, NMSetting **out_setting, GError **error)
     gs_unref_object NMSettingDcb *s_dcb = NULL;
     gboolean                      dcb_on;
     NMSettingDcbFlags             flags = NM_SETTING_DCB_FLAG_NONE;
+    gs_free char *                val   = NULL;
 
     g_return_val_if_fail(out_setting, FALSE);
     *out_setting = NULL;
@@ -3020,21 +3050,18 @@ make_dcb_setting(shvarFile *ifcfg, NMSetting **out_setting, GError **error)
                       error)) {
         return FALSE;
     }
-    if (nm_setting_dcb_get_app_fcoe_flags(s_dcb) & NM_SETTING_DCB_FLAG_ENABLE) {
-        gs_free char *val = NULL;
 
-        val = svGetValueStr_cp(ifcfg, KEY_DCB_APP_FCOE_MODE);
-        if (val) {
-            if (NM_IN_STRSET(val, NM_SETTING_DCB_FCOE_MODE_FABRIC, NM_SETTING_DCB_FCOE_MODE_VN2VN))
-                g_object_set(G_OBJECT(s_dcb), NM_SETTING_DCB_APP_FCOE_MODE, val, NULL);
-            else {
-                PARSE_WARNING("invalid FCoE mode '%s'", val);
-                g_set_error_literal(error,
-                                    NM_SETTINGS_ERROR,
-                                    NM_SETTINGS_ERROR_INVALID_CONNECTION,
-                                    "invalid FCoE mode");
-                return FALSE;
-            }
+    val = svGetValueStr_cp(ifcfg, KEY_DCB_APP_FCOE_MODE);
+    if (val) {
+        if (NM_IN_STRSET(val, NM_SETTING_DCB_FCOE_MODE_FABRIC, NM_SETTING_DCB_FCOE_MODE_VN2VN))
+            g_object_set(G_OBJECT(s_dcb), NM_SETTING_DCB_APP_FCOE_MODE, val, NULL);
+        else {
+            PARSE_WARNING("invalid FCoE mode '%s'", val);
+            g_set_error_literal(error,
+                                NM_SETTINGS_ERROR,
+                                NM_SETTINGS_ERROR_INVALID_CONNECTION,
+                                "invalid FCoE mode");
+            return FALSE;
         }
     }
 
@@ -3376,7 +3403,7 @@ fill_wpa_ciphers(shvarFile *ifcfg, NMSettingWirelessSecurity *wsec, gboolean gro
     if (!p)
         return TRUE;
 
-    list = nm_utils_strsplit_set(p, " ");
+    list = nm_strsplit_set(p, " ");
     for (iter = list; iter && *iter; iter++, i++) {
         if (!strcmp(*iter, "CCMP")) {
             if (group)
@@ -3612,7 +3639,7 @@ parse_8021x_phase2_auth(shvarFile *     ifcfg,
     }
 
     inner_auth = g_ascii_strdown(v, -1);
-    list       = nm_utils_strsplit_set(inner_auth, " ");
+    list       = nm_strsplit_set(inner_auth, " ");
     for (iter = list; iter && *iter; iter++) {
         if (NM_IN_STRSET(*iter, "pap", "chap", "mschap", "mschapv2", "gtc", "otp", "md5")) {
             if (num_auth == 0) {
@@ -3787,7 +3814,7 @@ eap_fast_reader(const char *    eap_method,
     if (fast_provisioning) {
         gs_free const char **list = NULL;
 
-        list = nm_utils_strsplit_set(fast_provisioning, " \t");
+        list = nm_strsplit_set(fast_provisioning, " \t");
         for (iter = list; iter && *iter; iter++) {
             if (strcmp(*iter, "allow-unauth") == 0)
                 allow_unauth = TRUE;
@@ -3865,7 +3892,7 @@ read_8021x_list_value(shvarFile *     ifcfg,
     if (!v)
         return;
 
-    strv = nm_utils_strsplit_set(v, " \t");
+    strv = nm_strsplit_set(v, " \t");
     if (strv)
         g_object_set(setting, prop_name, strv, NULL);
 }
@@ -3892,7 +3919,7 @@ fill_8021x(shvarFile *ifcfg, const char *file, const char *key_mgmt, gboolean wi
         return NULL;
     }
 
-    list = nm_utils_strsplit_set(v, " ");
+    list = nm_strsplit_set(v, " ");
 
     s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
 
@@ -4245,7 +4272,7 @@ transform_hwaddr_blacklist(const char *blacklist)
     const char **strv;
     gsize        i, j;
 
-    strv = nm_utils_strsplit_set(blacklist, " \t");
+    strv = nm_strsplit_set(blacklist, " \t");
     if (!strv)
         return NULL;
     for (i = 0, j = 0; strv[j]; j++) {
@@ -4714,7 +4741,7 @@ parse_ethtool_option(const char *             value,
     gs_free const char **words        = NULL;
     NMEthtoolType        ethtool_type = NM_ETHTOOL_TYPE_UNKNOWN;
 
-    words = nm_utils_strsplit_set(value, " \t\n");
+    words = nm_strsplit_set(value, " \t\n");
     if (!words)
         return;
 
@@ -4976,7 +5003,7 @@ parse_ethtool_options(shvarFile *ifcfg, NMConnection *connection)
             gs_free const char **opts = NULL;
             const char *const *  iter;
 
-            opts = nm_utils_strsplit_set(ethtool_opts, ";");
+            opts = nm_strsplit_set(ethtool_opts, ";");
             for (iter = opts; iter && iter[0]; iter++) {
                 /* in case of repeated wol_passwords, parse_ethtool_option()
                  * will do the right thing and clear wol_password before resetting. */
@@ -5084,7 +5111,7 @@ make_wired_setting(shvarFile *ifcfg, const char *file, NMSetting8021x **s_8021x,
                 gs_free const char **chans = NULL;
                 guint32              num_chans;
 
-                chans     = nm_utils_strsplit_set(cvalue, ",");
+                chans     = nm_strsplit_set(cvalue, ",");
                 num_chans = NM_PTRARRAY_LEN(chans);
                 if (num_chans < 2 || num_chans > 3) {
                     PARSE_WARNING("invalid SUBCHANNELS '%s' (%u channels, 2 or 3 expected)",
@@ -5456,7 +5483,7 @@ make_bond_setting(shvarFile *ifcfg, const char *file, GError **error)
         gs_free const char **items = NULL;
         const char *const *  iter;
 
-        items = nm_utils_strsplit_set(v, " ");
+        items = nm_strsplit_set(v, " ");
         for (iter = items; iter && *iter; iter++) {
             gs_free char *key = NULL;
             const char *  val;
@@ -5474,6 +5501,31 @@ make_bond_setting(shvarFile *ifcfg, const char *file, GError **error)
     return (NMSetting *) s_bond;
 }
 
+static NMSetting *
+make_bond_port_setting(shvarFile *ifcfg)
+{
+    NMSetting *   s_port        = NULL;
+    gs_free char *value_to_free = NULL;
+    const char *  value;
+    guint         queue_id;
+
+    g_return_val_if_fail(ifcfg != NULL, FALSE);
+
+    value = svGetValue(ifcfg, "BOND_PORT_QUEUE_ID", &value_to_free);
+    if (value) {
+        s_port = nm_setting_bond_port_new();
+        queue_id =
+            _nm_utils_ascii_str_to_uint64(value, 10, 0, G_MAXUINT16, NM_BOND_PORT_QUEUE_ID_DEF);
+        if (errno != 0) {
+            PARSE_WARNING("Invalid bond port queue_id value '%s'", value);
+            return s_port;
+        }
+        g_object_set(G_OBJECT(s_port), NM_SETTING_BOND_PORT_QUEUE_ID, queue_id, NULL);
+    }
+
+    return s_port;
+}
+
 static NMConnection *
 bond_connection_from_ifcfg(const char *file, shvarFile *ifcfg, GError **error)
 {
@@ -5766,7 +5818,7 @@ handle_bridging_opts(NMSetting *   setting,
     gs_free const char **items = NULL;
     const char *const *  iter;
 
-    items = nm_utils_strsplit_set(value, " ");
+    items = nm_strsplit_set(value, " ");
     for (iter = items; iter && *iter; iter++) {
         gs_free char *key = NULL;
         const char *  val;
@@ -6027,7 +6079,7 @@ parse_prio_map_list(NMSettingVlan *s_vlan, shvarFile *ifcfg, const char *key, NM
     v = svGetValueStr(ifcfg, key, &value);
     if (!v)
         return;
-    list = nm_utils_strsplit_set(v, ",");
+    list = nm_strsplit_set(v, ",");
 
     for (iter = list; iter && *iter; iter++) {
         if (!strchr(*iter, ':'))
@@ -6138,7 +6190,7 @@ make_vlan_setting(shvarFile *ifcfg, const char *file, GError **error)
         gs_free const char **strv = NULL;
         const char *const *  ptr;
 
-        strv = nm_utils_strsplit_set(v, ", ");
+        strv = nm_strsplit_set(v, ", ");
         for (ptr = strv; ptr && *ptr; ptr++) {
             if (nm_streq(*ptr, "GVRP") && gvrp == -1)
                 vlan_flags |= NM_VLAN_FLAG_GVRP;
@@ -6284,7 +6336,7 @@ check_dns_search_domains(shvarFile *ifcfg, NMSetting *s_ip4, NMSetting *s_ip6)
             gs_free const char **searches = NULL;
             const char *const *  item;
 
-            searches = nm_utils_strsplit_set(v, " ");
+            searches = nm_strsplit_set(v, " ");
             if (searches) {
                 for (item = searches; *item; item++) {
                     if (!nm_setting_ip_config_add_dns_search(NM_SETTING_IP_CONFIG(s_ip6), *item))
@@ -6641,6 +6693,10 @@ connection_from_file_full(const char *filename,
     if (setting)
         nm_connection_add_setting(connection, setting);
 
+    setting = make_bond_port_setting(main_ifcfg);
+    if (setting)
+        nm_connection_add_setting(connection, setting);
+
     setting = make_team_port_setting(main_ifcfg);
     if (setting)
         nm_connection_add_setting(connection, setting);
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c
index 134bdf68..3feb4440 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-storage.c
@@ -112,7 +112,7 @@ nms_ifcfg_rh_storage_new_connection(NMSIfcfgRHPlugin *     plugin,
 
     nm_assert(NM_IS_CONNECTION(connection_take));
     nm_assert(_nm_connection_verify(connection_take, NULL) == NM_SETTING_VERIFY_SUCCESS);
-    nmtst_connection_assert_unchanging(connection_take);
+    nm_assert_connection_unchanging(connection_take);
 
     self             = _storage_new(plugin, nm_connection_get_uuid(connection_take), filename);
     self->connection = connection_take;
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c
index febfc120..1afdf8ee 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c
@@ -827,6 +827,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = {
     _KEY_TYPE("BAND", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("BONDING_MASTER", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("BONDING_OPTS", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
+    _KEY_TYPE("BOND_PORT_QUEUE_ID", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("BOOTPROTO", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("BRIDGE", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("BRIDGE_MACADDR", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
@@ -891,6 +892,7 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = {
     _KEY_TYPE("DHCPv6_DUID", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("DHCPv6_IAID", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("DNS", NMS_IFCFG_KEY_TYPE_IS_NUMBERED),
+    _KEY_TYPE("DNS_OVER_TLS", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("DOMAIN", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("ESSID", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
     _KEY_TYPE("ETHTOOL_OPTS", NMS_IFCFG_KEY_TYPE_IS_PLAIN),
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h
index b7751ec9..6b396a9a 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h
@@ -33,7 +33,7 @@ typedef struct {
     NMSIfcfgKeyTypeFlags key_flags;
 } NMSIfcfgKeyTypeInfo;
 
-extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[251];
+extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[253];
 
 const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info(const char *key, gssize *out_idx);
 
diff --git a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
index ef85b6bf..263c9253 100644
--- a/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/core/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -19,6 +19,7 @@
 #include "libnm-glib-aux/nm-str-buf.h"
 #include "libnm-glib-aux/nm-io-utils.h"
 #include "nm-manager.h"
+#include "nm-setting-bond-port.h"
 #include "nm-setting-connection.h"
 #include "nm-setting-wired.h"
 #include "nm-setting-wireless.h"
@@ -204,18 +205,18 @@ write_object(NMSetting8021x *                s_8021x,
     g_return_val_if_fail(ifcfg != NULL, FALSE);
     g_return_val_if_fail(objtype != NULL, FALSE);
 
-    scheme = (*(objtype->vtable->scheme_func)) (s_8021x);
+    scheme = (*(objtype->vtable->scheme_func))(s_8021x);
     switch (scheme) {
     case NM_SETTING_802_1X_CK_SCHEME_UNKNOWN:
         break;
     case NM_SETTING_802_1X_CK_SCHEME_BLOB:
-        blob = (*(objtype->vtable->blob_func)) (s_8021x);
+        blob = (*(objtype->vtable->blob_func))(s_8021x);
         break;
     case NM_SETTING_802_1X_CK_SCHEME_PATH:
-        value = (*(objtype->vtable->path_func)) (s_8021x);
+        value = (*(objtype->vtable->path_func))(s_8021x);
         break;
     case NM_SETTING_802_1X_CK_SCHEME_PKCS11:
-        value = (*(objtype->vtable->uri_func)) (s_8021x);
+        value = (*(objtype->vtable->uri_func))(s_8021x);
         break;
     default:
         g_set_error(error,
@@ -228,8 +229,8 @@ write_object(NMSetting8021x *                s_8021x,
     /* Set the password for certificate/private key. */
     nm_sprintf_buf(secret_name, "%s_PASSWORD", objtype->ifcfg_rh_key);
     nm_sprintf_buf(secret_flags, "%s_PASSWORD_FLAGS", objtype->ifcfg_rh_key);
-    password = (*(objtype->vtable->passwd_func)) (s_8021x);
-    flags    = (*(objtype->vtable->pwflag_func)) (s_8021x);
+    password = (*(objtype->vtable->passwd_func))(s_8021x);
+    flags    = (*(objtype->vtable->pwflag_func))(s_8021x);
     set_secret(ifcfg, secrets, secret_name, password, secret_flags, flags);
 
     if (!objtype->vtable->format_func)
@@ -1442,12 +1443,12 @@ write_vlan_setting(NMConnection *connection, shvarFile *ifcfg, gboolean *wired,
     svSetValueBoolean(ifcfg, "REORDER_HDR", NM_FLAGS_HAS(vlan_flags, NM_VLAN_FLAG_REORDER_HEADERS));
     svSetValueBoolean(ifcfg, "GVRP", NM_FLAGS_HAS(vlan_flags, NM_VLAN_FLAG_GVRP));
 
-    nm_utils_strbuf_init(s_buf, &s_buf_ptr, &s_buf_len);
+    nm_strbuf_init_arr(s_buf, &s_buf_ptr, &s_buf_len);
 
     if (NM_FLAGS_HAS(vlan_flags, NM_VLAN_FLAG_LOOSE_BINDING))
-        nm_utils_strbuf_append_str(&s_buf_ptr, &s_buf_len, "LOOSE_BINDING");
+        nm_strbuf_append_str(&s_buf_ptr, &s_buf_len, "LOOSE_BINDING");
     if (!NM_FLAGS_HAS(vlan_flags, NM_VLAN_FLAG_REORDER_HEADERS))
-        nm_utils_strbuf_append(&s_buf_ptr, &s_buf_len, "%sNO_REORDER_HDR", s_buf[0] ? "," : "");
+        nm_strbuf_append(&s_buf_ptr, &s_buf_len, "%sNO_REORDER_HDR", s_buf[0] ? "," : "");
 
     svSetValueStr(ifcfg, "VLAN_FLAGS", s_buf);
 
@@ -1888,6 +1889,16 @@ write_bridge_port_setting(NMConnection *connection, shvarFile *ifcfg, GError **e
     return TRUE;
 }
 
+static void
+write_bond_port_setting(NMConnection *connection, shvarFile *ifcfg)
+{
+    NMSettingBondPort *s_port;
+
+    s_port = _nm_connection_get_setting(connection, NM_TYPE_SETTING_BOND_PORT);
+    if (s_port)
+        svSetValueInt64(ifcfg, "BOND_PORT_QUEUE_ID", nm_setting_bond_port_get_queue_id(s_port));
+}
+
 static gboolean
 write_team_port_setting(NMConnection *connection, shvarFile *ifcfg, GError **error)
 {
@@ -2020,8 +2031,7 @@ write_dcb_setting(NMConnection *connection, shvarFile *ifcfg, GError **error)
                   "APP_FCOE",
                   nm_setting_dcb_get_app_fcoe_flags(s_dcb),
                   nm_setting_dcb_get_app_fcoe_priority(s_dcb));
-    if (nm_setting_dcb_get_app_fcoe_flags(s_dcb) & NM_SETTING_DCB_FLAG_ENABLE)
-        svSetValueStr(ifcfg, KEY_DCB_APP_FCOE_MODE, nm_setting_dcb_get_app_fcoe_mode(s_dcb));
+    svSetValueStr(ifcfg, KEY_DCB_APP_FCOE_MODE, nm_setting_dcb_get_app_fcoe_mode(s_dcb));
 
     write_dcb_app(ifcfg,
                   "APP_ISCSI",
@@ -2076,6 +2086,7 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg)
     gint32                        vint32;
     NMSettingConnectionMdns       mdns;
     NMSettingConnectionLlmnr      llmnr;
+    NMSettingConnectionDnsOverTls dns_over_tls;
     guint32                       vuint32;
     const char *                  tmp, *mud_url;
 
@@ -2259,6 +2270,14 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg)
     if (llmnr != NM_SETTING_CONNECTION_LLMNR_DEFAULT) {
         svSetValueEnum(ifcfg, "LLMNR", nm_setting_connection_llmnr_get_type(), llmnr);
     }
+
+    dns_over_tls = nm_setting_connection_get_dns_over_tls(s_con);
+    if (dns_over_tls != NM_SETTING_CONNECTION_DNS_OVER_TLS_DEFAULT) {
+        svSetValueEnum(ifcfg,
+                       "DNS_OVER_TLS",
+                       nm_setting_connection_dns_over_tls_get_type(),
+                       dns_over_tls);
+    }
 }
 
 static char *
@@ -2685,12 +2704,11 @@ write_dns_setting(shvarFile *ifcfg, NMConnection *connection, int addr_family)
     }
 }
 
-static gboolean
+static void
 write_ip4_setting(NMConnection *connection,
                   shvarFile *   ifcfg,
                   shvarFile **  out_route_content_svformat,
-                  GString **    out_route_content,
-                  GError **     error)
+                  GString **    out_route_content)
 {
     NMSettingIPConfig *    s_ip4;
     const char *           value;
@@ -2713,7 +2731,7 @@ write_ip4_setting(NMConnection *connection,
 
     s_ip4 = nm_connection_get_setting_ip4_config(connection);
     if (!s_ip4)
-        return TRUE;
+        return;
 
     method = nm_setting_ip_config_get_method(s_ip4);
 
@@ -2722,7 +2740,7 @@ write_ip4_setting(NMConnection *connection,
         method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
 
     if (nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED))
-        return TRUE;
+        return;
 
     num = nm_setting_ip_config_get_num_addresses(s_ip4);
 
@@ -2881,8 +2899,6 @@ write_ip4_setting(NMConnection *connection,
         }
         svSetValueStr(ifcfg, "DHCP_REJECT_SERVERS", str->str);
     }
-
-    return TRUE;
 }
 
 static void
@@ -2968,11 +2984,8 @@ write_ip4_aliases(NMConnection *connection, const char *base_ifcfg_path)
     }
 }
 
-static gboolean
-write_ip6_setting(NMConnection *connection,
-                  shvarFile *   ifcfg,
-                  GString **    out_route6_content,
-                  GError **     error)
+static void
+write_ip6_setting(NMConnection *connection, shvarFile *ifcfg, GString **out_route6_content)
 {
     NMSettingIPConfig *           s_ip6;
     const char *                  value;
@@ -2991,17 +3004,15 @@ write_ip6_setting(NMConnection *connection,
 
     s_ip6 = nm_connection_get_setting_ip6_config(connection);
     if (!s_ip6)
-        return TRUE;
+        return;
 
     value = nm_setting_ip_config_get_method(s_ip6);
     g_assert(value);
     if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
         svSetValueStr(ifcfg, "IPV6INIT", "no");
-        return TRUE;
     } else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_DISABLED)) {
         svSetValueStr(ifcfg, "IPV6_DISABLED", "yes");
         svSetValueStr(ifcfg, "IPV6INIT", "no");
-        return TRUE;
     } else if (!strcmp(value, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
         svSetValueStr(ifcfg, "IPV6INIT", "yes");
         svSetValueStr(ifcfg, "IPV6_AUTOCONF", "yes");
@@ -3148,8 +3159,6 @@ write_ip6_setting(NMConnection *connection,
     write_res_options(ifcfg, s_ip6, "IPV6_RES_OPTIONS");
 
     NM_SET_OUT(out_route6_content, write_route_file(s_ip6));
-
-    return TRUE;
 }
 
 static void
@@ -3228,10 +3237,11 @@ do_write_construct(NMConnection *                  connection,
                    GError **                       error)
 {
     NMSettingConnection *    s_con;
-    nm_auto_shvar_file_close shvarFile *ifcfg       = NULL;
-    gs_free char *                      ifcfg_name  = NULL;
-    gs_free char *                      route_path  = NULL;
-    gs_free char *                      route6_path = NULL;
+    nm_auto_shvar_file_close shvarFile *ifcfg = NULL;
+    const char *                        ifcfg_name;
+    gs_free char *                      ifcfg_name_free = NULL;
+    gs_free char *                      route_path      = NULL;
+    gs_free char *                      route6_path     = NULL;
     const char *                        type;
     gs_unref_hashtable GHashTable *blobs   = NULL;
     gs_unref_hashtable GHashTable *secrets = NULL;
@@ -3255,11 +3265,7 @@ do_write_construct(NMConnection *                  connection,
 
     if (filename) {
         /* For existing connections, 'filename' should be full path to ifcfg file */
-        ifcfg = svOpenFile(filename, error);
-        if (!ifcfg)
-            return FALSE;
-
-        ifcfg_name = g_strdup(filename);
+        ifcfg_name = filename;
     } else if (ifcfg_dir) {
         gs_free char *escaped = NULL;
         int           i_path;
@@ -3280,21 +3286,27 @@ do_write_construct(NMConnection *                  connection,
             if (g_file_test(path_candidate, G_FILE_TEST_EXISTS))
                 continue;
 
-            ifcfg_name = g_steal_pointer(&path_candidate);
+            ifcfg_name_free = g_steal_pointer(&path_candidate);
             break;
         }
 
-        if (!ifcfg_name) {
+        if (!ifcfg_name_free) {
             g_set_error_literal(error,
                                 NM_SETTINGS_ERROR,
                                 NM_SETTINGS_ERROR_FAILED,
                                 "Failed to find usable ifcfg file name");
             return FALSE;
         }
+        ifcfg_name = ifcfg_name_free;
+    } else {
+        g_set_error(error,
+                    NM_SETTINGS_ERROR,
+                    NM_SETTINGS_ERROR_FAILED,
+                    "No file name given for storing profile to ifcfg-rh");
+        g_return_val_if_reached(FALSE);
+    }
 
-        ifcfg = svCreateFile(ifcfg_name);
-    } else
-        ifcfg = svCreateFile("/tmp/ifcfg-dummy");
+    ifcfg = svCreateFile(ifcfg_name);
 
     route_path = utils_get_route_path(svFileGetName(ifcfg));
     if (!route_path) {
@@ -3377,6 +3389,8 @@ do_write_construct(NMConnection *                  connection,
     if (!write_bridge_port_setting(connection, ifcfg, error))
         return FALSE;
 
+    write_bond_port_setting(connection, ifcfg);
+
     if (!write_team_port_setting(connection, ifcfg, error))
         return FALSE;
 
@@ -3441,15 +3455,12 @@ do_write_construct(NMConnection *                  connection,
     } else
         route_ignore = FALSE;
 
-    if (!write_ip4_setting(connection,
-                           ifcfg,
-                           !route_ignore && route_path_is_svformat ? &route_content_svformat : NULL,
-                           !route_ignore && route_path_is_svformat ? NULL : &route_content,
-                           error))
-        return FALSE;
+    write_ip4_setting(connection,
+                      ifcfg,
+                      !route_ignore && route_path_is_svformat ? &route_content_svformat : NULL,
+                      !route_ignore && route_path_is_svformat ? NULL : &route_content);
 
-    if (!write_ip6_setting(connection, ifcfg, !route_ignore ? &route6_content : NULL, error))
-        return FALSE;
+    write_ip6_setting(connection, ifcfg, !route_ignore ? &route6_content : NULL);
 
     write_ip_routing_rules(connection, ifcfg, route_ignore);
 
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-System_test-wired-802-1X-subj-matches.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-System_test-wired-802-1X-subj-matches.cexpected
index 240cd5c1..d2f5c453 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-System_test-wired-802-1X-subj-matches.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-System_test-wired-802-1X-subj-matches.cexpected
@@ -16,6 +16,8 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="System test-wired-802-1X-subj-matches"
 UUID=${UUID}
 DEVICE=eth0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Bond_Main.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Bond_Main.cexpected
index b288c04a..ccc0f35a 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Bond_Main.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Bond_Main.cexpected
@@ -11,6 +11,9 @@ GATEWAY=1.1.1.1
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write Bond Main"
 UUID=${UUID}
 DEVICE=bond0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Permissions.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Permissions.cexpected
index 80e96921..d4a978b6 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Permissions.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Permissions.cexpected
@@ -5,6 +5,9 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write Permissions"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_LEAP.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_LEAP.cexpected
index d3db19b2..f1b01a21 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_LEAP.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_LEAP.cexpected
@@ -11,6 +11,9 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write Wifi LEAP"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_WEP_104_ASCII.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_WEP_104_ASCII.cexpected
index 32db7262..60540fbe 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_WEP_104_ASCII.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wifi_WEP_104_ASCII.cexpected
@@ -10,6 +10,9 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write Wifi WEP 104 ASCII"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_Static_Routes.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_Static_Routes.cexpected
index cc29a2cc..fe864c43 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_Static_Routes.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_Static_Routes.cexpected
@@ -17,6 +17,8 @@ IPV4_FAILURE_FATAL=no
 ACD_TIMEOUT=400
 ARPING_WAIT=1
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="Test Write Wired Static Routes"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_match.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_match.cexpected
index 9499278e..908cb917 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_match.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_Wired_match.cexpected
@@ -8,6 +8,8 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="Test Write Wired with Match setting"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected
index 44eb777c..6ad151aa 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Vlan_test-vlan-interface.cexpected
@@ -17,6 +17,8 @@ PREFIX=24
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="Vlan test-vlan-interface"
 UUID=${UUID}
 DEVICE=vlan43
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-dcb-test.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-dcb-test.cexpected
index 56e233cc..fef36f2f 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-dcb-test.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-dcb-test.cexpected
@@ -4,7 +4,6 @@ DCB_APP_FCOE_ENABLE=yes
 DCB_APP_FCOE_ADVERTISE=yes
 DCB_APP_FCOE_WILLING=yes
 DCB_APP_FCOE_PRIORITY=5
-DCB_APP_FCOE_MODE=fabric
 DCB_APP_ISCSI_ENABLE=yes
 DCB_APP_ISCSI_ADVERTISE=yes
 DCB_APP_ISCSI_WILLING=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection.cexpected
index ead3a047..1f5e04ff 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection.cexpected
@@ -8,6 +8,8 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="random wifi connection"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection_2.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection_2.cexpected
index 7bc1ae6c..3dcdbda0 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection_2.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection_2.cexpected
@@ -8,6 +8,8 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="random wifi connection 2"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port
new file mode 100644
index 00000000..111924c0
--- /dev/null
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port
@@ -0,0 +1,9 @@
+TYPE=Ethernet
+NAME=eth0
+UUID=43737e70-7c4f-4b67-9f4f-6d2d4747b1ff
+DEVICE=eth0
+ONBOOT=yes
+LLDP=no
+MASTER=bond99
+SLAVE=yes
+BOND_PORT_QUEUE_ID=1
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ip6-disabled.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ip6-disabled.cexpected
index cae51b89..b3199c01 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ip6-disabled.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-ip6-disabled.cexpected
@@ -6,6 +6,8 @@ DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6_DISABLED=yes
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="Test Write Wired Disabled IP6"
 UUID=${UUID}
 ONBOOT=yes
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-sriov-write.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-sriov-write.cexpected
index c882c479..a77c615d 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-sriov-write.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-sriov-write.cexpected
@@ -12,6 +12,9 @@ GATEWAY=1.1.1.1
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write SR-IOV config"
 UUID=${UUID}
 DEVICE=eth0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-static-routes-legacy.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-static-routes-legacy.cexpected
index 8197f320..41714df6 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-static-routes-legacy.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-static-routes-legacy.cexpected
@@ -6,6 +6,8 @@ BOOTPROTO=dhcp
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME=test-static-routes-legacy
 UUID=ba60d05a-7898-820d-c2db-427a88f8f2a5
 DEVICE=eth0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write-empty.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write-empty.cexpected
index 4df768b4..1125ef55 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write-empty.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write-empty.cexpected
@@ -9,6 +9,9 @@ GATEWAY=1.1.1.1
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write TC config"
 UUID=${UUID}
 DEVICE=eth0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write.cexpected
index a67ca598..d87efd72 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-tc-write.cexpected
@@ -10,6 +10,9 @@ GATEWAY=1.1.1.1
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
+IPV6_ADDR_GEN_MODE=stable-privacy
 NAME="Test Write TC config"
 UUID=${UUID}
 DEVICE=eth0
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-vlanid-use.cexpected b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-vlanid-use.cexpected
index a7be14ce..2eaec850 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-vlanid-use.cexpected
+++ b/src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-vlanid-use.cexpected
@@ -9,6 +9,8 @@ HWADDR=
 PROXY_METHOD=none
 BROWSER_ONLY=no
 IPV6INIT=no
+IPV6_DEFROUTE=yes
+IPV6_FAILURE_FATAL=no
 NAME="Vlan test-vlan-vlanid-use"
 UUID=${UUID}
 DEVICE=eth0.9
diff --git a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index d9829f84..b1cfdfec 100644
--- a/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/core/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -167,9 +167,8 @@ _assert_expected_content(NMConnection *connection, const char *filename, const c
                 g_string_erase(str, i, NM_STRLEN("${UUID}"));
                 g_string_insert_len(str, i, uuid, j);
 
-                g_free(content_expectd);
-                len_expectd     = str->len;
-                content_expectd = g_string_free(str, FALSE);
+                len_expectd = str->len;
+                nm_strdup_reset_take(&content_expectd, g_string_free(str, FALSE));
                 i += j;
                 continue;
             }
@@ -344,7 +343,7 @@ _writer_new_connection_reread(NMConnection * connection,
 {
     gboolean        success;
     GError *        error                      = NULL;
-    char *          filename                   = NULL;
+    gs_free char *  filename                   = NULL;
     gs_unref_object NMConnection *con_verified = NULL;
     gs_unref_object NMConnection *reread_copy  = NULL;
     NMConnection **reread = out_reread ?: ((nmtst_get_rand_uint32() % 2) ? &reread_copy : NULL);
@@ -372,11 +371,9 @@ _writer_new_connection_reread(NMConnection * connection,
     _assert_expected_content(con_verified, filename, expected);
 
     if (out_filename)
-        *out_filename = filename;
-    else {
+        *out_filename = g_steal_pointer(&filename);
+    else
         nmtst_file_unlink(filename);
-        g_free(filename);
-    }
 }
 
 static void
@@ -467,12 +464,10 @@ test_read_netmask_1(void)
 
     connection = _connection_from_file(FILENAME, NULL, TYPE_ETHERNET, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System netmask-1");
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpuint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 1);
     ip4_addr = nm_setting_ip_config_get_address(s_ip4, 0);
     g_assert(ip4_addr);
@@ -501,12 +496,12 @@ verify_cert_or_key(NMSetting8021x *s_compare,
                    const char *    privkey_password,
                    const char *    property)
 {
-    NMSetting8021x *       s_8021x;
-    GError *               error    = NULL;
-    gboolean               success  = FALSE;
-    const char *           expected = NULL, *setting = NULL;
-    gboolean               phase2 = FALSE;
-    NMSetting8021xCKScheme scheme = NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
+    gs_unref_object NMSetting8021x *s_8021x  = NULL;
+    GError *                        error    = NULL;
+    gboolean                        success  = FALSE;
+    const char *                    expected = NULL, *setting = NULL;
+    gboolean                        phase2 = FALSE;
+    NMSetting8021xCKScheme          scheme = NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
 
     if (strstr(property, "phase2"))
         phase2 = TRUE;
@@ -615,28 +610,24 @@ verify_cert_or_key(NMSetting8021x *s_compare,
             setting = nm_setting_802_1x_get_private_key_path(s_compare);
     }
     g_assert_cmpstr(setting, ==, expected);
-
-    g_object_unref(s_8021x);
     return TRUE;
 }
 
 static void
 test_read_basic(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    const char *         mac;
-    char                 expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    const char *                  mac;
+    char expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-minimal", NULL, TYPE_ETHERNET, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-minimal");
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
@@ -647,47 +638,38 @@ test_read_basic(void)
      * depending on where the tests are run.
      */
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_assert_cmpint(nm_setting_wired_get_mtu(s_wired), ==, 0);
 
-    /* MAC address */
     mac = nm_setting_wired_get_mac_address(s_wired);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, ETH_ALEN));
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4) == FALSE);
 
-    /* ===== IPv6 SETTING ===== */
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
                     ==,
                     NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
     g_assert(nm_setting_ip_config_get_never_default(s_ip6) == FALSE);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_miscellaneous_variables(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    char *               expected_mac_blacklist[3] = {"00:16:41:11:22:88",
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    char *                        expected_mac_blacklist[3] = {"00:16:41:11:22:88",
                                        "00:16:41:11:22:99",
                                        "6a:5d:5a:fa:dd:f0"};
-    int                  mac_blacklist_num, i;
-    guint64              expected_timestamp = 0;
+    int                           mac_blacklist_num, i;
+    guint64                       expected_timestamp = 0;
 
     NMTST_EXPECT_NM_WARN("*invalid MAC in HWADDR_BLACKLIST 'XX:aa:invalid'*");
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-misc-variables",
@@ -696,19 +678,14 @@ test_read_miscellaneous_variables(void)
                                        NULL);
     g_test_assert_expected_messages();
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, expected_timestamp);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
     g_assert_cmpint(nm_setting_connection_get_autoconnect_retries(s_con), ==, 100);
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_assert_cmpint(nm_setting_wired_get_mtu(s_wired), ==, 0);
 
-    /* MAC blacklist */
     mac_blacklist_num = nm_setting_wired_get_num_mac_blacklist_items(s_wired);
     g_assert_cmpint(mac_blacklist_num, ==, 3);
     for (i = 0; i < mac_blacklist_num; i++)
@@ -717,26 +694,22 @@ test_read_miscellaneous_variables(void)
                                          expected_mac_blacklist[i],
                                          -1));
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4) == FALSE);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_variables_corner_cases(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    const char *         mac;
-    char                 expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    const char *                  mac;
+    char expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
 
     NMTST_EXPECT_NM_WARN("*key NAME is badly quoted and is treated as \"\"*");
     NMTST_EXPECT_NM_WARN("*key ZONE is badly quoted and is treated as \"\"*");
@@ -746,9 +719,7 @@ test_read_variables_corner_cases(void)
                                        NULL);
     g_test_assert_expected_messages();
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System test-variables-corner-cases-1");
@@ -756,34 +727,27 @@ test_read_variables_corner_cases(void)
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_assert_cmpint(nm_setting_wired_get_mtu(s_wired), ==, 0);
 
-    /* MAC address */
     mac = nm_setting_wired_get_mac_address(s_wired);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, ETH_ALEN));
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4) == FALSE);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_unmanaged(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    char *               unhandled_spec     = NULL;
-    guint64              expected_timestamp = 0;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    gs_free char *                unhandled_spec     = NULL;
+    guint64                       expected_timestamp = 0;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-nm-controlled",
                                        NULL,
@@ -791,24 +755,19 @@ test_read_unmanaged(void)
                                        &unhandled_spec);
     g_assert_cmpstr(unhandled_spec, ==, "unmanaged:mac:00:11:22:33:f8:9f");
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-nm-controlled");
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, expected_timestamp);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
-
-    g_free(unhandled_spec);
-    g_object_unref(connection);
 }
 
 static void
 test_read_unmanaged_unrecognized(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    gs_free char *       unhandled_spec     = NULL;
-    guint64              expected_timestamp = 0;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    gs_free char *                unhandled_spec     = NULL;
+    guint64                       expected_timestamp = 0;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-nm-controlled-unrecognized",
                                        NULL,
@@ -816,22 +775,18 @@ test_read_unmanaged_unrecognized(void)
                                        &unhandled_spec);
     g_assert_cmpstr(unhandled_spec, ==, "unmanaged:interface-name:=ipoac0");
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "PigeonNet");
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, expected_timestamp);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_unrecognized(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    gs_free char *       unhandled_spec     = NULL;
-    guint64              expected_timestamp = 0;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    gs_free char *                unhandled_spec     = NULL;
+    guint64                       expected_timestamp = 0;
 
     NMTST_EXPECT_NM_WARN("*key NAME is badly quoted and is treated as \"\"*");
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-unrecognized",
@@ -841,30 +796,26 @@ test_read_unrecognized(void)
     g_test_assert_expected_messages();
     g_assert_cmpstr(unhandled_spec, ==, "unrecognized:mac:00:11:22:33");
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-unrecognized");
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, expected_timestamp);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_static(gconstpointer test_data)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged = NULL;
-    const char *         mac;
-    char                 expected_mac_address[ETH_ALEN] = {0x00, 0x11, 0x22, 0x33, 0x44, 0xee};
-    NMIPAddress *        ip4_addr;
-    NMIPAddress *        ip6_addr;
-    const char *         file, *expected_id;
-    gpointer             expect_ip6_p;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
+    const char *                  mac;
+    char         expected_mac_address[ETH_ALEN] = {0x00, 0x11, 0x22, 0x33, 0x44, 0xee};
+    NMIPAddress *ip4_addr;
+    NMIPAddress *ip6_addr;
+    const char * file, *expected_id;
+    gpointer     expect_ip6_p;
 
     nmtst_test_data_unpack(test_data, &file, &expected_id, &expect_ip6_p);
 
@@ -873,26 +824,19 @@ test_read_wired_static(gconstpointer test_data)
     connection = _connection_from_file(file, NULL, TYPE_ETHERNET, &unmanaged);
     g_assert_cmpstr(unmanaged, ==, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_assert_cmpint(nm_setting_wired_get_mtu(s_wired), ==, 1492);
 
-    /* MAC address */
     mac = nm_setting_wired_get_mac_address(s_wired);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, ETH_ALEN));
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -901,24 +845,19 @@ test_read_wired_static(gconstpointer test_data)
     g_assert(nm_setting_ip_config_has_dns_options(s_ip4));
     g_assert_cmpint(nm_setting_ip_config_get_num_dns_options(s_ip4), ==, 0);
 
-    /* DNS Addresses */
     g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 2);
     g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 0), ==, "4.2.2.1");
     g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 1), ==, "4.2.2.2");
 
-    /* IP addresses */
     g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1);
     ip4_addr = nm_setting_ip_config_get_address(s_ip4, 0);
     g_assert(ip4_addr);
     g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, 24);
     g_assert_cmpstr(nm_ip_address_get_address(ip4_addr), ==, "192.168.1.5");
 
-    /* Gateway */
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.168.1.1");
 
-    /* ===== IPv6 SETTING ===== */
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     if (GPOINTER_TO_INT(expect_ip6_p)) {
         g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
                         ==,
@@ -951,19 +890,18 @@ test_read_wired_static(gconstpointer test_data)
                         NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
         g_assert(!nm_setting_ip_config_has_dns_options(s_ip6));
     }
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_static_no_prefix(gconstpointer user_data)
 {
-    guint32              expected_prefix = GPOINTER_TO_UINT(user_data);
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    NMIPAddress *        ip4_addr;
-    char *               file, *expected_id;
+    guint32         expected_prefix          = GPOINTER_TO_UINT(user_data);
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMIPAddress *                 ip4_addr;
+    gs_free char *                file        = NULL;
+    gs_free char *                expected_id = NULL;
 
     file = g_strdup_printf(TEST_IFCFG_DIR "/ifcfg-test-wired-static-no-prefix-%u", expected_prefix);
     expected_id = g_strdup_printf("System test-wired-static-no-prefix-%u", expected_prefix);
@@ -972,14 +910,10 @@ test_read_wired_static_no_prefix(gconstpointer user_data)
     connection = _connection_from_file(file, NULL, TYPE_ETHERNET, NULL);
     g_test_assert_expected_messages();
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -991,23 +925,19 @@ test_read_wired_static_no_prefix(gconstpointer user_data)
     ip4_addr = nm_setting_ip_config_get_address(s_ip4, 0);
     g_assert(ip4_addr);
     g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, expected_prefix);
-
-    g_free(file);
-    g_free(expected_id);
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_dhcp(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged                      = NULL;
-    char                 expected_mac_address[ETH_ALEN] = {0x00, 0x11, 0x22, 0x33, 0x44, 0xee};
-    const char *         mac;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged    = NULL;
+    char        expected_mac_address[ETH_ALEN] = {0x00, 0x11, 0x22, 0x33, 0x44, 0xee};
+    const char *mac;
 
     NMTST_EXPECT_NM_WARN("*key IPV6INIT is duplicated and the early occurrence ignored*");
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-dhcp",
@@ -1017,25 +947,18 @@ test_read_wired_dhcp(void)
     g_test_assert_expected_messages();
     g_assert(unmanaged == NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-dhcp");
     g_assert_cmpuint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* MAC address */
     mac = nm_setting_wired_get_mac_address(s_wired);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, sizeof(expected_mac_address)));
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
     g_assert_cmpstr(nm_setting_ip4_config_get_dhcp_fqdn(NM_SETTING_IP4_CONFIG(s_ip4)),
                     ==,
@@ -1048,35 +971,29 @@ test_read_wired_dhcp(void)
                      ==,
                      NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED | NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE);
 
-    /* ===== IPv6 SETTING ===== */
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DHCP);
     g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "foo.bar");
     g_assert_cmpuint(nm_setting_ip_config_get_dhcp_hostname_flags(s_ip6),
                      ==,
                      NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_dhcp_plus_ip(void)
 {
-    NMConnection *     connection;
-    NMSettingIPConfig *s_ip4;
-    NMSettingIPConfig *s_ip6;
-    NMIPAddress *      ip4_addr;
-    NMIPAddress *      ip6_addr;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    NMIPAddress *                 ip4_addr;
+    NMIPAddress *                 ip6_addr;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-dhcp-plus-ip",
                                        NULL,
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_may_fail(s_ip4));
 
@@ -1100,9 +1017,7 @@ test_read_wired_dhcp_plus_ip(void)
     g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, 16);
     g_assert_cmpstr(nm_ip_address_get_address(ip4_addr), ==, "9.8.7.6");
 
-    /* ===== IPv6 SETTING ===== */
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_may_fail(s_ip6));
 
@@ -1127,25 +1042,21 @@ test_read_wired_dhcp_plus_ip(void)
     g_assert(ip6_addr);
     g_assert_cmpint(nm_ip_address_get_prefix(ip6_addr), ==, 96);
     g_assert_cmpstr(nm_ip_address_get_address(ip6_addr), ==, "3001:abba::3234");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_shared_plus_ip(void)
 {
-    NMConnection *     connection;
-    NMSettingIPConfig *s_ip4;
-    NMIPAddress *      ip4_addr;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMIPAddress *                 ip4_addr;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-shared-plus-ip",
                                        NULL,
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_SHARED);
@@ -1160,19 +1071,16 @@ test_read_wired_shared_plus_ip(void)
 
     /* Gateway */
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "1.1.1.1");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_global_gateway(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMIPAddress *        ip4_addr;
-    char *               unmanaged = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMIPAddress *                 ip4_addr;
+    char *                        unmanaged = NULL;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-global-gateway",
                                        TEST_IFCFG_DIR "/network-test-wired-global-gateway",
@@ -1180,18 +1088,12 @@ test_read_wired_global_gateway(void)
                                        &unmanaged);
     g_assert(unmanaged == NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-global-gateway");
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -1204,19 +1106,16 @@ test_read_wired_global_gateway(void)
 
     /* Gateway */
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.168.1.2");
-
-    g_object_unref(connection);
 }
 
 /* Ignore GATEWAY from /etc/sysconfig/network for automatic connections */
 static void
 test_read_wired_global_gateway_ignore(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    char *               unmanaged = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    char *                        unmanaged = NULL;
 
     NMTST_EXPECT_NM_WARN("*ignoring GATEWAY (/etc/sysconfig/network) for * because the connection "
                          "has no static addresses");
@@ -1227,20 +1126,14 @@ test_read_wired_global_gateway_ignore(void)
     g_test_assert_expected_messages();
     g_assert(unmanaged == NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System test-wired-global-gateway-ignore");
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
     /* Addresses */
@@ -1248,25 +1141,21 @@ test_read_wired_global_gateway_ignore(void)
 
     /* Gateway */
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, NULL);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_obsolete_gateway_n(void)
 {
-    NMConnection *     connection;
-    NMSettingIPConfig *s_ip4;
-    NMIPAddress *      ip4_addr;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMIPAddress *                 ip4_addr;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-obsolete-gateway-n",
                                        NULL,
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -1280,8 +1169,6 @@ test_read_wired_obsolete_gateway_n(void)
 
     /* Gateway */
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "1.1.1.1");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -1294,7 +1181,8 @@ test_user_1(void)
 
     connection =
         nmtst_create_minimal_connection("Test User 1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
-    s_user = NM_SETTING_USER(nm_setting_user_new());
+
+    s_user = _nm_connection_new_setting(connection, NM_TYPE_SETTING_USER);
 
 #define _USER_SET_DATA(s_user, key, val)                                      \
     G_STMT_START                                                              \
@@ -1330,8 +1218,6 @@ test_user_1(void)
     _USER_SET_DATA_X(s_user, "my.keys.1");
     _USER_SET_DATA_X(s_user, "my.other.KEY.42");
 
-    nm_connection_add_setting(connection, NM_SETTING(s_user));
-
     _writer_new_connec_exp(connection,
                            TEST_SCRATCH_DIR,
                            TEST_IFCFG_DIR "/ifcfg-Test_User_1.cexpected",
@@ -1345,42 +1231,35 @@ test_user_1(void)
 static void
 test_read_wired_never_default(void)
 {
-    NMConnection *     connection;
-    NMSettingIPConfig *s_ip4;
-    NMSettingIPConfig *s_ip6;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-never-default",
                                        TEST_IFCFG_DIR "/network-test-wired-never-default",
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== WIRED SETTING ===== */
-    g_assert(nm_connection_get_setting_wired(connection));
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4));
     g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 0);
 
-    /* ===== IPv6 SETTING ===== */
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_never_default(s_ip6));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_defroute_no(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-defroute-no",
                                        NULL,
@@ -1388,33 +1267,28 @@ test_read_wired_defroute_no(void)
                                        &unmanaged);
     g_assert(unmanaged == NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-defroute-no");
 
-    g_assert(nm_connection_get_setting_wired(connection));
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4));
 
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_never_default(s_ip6));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_defroute_no_gatewaydev_yes(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-defroute-no-gatewaydev-yes",
@@ -1422,58 +1296,45 @@ test_read_wired_defroute_no_gatewaydev_yes(void)
                               TYPE_ETHERNET,
                               &unmanaged);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System test-wired-defroute-no-gatewaydev-yes");
 
-    g_assert(nm_connection_get_setting_wired(connection));
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4) == FALSE);
 
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
     g_assert(nm_setting_ip_config_get_never_default(s_ip6) == FALSE);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_static_routes(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMIPRoute *          ip4_route;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMIPRoute *                   ip4_route;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-static-routes",
                                        NULL,
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-static-routes");
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== IPv4 SETTING ===== */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
 
-    /* Routes */
     g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip4), ==, 4);
 
     ip4_route = nm_setting_ip_config_get_route(s_ip4, 0);
@@ -1524,19 +1385,16 @@ test_read_wired_static_routes(void)
     g_assert_cmpint(nm_ip_route_get_prefix(ip4_route), ==, 32);
     nmtst_assert_route_attribute_string(ip4_route, NM_IP_ROUTE_ATTRIBUTE_TYPE, "local");
     nmtst_assert_route_attribute_byte(ip4_route, NM_IP_ROUTE_ATTRIBUTE_SCOPE, 254);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_static_routes_legacy(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    char *               unmanaged = NULL;
-    NMIPRoute *          ip4_route;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    char *                        unmanaged = NULL;
+    NMIPRoute *                   ip4_route;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-static-routes-legacy",
                                        NULL,
@@ -1544,28 +1402,18 @@ test_read_wired_static_routes_legacy(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System test-wired-static-routes-legacy");
 
-    /* ===== WIRED SETTING ===== */
-
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
 
-    /* Routes */
     g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip4), ==, 5);
 
     /* Route #1 */
@@ -1612,20 +1460,17 @@ test_read_wired_static_routes_legacy(void)
     g_assert(ip4_route != NULL);
     g_assert_cmpstr(nm_ip_route_get_dest(ip4_route), ==, "1.2.3.4");
     nmtst_assert_route_attribute_string(ip4_route, NM_IP_ROUTE_ATTRIBUTE_TYPE, "local");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_ipv4_manual(gconstpointer data)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    char *               unmanaged = NULL;
-    NMIPAddress *        ip4_addr;
-    const char *         file, *expected_id;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    char *                        unmanaged = NULL;
+    NMIPAddress *                 ip4_addr;
+    const char *                  file, *expected_id;
 
     nmtst_test_data_unpack(data, &file, &expected_id);
 
@@ -1634,21 +1479,12 @@ test_read_wired_ipv4_manual(gconstpointer data)
     connection = _connection_from_file(file, NULL, TYPE_ETHERNET, &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
 
-    /* ===== WIRED SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
-
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -1674,21 +1510,18 @@ test_read_wired_ipv4_manual(gconstpointer data)
     g_assert(ip4_addr != NULL);
     g_assert_cmpstr(nm_ip_address_get_address(ip4_addr), ==, "3.3.3.3");
     g_assert_cmpint(nm_ip_address_get_prefix(ip4_addr), ==, 8);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_ipv6_manual(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged = NULL;
-    NMIPAddress *        ip6_addr;
-    NMIPRoute *          ip6_route;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
+    NMIPAddress *                 ip6_addr;
+    NMIPRoute *                   ip6_route;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-ipv6-manual",
                                        NULL,
@@ -1696,21 +1529,12 @@ test_read_wired_ipv6_manual(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-ipv6-manual");
 
-    /* ===== WIRED SETTING ===== */
-
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
-
-    /* ===== IPv4 SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
 
     /* DNS Addresses */
     g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 2);
@@ -1721,10 +1545,7 @@ test_read_wired_ipv6_manual(void)
     g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip4, 1), ==, "ipsum.org");
     g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip4, 2), ==, "dolor.edu");
 
-    /* ===== IPv6 SETTING ===== */
-
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
                     ==,
                     NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
@@ -1794,22 +1615,19 @@ test_read_wired_ipv6_manual(void)
 
     /* DNS domains - none as domains are stuffed to 'ipv4' setting */
     g_assert_cmpint(nm_setting_ip_config_get_num_dns_searches(s_ip6), ==, 0);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_ipv6_only(gconstpointer test_data)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged = NULL;
-    NMIPAddress *        ip6_addr;
-    const char *         method;
-    const char *         file, *expected_id;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
+    NMIPAddress *                 ip6_addr;
+    const char *                  method;
+    const char *                  file, *expected_id;
 
     nmtst_test_data_unpack(test_data, &file, &expected_id);
 
@@ -1818,29 +1636,17 @@ test_read_wired_ipv6_only(gconstpointer test_data)
     connection = _connection_from_file(file, NULL, TYPE_ETHERNET, &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
 
-    /* ===== WIRED SETTING ===== */
-
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
 
     method = nm_setting_ip_config_get_method(s_ip4);
     g_assert_cmpstr(method, ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
 
-    /* ===== IPv6 SETTING ===== */
-
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
                     ==,
                     NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
@@ -1863,20 +1669,17 @@ test_read_wired_ipv6_only(gconstpointer test_data)
     g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 0), ==, "lorem.com");
     g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 1), ==, "ipsum.org");
     g_assert_cmpstr(nm_setting_ip_config_get_dns_search(s_ip6, 2), ==, "dolor.edu");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_dhcp6_only(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingIPConfig *  s_ip6;
-    char *               unmanaged = NULL;
-    const char *         method;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
+    const char *                  method;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-dhcp6-only",
                                        NULL,
@@ -1884,32 +1687,18 @@ test_read_wired_dhcp6_only(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-dhcp6-only");
 
-    /* ===== WIRED SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
-
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
 
     method = nm_setting_ip_config_get_method(s_ip4);
     g_assert_cmpstr(method, ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
 
-    /* ===== IPv6 SETTING ===== */
-
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DHCP);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -1926,24 +1715,23 @@ test_read_wired_autoip(void)
                                        &unmanaged);
     g_assert(unmanaged == NULL);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL);
     g_assert(!nm_setting_ip_config_get_may_fail(s_ip4));
     g_assert(nm_setting_ip_config_get_ignore_auto_dns(s_ip4));
 
-    s_con = nm_connection_get_setting_connection(connection);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), ==, 2600);
 }
 
 static void
 test_read_onboot_no(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    char *               unmanaged = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    char *                        unmanaged = NULL;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-onboot-no",
                                        NULL,
@@ -1951,39 +1739,32 @@ test_read_onboot_no(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     g_assert(!nm_setting_connection_get_autoconnect(s_con));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_noip(void)
 {
-    NMConnection *     connection;
-    NMSettingIPConfig *s_ip4;
-    NMSettingIPConfig *s_ip6;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-noip", NULL, TYPE_ETHERNET, NULL);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
     g_assert(nm_setting_ip_config_get_never_default(s_ip4) == FALSE);
 
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6),
                     ==,
                     NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
     g_assert(nm_setting_ip_config_get_never_default(s_ip6) == FALSE);
-
-    g_object_unref(connection);
 }
 
 #define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT TEST_IFCFG_DIR "/test_ca_cert.pem"
@@ -1991,16 +1772,15 @@ test_read_noip(void)
 static void
 test_read_wired_8021x_peap_mschapv2(void)
 {
-    NMConnection *     connection;
-    NMSettingWired *   s_wired;
-    NMSettingIPConfig *s_ip4;
-    NMSetting8021x *   s_8021x;
-    NMSetting8021x *   tmp_8021x;
-    char *             unmanaged = NULL;
-    GError *           error     = NULL;
-    gboolean           success   = FALSE;
-    const char *       expected_ca_cert_path;
-    const char *       read_ca_cert_path;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSetting8021x *              s_8021x;
+    gs_unref_object NMSetting8021x *tmp_8021x = NULL;
+    char *                          unmanaged = NULL;
+    GError *                        error     = NULL;
+    gboolean                        success   = FALSE;
+    const char *                    expected_ca_cert_path;
+    const char *                    read_ca_cert_path;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-8021x-peap-mschapv2",
                                        NULL,
@@ -2008,20 +1788,12 @@ test_read_wired_8021x_peap_mschapv2(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== WIRED SETTING ===== */
-
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
-
-    /* ===== IPv4 SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
 
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
     g_assert_cmpstr(nm_setting_802_1x_get_eap_method(s_8021x, 0), ==, "peap");
@@ -2049,33 +1821,26 @@ test_read_wired_8021x_peap_mschapv2(void)
     g_assert(read_ca_cert_path);
 
     g_assert_cmpstr(read_ca_cert_path, ==, expected_ca_cert_path);
-
-    g_object_unref(tmp_8021x);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_8021x_tls_secret_flags(gconstpointer test_data)
 {
-    NMConnection *  connection;
-    NMSettingWired *s_wired;
-    NMSetting8021x *s_8021x;
-    char *          dirname, *tmp;
-    const char *    ifcfg;
-    gpointer        expected_flags_p;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSetting8021x *              s_8021x;
+    gs_free char *                dirname = NULL;
+    gs_free char *                tmp1    = NULL;
+    gs_free char *                tmp2    = NULL;
+    const char *                  ifcfg;
+    gpointer                      expected_flags_p;
 
     nmtst_test_data_unpack(test_data, &ifcfg, &expected_flags_p);
 
     connection = _connection_from_file(ifcfg, NULL, TYPE_ETHERNET, NULL);
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
     g_assert_cmpstr(nm_setting_802_1x_get_eap_method(s_8021x, 0), ==, "tls");
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "David Smith");
@@ -2084,18 +1849,13 @@ test_read_wired_8021x_tls_secret_flags(gconstpointer test_data)
                     GPOINTER_TO_INT(expected_flags_p));
 
     dirname = g_path_get_dirname(ifcfg);
-    tmp     = g_build_path("/", dirname, "test_ca_cert.pem", NULL);
-    g_assert_cmpstr(nm_setting_802_1x_get_ca_cert_path(s_8021x), ==, tmp);
-    g_free(tmp);
 
-    tmp = g_build_path("/", dirname, "test1_key_and_cert.pem", NULL);
-    g_assert_cmpstr(nm_setting_802_1x_get_client_cert_path(s_8021x), ==, tmp);
-    g_assert_cmpstr(nm_setting_802_1x_get_private_key_path(s_8021x), ==, tmp);
-    g_free(tmp);
+    tmp1 = g_build_path("/", dirname, "test_ca_cert.pem", NULL);
+    g_assert_cmpstr(nm_setting_802_1x_get_ca_cert_path(s_8021x), ==, tmp1);
 
-    g_free(dirname);
-
-    g_object_unref(connection);
+    tmp2 = g_build_path("/", dirname, "test1_key_and_cert.pem", NULL);
+    g_assert_cmpstr(nm_setting_802_1x_get_client_cert_path(s_8021x), ==, tmp2);
+    g_assert_cmpstr(nm_setting_802_1x_get_private_key_path(s_8021x), ==, tmp2);
 }
 
 static void
@@ -2111,9 +1871,7 @@ test_read_write_802_1X_subj_matches(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
     g_assert_cmpstr(nm_setting_802_1x_get_eap_method(s_8021x, 0), ==, "peap");
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "Jara Cimrman");
@@ -2143,8 +1901,7 @@ test_read_write_802_1X_subj_matches(void)
     nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
 
     /* Check 802.1X stuff of the re-read connection. */
-    s_8021x = nm_connection_get_setting_802_1x(reread);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_802_1X);
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
     g_assert_cmpstr(nm_setting_802_1x_get_eap_method(s_8021x, 0), ==, "peap");
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "Jara Cimrman");
@@ -2168,8 +1925,8 @@ test_read_write_802_1X_subj_matches(void)
 static void
 test_read_802_1x_ttls_eapgtc(void)
 {
-    NMConnection *  connection;
-    NMSetting8021x *s_8021x;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSetting8021x *              s_8021x;
 
     /* Test that EAP-* inner methods are correctly read into the
      * NMSetting8021x::autheap property.
@@ -2180,9 +1937,7 @@ test_read_802_1x_ttls_eapgtc(void)
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
 
     /* EAP methods */
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
@@ -2191,8 +1946,6 @@ test_read_802_1x_ttls_eapgtc(void)
     /* Auth methods */
     g_assert_cmpstr(nm_setting_802_1x_get_phase2_auth(s_8021x), ==, NULL);
     g_assert_cmpstr(nm_setting_802_1x_get_phase2_autheap(s_8021x), ==, "gtc");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -2208,8 +1961,7 @@ test_read_802_1x_tls_p12_no_client_cert(void)
                               TYPE_ETHERNET,
                               NULL);
 
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
 
     g_assert_cmpint(nm_setting_802_1x_get_private_key_scheme(s_8021x),
                     ==,
@@ -2242,9 +1994,7 @@ test_read_write_802_1x_password_raw(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
 
     bytes = nm_setting_802_1x_get_password_raw(s_8021x);
     g_assert(bytes);
@@ -2269,18 +2019,18 @@ test_read_write_802_1x_password_raw(void)
 static void
 test_read_wired_aliases_good(gconstpointer test_data)
 {
-    const int            N = GPOINTER_TO_INT(test_data);
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    int                  expected_num_addresses;
-    const char *         expected_address_0[] = {"192.168.1.5",
+    const int       N                        = GPOINTER_TO_INT(test_data);
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    int                           expected_num_addresses;
+    const char *                  expected_address_0[] = {"192.168.1.5",
                                         "192.168.1.6",
                                         "192.168.1.9",
                                         "192.168.1.99",
                                         NULL};
-    const char *         expected_address_3[] = {"192.168.1.5", "192.168.1.6", NULL};
-    const char *         expected_label_0[]   = {
+    const char *                  expected_address_3[] = {"192.168.1.5", "192.168.1.6", NULL};
+    const char *                  expected_label_0[]   = {
         NULL,
         "aliasem0:1",
         "aliasem0:2",
@@ -2305,19 +2055,13 @@ test_read_wired_aliases_good(gconstpointer test_data)
 
     connection = _connection_from_file(path, NULL, TYPE_ETHERNET, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     if (N == 0)
         g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System aliasem0");
     else
         g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System aliasem3");
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -2358,33 +2102,25 @@ test_read_wired_aliases_good(gconstpointer test_data)
 
     for (i = 0; i < expected_num_addresses; i++)
         g_assert(!expected_address[i]);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_aliases_bad(const char *base, const char *expected_id)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    NMIPAddress *        ip4_addr;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMIPAddress *                 ip4_addr;
 
     g_assert(expected_id);
 
     connection = _connection_from_file(base, NULL, TYPE_ETHERNET, NULL);
     g_test_assert_expected_messages();
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, expected_id);
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
@@ -2400,8 +2136,6 @@ test_read_wired_aliases_bad(const char *base, const char *expected_id)
 
     /* Gateway */
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.168.1.1");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -2421,13 +2155,15 @@ test_read_wired_aliases_bad_2(void)
 static void
 test_read_dns_options(void)
 {
-    NMConnection *     connection;
-    NMSettingIPConfig *s_ip4, *s_ip6;
-    char *             unmanaged = NULL;
-    const char *       option;
-    const char *       options4[] = {"ndots:3", "single-request-reopen"};
-    const char *       options6[] = {"inet6"};
-    guint32            i, num;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    char *                        unmanaged = NULL;
+    const char *                  option;
+    const char *                  options4[] = {"ndots:3", "single-request-reopen"};
+    const char *                  options6[] = {"inet6"};
+    guint32                       num;
+    guint32                       i;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-dns-options",
                                        NULL,
@@ -2435,11 +2171,9 @@ test_read_dns_options(void)
                                        &unmanaged);
     g_assert_cmpstr(unmanaged, ==, NULL);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
 
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
 
     num = nm_setting_ip_config_get_num_dns_options(s_ip4);
     g_assert_cmpint(num, ==, G_N_ELEMENTS(options4));
@@ -2456,8 +2190,6 @@ test_read_dns_options(void)
         option = nm_setting_ip_config_get_dns_option(s_ip6, i);
         g_assert_cmpstr(options6[i], ==, option);
     }
-
-    g_object_unref(connection);
 }
 
 static void
@@ -2477,8 +2209,7 @@ test_clear_master(void)
                                        &unmanaged);
     g_assert_cmpstr(unmanaged, ==, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "br0");
     g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, "bridge");
@@ -2534,10 +2265,7 @@ test_write_dns_options(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test DNS options",
@@ -2549,16 +2277,10 @@ test_write_dns_options(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -2576,10 +2298,7 @@ test_write_dns_options(void)
 
     nm_setting_ip_config_add_dns_option(s_ip4, "debug");
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
@@ -2608,23 +2327,20 @@ test_write_dns_options(void)
 static void
 test_read_wifi_open(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4, *s_ip6;
-    GBytes *                   ssid;
-    const char *               mac;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
+    GBytes *                      ssid;
+    const char *                  mac;
     char        expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
     const char *expected_ssid                  = "blahblah";
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-open", NULL, TYPE_WIRELESS, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System blahblah (test-wifi-open)");
 
     /* UUID can't be tested if the ifcfg does not contain the UUID key, because
@@ -2636,109 +2352,83 @@ test_read_wifi_open(void)
     g_assert(nm_setting_connection_get_autoconnect(s_con));
     g_assert_cmpint(nm_setting_connection_get_autoconnect_priority(s_con), ==, -1);
 
-    /* ===== WIRELESS SETTING ===== */
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* MAC address */
-    mac = nm_setting_wireless_get_mac_address(s_wireless);
+    mac = nm_setting_wireless_get_mac_address(s_wifi);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, sizeof(expected_mac_address)));
 
-    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wireless), ==, 0);
+    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wifi), ==, 0);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
 
-    g_assert(!nm_setting_wireless_get_bssid(s_wireless));
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "infrastructure");
-    g_assert_cmpint(nm_setting_wireless_get_channel(s_wireless), ==, 1);
-
-    /* ===== Wi-Fi SECURITY SETTING ===== */
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec == NULL);
+    g_assert(!nm_setting_wireless_get_bssid(s_wifi));
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "infrastructure");
+    g_assert_cmpint(nm_setting_wireless_get_channel(s_wifi), ==, 1);
 
-    /* ===== IPv4 SETTING ===== */
+    nmtst_connection_assert_no_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpint(nm_setting_ip_config_get_route_metric(s_ip4), ==, 104);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert_cmpint(nm_setting_ip_config_get_route_metric(s_ip6), ==, 106);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_open_auto(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWireless *  s_wireless;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-open-auto",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System blahblah (test-wifi-open-auto)");
 
-    /* ===== WIRELESS SETTING ===== */
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "infrastructure");
-
-    g_object_unref(connection);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "infrastructure");
 }
 
 static void
 test_read_wifi_open_ssid_hex(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWireless *  s_wireless;
-    GBytes *             ssid;
-    const char *         expected_ssid = "blahblah";
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    GBytes *                      ssid;
+    const char *                  expected_ssid = "blahblah";
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-open-ssid-hex",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System blahblah (test-wifi-open-ssid-hex)");
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
-
-    g_object_unref(connection);
 }
 
 static void
@@ -2746,7 +2436,7 @@ test_read_wifi_open_ssid_hex_bad(void)
 {
     gs_unref_object NMConnection *connection = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWireless *           s_wireless;
+    NMSettingWireless *           s_wifi;
     GBytes *                      ssid;
     const char *                  expected_ssid = "0x626cxx";
 
@@ -2755,16 +2445,14 @@ test_read_wifi_open_ssid_hex_bad(void)
                                        TYPE_WIRELESS,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System 0x626cxx (test-wifi-open-ssid-bad-hex)");
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
@@ -2781,50 +2469,42 @@ test_read_wifi_open_ssid_bad(gconstpointer data)
 static void
 test_read_wifi_open_ssid_quoted(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWireless *  s_wireless;
-    GBytes *             ssid;
-    const char *         expected_ssid = "foo\"bar\\";
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    GBytes *                      ssid;
+    const char *                  expected_ssid = "foo\"bar\\";
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-open-ssid-quoted",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System foo\"bar\\ (test-wifi-open-ssid-quoted)");
 
-    /* ===== WIRELESS SETTING ===== */
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4;
-    GBytes *                   ssid;
-    const char *               mac;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSettingIPConfig *           s_ip4;
+    GBytes *                      ssid;
+    const char *                  mac;
     char         expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
     const char * expected_ssid                  = "blahblah";
     NMWepKeyType key_type;
@@ -2832,10 +2512,7 @@ test_read_wifi_wep(void)
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep", NULL, TYPE_WIRELESS, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System blahblah (test-wifi-wep)");
 
     /* UUID can't be tested if the ifcfg does not contain the UUID key, because
@@ -2846,34 +2523,27 @@ test_read_wifi_wep(void)
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRELESS SETTING ===== */
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* MAC address */
-    mac = nm_setting_wireless_get_mac_address(s_wireless);
+    mac = nm_setting_wireless_get_mac_address(s_wifi);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, sizeof(expected_mac_address)));
 
     /* MTU */
-    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wireless), ==, 0);
+    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wifi), ==, 0);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
 
-    g_assert(!nm_setting_wireless_get_bssid(s_wireless));
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "infrastructure");
-    g_assert_cmpint(nm_setting_wireless_get_channel(s_wireless), ==, 1);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
+    g_assert(!nm_setting_wireless_get_bssid(s_wifi));
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "infrastructure");
+    g_assert_cmpint(nm_setting_wireless_get_channel(s_wifi), ==, 1);
 
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "none");
     g_assert_cmpstr(nm_setting_wireless_security_get_auth_alg(s_wsec), ==, "shared");
     g_assert_cmpint(nm_setting_wireless_security_get_wep_tx_keyidx(s_wsec), ==, 0);
@@ -2888,35 +2558,27 @@ test_read_wifi_wep(void)
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 2));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 3));
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_adhoc(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4;
-    GBytes *                   ssid;
-    const char *               expected_ssid = "blahblah";
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSettingIPConfig *           s_ip4;
+    GBytes *                      ssid;
+    const char *                  expected_ssid = "blahblah";
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-adhoc",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System blahblah (test-wifi-wep-adhoc)");
@@ -2928,26 +2590,20 @@ test_read_wifi_wep_adhoc(void)
 
     g_assert(!nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
 
-    g_assert(!nm_setting_wireless_get_bssid(s_wireless));
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "adhoc");
-    g_assert_cmpint(nm_setting_wireless_get_channel(s_wireless), ==, 11);
+    g_assert(!nm_setting_wireless_get_bssid(s_wifi));
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "adhoc");
+    g_assert_cmpint(nm_setting_wireless_get_channel(s_wifi), ==, 11);
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "none");
     g_assert(!nm_setting_wireless_security_get_auth_alg(s_wsec));
     g_assert_cmpint(nm_setting_wireless_security_get_wep_tx_keyidx(s_wsec), ==, 0);
@@ -2959,10 +2615,7 @@ test_read_wifi_wep_adhoc(void)
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 2));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 3));
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
     /* Ignore auto DNS */
@@ -2972,37 +2625,24 @@ test_read_wifi_wep_adhoc(void)
     g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 2);
     g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 0), ==, "4.2.2.1");
     g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip4, 1), ==, "4.2.2.2");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_passphrase(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-passphrase",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "none");
     g_assert_cmpint(nm_setting_wireless_security_get_wep_tx_keyidx(s_wsec), ==, 0);
     g_assert_cmpint(nm_setting_wireless_security_get_wep_key_type(s_wsec),
@@ -3012,38 +2652,25 @@ test_read_wifi_wep_passphrase(void)
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 1));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 2));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 3));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_40_ascii(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMWepKeyType               key_type;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMWepKeyType                  key_type;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-40-ascii",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
-    /* ===== WIRELESS SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "none");
     g_assert_cmpint(nm_setting_wireless_security_get_wep_tx_keyidx(s_wsec), ==, 0);
 
@@ -3054,38 +2681,25 @@ test_read_wifi_wep_40_ascii(void)
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 1));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 2));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 3));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_104_ascii(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMWepKeyType               key_type;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMWepKeyType                  key_type;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-104-ascii",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
-
-    /* ===== WIRELESS SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "none");
     g_assert_cmpint(nm_setting_wireless_security_get_wep_tx_keyidx(s_wsec), ==, 0);
 
@@ -3096,64 +2710,45 @@ test_read_wifi_wep_104_ascii(void)
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 1));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 2));
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 3));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_leap(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWirelessSecurity *   s_wsec;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-leap", NULL, TYPE_WIRELESS, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System blahblah (test-wifi-leap)");
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "ieee8021x");
     g_assert_cmpstr(nm_setting_wireless_security_get_auth_alg(s_wsec), ==, "leap");
     g_assert_cmpstr(nm_setting_wireless_security_get_leap_username(s_wsec), ==, "Bill Smith");
     g_assert_cmpstr(nm_setting_wireless_security_get_leap_password(s_wsec), ==, "foobarblah");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_leap_secret_flags(gconstpointer test_data)
 {
-    NMConnection *             connection;
-    NMSettingWireless *        s_wifi;
-    NMSettingWirelessSecurity *s_wsec;
-    const char *               file;
-    gpointer                   expected_flags_p;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
+    const char *                  file;
+    gpointer                      expected_flags_p;
 
     nmtst_test_data_unpack(test_data, &file, &expected_flags_p);
 
     connection = _connection_from_file(file, NULL, TYPE_WIRELESS, NULL);
 
-    /* ===== WIRELESS SETTING ===== */
-    s_wifi = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wifi);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
 
     g_assert(g_strcmp0(nm_setting_wireless_security_get_key_mgmt(s_wsec), "ieee8021x") == 0);
     g_assert(g_strcmp0(nm_setting_wireless_security_get_auth_alg(s_wsec), "leap") == 0);
@@ -3162,8 +2757,6 @@ test_read_wifi_leap_secret_flags(gconstpointer test_data)
     g_assert(nm_setting_wireless_security_get_leap_password_flags(s_wsec)
              == GPOINTER_TO_INT(expected_flags_p));
     g_assert(nm_setting_wireless_security_get_leap_password(s_wsec) == NULL);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -3179,13 +2772,13 @@ test_ifcfg_no_trailing_newline(void)
 static void
 test_read_wifi_wpa_psk(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4;
-    GBytes *                   ssid;
-    const char *               mac;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSettingIPConfig *           s_ip4;
+    GBytes *                      ssid;
+    const char *                  mac;
     char        expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
     const char *expected_ssid                  = "blahblah";
     guint32     n, i;
@@ -3201,10 +2794,7 @@ test_read_wifi_wpa_psk(void)
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-psk", NULL, TYPE_WIRELESS, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System blahblah (test-wifi-wpa-psk)");
 
     /* UUID can't be tested if the ifcfg does not contain the UUID key, because
@@ -3215,32 +2805,26 @@ test_read_wifi_wpa_psk(void)
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRELESS SETTING ===== */
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    mac = nm_setting_wireless_get_mac_address(s_wireless);
+    mac = nm_setting_wireless_get_mac_address(s_wifi);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, sizeof(expected_mac_address)));
 
-    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wireless), ==, 0);
+    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wifi), ==, 0);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
 
-    g_assert(!nm_setting_wireless_get_bssid(s_wireless));
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "infrastructure");
-    g_assert_cmpint(nm_setting_wireless_get_channel(s_wireless), ==, 1);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
+    g_assert(!nm_setting_wireless_get_bssid(s_wifi));
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "infrastructure");
+    g_assert_cmpint(nm_setting_wireless_get_channel(s_wifi), ==, 1);
 
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "wpa-psk");
     g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec),
                     ==,
@@ -3295,13 +2879,8 @@ test_read_wifi_wpa_psk(void)
     g_assert(found_proto_wpa);
     g_assert(found_proto_rsn);
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -3309,7 +2888,7 @@ test_read_wifi_sae(void)
 {
     gs_unref_object NMConnection *connection = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWireless *           s_wireless;
+    NMSettingWireless *           s_wifi;
     NMSettingWirelessSecurity *   s_wsec;
     GBytes *                      ssid;
     const char *                  expected_ssid = "blahblah";
@@ -3317,30 +2896,27 @@ test_read_wifi_sae(void)
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-sae", NULL, TYPE_WIRELESS, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System blahblah (test-wifi-sae)");
 
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wireless), ==, 0);
+    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wifi), ==, 0);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
 
-    g_assert(!nm_setting_wireless_get_bssid(s_wireless));
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "infrastructure");
+    g_assert(!nm_setting_wireless_get_bssid(s_wifi));
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "infrastructure");
 
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "sae");
     g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec), ==, "The king is dead.");
     g_assert(!nm_setting_wireless_security_get_auth_alg(s_wsec));
@@ -3351,7 +2927,7 @@ test_read_wifi_owe(void)
 {
     gs_unref_object NMConnection *connection = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWireless *           s_wireless;
+    NMSettingWireless *           s_wifi;
     NMSettingWirelessSecurity *   s_wsec;
     GBytes *                      ssid;
     const char *                  expected_ssid = "blahblah_owe";
@@ -3359,30 +2935,27 @@ test_read_wifi_owe(void)
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-owe", NULL, TYPE_WIRELESS, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System blahblah_owe (test-wifi-owe)");
 
     g_assert_cmpint(nm_setting_connection_get_timestamp(s_con), ==, 0);
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wireless), ==, 0);
+    g_assert_cmpint(nm_setting_wireless_get_mtu(s_wifi), ==, 0);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
     g_assert_cmpmem(g_bytes_get_data(ssid, NULL),
                     g_bytes_get_size(ssid),
                     expected_ssid,
                     strlen(expected_ssid));
 
-    g_assert(!nm_setting_wireless_get_bssid(s_wireless));
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "infrastructure");
+    g_assert(!nm_setting_wireless_get_bssid(s_wifi));
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "infrastructure");
 
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "owe");
     g_assert(!nm_setting_wireless_security_get_psk(s_wsec));
     g_assert(!nm_setting_wireless_security_get_auth_alg(s_wsec));
@@ -3391,71 +2964,47 @@ test_read_wifi_owe(void)
 static void
 test_read_wifi_wpa_psk_2(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWirelessSecurity *   s_wsec;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-psk-2",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System ipsum (test-wifi-wpa-psk-2)");
 
-    /* ===== WIRELESS SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec),
                     ==,
                     "They're really saying I love you. >>`<< '");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wpa_psk_unquoted(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWirelessSecurity *   s_wsec;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-psk-unquoted",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System blahblah (test-wifi-wpa-psk-unquoted)");
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec), ==, "54336845e2f3f321c4c7");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -3472,36 +3021,27 @@ test_read_wifi_wpa_psk_unquoted2(void)
 static void
 test_read_wifi_wpa_psk_adhoc(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSettingIPConfig *           s_ip4;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-psk-adhoc",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System blahblah (test-wifi-wpa-psk-adhoc)");
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wireless), ==, "adhoc");
+    g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, "adhoc");
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "wpa-psk");
     g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec),
                     ==,
@@ -3516,64 +3056,45 @@ test_read_wifi_wpa_psk_adhoc(void)
     g_assert_cmpint(nm_setting_wireless_security_get_num_protos(s_wsec), ==, 1);
     g_assert_cmpstr(nm_setting_wireless_security_get_proto(s_wsec, 0), ==, "rsn");
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wpa_psk_hex(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4;
-    GBytes *                   ssid;
-    const char *               expected_ssid = "blahblah";
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSettingIPConfig *           s_ip4;
+    GBytes *                      ssid;
+    const char *                  expected_ssid = "blahblah";
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-psk-hex",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System blahblah (test-wifi-wpa-psk-hex)");
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    ssid = nm_setting_wireless_get_ssid(s_wireless);
+    ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
-    g_assert(nm_utils_gbytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
+    g_assert(nm_g_bytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "wpa-psk");
     g_assert_cmpstr(nm_setting_wireless_security_get_psk(s_wsec),
                     ==,
                     "1da190379817bc360dda52e85c388c439a21ea5c7bf819c64e9da051807deae6");
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
-
-    g_object_unref(connection);
 }
 
 #define TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT     TEST_IFCFG_DIR "/test_ca_cert.pem"
@@ -3583,12 +3104,11 @@ test_read_wifi_wpa_psk_hex(void)
 static void
 test_read_wifi_wpa_eap_tls(void)
 {
-    NMConnection *     connection;
-    NMSettingWireless *s_wireless;
-    NMSettingIPConfig *s_ip4;
-    NMSetting8021x *   s_8021x;
-    char *             unmanaged                 = NULL;
-    const char *       expected_privkey_password = "test1";
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSetting8021x *              s_8021x;
+    char *                        unmanaged                 = NULL;
+    const char *                  expected_privkey_password = "test1";
 
     NMTST_EXPECT_NM_WARN("*key ONBOOT is duplicated and the early occurrence ignored*");
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-eap-tls",
@@ -3598,20 +3118,12 @@ test_read_wifi_wpa_eap_tls(void)
     g_test_assert_expected_messages();
     g_assert(!unmanaged);
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
     g_assert_cmpstr(nm_setting_802_1x_get_eap_method(s_8021x, 0), ==, "tls");
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "Bill Smith");
@@ -3638,8 +3150,6 @@ test_read_wifi_wpa_eap_tls(void)
                        TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
                        expected_privkey_password,
                        NM_SETTING_802_1X_PRIVATE_KEY);
-
-    g_object_unref(connection);
 }
 
 /* Also use TLS defines from the previous test */
@@ -3647,12 +3157,11 @@ test_read_wifi_wpa_eap_tls(void)
 static void
 test_read_wifi_wpa_eap_ttls_tls(void)
 {
-    NMConnection *     connection;
-    NMSettingWireless *s_wireless;
-    NMSettingIPConfig *s_ip4;
-    NMSetting8021x *   s_8021x;
-    char *             unmanaged                 = NULL;
-    const char *       expected_privkey_password = "test1";
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingIPConfig *           s_ip4;
+    NMSetting8021x *              s_8021x;
+    char *                        unmanaged                 = NULL;
+    const char *                  expected_privkey_password = "test1";
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-eap-ttls-tls",
                                        NULL,
@@ -3660,20 +3169,12 @@ test_read_wifi_wpa_eap_ttls_tls(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== IPv4 SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
     g_assert_cmpstr(nm_setting_802_1x_get_eap_method(s_8021x, 0), ==, "ttls");
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "Chuck Shumer");
@@ -3709,59 +3210,40 @@ test_read_wifi_wpa_eap_ttls_tls(void)
                        TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
                        expected_privkey_password,
                        NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wpa_eap_suite_b_192_tls(void)
 {
-    NMConnection *             connection;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wireless_sec;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wpa-eap-suite-b-192-tls",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wireless_sec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wireless_sec);
-    g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wireless_sec),
-                    ==,
-                    "wpa-eap-suite-b-192");
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    g_object_unref(connection);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
+    g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "wpa-eap-suite-b-192");
 }
 
 static void
 test_read_wifi_dynamic_wep_leap(void)
 {
-    NMConnection *             connection;
-    NMSettingWireless *        s_wifi;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSetting8021x *           s_8021x;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSetting8021x *              s_8021x;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-dynamic-wep-leap",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wifi = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wifi);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== Wi-Fi SECURITY SETTING ===== */
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
 
     /* Key management */
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "ieee8021x");
@@ -3775,9 +3257,7 @@ test_read_wifi_dynamic_wep_leap(void)
     g_assert_cmpstr(nm_setting_wireless_security_get_leap_username(s_wsec), ==, NULL);
     g_assert_cmpstr(nm_setting_wireless_security_get_leap_password(s_wsec), ==, NULL);
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
 
     /* EAP method should be "leap" */
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
@@ -3786,19 +3266,16 @@ test_read_wifi_dynamic_wep_leap(void)
     /* username & password */
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "bill smith");
     g_assert_cmpstr(nm_setting_802_1x_get_password(s_8021x), ==, "foobar baz");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_eap_ttls_chap(void)
 {
-    NMConnection *             connection;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMSettingIPConfig *        s_ip4;
-    NMSetting8021x *           s_8021x;
-    char *                     unmanaged = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMSettingIPConfig *           s_ip4;
+    NMSetting8021x *              s_8021x;
+    char *                        unmanaged = NULL;
 
     NMTST_EXPECT_NM_WARN("*key ONBOOT is duplicated and the early occurrence ignored*");
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-eap-ttls-chap",
@@ -3808,25 +3285,15 @@ test_read_wifi_wep_eap_ttls_chap(void)
     g_test_assert_expected_messages();
     g_assert(!unmanaged);
 
-    /* ===== WIRELESS SETTING ===== */
-
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
-    /* ===== 802.1x SETTING ===== */
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "ieee8021x");
 
-    /* ===== 802.1x SETTING ===== */
-    s_8021x = nm_connection_get_setting_802_1x(connection);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
 
     /* EAP methods */
     g_assert_cmpint(nm_setting_802_1x_get_num_eap_methods(s_8021x), ==, 1);
@@ -3841,38 +3308,32 @@ test_read_wifi_wep_eap_ttls_chap(void)
     g_assert_cmpstr(nm_setting_802_1x_get_phase2_auth(s_8021x), ==, "chap");
     g_assert_cmpstr(nm_setting_802_1x_get_identity(s_8021x), ==, "David Smith");
     g_assert_cmpstr(nm_setting_802_1x_get_password(s_8021x), ==, "foobar baz");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_wake_on_lan(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-wake-on-lan",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRED_SETTING_NAME);
 
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_assert_cmpint(nm_setting_wired_get_wake_on_lan(s_wired),
                     ==,
                     NM_SETTING_WIRED_WAKE_ON_LAN_ARP | NM_SETTING_WIRED_WAKE_ON_LAN_PHY
                         | NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC);
 
     g_assert_cmpstr(nm_setting_wired_get_wake_on_lan_password(s_wired), ==, "00:11:22:33:44:55");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -3887,14 +3348,12 @@ test_read_wired_auto_negotiate_off(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRED_SETTING_NAME);
 
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
     g_assert(!nm_setting_wired_get_auto_negotiate(s_wired));
     g_assert_cmpint(nm_setting_wired_get_speed(s_wired), ==, 100);
@@ -3913,14 +3372,12 @@ test_read_wired_auto_negotiate_on(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRED_SETTING_NAME);
 
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
     g_assert(nm_setting_wired_get_auto_negotiate(s_wired));
     g_assert_cmpint(nm_setting_wired_get_speed(s_wired), ==, 0);
@@ -3939,14 +3396,12 @@ test_read_wired_unknown_ethtool_opt(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRED_SETTING_NAME);
 
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
     g_assert(!nm_setting_wired_get_auto_negotiate(s_wired));
     g_assert(!nm_setting_wired_get_speed(s_wired));
@@ -3980,8 +3435,8 @@ test_roundtrip_ethtool(void)
                                                  NULL,
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  NULL);
-    s_ethtool  = nm_setting_ethtool_new();
-    nm_connection_add_setting(connection, s_ethtool);
+
+    s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
     _writer_new_connec_exp(connection,
                            TEST_SCRATCH_DIR,
                            TEST_IFCFG_DIR "/ifcfg-test_roundtrip_ethtool-2.cexpected",
@@ -3992,7 +3447,7 @@ test_roundtrip_ethtool(void)
                                                  NULL,
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  NULL);
-    s_wired    = nm_connection_get_setting(connection, NM_TYPE_SETTING_WIRED);
+    s_wired    = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
     _writer_new_connec_exp(connection,
                            TEST_SCRATCH_DIR,
@@ -4004,8 +3459,8 @@ test_roundtrip_ethtool(void)
                                                  NULL,
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  NULL);
-    s_ethtool  = nm_setting_ethtool_new();
-    nm_connection_add_setting(connection, s_ethtool);
+
+    s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
     nm_setting_option_set_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_RX, TRUE);
     _writer_new_connec_exp(connection,
                            TEST_SCRATCH_DIR,
@@ -4017,10 +3472,10 @@ test_roundtrip_ethtool(void)
                                                  NULL,
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  NULL);
-    s_wired    = nm_connection_get_setting(connection, NM_TYPE_SETTING_WIRED);
+    s_wired    = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
-    s_ethtool = nm_setting_ethtool_new();
-    nm_connection_add_setting(connection, s_ethtool);
+
+    s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
     nm_setting_option_set_boolean(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_RX, TRUE);
     _writer_new_connec_exp(connection,
                            TEST_SCRATCH_DIR,
@@ -4032,24 +3487,20 @@ test_roundtrip_ethtool(void)
 static void
 test_read_wifi_hidden(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWireless *  s_wifi;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-hidden", NULL, TYPE_WIRELESS, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRELESS_SETTING_NAME);
 
-    s_wifi = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wifi);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_assert(nm_setting_wireless_get_hidden(s_wifi) == TRUE);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -4061,15 +3512,12 @@ test_write_wifi_hidden(void)
     NMSettingConnection *         s_con;
     NMSettingWireless *           s_wifi;
     shvarFile *                   f;
-    GBytes *                      ssid;
-    const unsigned char ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
+    gs_unref_bytes GBytes *ssid =
+        nmtst_gbytes_from_arr(0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44);
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wi-Fi Hidden",
@@ -4079,16 +3527,9 @@ test_write_wifi_hidden(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, sizeof(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NM_SETTING_WIRELESS_HIDDEN, TRUE, NULL);
 
-    g_bytes_unref(ssid);
-
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connec_exp(connection,
@@ -4121,8 +3562,7 @@ test_read_wifi_mac_random(gconstpointer user_data)
     path       = g_strdup_printf(TEST_IFCFG_DIR "/ifcfg-test-wifi-mac-random-%s", name);
     connection = _connection_from_file(path, NULL, TYPE_WIRELESS, NULL);
 
-    s_wifi = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wifi);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_assert_cmpint(nm_setting_wireless_get_mac_address_randomization(s_wifi), ==, value);
 }
 
@@ -4134,10 +3574,10 @@ test_write_wifi_mac_random(gconstpointer user_data)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingWireless *           s_wifi;
-    char *                        val;
+    gs_free char *                val = NULL;
     shvarFile *                   f;
-    GBytes *                      ssid;
-    const unsigned char       ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
+    gs_unref_bytes GBytes *ssid =
+        nmtst_gbytes_from_arr(0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44);
     const char *              name, *write_expected;
     gpointer                  value_p;
     NMSettingMacRandomization value;
@@ -4150,9 +3590,7 @@ test_write_wifi_mac_random(gconstpointer user_data)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     val = g_strdup_printf("Test Write Wi-Fi MAC %s", name);
     g_object_set(s_con,
@@ -4163,13 +3601,8 @@ test_write_wifi_mac_random(gconstpointer user_data)
                  NM_SETTING_CONNECTION_TYPE,
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
-    g_free(val);
-
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
 
-    ssid = g_bytes_new(ssid_data, sizeof(ssid_data));
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -4178,7 +3611,6 @@ test_write_wifi_mac_random(gconstpointer user_data)
                  NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION,
                  value,
                  NULL);
-    g_bytes_unref(ssid);
 
     nmtst_assert_connection_verifies(connection);
 
@@ -4205,16 +3637,12 @@ test_write_wired_wake_on_lan(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingWired *              s_wired;
-    NMSettingWiredWakeOnLan       wol;
-    char *                        val;
+    gs_free char *                val = NULL;
     shvarFile *                   f;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired Wake-on-LAN",
@@ -4224,16 +3652,12 @@ test_write_wired_wake_on_lan(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    wol = NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST | NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST
-          | NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC;
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_WAKE_ON_LAN,
-                 wol,
+                 (guint) (NM_SETTING_WIRED_WAKE_ON_LAN_MULTICAST
+                          | NM_SETTING_WIRED_WAKE_ON_LAN_UNICAST
+                          | NM_SETTING_WIRED_WAKE_ON_LAN_MAGIC),
                  NM_SETTING_WIRED_WAKE_ON_LAN_PASSWORD,
                  "00:00:00:11:22:33",
                  NULL);
@@ -4250,7 +3674,6 @@ test_write_wired_wake_on_lan(void)
     g_assert(val);
     g_assert(strstr(val, "wol"));
     g_assert(strstr(val, "sopass 00:00:00:11:22:33"));
-    g_free(val);
     svCloseFile(f);
 
     reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
@@ -4265,14 +3688,14 @@ test_write_wired_auto_negotiate_off(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingWired *              s_wired;
-    char *                        val;
+    gs_free char *                val = NULL;
     shvarFile *                   f;
 
     connection = nmtst_create_minimal_connection("Test Write Wired Auto-Negotiate",
                                                  NULL,
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  NULL);
-    s_wired    = nm_connection_get_setting_wired(connection);
+    s_wired    = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_AUTO_NEGOTIATE,
                  FALSE,
@@ -4293,7 +3716,6 @@ test_write_wired_auto_negotiate_off(void)
     g_assert(strstr(val, "autoneg off"));
     g_assert(strstr(val, "speed 10"));
     g_assert(strstr(val, "duplex half"));
-    g_free(val);
     svCloseFile(f);
 
     reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
@@ -4309,20 +3731,19 @@ test_write_wired_auto_negotiate_on(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingWired *              s_wired;
     NMSettingEthtool *            s_ethtool;
-    char *                        val;
+    gs_free char *                val = NULL;
     shvarFile *                   f;
 
     connection = nmtst_create_minimal_connection("Test Write Wired Auto-Negotiate",
                                                  NULL,
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  NULL);
-    s_wired    = nm_connection_get_setting_wired(connection);
+    s_wired    = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_AUTO_NEGOTIATE, TRUE, NULL);
 
-    s_ethtool = NM_SETTING_ETHTOOL(nm_setting_ethtool_new());
+    s_ethtool = _nm_connection_new_setting(connection, NM_TYPE_SETTING_ETHTOOL);
     nm_setting_ethtool_set_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_TX, NM_TERNARY_TRUE);
     nm_setting_ethtool_set_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_RXVLAN, NM_TERNARY_FALSE);
-    nm_connection_add_setting(connection, NM_SETTING(s_ethtool));
 
     _writer_new_connec_exp(connection,
                            TEST_SCRATCH_DIR,
@@ -4335,7 +3756,6 @@ test_write_wired_auto_negotiate_on(void)
     g_assert(strstr(val, "autoneg on"));
     g_assert(!strstr(val, "speed"));
     g_assert(!strstr(val, "duplex"));
-    g_free(val);
     svCloseFile(f);
 
     reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
@@ -4344,8 +3764,7 @@ test_write_wired_auto_negotiate_on(void)
 
     nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
 
-    s_ethtool = NM_SETTING_ETHTOOL(nm_connection_get_setting(reread, NM_TYPE_SETTING_ETHTOOL));
-    g_assert(s_ethtool);
+    s_ethtool = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_ETHTOOL);
     g_assert_cmpint(nm_setting_ethtool_get_feature(s_ethtool, NM_ETHTOOL_OPTNAME_FEATURE_TX),
                     ==,
                     NM_TERNARY_TRUE);
@@ -4360,24 +3779,20 @@ test_write_wired_auto_negotiate_on(void)
 static void
 test_read_wifi_band_a(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWireless *  s_wifi;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWireless *           s_wifi;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-band-a", NULL, TYPE_WIRELESS, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRELESS_SETTING_NAME);
 
-    s_wifi = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wifi);
+    s_wifi = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_assert_cmpstr(nm_setting_wireless_get_band(s_wifi), ==, "a");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -4389,15 +3804,12 @@ test_write_wifi_band_a(void)
     NMSettingConnection *         s_con;
     NMSettingWireless *           s_wifi;
     shvarFile *                   f;
-    GBytes *                      ssid;
-    const unsigned char ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
+    gs_unref_bytes GBytes *ssid =
+        nmtst_gbytes_from_arr(0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44);
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wi-Fi Band A",
@@ -4407,12 +3819,7 @@ test_write_wifi_band_a(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, sizeof(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -4422,8 +3829,6 @@ test_write_wifi_band_a(void)
                  "a",
                  NULL);
 
-    g_bytes_unref(ssid);
-
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connec_exp(connection,
@@ -4448,14 +3853,11 @@ test_write_wifi_ap_mode(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingWireless *           s_wifi;
-    gs_unref_bytes GBytes *ssid = NULL;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("MySSID");
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wi-Fi AP Mode",
@@ -4465,12 +3867,7 @@ test_write_wifi_ap_mode(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new("MySSID", NM_STRLEN("MySSID"));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -4523,12 +3920,12 @@ test_read_wifi_band_bg_channel_mismatch(void)
 static void
 test_read_wired_qeth_static(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    char *               unmanaged = NULL;
-    const char *const *  subchannels;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    char *                        unmanaged = NULL;
+    const char *const *           subchannels;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-qeth-static",
                                        NULL,
@@ -4536,16 +3933,10 @@ test_read_wired_qeth_static(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-qeth-static");
 
-    /* ===== WIRED SETTING ===== */
-
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
     g_assert(!nm_setting_wired_get_mac_address(s_wired));
 
@@ -4563,25 +3954,20 @@ test_read_wired_qeth_static(void)
     g_assert_cmpstr(nm_setting_wired_get_s390_option_by_key(s_wired, "portno"), ==, "0");
     g_assert_cmpstr(nm_setting_wired_get_s390_option_by_key(s_wired, "layer2"), ==, "1");
 
-    /* ===== IPv4 SETTING ===== */
-
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4),
                     ==,
                     NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wired_ctc_static(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    char *               unmanaged = NULL;
-    const char *const *  subchannels;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWired *              s_wired;
+    char *                        unmanaged = NULL;
+    const char *const *           subchannels;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wired-ctc-static",
                                        NULL,
@@ -4589,14 +3975,10 @@ test_read_wired_ctc_static(void)
                                        &unmanaged);
     g_assert(unmanaged == NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con != NULL);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "System test-wired-ctc-static");
 
-    /* ===== WIRED SETTING ===== */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired != NULL);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
     g_assert(nm_setting_wired_get_mac_address(s_wired) == NULL);
 
@@ -4610,28 +3992,22 @@ test_read_wired_ctc_static(void)
 
     g_assert_cmpstr(nm_setting_wired_get_s390_nettype(s_wired), ==, "ctc");
     g_assert_cmpstr(nm_setting_wired_get_s390_option_by_key(s_wired, "ctcprot"), ==, "0");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_no_keys(void)
 {
-    NMConnection *             connection;
-    NMSettingConnection *      s_con;
-    NMSettingWireless *        s_wireless;
-    NMSettingWirelessSecurity *s_wsec;
-    NMWepKeyType               key_type;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMWepKeyType                  key_type;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-no-keys",
                                        NULL,
                                        TYPE_WIRELESS,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_id(s_con),
                     ==,
                     "System foobar (test-wifi-wep-no-keys)");
@@ -4641,15 +4017,9 @@ test_read_wifi_wep_no_keys(void)
      * depending on where the tests are run.
      */
 
-    /* ===== WIRELESS SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    s_wireless = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wireless);
-
-    /* ===== WIRELESS SECURITY SETTING ===== */
-
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
 
     /* Key management */
     g_assert_cmpstr(nm_setting_wireless_security_get_key_mgmt(s_wsec), ==, "none");
@@ -4663,26 +4033,21 @@ test_read_wifi_wep_no_keys(void)
 
     /* WEP key index 0; we don't expect it to be filled */
     g_assert(!nm_setting_wireless_security_get_wep_key(s_wsec, 0));
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_permissions(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    gboolean             success;
-    guint32              num;
-    const char *         tmp;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    gboolean                      success;
+    guint32                       num;
+    const char *                  tmp;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-permissions", NULL, TYPE_ETHERNET, NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     num = nm_setting_connection_get_num_permissions(s_con);
     g_assert_cmpint(num, ==, 3);
@@ -4702,18 +4067,15 @@ test_read_permissions(void)
     success = nm_setting_connection_get_permission(s_con, 2, NULL, &tmp, NULL);
     g_assert(success);
     g_assert_cmpstr(tmp, ==, "johnny5");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_wifi_wep_agent_keys(void)
 {
-    NMConnection *             connection;
-    NMSettingWireless *        s_wifi;
-    NMSettingWirelessSecurity *s_wsec;
-    NMWepKeyType               key_type;
-    NMSettingSecretFlags       flags;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingWirelessSecurity *   s_wsec;
+    NMWepKeyType                  key_type;
+    NMSettingSecretFlags          flags;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-wifi-wep-agent-keys",
                                        NULL,
@@ -4724,13 +4086,9 @@ test_read_wifi_wep_agent_keys(void)
      * we don't have any WEP keys because they are agent owned.
      */
 
-    /* ===== WIRELESS SETTING ===== */
-    s_wifi = nm_connection_get_setting_wireless(connection);
-    g_assert(s_wifi);
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS);
 
-    /* ===== WIRELESS SECURITY SETTING ===== */
-    s_wsec = nm_connection_get_setting_wireless_security(connection);
-    g_assert(s_wsec);
+    s_wsec = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
 
     g_assert(strcmp(nm_setting_wireless_security_get_key_mgmt(s_wsec), "none") == 0);
     g_assert(nm_setting_wireless_security_get_wep_tx_keyidx(s_wsec) == 0);
@@ -4743,8 +4101,6 @@ test_read_wifi_wep_agent_keys(void)
 
     flags = nm_setting_wireless_security_get_wep_key_flags(s_wsec);
     g_assert(flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -4765,10 +4121,7 @@ test_write_wired_static(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired Static",
@@ -4782,10 +4135,7 @@ test_write_wired_static(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_MAC_ADDRESS,
                  "31:33:33:37:be:cd",
@@ -4793,10 +4143,7 @@ test_write_wired_static(void)
                  (guint32) 1492,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -4824,10 +4171,7 @@ test_write_wired_static(void)
     nm_setting_ip_config_add_dns_search(s_ip4, "foobar.com");
     nm_setting_ip_config_add_dns_search(s_ip4, "lab.foobar.com");
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
@@ -4891,13 +4235,13 @@ test_write_wired_static(void)
 
     reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
 
-    reread_s_ip4 = nm_connection_get_setting_ip4_config(reread);
-    reread_s_ip6 = nm_connection_get_setting_ip6_config(reread);
+    reread_s_ip4 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP4_CONFIG);
+    reread_s_ip6 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP6_CONFIG);
 
     g_assert_cmpint(nm_setting_ip_config_get_route_metric(reread_s_ip4), ==, 204);
     g_assert_cmpint(nm_setting_ip_config_get_route_metric(reread_s_ip6), ==, 206);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_equals(connection, FALSE, reread, FALSE);
 }
@@ -4920,10 +4264,7 @@ test_write_wired_static_with_generic(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired Static",
@@ -4937,10 +4278,7 @@ test_write_wired_static_with_generic(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_MAC_ADDRESS,
                  "31:33:33:37:be:cd",
@@ -4948,10 +4286,7 @@ test_write_wired_static_with_generic(void)
                  (guint32) 1492,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -4979,10 +4314,7 @@ test_write_wired_static_with_generic(void)
     nm_setting_ip_config_add_dns_search(s_ip4, "foobar.com");
     nm_setting_ip_config_add_dns_search(s_ip4, "lab.foobar.com");
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
@@ -5039,21 +4371,22 @@ test_write_wired_static_with_generic(void)
     nm_setting_ip_config_add_dns_search(s_ip6, "foobar6.com");
     nm_setting_ip_config_add_dns_search(s_ip6, "lab6.foobar.com");
 
-    nm_connection_add_setting(connection, nm_setting_generic_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_GENERIC);
 
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection_FIXME(connection, TEST_SCRATCH_DIR, &testfile);
     route6file = utils_get_route6_path(testfile);
 
-    reread       = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
-    reread_s_ip4 = nm_connection_get_setting_ip4_config(reread);
-    reread_s_ip6 = nm_connection_get_setting_ip6_config(reread);
+    reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
+
+    reread_s_ip4 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP4_CONFIG);
+    reread_s_ip6 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP6_CONFIG);
 
     g_assert_cmpint(nm_setting_ip_config_get_route_metric(reread_s_ip4), ==, 204);
     g_assert_cmpint(nm_setting_ip_config_get_route_metric(reread_s_ip6), ==, 206);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     {
         gs_unref_hashtable GHashTable *diffs = NULL;
@@ -5064,8 +4397,8 @@ test_write_wired_static_with_generic(void)
         g_assert(g_hash_table_lookup(diffs, "generic"));
         g_assert(!nm_connection_compare(connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
     }
-    g_assert(!nm_connection_get_setting(reread, NM_TYPE_SETTING_GENERIC));
-    nm_connection_add_setting(reread, nm_setting_generic_new());
+    nmtst_connection_assert_no_setting(reread, NM_TYPE_SETTING_GENERIC);
+    _nm_connection_new_setting(reread, NM_TYPE_SETTING_GENERIC);
     {
         gs_unref_hashtable GHashTable *diffs = NULL;
 
@@ -5082,16 +4415,12 @@ test_write_wired_dhcp(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired DHCP",
@@ -5103,14 +4432,9 @@ test_write_wired_dhcp(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_AUTO,
@@ -5130,10 +4454,7 @@ test_write_wired_dhcp(void)
 
     nmtst_assert_connection_verifies(connection);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_DHCP,
@@ -5195,15 +4516,12 @@ test_write_routing_rules(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
 
     connection = nm_simple_connection_new();
 
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Routing Rules",
@@ -5215,17 +4533,12 @@ test_write_routing_rules(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
 
     _ip_routing_rule_add_to_setting(s_ip4, "pref 10 from 0.0.0.0/0 table 1");
@@ -5251,17 +4564,13 @@ test_write_wired_match(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingMatch *              s_match;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired with Match setting",
@@ -5273,31 +4582,26 @@ test_write_wired_match(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
-    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
+    g_object_set(s_ip6,
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
+                 NULL);
 
-    /* Match setting */
-    s_match = (NMSettingMatch *) nm_setting_match_new();
+    s_match = _nm_connection_new_setting(connection, NM_TYPE_SETTING_MATCH);
     nm_setting_match_add_interface_name(s_match, "ens*");
     nm_setting_match_add_interface_name(s_match, "eth 1?");
     nm_setting_match_add_interface_name(s_match, "!veth*");
     nm_setting_match_add_driver(s_match, "!virtio");
     nm_setting_match_add_driver(s_match, "e1000e");
     nm_setting_match_add_kernel_command_line(s_match, "!ip=");
-    nm_connection_add_setting(connection, NM_SETTING(s_match));
 
     nmtst_assert_connection_verifies(connection);
     _writer_new_connec_exp(connection,
@@ -5343,10 +4647,8 @@ test_read_write_wired_dhcp_send_hostname(void)
                                        NULL);
 
     /* Check dhcp-hostname and dhcp-send-hostname */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip4);
-    g_assert(s_ip6);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert(nm_setting_ip_config_get_dhcp_send_hostname(s_ip4) == TRUE);
     g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "svata-pulec");
     g_assert(!nm_setting_ip_config_get_dhcp_hostname(s_ip6));
@@ -5363,10 +4665,8 @@ test_read_write_wired_dhcp_send_hostname(void)
     nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
 
     /* Check dhcp-hostname and dhcp-send-hostname from the re-read connection. */
-    s_ip4 = nm_connection_get_setting_ip4_config(reread);
-    s_ip6 = nm_connection_get_setting_ip6_config(reread);
-    g_assert(s_ip4);
-    g_assert(s_ip6);
+    s_ip4 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP4_CONFIG);
+    s_ip6 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert(nm_setting_ip_config_get_dhcp_send_hostname(s_ip4) == FALSE);
     g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, dhcp_hostname);
     g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, dhcp_hostname);
@@ -5383,8 +4683,7 @@ test_read_wired_dhcpv6_hostname_fallback(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_ip6 = nm_connection_get_setting_ip6_config(connection);
-    g_assert(s_ip6);
+    s_ip6 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_assert(nm_setting_ip_config_get_dhcp_send_hostname(s_ip6) == TRUE);
     g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "fully.qualified.domain");
 }
@@ -5404,10 +4703,7 @@ test_write_wired_static_ip6_only(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired Static IP6 Only",
@@ -5419,22 +4715,13 @@ test_write_wired_static_ip6_only(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_MAC_ADDRESS, "31:33:33:37:be:cd", NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL, NULL);
 
     /* Add addresses */
@@ -5462,7 +4749,6 @@ test_write_ip6_disabled(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
 
@@ -5471,16 +4757,18 @@ test_write_ip6_disabled(void)
                                                  NM_SETTING_WIRED_SETTING_NAME,
                                                  &s_con);
 
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_DISABLED, NULL);
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
+    g_object_set(s_ip6,
+                 NM_SETTING_IP_CONFIG_METHOD,
+                 NM_SETTING_IP6_CONFIG_METHOD_DISABLED,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
+                 NULL);
 
     nmtst_assert_connection_verifies(connection);
 
@@ -5513,16 +4801,14 @@ test_write_wired_static_ip6_only_gw(gconstpointer user_data)
     NMSettingIPConfig *           s_ip6;
     NMIPAddress *                 addr6;
     GError *                      error                 = NULL;
-    char *                        id                    = NULL;
+    gs_free char *                id                    = NULL;
     gs_free char *                written_ifcfg_gateway = NULL;
     const char *                  gateway6              = user_data;
     shvarFile *                   ifcfg;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     id = g_strdup_printf("Test Write Wired Static IP6 Only With Gateway %s", gateway6 ?: "NULL");
     g_object_set(s_con,
@@ -5535,24 +4821,14 @@ test_write_wired_static_ip6_only_gw(gconstpointer user_data)
                  NM_SETTING_CONNECTION_TYPE,
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
-    g_free(id);
-
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
 
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_MAC_ADDRESS, "31:33:33:37:be:cd", NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
@@ -5582,14 +4858,14 @@ test_write_wired_static_ip6_only_gw(gconstpointer user_data)
     svCloseFile(ifcfg);
 
     /* access the gateway from the loaded connection. */
-    s_ip6 = nm_connection_get_setting_ip6_config(reread);
-    g_assert(s_ip6 && nm_setting_ip_config_get_num_addresses(s_ip6) == 1);
+    s_ip6 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP6_CONFIG);
+    g_assert(nm_setting_ip_config_get_num_addresses(s_ip6) == 1);
     addr6 = nm_setting_ip_config_get_address(s_ip6, 0);
     g_assert(addr6);
 
     /* assert that the gateway was written and reloaded as expected */
     if (!gateway6 || !strcmp(gateway6, "::")) {
-        g_assert(nm_setting_ip_config_get_gateway(s_ip6) == NULL);
+        g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, NULL);
         g_assert(written_ifcfg_gateway == NULL);
     } else {
         g_assert(nm_setting_ip_config_get_gateway(s_ip6) != NULL);
@@ -5607,7 +4883,6 @@ test_read_write_static_routes_legacy(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     const char *                  tmp;
 
@@ -5616,10 +4891,7 @@ test_read_write_static_routes_legacy(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== CONNECTION SETTING ===== */
-
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     /* ID */
     tmp = nm_setting_connection_get_id(s_con);
@@ -5628,15 +4900,9 @@ test_read_write_static_routes_legacy(void)
     /* Autoconnect */
     g_assert(nm_setting_connection_get_autoconnect(s_con));
 
-    /* ===== WIRED SETTING ===== */
-
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
-
-    /* ===== IPv4 SETTING ===== */
+    nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
 
     g_assert(!nm_setting_ip_config_get_never_default(s_ip4));
@@ -5676,10 +4942,7 @@ test_write_wired_static_routes(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired Static Routes",
@@ -5691,10 +4954,7 @@ test_write_wired_static_routes(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_MAC_ADDRESS,
                  "31:33:33:37:be:cd",
@@ -5702,10 +4962,7 @@ test_write_wired_static_routes(void)
                  (guint32) 1492,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -5746,15 +5003,14 @@ test_write_wired_static_routes(void)
     nm_setting_ip_config_add_dns_search(s_ip4, "foobar.com");
     nm_setting_ip_config_add_dns_search(s_ip4, "lab.foobar.com");
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
     nmtst_assert_connection_verifies(connection);
@@ -5770,8 +5026,7 @@ test_write_wired_static_routes(void)
      * connection equals. */
     g_assert(!reread_same);
     nmtst_assert_connection_verifies_without_normalization(reread);
-    s_ip4 = nm_connection_get_setting_ip4_config(reread);
-    g_assert(s_ip4);
+    s_ip4 = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip4), ==, 2);
     route = nm_setting_ip_config_get_route(s_ip4, 1);
     g_assert(route);
@@ -5791,7 +5046,6 @@ test_write_wired_dhcp_8021x_peap_mschapv2(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
     NMSetting8021x *              s_8021x;
@@ -5800,10 +5054,7 @@ test_write_wired_dhcp_8021x_peap_mschapv2(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired DHCP 802.1x PEAP MSCHAPv2",
@@ -5815,31 +5066,22 @@ test_write_wired_dhcp_8021x_peap_mschapv2(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
-    /* 802.1x setting */
-    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
-
+    s_8021x = _nm_connection_new_setting(connection, NM_TYPE_SETTING_802_1X);
     g_object_set(s_8021x,
                  NM_SETTING_802_1X_IDENTITY,
                  "Bob Saget",
@@ -5854,7 +5096,6 @@ test_write_wired_dhcp_8021x_peap_mschapv2(void)
                  NM_SETTING_802_1X_PHASE2_AUTH,
                  "mschapv2",
                  NULL);
-
     nm_setting_802_1x_add_eap_method(s_8021x, "peap");
 
     success = nm_setting_802_1x_set_ca_cert(s_8021x,
@@ -5883,7 +5124,6 @@ test_write_wired_8021x_tls(gconstpointer test_data)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
     NMSetting8021x *              s_8021x;
@@ -5891,7 +5131,9 @@ test_write_wired_8021x_tls(gconstpointer test_data)
     GError *                      error  = NULL;
     NMSetting8021xCKFormat        format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
     const char *                  pw;
-    char *                        tmp;
+    gs_free char *                tmp1 = NULL;
+    gs_free char *                tmp2 = NULL;
+    gs_free char *                tmp3 = NULL;
     gpointer                      scheme_p, flags_p;
     NMSetting8021xCKScheme        scheme;
     NMSettingSecretFlags          flags;
@@ -5902,10 +5144,7 @@ test_write_wired_8021x_tls(gconstpointer test_data)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired 802.1x TLS Blobs",
@@ -5917,29 +5156,20 @@ test_write_wired_8021x_tls(gconstpointer test_data)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
                  NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
-    /* 802.1x setting */
-    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
 
+    s_8021x = _nm_connection_new_setting(connection, NM_TYPE_SETTING_802_1X);
     g_object_set(s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
     nm_setting_802_1x_add_eap_method(s_8021x, "tls");
 
@@ -5992,8 +5222,7 @@ test_write_wired_8021x_tls(gconstpointer test_data)
      * matter what scheme was used in the original connection they will be read
      * back in as paths.
      */
-    s_8021x = nm_connection_get_setting_802_1x(reread);
-    g_assert(s_8021x);
+    s_8021x = nmtst_connection_assert_setting(reread, NM_TYPE_SETTING_802_1X);
     g_assert_cmpint(nm_setting_802_1x_get_ca_cert_scheme(s_8021x),
                     ==,
                     NM_SETTING_802_1X_CK_SCHEME_PATH);
@@ -6027,7 +5256,7 @@ test_write_wired_8021x_tls(gconstpointer test_data)
              * say it's not system-owned, and therefore it should not show up
              * in the re-read connection.
              */
-            s_8021x = nm_connection_get_setting_802_1x(connection);
+            s_8021x = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_802_1X);
             g_object_set(s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, NULL, NULL);
         }
 
@@ -6035,17 +5264,14 @@ test_write_wired_8021x_tls(gconstpointer test_data)
     }
 
     /* Clean up created certs and keys */
-    tmp = utils_cert_path(testfile, "ca-cert", "der");
-    nmtst_file_unlink_if_exists(tmp);
-    g_free(tmp);
+    tmp1 = utils_cert_path(testfile, "ca-cert", "der");
+    nmtst_file_unlink_if_exists(tmp1);
 
-    tmp = utils_cert_path(testfile, "client-cert", "der");
-    nmtst_file_unlink_if_exists(tmp);
-    g_free(tmp);
+    tmp2 = utils_cert_path(testfile, "client-cert", "der");
+    nmtst_file_unlink_if_exists(tmp2);
 
-    tmp = utils_cert_path(testfile, "private-key", "pem");
-    nmtst_file_unlink_if_exists(tmp);
-    g_free(tmp);
+    tmp3 = utils_cert_path(testfile, "private-key", "pem");
+    nmtst_file_unlink_if_exists(tmp3);
 }
 
 static void
@@ -6055,7 +5281,6 @@ test_write_wired_aliases(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     int                           num_addresses = 4;
     const char *                  ip[]          = {"1.1.1.1", "1.1.1.2", "1.1.1.3", "1.1.1.4"};
@@ -6072,10 +5297,7 @@ test_write_wired_aliases(void)
     connection = nm_simple_connection_new();
     g_assert(connection);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "alias0",
@@ -6085,14 +5307,9 @@ test_write_wired_aliases(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -6145,7 +5362,7 @@ test_write_wired_aliases(void)
      * aliases get read back in essentially random order. So just
      * verify the aliases manually.
      */
-    s_ip4 = nm_connection_get_setting_ip4_config(connection);
+    s_ip4 = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_assert(nm_setting_ip_config_get_num_addresses(s_ip4) == num_addresses);
 
     /* Addresses */
@@ -6191,7 +5408,6 @@ test_write_gateway(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     GError *                      error = NULL;
     shvarFile *                   f;
@@ -6199,10 +5415,7 @@ test_write_gateway(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Static Addresses Gateway",
@@ -6212,14 +5425,9 @@ test_write_gateway(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -6270,16 +5478,13 @@ test_write_wifi_open(void)
     NMSettingWireless *           s_wifi;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const unsigned char ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
-    shvarFile *         ifcfg;
+    gs_unref_bytes GBytes *ssid =
+        nmtst_gbytes_from_arr(0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44);
+    shvarFile *ifcfg;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi Open",
@@ -6291,12 +5496,7 @@ test_write_wifi_open(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, sizeof(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6314,23 +5514,17 @@ test_write_wifi_open(void)
                  (guint32) 1345,
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
     nmtst_assert_connection_verifies(connection);
@@ -6356,16 +5550,23 @@ test_write_wifi_open_hex_ssid(void)
     NMSettingWireless *           s_wifi;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const unsigned char           ssid_data[] =
-        {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd};
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_arr(0x11,
+                                                        0x22,
+                                                        0x33,
+                                                        0x44,
+                                                        0x55,
+                                                        0x66,
+                                                        0x77,
+                                                        0x88,
+                                                        0x99,
+                                                        0xaa,
+                                                        0xbb,
+                                                        0xcc,
+                                                        0xdd);
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi Open Hex SSID",
@@ -6377,12 +5578,7 @@ test_write_wifi_open_hex_ssid(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, sizeof(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6390,18 +5586,10 @@ test_write_wifi_open_hex_ssid(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -6430,16 +5618,12 @@ test_write_wifi_wep(void)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    struct stat                   statbuf;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah");
+    struct stat            statbuf;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WEP",
@@ -6451,12 +5635,7 @@ test_write_wifi_wep(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6464,12 +5643,7 @@ test_write_wifi_wep(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "none",
@@ -6483,21 +5657,17 @@ test_write_wifi_wep(void)
     nm_setting_wireless_security_set_wep_key(s_wsec, 2, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
     nm_setting_wireless_security_set_wep_key(s_wsec, 3, "BBBBBBBBBBBBBBBBBBBBBBBBBB");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
     nmtst_assert_connection_verifies(connection);
@@ -6527,17 +5697,13 @@ test_write_wifi_wep_adhoc(void)
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
     GError *                      error = NULL;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    struct stat                   statbuf;
-    NMIPAddress *                 addr;
+    gs_unref_bytes GBytes *ssid         = nmtst_gbytes_from_str("blahblah");
+    struct stat            statbuf;
+    NMIPAddress *          addr;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WEP AdHoc",
@@ -6549,27 +5715,14 @@ test_write_wifi_wep_adhoc(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NM_SETTING_WIRELESS_MODE, "adhoc", NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", NULL);
     nm_setting_wireless_security_set_wep_key(s_wsec, 0, "0123456789abcdef0123456789");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -6585,10 +5738,7 @@ test_write_wifi_wep_adhoc(void)
 
     nm_setting_ip_config_add_dns(s_ip4, "4.2.2.1");
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -6622,16 +5772,12 @@ test_write_wifi_wep_passphrase(void)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    struct stat                   statbuf;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah");
+    struct stat            statbuf;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WEP Passphrase",
@@ -6643,12 +5789,7 @@ test_write_wifi_wep_passphrase(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6656,12 +5797,7 @@ test_write_wifi_wep_passphrase(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "none",
@@ -6674,16 +5810,10 @@ test_write_wifi_wep_passphrase(void)
                  NULL);
     nm_setting_wireless_security_set_wep_key(s_wsec, 0, "asdfdjaslfjasd;flasjdfl;aksdf");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -6717,16 +5847,12 @@ test_write_wifi_wep_40_ascii(void)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah40";
-    struct stat                   statbuf;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah40");
+    struct stat            statbuf;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WEP 40 ASCII",
@@ -6738,12 +5864,7 @@ test_write_wifi_wep_40_ascii(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6751,12 +5872,7 @@ test_write_wifi_wep_40_ascii(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "none",
@@ -6772,16 +5888,10 @@ test_write_wifi_wep_40_ascii(void)
     nm_setting_wireless_security_set_wep_key(s_wsec, 2, "dolor");
     nm_setting_wireless_security_set_wep_key(s_wsec, 3, "donec");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -6815,16 +5925,12 @@ test_write_wifi_wep_104_ascii(void)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah104";
-    struct stat                   statbuf;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah104");
+    struct stat            statbuf;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WEP 104 ASCII",
@@ -6836,12 +5942,7 @@ test_write_wifi_wep_104_ascii(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6849,12 +5950,7 @@ test_write_wifi_wep_104_ascii(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "none",
@@ -6870,16 +5966,10 @@ test_write_wifi_wep_104_ascii(void)
     nm_setting_wireless_security_set_wep_key(s_wsec, 2, "WEP-104 ASCII");
     nm_setting_wireless_security_set_wep_key(s_wsec, 3, "thisismyascii");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -6916,16 +6006,12 @@ test_write_wifi_leap(void)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    struct stat                   statbuf;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah");
+    struct stat            statbuf;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi LEAP",
@@ -6937,12 +6023,7 @@ test_write_wifi_leap(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -6950,12 +6031,7 @@ test_write_wifi_leap(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "ieee8021x",
@@ -6967,16 +6043,10 @@ test_write_wifi_leap(void)
                  "foobar22",
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7013,17 +6083,13 @@ test_write_wifi_leap_secret_flags(gconstpointer data)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    NMSettingSecretFlags          flags     = GPOINTER_TO_UINT(data);
+    gs_unref_bytes GBytes *ssid  = nmtst_gbytes_from_str("blahblah");
+    NMSettingSecretFlags   flags = GPOINTER_TO_UINT(data);
 
     connection = nm_simple_connection_new();
     g_assert(connection);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi LEAP Secret Flags",
@@ -7033,23 +6099,15 @@ test_write_wifi_leap_secret_flags(gconstpointer data)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
                  NM_SETTING_WIRELESS_MODE,
                  "infrastructure",
                  NULL);
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
 
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "ieee8021x",
@@ -7063,15 +6121,10 @@ test_write_wifi_leap_secret_flags(gconstpointer data)
                  flags,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7108,8 +6161,7 @@ test_write_wifi_wpa_psk(gconstpointer test_data)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah");
     struct {
         const char *name, *psk;
         gpointer    wep_group_p, wpa_p, wpa2_p;
@@ -7126,10 +6178,7 @@ test_write_wifi_wpa_psk(gconstpointer test_data)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  args.name,
@@ -7141,12 +6190,7 @@ test_write_wifi_wpa_psk(gconstpointer test_data)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7154,12 +6198,7 @@ test_write_wifi_wpa_psk(gconstpointer test_data)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "wpa-psk",
@@ -7184,16 +6223,10 @@ test_write_wifi_wpa_psk(gconstpointer test_data)
         nm_setting_wireless_security_add_group(s_wsec, "ccmp");
     }
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7225,16 +6258,12 @@ test_write_wifi_wpa_psk_adhoc(void)
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
     GError *                      error = NULL;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    NMIPAddress *                 addr;
+    gs_unref_bytes GBytes *ssid         = nmtst_gbytes_from_str("blahblah");
+    NMIPAddress *          addr;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WPA PSK",
@@ -7246,12 +6275,7 @@ test_write_wifi_wpa_psk_adhoc(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7263,12 +6287,7 @@ test_write_wifi_wpa_psk_adhoc(void)
                  "bg",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "wpa-psk",
@@ -7280,10 +6299,7 @@ test_write_wifi_wpa_psk_adhoc(void)
     nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
     nm_setting_wireless_security_add_group(s_wsec, "ccmp");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -7299,10 +6315,7 @@ test_write_wifi_wpa_psk_adhoc(void)
 
     nm_setting_ip_config_add_dns(s_ip4, "4.2.2.1");
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7336,15 +6349,11 @@ test_write_wifi_wpa_eap_tls(void)
     NMSettingIPConfig *           s_ip6;
     gboolean                      success;
     GError *                      error = NULL;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
+    gs_unref_bytes GBytes *ssid         = nmtst_gbytes_from_str("blahblah");
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WPA EAP-TLS",
@@ -7356,12 +6365,7 @@ test_write_wifi_wpa_eap_tls(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7369,12 +6373,7 @@ test_write_wifi_wpa_eap_tls(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "wpa-eap",
@@ -7385,17 +6384,14 @@ test_write_wifi_wpa_eap_tls(void)
     nm_setting_wireless_security_add_pairwise(s_wsec, "tkip");
     nm_setting_wireless_security_add_group(s_wsec, "tkip");
 
-    /* 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);
+    s_8021x = _nm_connection_new_setting(connection, NM_TYPE_SETTING_802_1X);
     g_object_set(s_8021x,
+                 NM_SETTING_802_1X_IDENTITY,
+                 "Bill Smith",
                  NM_SETTING_802_1X_PHASE1_AUTH_FLAGS,
                  (guint) (NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_0_DISABLE
                           | NM_SETTING_802_1X_AUTH_FLAGS_TLS_1_1_DISABLE),
                  NULL);
-
     nm_setting_802_1x_add_eap_method(s_8021x, "tls");
 
     success = nm_setting_802_1x_set_ca_cert(s_8021x,
@@ -7420,16 +6416,10 @@ test_write_wifi_wpa_eap_tls(void)
                                                 &error);
     nmtst_assert_success(success, error);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7463,15 +6453,11 @@ test_write_wifi_wpa_eap_ttls_tls(void)
     NMSettingIPConfig *           s_ip6;
     gboolean                      success;
     GError *                      error = NULL;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
+    gs_unref_bytes GBytes *ssid         = nmtst_gbytes_from_str("blahblah");
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WPA EAP-TTLS (TLS)",
@@ -7483,12 +6469,7 @@ test_write_wifi_wpa_eap_ttls_tls(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7496,23 +6477,14 @@ test_write_wifi_wpa_eap_ttls_tls(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
     nm_setting_wireless_security_add_proto(s_wsec, "rsn");
     nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
     nm_setting_wireless_security_add_group(s_wsec, "ccmp");
 
-    /* Wireless security setting */
-    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
-
+    s_8021x = _nm_connection_new_setting(connection, NM_TYPE_SETTING_802_1X);
     nm_setting_802_1x_add_eap_method(s_8021x, "ttls");
-
     g_object_set(s_8021x,
                  NM_SETTING_802_1X_IDENTITY,
                  "Bill Smith",
@@ -7556,16 +6528,10 @@ test_write_wifi_wpa_eap_ttls_tls(void)
                                                        &error);
     nmtst_assert_success(success, error);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7599,15 +6565,11 @@ test_write_wifi_wpa_eap_ttls_mschapv2(void)
     NMSettingIPConfig *           s_ip6;
     gboolean                      success;
     GError *                      error = NULL;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
+    gs_unref_bytes GBytes *ssid         = nmtst_gbytes_from_str("blahblah");
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WPA EAP-TTLS (MSCHAPv2)",
@@ -7619,12 +6581,7 @@ test_write_wifi_wpa_eap_ttls_mschapv2(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7632,12 +6589,7 @@ test_write_wifi_wpa_eap_ttls_mschapv2(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
     nm_setting_wireless_security_add_proto(s_wsec, "wpa");
     nm_setting_wireless_security_add_proto(s_wsec, "rsn");
@@ -7646,12 +6598,8 @@ test_write_wifi_wpa_eap_ttls_mschapv2(void)
     nm_setting_wireless_security_add_group(s_wsec, "tkip");
     nm_setting_wireless_security_add_group(s_wsec, "ccmp");
 
-    /* Wireless security setting */
-    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
-
+    s_8021x = _nm_connection_new_setting(connection, NM_TYPE_SETTING_802_1X);
     nm_setting_802_1x_add_eap_method(s_8021x, "ttls");
-
     g_object_set(s_8021x,
                  NM_SETTING_802_1X_IDENTITY,
                  "Bill Smith",
@@ -7670,16 +6618,10 @@ test_write_wifi_wpa_eap_ttls_mschapv2(void)
                                             &error);
     nmtst_assert_success(success, error);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -7704,14 +6646,14 @@ test_write_wifi_wpa_then_open(void)
     nmtst_auto_unlinkfile char *testfile     = NULL;
     gs_free char *              keyfile      = NULL;
     gs_unref_object NMConnection *connection = NULL;
-    gs_unref_object NMConnection *reread     = NULL;
+    gs_unref_object NMConnection *reread1    = NULL;
+    gs_unref_object NMConnection *reread2    = NULL;
     NMSettingConnection *         s_con;
     NMSettingWireless *           s_wifi;
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah");
 
     /* Test that writing out a WPA config then changing that to an open
      * config doesn't leave various WPA-related keys lying around in the ifcfg.
@@ -7719,10 +6661,7 @@ test_write_wifi_wpa_then_open(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "random wifi connection",
@@ -7734,12 +6673,7 @@ test_write_wifi_wpa_then_open(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7747,12 +6681,7 @@ test_write_wifi_wpa_then_open(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "wpa-psk",
@@ -7768,30 +6697,26 @@ test_write_wifi_wpa_then_open(void)
     nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
     nm_setting_wireless_security_add_group(s_wsec, "ccmp");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection(connection, TEST_SCRATCH_DIR, &testfile);
 
-    reread = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
-
-    nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
+    reread1 = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
 
-    g_object_unref(reread);
+    nmtst_assert_connection_equals(connection, TRUE, reread1, FALSE);
 
     nmtst_connection_normalize(connection);
 
@@ -7806,9 +6731,9 @@ test_write_wifi_wpa_then_open(void)
     keyfile = utils_get_keys_path(testfile);
     g_assert(!g_file_test(keyfile, G_FILE_TEST_EXISTS));
 
-    reread = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
+    reread2 = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
 
-    nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
+    nmtst_assert_connection_equals(connection, TRUE, reread2, FALSE);
 }
 
 static void
@@ -7817,16 +6742,15 @@ test_write_wifi_wpa_then_wep_with_perms(void)
     nmtst_auto_unlinkfile char *testfile     = NULL;
     nmtst_auto_unlinkfile char *keyfile      = NULL;
     gs_unref_object NMConnection *connection = NULL;
-    gs_unref_object NMConnection *reread     = NULL;
+    gs_unref_object NMConnection *reread1    = NULL;
+    gs_unref_object NMConnection *reread2    = NULL;
     NMSettingConnection *         s_con;
     NMSettingWireless *           s_wifi;
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
     gboolean                      success;
-    GBytes *                      ssid;
-    char **                       perms;
-    const char *                  ssid_data = "SomeSSID";
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("SomeSSID");
 
     /* Test that writing out a WPA config then changing that to a WEP
      * config works and doesn't cause infinite loop or other issues.
@@ -7835,11 +6759,7 @@ test_write_wifi_wpa_then_wep_with_perms(void)
     connection = nm_simple_connection_new();
     g_assert(connection);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
-    perms = g_strsplit("user:superman:", ",", -1);
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "random wifi connection 2",
@@ -7848,19 +6768,13 @@ test_write_wifi_wpa_then_wep_with_perms(void)
                  NM_SETTING_CONNECTION_AUTOCONNECT,
                  TRUE,
                  NM_SETTING_CONNECTION_PERMISSIONS,
-                 perms,
+                 NM_MAKE_STRV("user:superman:"),
                  NM_SETTING_CONNECTION_TYPE,
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
-    g_strfreev(perms);
     g_assert_cmpint(nm_setting_connection_get_num_permissions(s_con), ==, 1);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7868,12 +6782,7 @@ test_write_wifi_wpa_then_wep_with_perms(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "wpa-psk",
@@ -7889,38 +6798,31 @@ test_write_wifi_wpa_then_wep_with_perms(void)
     nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
     nm_setting_wireless_security_add_group(s_wsec, "ccmp");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection(connection, TEST_SCRATCH_DIR, &testfile);
 
-    reread = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
+    reread1 = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
 
-    nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
-
-    g_object_unref(reread);
+    nmtst_assert_connection_equals(connection, TRUE, reread1, FALSE);
 
     nmtst_connection_normalize(connection);
 
     /* Now change the connection to WEP and recheck */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
 
     g_object_set(s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", NULL);
     nm_setting_wireless_security_set_wep_key(s_wsec, 0, "abraka  dabra");
@@ -7931,11 +6833,11 @@ test_write_wifi_wpa_then_wep_with_perms(void)
                               testfile,
                               TEST_IFCFG_DIR "/ifcfg-random_wifi_connection_2.cexpected");
 
-    reread = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
+    reread2 = _connection_from_file(testfile, NULL, TYPE_WIRELESS, NULL);
 
     nmtst_connection_normalize(connection);
     success = nm_connection_compare(connection,
-                                    reread,
+                                    reread2,
                                     NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS
                                         | NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
     g_assert(success);
@@ -7956,15 +6858,12 @@ test_write_wifi_dynamic_wep_leap(void)
     NMSetting8021x *              s_8021x;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    GBytes *                      ssid;
-    const char *                  ssid_data = "blahblah";
-    shvarFile *                   ifcfg;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("blahblah");
+    shvarFile *            ifcfg;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi Dynamic WEP LEAP",
@@ -7974,12 +6873,7 @@ test_write_wifi_dynamic_wep_leap(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(ssid_data, strlen(ssid_data));
-
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
@@ -7987,20 +6881,11 @@ test_write_wifi_dynamic_wep_leap(void)
                  "infrastructure",
                  NULL);
 
-    g_bytes_unref(ssid);
-
-    /* Wireless security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
-
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", NULL);
 
-    /* Wireless security setting */
-    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
-
+    s_8021x = _nm_connection_new_setting(connection, NM_TYPE_SETTING_802_1X);
     nm_setting_802_1x_add_eap_method(s_8021x, "leap");
-
     g_object_set(s_8021x,
                  NM_SETTING_802_1X_IDENTITY,
                  "Bill Smith",
@@ -8008,15 +6893,10 @@ test_write_wifi_dynamic_wep_leap(void)
                  ";alkdfja;dslkfjsad;lkfjsadf",
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
 
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -8054,14 +6934,10 @@ test_write_wired_qeth_dhcp(void)
     NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    char **                       subchans;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired qeth Static",
@@ -8073,34 +6949,23 @@ test_write_wired_qeth_dhcp(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    subchans = g_strsplit("0.0.600,0.0.601,0.0.602", ",", -1);
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_S390_SUBCHANNELS,
-                 subchans,
+                 NM_MAKE_STRV("0.0.600", "0.0.601", "0.0.602"),
                  NM_SETTING_WIRED_S390_NETTYPE,
                  "qeth",
                  NULL);
-    g_strfreev(subchans);
 
     nm_setting_wired_add_s390_option(s_wired, "portname", "FOOBAR");
     nm_setting_wired_add_s390_option(s_wired, "portno", "1");
     nm_setting_wired_add_s390_option(s_wired, "layer2", "0");
     nm_setting_wired_add_s390_option(s_wired, "protocol", "blahbalh");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -8127,15 +6992,11 @@ test_write_wired_ctc_dhcp(void)
     NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    char **                       subchans;
     shvarFile *                   ifcfg;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired ctc Static",
@@ -8145,29 +7006,19 @@ test_write_wired_ctc_dhcp(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    subchans = g_strsplit("0.0.600,0.0.601", ",", -1);
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired,
                  NM_SETTING_WIRED_S390_SUBCHANNELS,
-                 subchans,
+                 NM_MAKE_STRV("0.0.600", "0.0.601"),
                  NM_SETTING_WIRED_S390_NETTYPE,
                  "ctc",
                  NULL);
-    g_strfreev(subchans);
     nm_setting_wired_add_s390_option(s_wired, "ctcprot", "0");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -8201,16 +7052,12 @@ test_write_permissions(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Permissions",
@@ -8226,20 +7073,12 @@ test_write_permissions(void)
     nm_setting_connection_add_permission(s_con, "user", "foobar", NULL);
     nm_setting_connection_add_permission(s_con, "user", "asdfasdf", NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
@@ -8270,16 +7109,12 @@ test_write_wifi_wep_agent_keys(void)
     NMSettingWirelessSecurity *   s_wsec;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    const char *                  str_ssid = "foobarbaz";
-    GBytes *                      ssid;
+    gs_unref_bytes GBytes *ssid = nmtst_gbytes_from_str("foobarbaz");
 
     connection = nm_simple_connection_new();
     g_assert(connection != NULL);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wifi WEP Agent Owned",
@@ -8289,39 +7124,28 @@ test_write_wifi_wep_agent_keys(void)
                  NM_SETTING_WIRELESS_SETTING_NAME,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
                  NM_SETTING_IP_CONFIG_MAY_FAIL,
                  TRUE,
+                 NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+                 (int) NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64,
                  NULL);
 
-    /* Wifi setting */
-    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
-
-    ssid = g_bytes_new(str_ssid, strlen(str_ssid));
+    s_wifi = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS);
     g_object_set(s_wifi,
                  NM_SETTING_WIRELESS_SSID,
                  ssid,
                  NM_SETTING_WIRELESS_MODE,
                  "infrastructure",
                  NULL);
-    g_bytes_unref(ssid);
-
-    /* Wifi security setting */
-    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
 
+    s_wsec = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
     g_object_set(s_wsec,
                  NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
                  "none",
@@ -8352,20 +7176,14 @@ test_write_wifi_wep_agent_keys(void)
 static void
 test_write_wired_pppoe(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingWired *     s_wired;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingPppoe *     s_pppoe;
-    NMSettingPpp *       s_ppp;
-    GError *             error = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingPppoe *              s_pppoe;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Wired PPPoE",
@@ -8377,21 +7195,13 @@ test_write_wired_pppoe(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* PPPoE setting */
-    s_pppoe = (NMSettingPppoe *) nm_setting_pppoe_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_pppoe));
-
-    g_object_set(G_OBJECT(s_pppoe),
+    s_pppoe = _nm_connection_new_setting(connection, NM_TYPE_SETTING_PPPOE);
+    g_object_set(s_pppoe,
                  NM_SETTING_PPPOE_SERVICE,
                  "stupid-service",
                  NM_SETTING_PPPOE_USERNAME,
@@ -8400,33 +7210,24 @@ test_write_wired_pppoe(void)
                  "test1",
                  NULL);
 
-    /* PPP setting */
-    s_ppp = (NMSettingPpp *) nm_setting_ppp_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ppp));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PPP);
 
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection_fail(connection, TEST_SCRATCH_DIR, NULL);
-
-    g_object_unref(connection);
-    g_clear_error(&error);
 }
 
 static void
 test_write_vpn(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingVpn *       s_vpn;
-    GError *             error = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingVpn *                s_vpn;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write VPN",
@@ -8438,10 +7239,7 @@ test_write_vpn(void)
                  NM_SETTING_VPN_SETTING_NAME,
                  NULL);
 
-    /* VPN setting */
-    s_vpn = (NMSettingVpn *) nm_setting_vpn_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_vpn));
-
+    s_vpn = _nm_connection_new_setting(connection, NM_TYPE_SETTING_VPN);
     g_object_set(s_vpn,
                  NM_SETTING_VPN_SERVICE_TYPE,
                  "awesomevpn",
@@ -8452,39 +7250,27 @@ test_write_vpn(void)
     nm_setting_vpn_add_data_item(s_vpn, "server", "vpn.somewhere.com");
     nm_setting_vpn_add_secret(s_vpn, "password", "sup3rs3cr3t");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection_fail(connection, TEST_SCRATCH_DIR, NULL);
-
-    g_object_unref(connection);
-    g_clear_error(&error);
 }
 
 static void
 test_write_mobile_broadband(gconstpointer data)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingIPConfig *  s_ip4;
-    NMSettingGsm *       s_gsm;
-    NMSettingCdma *      s_cdma;
-    NMSettingPpp *       s_ppp;
-    NMSettingSerial *    s_serial;
-    GError *             error = NULL;
-    gboolean             gsm   = GPOINTER_TO_UINT(data);
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingCdma *               s_cdma;
+    NMSettingSerial *             s_serial;
+    gboolean                      gsm = GPOINTER_TO_UINT(data);
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  gsm ? "Test Write GSM" : "Test Write CDMA",
@@ -8496,22 +7282,14 @@ test_write_mobile_broadband(gconstpointer data)
                  gsm ? NM_SETTING_GSM_SETTING_NAME : NM_SETTING_CDMA_SETTING_NAME,
                  NULL);
 
-    if (gsm) {
-        /* GSM setting */
-        s_gsm = (NMSettingGsm *) nm_setting_gsm_new();
-        nm_connection_add_setting(connection, NM_SETTING(s_gsm));
-    } else {
-        /* CDMA setting */
-        s_cdma = (NMSettingCdma *) nm_setting_cdma_new();
-        nm_connection_add_setting(connection, NM_SETTING(s_cdma));
-
+    if (gsm)
+        _nm_connection_new_setting(connection, NM_TYPE_SETTING_GSM);
+    else {
+        s_cdma = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CDMA);
         g_object_set(s_cdma, NM_SETTING_CDMA_NUMBER, "#777", NULL);
     }
 
-    /* Serial setting */
-    s_serial = (NMSettingSerial *) nm_setting_serial_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_serial));
-
+    s_serial = _nm_connection_new_setting(connection, NM_TYPE_SETTING_SERIAL);
     g_object_set(s_serial,
                  NM_SETTING_SERIAL_BAUD,
                  115200,
@@ -8523,42 +7301,31 @@ test_write_mobile_broadband(gconstpointer data)
                  1,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* PPP setting */
-    s_ppp = (NMSettingPpp *) nm_setting_ppp_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ppp));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PPP);
 
     nmtst_assert_connection_verifies(connection);
 
     _writer_new_connection_fail(connection, TEST_SCRATCH_DIR, NULL);
-
-    g_object_unref(connection);
-    g_clear_error(&error);
 }
 
 static void
 test_read_bridge_main(void)
 {
-    NMConnection *   connection;
-    NMSettingBridge *s_bridge;
-    NMSettingWired * s_wired;
-    const char *     mac;
-    char             expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingBridge *             s_bridge;
+    NMSettingWired *              s_wired;
+    const char *                  mac;
+    char expected_mac_address[ETH_ALEN] = {0x00, 0x16, 0x41, 0x11, 0x22, 0x33};
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bridge-main", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "br0");
 
-    /* ===== Bridging SETTING ===== */
-
-    s_bridge = nm_connection_get_setting_bridge(connection);
-    g_assert(s_bridge);
+    s_bridge = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BRIDGE);
     g_assert_cmpuint(nm_setting_bridge_get_forward_delay(s_bridge), ==, 2);
     g_assert(nm_setting_bridge_get_stp(s_bridge));
     g_assert_cmpuint(nm_setting_bridge_get_priority(s_bridge), ==, 32744);
@@ -8570,14 +7337,10 @@ test_read_bridge_main(void)
     g_assert_cmpint(nm_setting_bridge_get_vlan_filtering(s_bridge), ==, TRUE);
     g_assert_cmpint(nm_setting_bridge_get_vlan_default_pvid(s_bridge), ==, 99);
 
-    /* MAC address */
-    s_wired = nm_connection_get_setting_wired(connection);
-    g_assert(s_wired);
-    mac = nm_setting_wired_get_cloned_mac_address(s_wired);
+    s_wired = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_WIRED);
+    mac     = nm_setting_wired_get_cloned_mac_address(s_wired);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, ETH_ALEN));
-
-    g_object_unref(connection);
 }
 
 static void
@@ -8588,8 +7351,8 @@ test_write_bridge_main(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingBridge *             s_bridge;
-    NMSettingIPConfig *           s_ip4, *s_ip6;
-    NMSettingWired *              s_wired;
+    NMSettingIPConfig *           s_ip4;
+    NMSettingIPConfig *           s_ip6;
     NMIPAddress *                 addr;
     static const char *           mac   = "31:33:33:37:be:cd";
     GError *                      error = NULL;
@@ -8599,10 +7362,7 @@ test_write_bridge_main(void)
     connection = nm_simple_connection_new();
     g_assert(connection);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Bridge Main",
@@ -8616,9 +7376,7 @@ test_write_bridge_main(void)
                  NM_SETTING_BRIDGE_SETTING_NAME,
                  NULL);
 
-    /* bridge setting */
-    s_bridge = (NMSettingBridge *) nm_setting_bridge_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_bridge));
+    s_bridge = _nm_connection_new_setting(connection, NM_TYPE_SETTING_BRIDGE);
 
     vlans = g_ptr_array_new_with_free_func((GDestroyNotify) nm_bridge_vlan_unref);
     vlan  = nm_bridge_vlan_new(10, 16);
@@ -8644,10 +7402,7 @@ test_write_bridge_main(void)
                  vlans,
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -8662,17 +7417,12 @@ test_write_bridge_main(void)
     nm_setting_ip_config_add_address(s_ip4, addr);
     nm_ip_address_unref(addr);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_verifies_without_normalization(connection);
 
@@ -8686,29 +7436,25 @@ test_write_bridge_main(void)
 static void
 test_read_bridge_component(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingBridgePort *s_port;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingBridgePort *         s_port;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bridge-component",
                                        NULL,
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "br0");
     g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con),
                     ==,
                     NM_SETTING_BRIDGE_SETTING_NAME);
 
-    s_port = nm_connection_get_setting_bridge_port(connection);
-    g_assert(s_port);
+    s_port = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BRIDGE_PORT);
     g_assert(nm_setting_bridge_port_get_hairpin_mode(s_port));
     g_assert_cmpuint(nm_setting_bridge_port_get_priority(s_port), ==, 28);
     g_assert_cmpuint(nm_setting_bridge_port_get_path_cost(s_port), ==, 100);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -8728,10 +7474,7 @@ test_write_bridge_component(void)
     connection = nm_simple_connection_new();
     g_assert(connection);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Bridge Component",
@@ -8747,10 +7490,7 @@ test_write_bridge_component(void)
                  NM_SETTING_BRIDGE_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL);
 
     /* Bridge port */
@@ -8765,8 +7505,7 @@ test_write_bridge_component(void)
     nm_bridge_vlan_set_pvid(vlan, TRUE);
     g_ptr_array_add(vlans, vlan);
 
-    s_port = nm_setting_bridge_port_new();
-    nm_connection_add_setting(connection, s_port);
+    s_port = _nm_connection_new_setting(connection, NM_TYPE_SETTING_BRIDGE_PORT);
     g_object_set(s_port,
                  NM_SETTING_BRIDGE_PORT_PRIORITY,
                  50,
@@ -8791,8 +7530,8 @@ test_write_bridge_component(void)
 static void
 test_read_bridge_missing_stp(void)
 {
-    NMConnection *   connection;
-    NMSettingBridge *s_bridge;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingBridge *             s_bridge;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bridge-missing-stp",
                                        NULL,
@@ -8801,13 +7540,8 @@ test_read_bridge_missing_stp(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "br0");
 
-    /* ===== Bridging SETTING ===== */
-
-    s_bridge = nm_connection_get_setting_bridge(connection);
-    g_assert(s_bridge);
+    s_bridge = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BRIDGE);
     g_assert(nm_setting_bridge_get_stp(s_bridge) == FALSE);
-
-    g_object_unref(connection);
 }
 
 #define TEST_IFCFG_VLAN_INTERFACE TEST_IFCFG_DIR "/ifcfg-test-vlan-interface"
@@ -8815,16 +7549,16 @@ test_read_bridge_missing_stp(void)
 static void
 test_read_vlan_interface(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
-    guint32        from = 0, to = 0;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
+    guint32                       from = 0;
+    guint32                       to   = 0;
 
     connection = _connection_from_file(TEST_IFCFG_VLAN_INTERFACE, NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "vlan43");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth9");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 43);
@@ -8857,8 +7591,6 @@ test_read_vlan_interface(void)
     g_assert(nm_setting_vlan_get_priority(s_vlan, NM_VLAN_EGRESS_MAP, 2, &from, &to));
     g_assert_cmpint(from, ==, 14);
     g_assert_cmpint(to, ==, 7);
-
-    g_object_unref(connection);
 }
 
 #define TEST_IFCFG_VLAN_ONLY_VLANID TEST_IFCFG_DIR "/ifcfg-test-vlan-only-vlanid"
@@ -8866,21 +7598,18 @@ test_read_vlan_interface(void)
 static void
 test_read_vlan_only_vlan_id(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     connection = _connection_from_file(TEST_IFCFG_VLAN_ONLY_VLANID, NULL, TYPE_ETHERNET, NULL);
 
     g_assert(nm_connection_get_interface_name(connection) == NULL);
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth9");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 43);
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan), ==, NM_VLAN_FLAG_REORDER_HEADERS);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -8898,8 +7627,7 @@ test_read_vlan_vlanid_use(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "eth0.9");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth0");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 10);
@@ -8918,8 +7646,8 @@ test_read_vlan_vlanid_use(void)
 static void
 test_read_vlan_only_device(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-vlan-only-device",
                                        NULL,
@@ -8928,40 +7656,34 @@ test_read_vlan_only_device(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "eth0.9");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth0");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 9);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_vlan_physdev(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-vlan-physdev", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "vlan0.3");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth0");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 3);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_vlan_reorder_hdr_1(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     NMTST_EXPECT_NM_WARN("*REORDER_HDR key is deprecated, use VLAN_FLAGS*");
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-vlan-reorder-hdr-1",
@@ -8972,22 +7694,19 @@ test_read_vlan_reorder_hdr_1(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "vlan0.3");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth0");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 3);
     /* Check that REORDER_HDR=0 is ignored */
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan), ==, NM_VLAN_FLAG_REORDER_HEADERS);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_vlan_reorder_hdr_2(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-vlan-reorder-hdr-2",
                                        NULL,
@@ -8996,61 +7715,52 @@ test_read_vlan_reorder_hdr_2(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "vlan0.3");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth0");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 3);
     /* Check that VLAN_FLAGS=NO_REORDER_HDR works */
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan), ==, NM_VLAN_FLAG_LOOSE_BINDING);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_vlan_flags_1(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-vlan-flags-1", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "super-vlan");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth9");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 44);
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan),
                     ==,
                     NM_VLAN_FLAG_LOOSE_BINDING | NM_VLAN_FLAG_REORDER_HEADERS);
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_vlan_flags_2(void)
 {
-    NMConnection * connection;
-    NMSettingVlan *s_vlan;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingVlan *               s_vlan;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-vlan-flags-2", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "super-vlan");
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "eth9");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 44);
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan),
                     ==,
                     NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING | NM_VLAN_FLAG_REORDER_HEADERS);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -9108,14 +7818,10 @@ test_write_vlan_reorder_hdr(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingVlan *               s_vlan;
-    NMSettingWired *              s_wired;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write VLAN reorder_hdr",
@@ -9127,14 +7833,9 @@ test_write_vlan_reorder_hdr(void)
                  NM_SETTING_VLAN_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* VLAN setting */
-    s_vlan = (NMSettingVlan *) nm_setting_vlan_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_vlan));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_vlan = _nm_connection_new_setting(connection, NM_TYPE_SETTING_VLAN);
     g_object_set(s_vlan,
                  NM_SETTING_VLAN_PARENT,
                  "eth0",
@@ -9161,16 +7862,12 @@ test_write_ethernet_missing_ipv6(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
 
     connection = nm_simple_connection_new();
     g_assert(connection);
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Ethernet Without IPv6 Setting",
@@ -9182,13 +7879,9 @@ test_write_ethernet_missing_ipv6(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_AUTO,
@@ -9227,31 +7920,26 @@ test_read_ibft_ignored(void)
 static void
 test_read_bond_main(void)
 {
-    NMConnection * connection;
-    NMSettingBond *s_bond;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingBond *               s_bond;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-main", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "bond0");
 
-    /* ===== Bonding SETTING ===== */
-
-    s_bond = nm_connection_get_setting_bond(connection);
-    g_assert(s_bond);
+    s_bond = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BOND);
 
     g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, NM_SETTING_BOND_OPTION_MIIMON),
                     ==,
                     "100");
-
-    g_object_unref(connection);
 }
 
 static void
 test_read_bond_eth_type(void)
 {
-    NMConnection * connection;
-    NMSettingBond *s_bond;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingBond *               s_bond;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-eth-type",
                                        NULL,
@@ -9260,10 +7948,7 @@ test_read_bond_eth_type(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "bond0");
 
-    /* ===== Bonding SETTING ===== */
-
-    s_bond = nm_connection_get_setting_bond(connection);
-    g_assert(s_bond);
+    s_bond = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BOND);
 
     g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, NM_SETTING_BOND_OPTION_MIIMON),
                     ==,
@@ -9271,8 +7956,6 @@ test_read_bond_eth_type(void)
     g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, NM_SETTING_BOND_OPTION_LACP_RATE),
                     ==,
                     "1");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -9285,16 +7968,12 @@ test_write_bond_main(void)
     NMSettingBond *               s_bond;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    NMSettingWired *              s_wired;
     NMIPAddress *                 addr;
     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));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Bond Main",
@@ -9308,22 +7987,14 @@ test_write_bond_main(void)
                  NM_SETTING_BOND_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* bond setting */
-    s_bond = (NMSettingBond *) nm_setting_bond_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_bond));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_bond = _nm_connection_new_setting(connection, NM_TYPE_SETTING_BOND);
     nm_setting_bond_add_option(s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY, "5");
     nm_setting_bond_add_option(s_bond, NM_SETTING_BOND_OPTION_UPDELAY, "10");
     nm_setting_bond_add_option(s_bond, NM_SETTING_BOND_OPTION_MIIMON, "100");
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -9338,13 +8009,10 @@ test_write_bond_main(void)
     nm_setting_ip_config_add_address(s_ip4, addr);
     nm_ip_address_unref(addr);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_verifies_without_normalization(connection);
 
@@ -9361,21 +8029,18 @@ test_write_bond_main(void)
 static void
 test_read_bond_slave(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-slave", NULL, TYPE_ETHERNET, NULL);
     g_test_assert_expected_messages();
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "bond0");
 
     g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -9391,10 +8056,7 @@ test_write_bond_slave(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Bond Slave",
@@ -9410,10 +8072,7 @@ test_write_bond_slave(void)
                  NM_SETTING_BOND_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
+    s_wired = _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
     g_object_set(s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL);
 
     nmtst_assert_connection_verifies(connection);
@@ -9426,12 +8085,71 @@ test_write_bond_slave(void)
 }
 
 static void
+test_read_bond_port(void)
+{
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con      = NULL;
+    NMSettingBondPort *           s_port     = NULL;
+
+    connection =
+        _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-port", NULL, TYPE_ETHERNET, NULL);
+
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
+    g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "bond99");
+    g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
+
+    s_port = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BOND_PORT);
+    g_assert_cmpuint(nm_setting_bond_port_get_queue_id(s_port), ==, 1);
+}
+
+static void
+test_write_bond_port(void)
+{
+    nmtst_auto_unlinkfile char *testfile     = NULL;
+    gs_unref_object NMConnection *connection = NULL;
+    gs_unref_object NMConnection *reread     = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingBondPort *           s_bond_port;
+
+    connection = nm_simple_connection_new();
+
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
+    g_object_set(s_con,
+                 NM_SETTING_CONNECTION_ID,
+                 "Test Write Bond Port",
+                 NM_SETTING_CONNECTION_UUID,
+                 nm_uuid_generate_random_str_a(),
+                 NM_SETTING_CONNECTION_AUTOCONNECT,
+                 TRUE,
+                 NM_SETTING_CONNECTION_TYPE,
+                 NM_SETTING_WIRED_SETTING_NAME,
+                 NM_SETTING_CONNECTION_MASTER,
+                 "bond0",
+                 NM_SETTING_CONNECTION_SLAVE_TYPE,
+                 NM_SETTING_BOND_SETTING_NAME,
+                 NULL);
+
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
+
+    s_bond_port = _nm_connection_new_setting(connection, NM_TYPE_SETTING_BOND_PORT);
+    g_object_set(s_bond_port, NM_SETTING_BOND_PORT_QUEUE_ID, 1, NULL);
+
+    nmtst_assert_connection_verifies(connection);
+
+    _writer_new_connection(connection, TEST_SCRATCH_DIR, &testfile);
+
+    reread = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
+
+    nmtst_assert_connection_equals(connection, TRUE, reread, FALSE);
+}
+
+static void
 test_read_infiniband(void)
 {
-    NMConnection *       connection;
-    NMSettingInfiniband *s_infiniband;
-    char *               unmanaged = NULL;
-    const char *         mac;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingInfiniband *         s_infiniband;
+    char *                        unmanaged = NULL;
+    const char *                  mac;
     char        expected_mac_address[INFINIBAND_ALEN] = {0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55,
                                                   0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc,
                                                   0xdd, 0xee, 0xff, 0x00, 0x11, 0x22};
@@ -9443,22 +8161,15 @@ test_read_infiniband(void)
                                        &unmanaged);
     g_assert(!unmanaged);
 
-    /* ===== INFINIBAND SETTING ===== */
-
-    s_infiniband = nm_connection_get_setting_infiniband(connection);
-    g_assert(s_infiniband);
+    s_infiniband = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_INFINIBAND);
 
-    /* MAC address */
     mac = nm_setting_infiniband_get_mac_address(s_infiniband);
     g_assert(mac);
     g_assert(nm_utils_hwaddr_matches(mac, -1, expected_mac_address, sizeof(expected_mac_address)));
 
-    /* Transport mode */
     transport_mode = nm_setting_infiniband_get_transport_mode(s_infiniband);
     g_assert(transport_mode);
     g_assert_cmpstr(transport_mode, ==, "connected");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -9478,10 +8189,7 @@ test_write_infiniband(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write InfiniBand",
@@ -9493,10 +8201,7 @@ test_write_infiniband(void)
                  NM_SETTING_INFINIBAND_SETTING_NAME,
                  NULL);
 
-    /* InfiniBand setting */
-    s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_infiniband));
-
+    s_infiniband = _nm_connection_new_setting(connection, NM_TYPE_SETTING_INFINIBAND);
     g_object_set(s_infiniband,
                  NM_SETTING_INFINIBAND_MAC_ADDRESS,
                  mac,
@@ -9506,10 +8211,7 @@ test_write_infiniband(void)
                  "connected",
                  NULL);
 
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -9524,10 +8226,7 @@ test_write_infiniband(void)
     nm_setting_ip_config_add_address(s_ip4, addr);
     nm_ip_address_unref(addr);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
     nmtst_assert_connection_verifies(connection);
@@ -9548,8 +8247,7 @@ test_read_bond_slave_ib(void)
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-slave-ib", NULL, NULL, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
 
     g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "bond0");
     g_assert_cmpstr(nm_setting_connection_get_slave_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
@@ -9567,10 +8265,7 @@ test_write_bond_slave_ib(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Bond Slave InfiniBand",
@@ -9586,10 +8281,7 @@ test_write_bond_slave_ib(void)
                  NM_SETTING_BOND_SETTING_NAME,
                  NULL);
 
-    /* InfiniBand setting */
-    s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_infiniband));
-
+    s_infiniband = _nm_connection_new_setting(connection, NM_TYPE_SETTING_INFINIBAND);
     g_object_set(s_infiniband,
                  NM_SETTING_INFINIBAND_MAC_ADDRESS,
                  mac,
@@ -9611,9 +8303,9 @@ test_write_bond_slave_ib(void)
 static void
 test_read_bond_opts_mode_numeric(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingBond *      s_bond;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingBond *               s_bond;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-mode-numeric",
                                        NULL,
@@ -9622,19 +8314,15 @@ test_read_bond_opts_mode_numeric(void)
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "bond0");
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_BOND_SETTING_NAME);
 
-    s_bond = nm_connection_get_setting_bond(connection);
-    g_assert(s_bond);
+    s_bond = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_BOND);
     g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, NM_SETTING_BOND_OPTION_MODE),
                     ==,
                     "802.3ad");
-
-    g_object_unref(connection);
 }
 
 #define DCB_ALL_FLAGS \
@@ -9643,20 +8331,19 @@ test_read_bond_opts_mode_numeric(void)
 static void
 test_read_dcb_basic(void)
 {
-    NMConnection *connection;
-    NMSettingDcb *s_dcb;
-    guint         i;
-    guint         expected_group_ids[8]        = {0, 0, 0, 0, 1, 1, 1, 0xF};
-    guint         expected_group_bandwidths[8] = {25, 0, 0, 75, 0, 0, 0, 0};
-    guint         expected_bandwidths[8]       = {5, 10, 30, 25, 10, 50, 5, 0};
-    gboolean      expected_strict[8] = {FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE};
-    guint         expected_traffic_classes[8] = {7, 6, 5, 4, 3, 2, 1, 0};
-    gboolean      expected_pfcs[8] = {TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE};
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingDcb *                s_dcb;
+    guint                         i;
+    guint                         expected_group_ids[8]        = {0, 0, 0, 0, 1, 1, 1, 0xF};
+    guint                         expected_group_bandwidths[8] = {25, 0, 0, 75, 0, 0, 0, 0};
+    guint                         expected_bandwidths[8]       = {5, 10, 30, 25, 10, 50, 5, 0};
+    gboolean expected_strict[8]          = {FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE};
+    guint    expected_traffic_classes[8] = {7, 6, 5, 4, 3, 2, 1, 0};
+    gboolean expected_pfcs[8]            = {TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE};
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-dcb", NULL, TYPE_ETHERNET, NULL);
 
-    s_dcb = nm_connection_get_setting_dcb(connection);
-    g_assert(s_dcb);
+    s_dcb = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_DCB);
 
     g_assert_cmpint(nm_setting_dcb_get_app_fcoe_flags(s_dcb), ==, DCB_ALL_FLAGS);
     g_assert_cmpint(nm_setting_dcb_get_app_fcoe_priority(s_dcb), ==, 7);
@@ -9702,8 +8389,6 @@ test_read_dcb_basic(void)
         g_assert_cmpint(nm_setting_dcb_get_priority_traffic_class(s_dcb, i),
                         ==,
                         expected_traffic_classes[i]);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -9713,7 +8398,6 @@ test_write_dcb_basic(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingDcb *                s_dcb;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
@@ -9727,9 +8411,8 @@ test_write_dcb_basic(void)
 
     connection = nm_simple_connection_new();
 
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-    g_object_set(G_OBJECT(s_con),
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
+    g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "dcb-test",
                  NM_SETTING_CONNECTION_UUID,
@@ -9740,30 +8423,16 @@ test_write_dcb_basic(void)
                  "eth0",
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    /* IP stuff */
-    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,
-                 NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
-
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    g_object_set(G_OBJECT(s_ip6),
-                 NM_SETTING_IP_CONFIG_METHOD,
-                 NM_SETTING_IP6_CONFIG_METHOD_AUTO,
-                 NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
+    g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* DCB */
-    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_dcb));
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
+    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
 
-    g_object_set(G_OBJECT(s_dcb),
+    s_dcb = _nm_connection_new_setting(connection, NM_TYPE_SETTING_DCB);
+    g_object_set(s_dcb,
                  NM_SETTING_DCB_APP_FCOE_FLAGS,
                  DCB_ALL_FLAGS,
                  NM_SETTING_DCB_APP_FCOE_PRIORITY,
@@ -9814,8 +8483,7 @@ test_read_dcb_default_app_priorities(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_dcb = nm_connection_get_setting_dcb(connection);
-    g_assert(s_dcb);
+    s_dcb = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_DCB);
 
     g_assert_cmpint(nm_setting_dcb_get_app_fcoe_flags(s_dcb), ==, NM_SETTING_DCB_FLAG_ENABLE);
     g_assert_cmpint(nm_setting_dcb_get_app_fcoe_priority(s_dcb), ==, -1);
@@ -9950,8 +8618,7 @@ test_read_fcoe_mode(gconstpointer user_data)
     file       = g_strdup_printf(TEST_IFCFG_DIR "/ifcfg-test-fcoe-%s", expected_mode);
     connection = _connection_from_file(file, NULL, TYPE_ETHERNET, NULL);
 
-    s_dcb = nm_connection_get_setting_dcb(connection);
-    g_assert(s_dcb);
+    s_dcb = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_DCB);
 
     g_assert_cmpint(nm_setting_dcb_get_app_fcoe_flags(s_dcb), ==, NM_SETTING_DCB_FLAG_ENABLE);
     g_assert_cmpstr(nm_setting_dcb_get_app_fcoe_mode(s_dcb), ==, expected_mode);
@@ -9965,7 +8632,6 @@ test_write_fcoe_mode(gconstpointer user_data)
     gs_unref_object NMConnection *reread        = NULL;
     const char *                  expected_mode = user_data;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingDcb *                s_dcb;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
@@ -9973,9 +8639,8 @@ test_write_fcoe_mode(gconstpointer user_data)
 
     connection = nm_simple_connection_new();
 
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-    g_object_set(G_OBJECT(s_con),
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
+    g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "fcoe-test",
                  NM_SETTING_CONNECTION_UUID,
@@ -9986,30 +8651,16 @@ test_write_fcoe_mode(gconstpointer user_data)
                  "eth0",
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP stuff */
-    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,
-                 NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    g_object_set(G_OBJECT(s_ip6),
-                 NM_SETTING_IP_CONFIG_METHOD,
-                 NM_SETTING_IP6_CONFIG_METHOD_AUTO,
-                 NULL);
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
+    g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* DCB */
-    s_dcb = (NMSettingDcb *) nm_setting_dcb_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_dcb));
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
+    g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
 
-    g_object_set(G_OBJECT(s_dcb),
+    s_dcb = _nm_connection_new_setting(connection, NM_TYPE_SETTING_DCB);
+    g_object_set(s_dcb,
                  NM_SETTING_DCB_APP_FCOE_FLAGS,
                  NM_SETTING_DCB_FLAG_ENABLE,
                  NM_SETTING_DCB_APP_FCOE_MODE,
@@ -10032,28 +8683,24 @@ test_write_fcoe_mode(gconstpointer user_data)
 static void
 test_read_team_master(gconstpointer user_data)
 {
-    const char *const    PATH_NAME = user_data;
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingTeam *      s_team;
-    const char *         expected_config =
+    const char *const PATH_NAME              = user_data;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingTeam *               s_team;
+    const char *                  expected_config =
         "{\"device\": \"team0\", \"link_watch\": {\"name\": \"ethtool\"}}";
 
     connection = _connection_from_file(PATH_NAME, NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "team0");
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_TEAM_SETTING_NAME);
 
-    s_team = nm_connection_get_setting_team(connection);
-    g_assert(s_team);
+    s_team = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_TEAM);
     g_assert_cmpstr(nm_setting_team_get_config(s_team), ==, expected_config);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -10080,7 +8727,6 @@ test_write_team_master(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingTeam *               s_team;
-    NMSettingWired *              s_wired;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
     const char *                  expected_config =
@@ -10089,10 +8735,7 @@ test_write_team_master(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Team Master",
@@ -10104,29 +8747,18 @@ test_write_team_master(void)
                  NM_SETTING_TEAM_SETTING_NAME,
                  NULL);
 
-    /* Team setting */
-    s_team = (NMSettingTeam *) nm_setting_team_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_team));
-
+    s_team = _nm_connection_new_setting(connection, NM_TYPE_SETTING_TEAM);
     g_object_set(s_team, NM_SETTING_TEAM_CONFIG, expected_config, NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_verifies_without_normalization(connection);
 
@@ -10145,26 +8777,22 @@ test_write_team_master(void)
 static void
 test_read_team_port(gconstpointer user_data)
 {
-    const char *const    PATH_NAME = user_data;
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
-    NMSettingTeamPort *  s_team_port;
-    const char *         expected_config = "{\"p4p1\": {\"prio\": -10, \"sticky\": true}}";
+    const char *const PATH_NAME              = user_data;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingTeamPort *           s_team_port;
+    const char *                  expected_config = "{\"p4p1\": {\"prio\": -10, \"sticky\": true}}";
 
     connection = _connection_from_file(PATH_NAME, NULL, TYPE_ETHERNET, NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRED_SETTING_NAME);
     g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "team0");
 
-    s_team_port = nm_connection_get_setting_team_port(connection);
-    g_assert(s_team_port);
+    s_team_port = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_TEAM_PORT);
     g_assert_cmpstr(nm_setting_team_port_get_config(s_team_port), ==, expected_config);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -10175,16 +8803,12 @@ test_write_team_port(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingTeamPort *           s_team_port;
-    NMSettingWired *              s_wired;
     const char *                  expected_config = "{\"p4p1\": {\"prio\": -10, \"sticky\": true}}";
     shvarFile *                   f;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Team Port",
@@ -10198,14 +8822,10 @@ test_write_team_port(void)
                  NM_SETTING_TEAM_SETTING_NAME,
                  NULL);
 
-    /* Team setting */
-    s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_team_port));
+    s_team_port = _nm_connection_new_setting(connection, NM_TYPE_SETTING_TEAM_PORT);
     g_object_set(s_team_port, NM_SETTING_TEAM_PORT_CONFIG, expected_config, NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
     nmtst_assert_connection_verifies(connection);
 
@@ -10234,16 +8854,13 @@ test_write_team_infiniband_port(void)
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
     NMSettingTeamPort *           s_team_port;
-    NMSettingInfiniband *         s_inf;
+    NMSettingInfiniband *         s_infiniband;
     const char *                  expected_config = "{\"inf1\": {\"prio\": -10, \"sticky\": true}}";
     shvarFile *                   f;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Team Infiniband Port",
@@ -10259,15 +8876,11 @@ test_write_team_infiniband_port(void)
                  "inf1",
                  NULL);
 
-    /* Team setting */
-    s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_team_port));
+    s_team_port = _nm_connection_new_setting(connection, NM_TYPE_SETTING_TEAM_PORT);
     g_object_set(s_team_port, NM_SETTING_TEAM_PORT_CONFIG, expected_config, NULL);
 
-    /* Infiniband setting */
-    s_inf = (NMSettingInfiniband *) nm_setting_infiniband_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_inf));
-    g_object_set(s_inf, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL);
+    s_infiniband = _nm_connection_new_setting(connection, NM_TYPE_SETTING_INFINIBAND);
+    g_object_set(s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL);
 
     nmtst_assert_connection_verifies(connection);
 
@@ -10291,28 +8904,26 @@ test_write_team_infiniband_port(void)
 static void
 test_read_team_port_empty_config(void)
 {
-    NMConnection *       connection;
-    NMSettingConnection *s_con;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingConnection *         s_con;
+    NMSettingTeamPort *           s_team_port;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-team-port-empty-config",
                                        NULL,
                                        TYPE_ETHERNET,
                                        NULL);
 
-    s_con = nm_connection_get_setting_connection(connection);
-    g_assert(s_con);
+    s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_assert_cmpstr(nm_setting_connection_get_connection_type(s_con),
                     ==,
                     NM_SETTING_WIRED_SETTING_NAME);
     g_assert_cmpstr(nm_setting_connection_get_master(s_con), ==, "team0");
 
     /* Normalization adds a team-port setting */
-    g_assert(nm_connection_get_setting_team_port(connection));
+    s_team_port = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_TEAM_PORT);
 
     /* empty/missing config */
-    g_assert(!nm_setting_team_port_get_config(nm_connection_get_setting_team_port(connection)));
-
-    g_object_unref(connection);
+    g_assert(!nm_setting_team_port_get_config(s_team_port));
 }
 
 static void
@@ -10359,7 +8970,7 @@ test_team_reread_slave(void)
                  NM_SETTING_CONNECTION_SLAVE_TYPE,
                  "team",
                  NULL);
-    g_object_set(nm_connection_get_setting_vlan(connection_2),
+    g_object_set(nmtst_connection_assert_setting(connection_2, NM_TYPE_SETTING_VLAN),
                  NM_SETTING_VLAN_FLAGS,
                  1,
                  NM_SETTING_VLAN_ID,
@@ -10367,7 +8978,9 @@ test_team_reread_slave(void)
                  NM_SETTING_VLAN_PARENT,
                  "enp31s0f1",
                  NULL);
-    nm_connection_add_setting(connection_2, nm_setting_team_port_new());
+
+    _nm_connection_new_setting(connection_2, NM_TYPE_SETTING_TEAM_PORT);
+
     nmtst_connection_normalize(connection_2);
 
     nmtst_assert_connection_equals(connection_1, FALSE, connection_2, FALSE);
@@ -10392,8 +9005,8 @@ test_team_reread_slave(void)
 static void
 test_read_proxy_basic(void)
 {
-    NMConnection *  connection;
-    NMSettingProxy *s_proxy;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingProxy *              s_proxy;
 
     /* Test basic proxy configuration */
 
@@ -10402,18 +9015,13 @@ test_read_proxy_basic(void)
                                        TYPE_ETHERNET,
                                        NULL);
 
-    /* ===== Proxy setting ===== */
-    s_proxy = nm_connection_get_setting_proxy(connection);
-    g_assert(s_proxy);
+    s_proxy = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_PROXY);
 
-    /* Proxy method */
     g_assert_cmpint(nm_setting_proxy_get_method(s_proxy), ==, NM_SETTING_PROXY_METHOD_AUTO);
     g_assert(nm_setting_proxy_get_browser_only(s_proxy));
     g_assert_cmpstr(nm_setting_proxy_get_pac_url(s_proxy),
                     ==,
                     "http://wpad.mycompany.com/wpad.dat");
-
-    g_object_unref(connection);
 }
 
 static void
@@ -10423,17 +9031,13 @@ test_write_proxy_basic(void)
     gs_unref_object NMConnection *connection = NULL;
     gs_unref_object NMConnection *reread     = NULL;
     NMSettingConnection *         s_con;
-    NMSettingWired *              s_wired;
     NMSettingProxy *              s_proxy;
     const char *                  expected_url = "https://wpad.neverland.org/wpad.dat";
     shvarFile *                   f;
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write Proxy Basic",
@@ -10443,15 +9047,11 @@ test_write_proxy_basic(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Proxy setting */
-    s_proxy = (NMSettingProxy *) nm_setting_proxy_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_proxy));
+    s_proxy = _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
     g_object_set(s_proxy, NM_SETTING_PROXY_METHOD, NM_SETTING_PROXY_METHOD_AUTO, NULL);
     g_object_set(s_proxy, NM_SETTING_PROXY_PAC_URL, expected_url, NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
     nmtst_assert_connection_verifies(connection);
 
@@ -10919,12 +9519,12 @@ test_write_unknown(gconstpointer test_data)
 static void
 test_read_vlan_trailing_spaces(void)
 {
-    const char *   testfile = TEST_IFCFG_DIR "/ifcfg-test-vlan-trailing-spaces";
-    NMConnection * connection;
-    gboolean       success;
-    GError *       error = NULL;
-    NMSettingVlan *s_vlan;
-    char *         contents = NULL;
+    const char *    testfile                 = TEST_IFCFG_DIR "/ifcfg-test-vlan-trailing-spaces";
+    gs_unref_object NMConnection *connection = NULL;
+    gboolean                      success;
+    GError *                      error = NULL;
+    NMSettingVlan *               s_vlan;
+    gs_free char *                contents = NULL;
 
     /* Ensure there is whitespace at the end of the VLAN interface name,
      * to prevent the whitespace getting stripped off and committed mistakenly
@@ -10935,19 +9535,15 @@ test_read_vlan_trailing_spaces(void)
     g_assert(success);
     g_assert(contents && contents[0]);
     g_assert(strstr(contents, "DEVICE=\"vlan201\"  \n"));
-    g_free(contents);
 
     connection = _connection_from_file(testfile, NULL, TYPE_ETHERNET, NULL);
 
-    s_vlan = nm_connection_get_setting_vlan(connection);
-    g_assert(s_vlan);
+    s_vlan = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_VLAN);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "vlan201");
     g_assert_cmpstr(nm_setting_vlan_get_parent(s_vlan), ==, "enccw0.0.fb00");
     g_assert_cmpint(nm_setting_vlan_get_id(s_vlan), ==, 201);
     g_assert_cmpint(nm_setting_vlan_get_flags(s_vlan), ==, NM_VLAN_FLAG_REORDER_HEADERS);
-
-    g_object_unref(connection);
 }
 
 /*****************************************************************************/
@@ -10998,31 +9594,28 @@ test_utils_name(void)
 static void
 do_test_utils_path_ifcfg(const char *desc, const char *path, const char *expected)
 {
-    char *result;
+    gs_free char *result = NULL;
 
     result = utils_get_ifcfg_path(path);
     g_assert_cmpstr(result, ==, expected);
-    g_free(result);
 }
 
 static void
 do_test_utils_path_keys(const char *desc, const char *path, const char *expected)
 {
-    char *result;
+    gs_free char *result = NULL;
 
     result = utils_get_keys_path(path);
     g_assert_cmpstr(result, ==, expected);
-    g_free(result);
 }
 
 static void
 do_test_utils_path_route(const char *desc, const char *path, const char *expected)
 {
-    char *result;
+    gs_free char *result = NULL;
 
     result = utils_get_route_path(path);
     g_assert_cmpstr(result, ==, expected);
-    g_free(result);
 }
 
 static void
@@ -11092,15 +9685,15 @@ test_sriov_read(void)
     NMSriovVF *                   vf;
     GVariant *                    variant;
     GError *                      error = NULL;
-    char *                        str;
+    gs_free char *                str1  = NULL;
+    gs_free char *                str2  = NULL;
 
     connection =
         _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-sriov", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "eth0");
 
-    s_sriov = NM_SETTING_SRIOV(nm_connection_get_setting(connection, NM_TYPE_SETTING_SRIOV));
-    g_assert(s_sriov);
+    s_sriov = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_SRIOV);
 
     g_assert_cmpint(nm_setting_sriov_get_total_vfs(s_sriov), ==, 16);
     g_assert_cmpint(nm_setting_sriov_get_num_vfs(s_sriov), ==, 3);
@@ -11122,18 +9715,16 @@ test_sriov_read(void)
     g_assert_cmpint(g_variant_get_boolean(variant), ==, TRUE);
 
     /* VF 12 */
-    vf  = nm_setting_sriov_get_vf(s_sriov, 1);
-    str = nm_utils_sriov_vf_to_str(vf, FALSE, &error);
+    vf   = nm_setting_sriov_get_vf(s_sriov, 1);
+    str1 = nm_utils_sriov_vf_to_str(vf, FALSE, &error);
     g_assert_no_error(error);
-    g_assert_cmpstr(str, ==, "12 min-tx-rate=100 trust=false vlans=1.200.ad");
-    g_free(str);
+    g_assert_cmpstr(str1, ==, "12 min-tx-rate=100 trust=false vlans=1.200.ad");
 
     /* VF 15 */
-    vf  = nm_setting_sriov_get_vf(s_sriov, 2);
-    str = nm_utils_sriov_vf_to_str(vf, FALSE, &error);
+    vf   = nm_setting_sriov_get_vf(s_sriov, 2);
+    str2 = nm_utils_sriov_vf_to_str(vf, FALSE, &error);
     g_assert_no_error(error);
-    g_assert_cmpstr(str, ==, "15 mac=01:23:45:67:89:ab max-tx-rate=200 vlans=2");
-    g_free(str);
+    g_assert_cmpstr(str2, ==, "15 mac=01:23:45:67:89:ab max-tx-rate=200 vlans=2");
 }
 
 static void
@@ -11145,7 +9736,6 @@ test_sriov_write(void)
     NMSettingConnection *         s_con;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    NMSettingWired *              s_wired;
     NMSettingSriov *              s_sriov;
     NMSriovVF *                   vf;
     gs_unref_ptrarray GPtrArray *vfs = NULL;
@@ -11154,10 +9744,7 @@ test_sriov_write(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write SR-IOV config",
@@ -11171,14 +9758,9 @@ test_sriov_write(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -11193,15 +9775,10 @@ test_sriov_write(void)
     nm_setting_ip_config_add_address(s_ip4, addr);
     nm_ip_address_unref(addr);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
-    /* SRIOV setting */
-    s_sriov = (NMSettingSriov *) nm_setting_sriov_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_sriov));
+    s_sriov = _nm_connection_new_setting(connection, NM_TYPE_SETTING_SRIOV);
 
     vfs = g_ptr_array_new_with_free_func((GDestroyNotify) nm_sriov_vf_unref);
 
@@ -11222,7 +9799,7 @@ test_sriov_write(void)
                  NM_TERNARY_TRUE,
                  NULL);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_verifies_without_normalization(connection);
 
@@ -11241,18 +9818,17 @@ test_sriov_write(void)
 static void
 test_tc_read(void)
 {
-    NMConnection *     connection;
-    NMSettingTCConfig *s_tc;
-    NMTCQdisc *        qdisc;
-    NMTCTfilter *      filter;
-    char *             str;
+    gs_unref_object NMConnection *connection = NULL;
+    NMSettingTCConfig *           s_tc;
+    NMTCQdisc *                   qdisc;
+    NMTCTfilter *                 filter;
+    gs_free char *                str = NULL;
 
     connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-tc", NULL, TYPE_ETHERNET, NULL);
 
     g_assert_cmpstr(nm_connection_get_interface_name(connection), ==, "eth0");
 
-    s_tc = nm_connection_get_setting_tc_config(connection);
-    g_assert(s_tc);
+    s_tc = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_TC_CONFIG);
 
     g_assert_cmpint(nm_setting_tc_config_get_num_qdiscs(s_tc), ==, 1);
     qdisc = nm_setting_tc_config_get_qdisc(s_tc, 0);
@@ -11266,9 +9842,6 @@ test_tc_read(void)
     g_assert(filter);
     str = nm_utils_tc_tfilter_to_str(filter, NULL);
     g_assert_cmpstr(str, ==, "parent 1234: matchall action simple sdata Hello");
-    g_free(str);
-
-    g_object_unref(connection);
 }
 
 static void
@@ -11280,17 +9853,12 @@ test_tc_write_empty(void)
     NMSettingConnection *         s_con;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    NMSettingWired *              s_wired;
-    NMSettingTCConfig *           s_tc;
     NMIPAddress *                 addr;
     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));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write TC config",
@@ -11304,14 +9872,9 @@ test_tc_write_empty(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -11326,17 +9889,12 @@ test_tc_write_empty(void)
     nm_setting_ip_config_add_address(s_ip4, addr);
     nm_ip_address_unref(addr);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
-    /* TC setting */
-    s_tc = (NMSettingTCConfig *) nm_setting_tc_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_tc));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_TC_CONFIG);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_verifies_without_normalization(connection);
 
@@ -11359,7 +9917,6 @@ test_tc_write(void)
     NMSettingConnection *         s_con;
     NMSettingIPConfig *           s_ip4;
     NMSettingIPConfig *           s_ip6;
-    NMSettingWired *              s_wired;
     NMSettingTCConfig *           s_tc;
     NMTCQdisc *                   qdisc;
     NMTCTfilter *                 tfilter;
@@ -11368,10 +9925,7 @@ test_tc_write(void)
 
     connection = nm_simple_connection_new();
 
-    /* Connection setting */
-    s_con = (NMSettingConnection *) nm_setting_connection_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_con));
-
+    s_con = _nm_connection_new_setting(connection, NM_TYPE_SETTING_CONNECTION);
     g_object_set(s_con,
                  NM_SETTING_CONNECTION_ID,
                  "Test Write TC config",
@@ -11385,14 +9939,9 @@ test_tc_write(void)
                  NM_SETTING_WIRED_SETTING_NAME,
                  NULL);
 
-    /* Wired setting */
-    s_wired = (NMSettingWired *) nm_setting_wired_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_wired));
-
-    /* IP4 setting */
-    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_WIRED);
 
+    s_ip4 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP4_CONFIG);
     g_object_set(s_ip4,
                  NM_SETTING_IP_CONFIG_METHOD,
                  NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
@@ -11407,15 +9956,10 @@ test_tc_write(void)
     nm_setting_ip_config_add_address(s_ip4, addr);
     nm_ip_address_unref(addr);
 
-    /* IP6 setting */
-    s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_ip6));
-
+    s_ip6 = _nm_connection_new_setting(connection, NM_TYPE_SETTING_IP6_CONFIG);
     g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE, NULL);
 
-    /* TC setting */
-    s_tc = (NMSettingTCConfig *) nm_setting_tc_config_new();
-    nm_connection_add_setting(connection, NM_SETTING(s_tc));
+    s_tc = _nm_connection_new_setting(connection, NM_TYPE_SETTING_TC_CONFIG);
 
     qdisc = nm_tc_qdisc_new("pfifo_fast", TC_H_MAKE(0x2468 << 16, 0x2), &error);
     g_assert_no_error(error);
@@ -11428,7 +9972,7 @@ test_tc_write(void)
     nm_setting_tc_config_add_tfilter(s_tc, tfilter);
     nm_tc_tfilter_unref(tfilter);
 
-    nm_connection_add_setting(connection, nm_setting_proxy_new());
+    _nm_connection_new_setting(connection, NM_TYPE_SETTING_PROXY);
 
     nmtst_assert_connection_verifies_without_normalization(connection);
 
@@ -12040,6 +10584,8 @@ main(int argc, char **argv)
     g_test_add_func(TPATH "bond/write-slave", test_write_bond_slave);
     g_test_add_func(TPATH "bond/write-slave-ib", test_write_bond_slave_ib);
     g_test_add_func(TPATH "bond/bonding-opts-numeric-mode", test_read_bond_opts_mode_numeric);
+    g_test_add_func(TPATH "bond/read-bond-port", test_read_bond_port);
+    g_test_add_func(TPATH "bond/write-bond-port", test_write_bond_port);
 
     g_test_add_func(TPATH "bridge/read-master", test_read_bridge_main);
     g_test_add_func(TPATH "bridge/write-master", test_write_bridge_main);
diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c
index a8a9c40a..84986877 100644
--- a/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c
+++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-interface-parser.c
@@ -112,7 +112,7 @@ _recursive_ifparser(if_parser *parser, const char *eni_file, int quiet)
     /* Check if interfaces file exists and open it */
     if (!g_file_test(eni_file, G_FILE_TEST_EXISTS)) {
         if (!quiet)
-            _LOGW("interfaces file %s doesn't exist", eni_file);
+            _LOGI("interfaces file %s doesn't exist", eni_file);
         return;
     }
     inp = fopen(eni_file, "re");
diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c
index db6b1aef..5bad2362 100644
--- a/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c
+++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-parser.c
@@ -397,7 +397,7 @@ ifupdown_ip4_add_dns(NMSettingIPConfig *s_ip4, const char *dns)
     if (dns == NULL)
         return;
 
-    list = nm_utils_strsplit_set(dns, " \t");
+    list = nm_strsplit_set(dns, " \t");
     for (iter = list; iter && *iter; iter++) {
         if (!inet_pton(AF_INET, *iter, &addr)) {
             _LOGW("    ignoring invalid nameserver '%s'", *iter);
@@ -497,7 +497,7 @@ update_ip4_setting_from_if_block(NMConnection *connection, if_block *block, GErr
             gs_free const char **list = NULL;
             const char **        iter;
 
-            list = nm_utils_strsplit_set(search_v, " \t");
+            list = nm_strsplit_set(search_v, " \t");
             for (iter = list; iter && *iter; iter++) {
                 if (!nm_setting_ip_config_add_dns_search(s_ip4, *iter))
                     _LOGW("    duplicate DNS domain '%s'", *iter);
@@ -521,7 +521,7 @@ ifupdown_ip6_add_dns(NMSettingIPConfig *s_ip6, const char *dns)
     if (dns == NULL)
         return;
 
-    list = nm_utils_strsplit_set(dns, " \t");
+    list = nm_strsplit_set(dns, " \t");
     for (iter = list; iter && *iter; iter++) {
         if (!inet_pton(AF_INET6, *iter, &addr)) {
             _LOGW("    ignoring invalid nameserver '%s'", *iter);
@@ -605,7 +605,7 @@ update_ip6_setting_from_if_block(NMConnection *connection, if_block *block, GErr
             gs_free const char **list = NULL;
             const char **        iter;
 
-            list = nm_utils_strsplit_set(search_v, " \t");
+            list = nm_strsplit_set(search_v, " \t");
             for (iter = list; iter && *iter; iter++) {
                 if (!nm_setting_ip_config_add_dns_search(s_ip6, *iter))
                     _LOGW("    duplicate DNS domain '%s'", *iter);
diff --git a/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c b/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c
index 80a5638a..602a7327 100644
--- a/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c
+++ b/src/core/settings/plugins/ifupdown/nms-ifupdown-plugin.c
@@ -189,7 +189,7 @@ _unmanaged_specs(GHashTable *eni_ifaces)
     GSList *             specs = NULL;
     guint                i, len;
 
-    keys = nm_utils_strdict_get_keys(eni_ifaces, TRUE, &len);
+    keys = nm_strdict_get_keys(eni_ifaces, TRUE, &len);
     for (i = len; i > 0;) {
         i--;
         specs = g_slist_prepend(specs,
@@ -264,7 +264,7 @@ load_eni_ifaces(NMSIfupdownPlugin *self)
 
                     _LOGD("parse: found bridge ports %s for %s", ports, block->name);
 
-                    port_ifaces = nm_utils_strsplit_set(ports, " \t");
+                    port_ifaces = nm_strsplit_set(ports, " \t");
                     for (i = 0; port_ifaces && port_ifaces[i]; i++) {
                         const char *token = port_ifaces[i];
 
@@ -323,7 +323,7 @@ load_eni_ifaces(NMSIfupdownPlugin *self)
                       NM_PRINT_FMT_QUOTED(local, " (", local->message, ")", ""));
                 sd = NULL;
             } else {
-                nmtst_connection_assert_unchanging(connection);
+                nm_assert_connection_unchanging(connection);
                 uuid = nm_connection_get_uuid(connection);
 
                 if (!storage)
diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c b/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c
index e8ae1814..aa36ee8f 100644
--- a/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c
+++ b/src/core/settings/plugins/keyfile/nms-keyfile-plugin.c
@@ -101,27 +101,27 @@ _extra_flags_to_string(char *   str,
     const char *str0 = str;
 
     if (!is_nm_generated && !is_volatile && !is_external)
-        nm_utils_strbuf_append_str(&str, &str_len, "");
+        nm_strbuf_append_str(&str, &str_len, "");
     else {
         char ch = '(';
 
-        nm_utils_strbuf_append_c(&str, &str_len, ' ');
+        nm_strbuf_append_c(&str, &str_len, ' ');
         if (is_nm_generated) {
-            nm_utils_strbuf_append_c(&str, &str_len, ch);
-            nm_utils_strbuf_append_str(&str, &str_len, "nm-generated");
+            nm_strbuf_append_c(&str, &str_len, ch);
+            nm_strbuf_append_str(&str, &str_len, "nm-generated");
             ch = ',';
         }
         if (is_volatile) {
-            nm_utils_strbuf_append_c(&str, &str_len, ch);
-            nm_utils_strbuf_append_str(&str, &str_len, "volatile");
+            nm_strbuf_append_c(&str, &str_len, ch);
+            nm_strbuf_append_str(&str, &str_len, "volatile");
             ch = ',';
         }
         if (is_external) {
-            nm_utils_strbuf_append_c(&str, &str_len, ch);
-            nm_utils_strbuf_append_str(&str, &str_len, "external");
+            nm_strbuf_append_c(&str, &str_len, ch);
+            nm_strbuf_append_str(&str, &str_len, "external");
             ch = ',';
         }
-        nm_utils_strbuf_append_c(&str, &str_len, ')');
+        nm_strbuf_append_c(&str, &str_len, ')');
     }
 
     return str0;
diff --git a/src/core/settings/plugins/keyfile/nms-keyfile-storage.c b/src/core/settings/plugins/keyfile/nms-keyfile-storage.c
index 8c526c81..ec0634c4 100644
--- a/src/core/settings/plugins/keyfile/nms-keyfile-storage.c
+++ b/src/core/settings/plugins/keyfile/nms-keyfile-storage.c
@@ -168,7 +168,7 @@ nms_keyfile_storage_new_connection(NMSKeyfilePlugin *     plugin,
     nm_assert(filename && filename[0] == '/');
     nm_assert(storage_type >= NMS_KEYFILE_STORAGE_TYPE_RUN
               && storage_type <= _NMS_KEYFILE_STORAGE_TYPE_LIB_LAST);
-    nmtst_connection_assert_unchanging(connection_take);
+    nm_assert_connection_unchanging(connection_take);
 
     self = _storage_new(plugin,
                         nm_connection_get_uuid(connection_take),
diff --git a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
index a13c2586..4ceed49d 100644
--- a/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
+++ b/src/core/settings/plugins/keyfile/tests/test-keyfile-settings.c
@@ -992,7 +992,7 @@ test_read_intlike_ssid(void)
 
     ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
-    g_assert(nm_utils_gbytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
+    g_assert(nm_g_bytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
 }
 
 static void
@@ -1010,7 +1010,7 @@ test_read_intlike_ssid_2(void)
 
     ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
-    g_assert(nm_utils_gbytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
+    g_assert(nm_g_bytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
 }
 
 static void
@@ -1774,7 +1774,7 @@ test_write_wired_8021x_tls_connection_blob(void)
 
     password_raw = nm_setting_802_1x_get_password_raw(s_8021x);
     g_assert(password_raw);
-    g_assert(nm_utils_gbytes_equal_mem(password_raw, PASSWORD_RAW, NM_STRLEN(PASSWORD_RAW)));
+    g_assert(nm_g_bytes_equal_mem(password_raw, PASSWORD_RAW, NM_STRLEN(PASSWORD_RAW)));
 
     unlink(testfile);
 
@@ -2160,7 +2160,7 @@ test_read_new_wireless_group_names(void)
 
     ssid = nm_setting_wireless_get_ssid(s_wifi);
     g_assert(ssid);
-    g_assert(nm_utils_gbytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
+    g_assert(nm_g_bytes_equal_mem(ssid, expected_ssid, strlen(expected_ssid)));
 
     g_assert_cmpstr(nm_setting_wireless_get_mode(s_wifi), ==, NM_SETTING_WIRELESS_MODE_INFRA);