diff options
| author | Michael Biebl <biebl@debian.org> | 2019-07-31 10:51:42 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2019-07-31 10:51:42 +0200 |
| commit | 2e5fa45ddfbb5cffa1e78221f1cea706e2f298af (patch) | |
| tree | 86f69d36c56de3074280456eddc854a780b8e04b /libnm-util/tests | |
| parent | 85563b7fc7ec2cd21e38debb9b28db342e2e8e7c (diff) | |
New upstream version 1.19.90 upstream/1.19.90
Diffstat (limited to 'libnm-util/tests')
| -rw-r--r-- | libnm-util/tests/meson.build | 45 | ||||
| -rw-r--r-- | libnm-util/tests/test-crypto.c | 403 | ||||
| -rw-r--r-- | libnm-util/tests/test-general.c | 2560 | ||||
| -rw-r--r-- | libnm-util/tests/test-libnm-linking.c | 45 | ||||
| -rw-r--r-- | libnm-util/tests/test-secrets.c | 684 | ||||
| -rw-r--r-- | libnm-util/tests/test-setting-8021x.c | 407 | ||||
| -rw-r--r-- | libnm-util/tests/test-setting-dcb.c | 319 | ||||
| -rw-r--r-- | libnm-util/tests/test-settings-defaults.c | 127 |
8 files changed, 0 insertions, 4590 deletions
diff --git a/libnm-util/tests/meson.build b/libnm-util/tests/meson.build deleted file mode 100644 index 09642f31..00000000 --- a/libnm-util/tests/meson.build +++ /dev/null @@ -1,45 +0,0 @@ -deps = [ - dbus_dep, - dbus_glib_dep, - libnm_util_dep, - shared_nm_glib_aux_dep, -] - -cflags = common_cflags + [ - '-DNETWORKMANAGER_COMPILATION_TEST', -] - -test = 'test-libnm-linking' - -test_libnm_linking = executable( - test, - test + '.c', - dependencies: deps + [libnm_dep], - c_args: cflags, -) - -test_units = [ - ['test-crypto', [libtest_crypto], []], - ['test-general', [], [test_libnm_linking]], - ['test-secrets', [], []], - ['test-setting-8021x', [], []], - ['test-setting-dcb', [], []], - ['test-settings-defaults', [], []], -] - -foreach test_unit: test_units - exe = executable( - 'libnm-util-' + test_unit[0], - test_unit[0] + '.c', - dependencies: deps, - c_args: cflags, - link_with: test_unit[1], - link_depends: test_unit[2], - ) - - test( - 'libnm-util/' + test_unit[0], - test_script, - args: test_args + [exe.full_path()], - ) -endforeach diff --git a/libnm-util/tests/test-crypto.c b/libnm-util/tests/test-crypto.c deleted file mode 100644 index af6028a5..00000000 --- a/libnm-util/tests/test-crypto.c +++ /dev/null @@ -1,403 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ - -/* - * Dan Williams <dcbw@redhat.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - * Copyright 2007 - 2011 Red Hat, Inc. - */ - -#include "nm-default.h" - -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "crypto.h" -#include "nm-utils.h" - -#include "nm-utils/nm-test-utils.h" - -#define TEST_CERT_DIR NM_BUILD_SRCDIR"/libnm-core/tests/certs" - -#if 0 -static const char *pem_rsa_key_begin = "-----BEGIN RSA PRIVATE KEY-----"; -static const char *pem_rsa_key_end = "-----END RSA PRIVATE KEY-----"; - -static const char *pem_dsa_key_begin = "-----BEGIN DSA PRIVATE KEY-----"; -static const char *pem_dsa_key_end = "-----END DSA PRIVATE KEY-----"; - -static void -dump_key_to_pem (const char *key, gsize key_len, int key_type) -{ - char *b64 = NULL; - GString *str = NULL; - const char *start_tag; - const char *end_tag; - char *p; - - switch (key_type) { - case NM_CRYPTO_KEY_TYPE_RSA: - start_tag = pem_rsa_key_begin; - end_tag = pem_rsa_key_end; - break; - case NM_CRYPTO_KEY_TYPE_DSA: - start_tag = pem_dsa_key_begin; - end_tag = pem_dsa_key_end; - break; - default: - g_warning ("Unknown key type %d", key_type); - return; - } - - b64 = g_base64_encode ((const unsigned char *) key, key_len); - if (!b64) { - g_warning ("Couldn't base64 encode the key."); - goto out; - } - - str = g_string_new (NULL); - - g_string_append (str, start_tag); - g_string_append_c (str, '\n'); - - for (p = b64; p < (b64 + strlen (b64)); p += 64) { - g_string_append_len (str, p, strnlen (p, 64)); - g_string_append_c (str, '\n'); - } - - g_string_append (str, end_tag); - g_string_append_c (str, '\n'); - - g_message ("Decrypted private key:\n\n%s", str->str); - -out: - g_free (b64); - if (str) - g_string_free (str, TRUE); -} -#endif - -static void -test_cert (gconstpointer test_data) -{ - gs_free char *path = NULL; - GByteArray *array; - NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; - GError *error = NULL; - - path = g_build_filename (TEST_CERT_DIR, (const char *) test_data, NULL); - - array = crypto_load_and_verify_certificate (path, &format, &error); - nmtst_assert_success (array != NULL, error); - g_assert (format == NM_CRYPTO_FILE_FORMAT_X509); - - g_byte_array_free (array, TRUE); -} - -static GByteArray * -file_to_byte_array (const char *filename) -{ - char *contents; - GByteArray *array = NULL; - gsize length = 0; - - if (g_file_get_contents (filename, &contents, &length, NULL)) { - array = g_byte_array_sized_new (length); - g_byte_array_append (array, (guint8 *) contents, length); - g_assert (array->len == length); - g_free (contents); - } - return array; -} - -static void -test_load_private_key (const char *path, - const char *password, - const char *decrypted_path, - gboolean expect_fail, - const char *desc) -{ - NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN; - GByteArray *array, *decrypted; - GError *error = NULL; - - array = crypto_decrypt_private_key (path, password, &key_type, &error); - if (expect_fail) { - g_assert (!array); - g_assert ((password && error) || (!password && !error)); - g_assert (key_type != NM_CRYPTO_KEY_TYPE_UNKNOWN); - g_clear_error (&error); - return; - } - - g_assert (array); - g_assert (key_type == NM_CRYPTO_KEY_TYPE_RSA); - - if (decrypted_path) { - /* Compare the crypto decrypted key against a known-good decryption */ - decrypted = file_to_byte_array (decrypted_path); - g_assert (decrypted); - g_assert_cmpint (decrypted->len, >, 0); - g_assert_cmpmem (decrypted->data, decrypted->len, array->data, array->len); - - g_byte_array_free (decrypted, TRUE); - } - - g_clear_error (&error); - g_byte_array_free (array, TRUE); -} - -static void -test_load_pkcs12 (const char *path, - const char *password, - gboolean expect_fail, - const char *desc) -{ - NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; - GError *error = NULL; - - format = crypto_verify_private_key (path, password, &error); - if (expect_fail) - g_assert (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN); - else - g_assert (format == NM_CRYPTO_FILE_FORMAT_PKCS12); - g_clear_error (&error); -} - -static void -test_load_pkcs12_no_password (const char *path, const char *desc) -{ - NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; - GError *error = NULL; - - /* We should still get a valid returned crypto file format */ - format = crypto_verify_private_key (path, NULL, &error); - g_assert (format == NM_CRYPTO_FILE_FORMAT_PKCS12); -} - -static void -test_is_pkcs12 (const char *path, gboolean expect_fail, const char *desc) -{ - gboolean is_pkcs12; - - is_pkcs12 = crypto_is_pkcs12_file (path, NULL); - if (expect_fail) - g_assert (!is_pkcs12); - else - g_assert (is_pkcs12); -} - -static void -test_load_pkcs8 (const char *path, - const char *password, - gboolean expect_fail, - const char *desc) -{ - NMCryptoFileFormat format = NM_CRYPTO_FILE_FORMAT_UNKNOWN; - GError *error = NULL; - - format = crypto_verify_private_key (path, password, &error); - if (expect_fail) - g_assert (format == NM_CRYPTO_FILE_FORMAT_UNKNOWN); - else - g_assert (format == NM_CRYPTO_FILE_FORMAT_RAW_KEY); -} - -static gboolean -is_cipher_aes (const char *path) -{ - char *contents; - gsize length = 0; - const char *cipher; - gboolean is_aes = FALSE; - - if (!g_file_get_contents (path, &contents, &length, NULL)) - return FALSE; - - cipher = strstr (contents, "DEK-Info: "); - if (cipher) { - cipher += strlen ("DEK-Info: "); - if (g_str_has_prefix (cipher, "AES-128-CBC")) - is_aes = TRUE; - } - - g_free (contents); - return is_aes; -} - -static void -test_encrypt_private_key (const char *path, - const char *password, - const char *desc) -{ - NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN; - GByteArray *array, *encrypted, *re_decrypted; - GError *error = NULL; - - array = crypto_decrypt_private_key (path, password, &key_type, &error); - g_assert (array); - g_assert_no_error (error); - g_assert (key_type == NM_CRYPTO_KEY_TYPE_RSA); - - /* Now re-encrypt the private key */ - if (is_cipher_aes (path)) - encrypted = nm_utils_rsa_key_encrypt_aes (array, password, NULL, &error); - else - encrypted = nm_utils_rsa_key_encrypt (array, password, NULL, &error); - g_assert (encrypted); - g_assert_no_error (error); - - /* Then re-decrypt the private key */ - key_type = NM_CRYPTO_KEY_TYPE_UNKNOWN; - re_decrypted = crypto_decrypt_private_key_data (encrypted, password, &key_type, &error); - g_assert (re_decrypted); - g_assert_no_error (error); - g_assert (key_type == NM_CRYPTO_KEY_TYPE_RSA); - - /* Compare the original decrypted key with the re-decrypted key */ - g_assert_cmpmem (array->data, array->len, re_decrypted->data, re_decrypted->len); - - g_byte_array_free (re_decrypted, TRUE); - g_byte_array_free (encrypted, TRUE); - g_byte_array_free (array, TRUE); -} - -static void -test_key (gconstpointer test_data) -{ - char **parts, *path, *password, *decrypted_path; - int len; - - parts = g_strsplit ((const char *) test_data, ", ", -1); - len = g_strv_length (parts); - g_assert (len == 2 || len == 3); - - path = g_build_filename (TEST_CERT_DIR, parts[0], NULL); - password = parts[1]; - decrypted_path = parts[2] ? g_build_filename (TEST_CERT_DIR, parts[2], NULL) : NULL; - - test_is_pkcs12 (path, TRUE, "not-pkcs12"); - test_load_private_key (path, password, decrypted_path, FALSE, "private-key"); - test_load_private_key (path, "blahblahblah", NULL, TRUE, "private-key-bad-password"); - test_load_private_key (path, NULL, NULL, TRUE, "private-key-no-password"); - test_encrypt_private_key (path, password, "private-key-rencrypt"); - - g_free (path); - g_free (decrypted_path); - g_strfreev (parts); -} - -static void -test_pkcs12 (gconstpointer test_data) -{ - char **parts, *path, *password; - - parts = g_strsplit ((const char *) test_data, ", ", -1); - g_assert_cmpint (g_strv_length (parts), ==, 2); - - path = g_build_filename (TEST_CERT_DIR, parts[0], NULL); - password = parts[1]; - - test_is_pkcs12 (path, FALSE, "is-pkcs12"); - test_load_pkcs12 (path, password, FALSE, "pkcs12-private-key"); - test_load_pkcs12 (path, "blahblahblah", TRUE, "pkcs12-private-key-bad-password"); - test_load_pkcs12_no_password (path, "pkcs12-private-key-no-password"); - - g_free (path); - g_strfreev (parts); -} - -static void -test_pkcs8 (gconstpointer test_data) -{ - char **parts, *path, *password; - - parts = g_strsplit ((const char *) test_data, ", ", -1); - g_assert_cmpint (g_strv_length (parts), ==, 2); - - path = g_build_filename (TEST_CERT_DIR, parts[0], NULL); - password = parts[1]; - - test_is_pkcs12 (path, TRUE, "not-pkcs12"); - test_load_pkcs8 (path, password, FALSE, "pkcs8-private-key"); - - g_free (path); - g_strfreev (parts); -} - -NMTST_DEFINE (); - -int -main (int argc, char **argv) -{ - GError *error = NULL; - gboolean success; - - nmtst_init (&argc, &argv, TRUE); - - success = crypto_init (&error); - g_assert_no_error (error); - g_assert (success); - - g_test_add_data_func ("/libnm/crypto/cert/pem", - "test_ca_cert.pem", - test_cert); - g_test_add_data_func ("/libnm/crypto/cert/pem-2", - "test2_ca_cert.pem", - test_cert); - g_test_add_data_func ("/libnm/crypto/cert/der", - "test_ca_cert.der", - test_cert); - g_test_add_data_func ("/libnm/crypto/cert/pem-no-ending-newline", - "ca-no-ending-newline.pem", - test_cert); - g_test_add_data_func ("/libnm/crypto/cert/pem-combined", - "test_key_and_cert.pem", - test_cert); - g_test_add_data_func ("/libnm/crypto/cert/pem-combined-2", - "test2_key_and_cert.pem", - test_cert); - - g_test_add_data_func ("/libnm/crypto/key/padding-6", - "test_key_and_cert.pem, test, test-key-only-decrypted.der", - test_key); - g_test_add_data_func ("/libnm/crypto/key/key-only", - "test-key-only.pem, test, test-key-only-decrypted.der", - test_key); - g_test_add_data_func ("/libnm/crypto/key/padding-8", - "test2_key_and_cert.pem, 12345testing", - test_key); - g_test_add_data_func ("/libnm/crypto/key/aes-128", - "test-aes-128-key.pem, test-aes-password", - test_key); - - g_test_add_data_func ("/libnm/crypto/PKCS#12/1", - "test-cert.p12, test", - test_pkcs12); - g_test_add_data_func ("/libnm/crypto/PKCS#12/2", - "test2-cert.p12, 12345testing", - test_pkcs12); - - g_test_add_data_func ("/libnm/crypto/PKCS#8", - "pkcs8-enc-key.pem, 1234567890", - test_pkcs8); - - return g_test_run (); -} - diff --git a/libnm-util/tests/test-general.c b/libnm-util/tests/test-general.c deleted file mode 100644 index 9e097f19..00000000 --- a/libnm-util/tests/test-general.c +++ /dev/null @@ -1,2560 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright 2008 - 2011 Red Hat, Inc. - * - */ - -#include "nm-default.h" - -#include <dbus/dbus-glib.h> -#include <string.h> -#include <netinet/ether.h> -#include <linux/if_infiniband.h> -#include <sys/wait.h> -#include <sys/resource.h> - -#include "nm-utils.h" -#include "nm-gvaluearray-compat.h" - -#include "nm-setting-private.h" -#include "nm-setting-connection.h" -#include "nm-setting-vpn.h" -#include "nm-setting-gsm.h" -#include "nm-setting-cdma.h" -#include "nm-setting-wired.h" -#include "nm-setting-wireless-security.h" -#include "nm-setting-ip6-config.h" -#include "nm-setting-ip4-config.h" -#include "nm-setting-pppoe.h" -#include "nm-setting-serial.h" -#include "nm-setting-vlan.h" -#include "nm-setting-bond.h" -#include "nm-utils.h" -#include "nm-dbus-glib-types.h" - -#include "nm-utils/nm-test-utils.h" - -static void -vpn_check_func (const char *key, const char *value, gpointer user_data) -{ - if (!strcmp (key, "foobar1")) { - g_assert_cmpstr (value, ==, "blahblah1"); - return; - } - - if (!strcmp (key, "foobar2")) { - g_assert_cmpstr (value, ==, "blahblah2"); - return; - } - - if (!strcmp (key, "foobar3")) { - g_assert_cmpstr (value, ==, "blahblah3"); - return; - } - - if (!strcmp (key, "foobar4")) { - g_assert_cmpstr (value, ==, "blahblah4"); - return; - } - - g_assert_not_reached (); -} - -static void -vpn_check_empty_func (const char *key, const char *value, gpointer user_data) -{ - g_assert_not_reached (); -} - -static void -test_setting_vpn_items (void) -{ - NMSettingVPN *s_vpn; - - s_vpn = (NMSettingVPN *) nm_setting_vpn_new (); - g_assert (s_vpn); - - nm_setting_vpn_add_data_item (s_vpn, "foobar1", "blahblah1"); - nm_setting_vpn_add_data_item (s_vpn, "foobar2", "blahblah2"); - nm_setting_vpn_add_data_item (s_vpn, "foobar3", "blahblah3"); - nm_setting_vpn_add_data_item (s_vpn, "foobar4", "blahblah4"); - - /* Ensure that added values are all present */ - nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_func, NULL); - nm_setting_vpn_remove_data_item (s_vpn, "foobar1"); - nm_setting_vpn_remove_data_item (s_vpn, "foobar2"); - nm_setting_vpn_remove_data_item (s_vpn, "foobar3"); - nm_setting_vpn_remove_data_item (s_vpn, "foobar4"); - - nm_setting_vpn_add_secret (s_vpn, "foobar1", "blahblah1"); - nm_setting_vpn_add_secret (s_vpn, "foobar2", "blahblah2"); - nm_setting_vpn_add_secret (s_vpn, "foobar3", "blahblah3"); - nm_setting_vpn_add_secret (s_vpn, "foobar4", "blahblah4"); - - /* Ensure that added values are all present */ - nm_setting_vpn_foreach_secret (s_vpn, vpn_check_func, NULL); - nm_setting_vpn_remove_secret (s_vpn, "foobar1"); - nm_setting_vpn_remove_secret (s_vpn, "foobar2"); - nm_setting_vpn_remove_secret (s_vpn, "foobar3"); - nm_setting_vpn_remove_secret (s_vpn, "foobar4"); - - /* Try to add some blank values and make sure they are rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (key != NULL)); - nm_setting_vpn_add_data_item (s_vpn, NULL, NULL); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strlen (key) > 0)); - nm_setting_vpn_add_data_item (s_vpn, "", ""); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (item != NULL)); - nm_setting_vpn_add_data_item (s_vpn, "foobar1", NULL); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strlen (item) > 0)); - nm_setting_vpn_add_data_item (s_vpn, "foobar1", ""); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (key != NULL)); - nm_setting_vpn_add_data_item (s_vpn, NULL, "blahblah1"); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strlen (key) > 0)); - nm_setting_vpn_add_data_item (s_vpn, "", "blahblah1"); - g_test_assert_expected_messages (); - - nm_setting_vpn_foreach_data_item (s_vpn, vpn_check_empty_func, NULL); - - /* Try to add some blank secrets and make sure they are rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (key != NULL)); - nm_setting_vpn_add_secret (s_vpn, NULL, NULL); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strlen (key) > 0)); - nm_setting_vpn_add_secret (s_vpn, "", ""); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (secret != NULL)); - nm_setting_vpn_add_secret (s_vpn, "foobar1", NULL); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strlen (secret) > 0)); - nm_setting_vpn_add_secret (s_vpn, "foobar1", ""); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (key != NULL)); - nm_setting_vpn_add_secret (s_vpn, NULL, "blahblah1"); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strlen (key) > 0)); - nm_setting_vpn_add_secret (s_vpn, "", "blahblah1"); - g_test_assert_expected_messages (); - - nm_setting_vpn_foreach_secret (s_vpn, vpn_check_empty_func, NULL); - - g_object_unref (s_vpn); -} - -static void -test_setting_vpn_update_secrets (void) -{ - NMConnection *connection; - NMSettingVPN *s_vpn; - GHashTable *settings, *vpn, *secrets; - GValue val = G_VALUE_INIT; - gboolean success; - GError *error = NULL; - const char *tmp; - const char *key1 = "foobar"; - const char *key2 = "blahblah"; - const char *val1 = "value1"; - const char *val2 = "value2"; - - connection = nm_connection_new (); - g_assert (connection); - - s_vpn = (NMSettingVPN *) nm_setting_vpn_new (); - g_assert (s_vpn); - nm_connection_add_setting (connection, NM_SETTING (s_vpn)); - - settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_hash_table_destroy); - vpn = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_value_unset); - g_hash_table_insert (settings, NM_SETTING_VPN_SETTING_NAME, vpn); - - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL); - g_value_init (&val, DBUS_TYPE_G_MAP_OF_STRING); - g_value_take_boxed (&val, secrets); - g_hash_table_insert (vpn, NM_SETTING_VPN_SECRETS, &val); - - /* Add some secrets */ - g_hash_table_insert (secrets, (char *) key1, (char *) val1); - g_hash_table_insert (secrets, (char *) key2, (char *) val2); - - success = nm_connection_update_secrets (connection, NM_SETTING_VPN_SETTING_NAME, settings, &error); - g_assert_no_error (error); - g_assert (success); - - /* Read the secrets back out */ - tmp = nm_setting_vpn_get_secret (s_vpn, key1); - g_assert (tmp); - g_assert_cmpstr (tmp, ==, val1); - - tmp = nm_setting_vpn_get_secret (s_vpn, key2); - g_assert (tmp); - g_assert_cmpstr (tmp, ==, val2); - - g_hash_table_destroy (settings); - g_object_unref (connection); -} - -#define TO_DEL_NUM 50 -typedef struct { - NMSettingVPN *s_vpn; - char *to_del[TO_DEL_NUM]; - guint called; -} IterInfo; - -static void -del_iter_func (const char *key, const char *value, gpointer user_data) -{ - IterInfo *info = user_data; - int i; - - /* Record how many times this function gets called; it should get called - * exactly as many times as there are keys in the hash table, regardless - * of what keys we delete from the table. - */ - info->called++; - - /* During the iteration, remove a bunch of stuff from the table */ - if (info->called == 1) { - for (i = 0; i < TO_DEL_NUM; i++) - nm_setting_vpn_remove_data_item (info->s_vpn, info->to_del[i]); - } -} - -static void -test_setting_vpn_modify_during_foreach (void) -{ - NMSettingVPN *s_vpn; - IterInfo info; - char *key, *val; - int i, u = 0; - - s_vpn = (NMSettingVPN *) nm_setting_vpn_new (); - g_assert (s_vpn); - - for (i = 0; i < TO_DEL_NUM * 2; i++) { - key = g_strdup_printf ("adsfasdfadf%d", i); - val = g_strdup_printf ("42263236236awt%d", i); - nm_setting_vpn_add_data_item (s_vpn, key, val); - - /* Cache some keys to delete */ - if (i % 2) - info.to_del[u++] = g_strdup (key); - - g_free (key); - g_free (val); - } - - /* Iterate over current table keys */ - info.s_vpn = s_vpn; - info.called = 0; - nm_setting_vpn_foreach_data_item (s_vpn, del_iter_func, &info); - - /* Make sure all the things we removed during iteration are really gone */ - for (i = 0; i < TO_DEL_NUM; i++) { - g_assert_cmpstr (nm_setting_vpn_get_data_item (s_vpn, info.to_del[i]), ==, NULL); - g_free (info.to_del[i]); - } - - /* And make sure the foreach callback was called the same number of times - * as there were keys in the table at the beginning of the foreach. - */ - g_assert_cmpint (info.called, ==, TO_DEL_NUM * 2); - - g_object_unref (s_vpn); -} - -static void -_g_value_array_free (void *ptr) -{ - if (ptr) - g_value_array_free ((GValueArray *) ptr); -} - -#define OLD_DBUS_TYPE_G_IP6_ADDRESS (dbus_g_type_get_struct ("GValueArray", DBUS_TYPE_G_UCHAR_ARRAY, G_TYPE_UINT, G_TYPE_INVALID)) -#define OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS (dbus_g_type_get_collection ("GPtrArray", OLD_DBUS_TYPE_G_IP6_ADDRESS)) - -/* Test that setting the IPv6 setting's 'addresses' property using the old - * IPv6 address format still works, i.e. that the GValue transformation function - * from old->new is working correctly. - */ -static void -test_setting_ip6_config_old_address_array (void) -{ - NMSettingIP6Config *s_ip6; - GPtrArray *addresses, *read_addresses; - GValueArray *array, *read_array; - GValue element = G_VALUE_INIT, written_value = G_VALUE_INIT, read_value = G_VALUE_INIT; - GByteArray *ba; - const guint8 addr[16] = { 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, - 0x11, 0x22, 0x33, 0x44, 0x66, 0x77, 0x88, 0x99 }; - const guint8 gw[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - guint32 prefix = 56; - GValue *read_addr, *read_prefix, *read_gw; - - s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); - g_assert (s_ip6); - - g_value_init (&written_value, OLD_DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS); - - addresses = g_ptr_array_new_full (0, _g_value_array_free); - array = g_value_array_new (3); - - /* IP address */ - g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY); - ba = g_byte_array_new (); - g_byte_array_append (ba, &addr[0], sizeof (addr)); - g_value_take_boxed (&element, ba); - g_value_array_append (array, &element); - g_value_unset (&element); - - /* Prefix */ - g_value_init (&element, G_TYPE_UINT); - g_value_set_uint (&element, prefix); - g_value_array_append (array, &element); - g_value_unset (&element); - - g_ptr_array_add (addresses, array); - g_value_set_boxed (&written_value, addresses); - - /* Set the address array on the object */ - g_object_set_property (G_OBJECT (s_ip6), NM_SETTING_IP6_CONFIG_ADDRESSES, &written_value); - - /* Get it back so we can compare it */ - g_value_init (&read_value, DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS); - g_object_get_property (G_OBJECT (s_ip6), NM_SETTING_IP6_CONFIG_ADDRESSES, &read_value); - - g_assert (G_VALUE_HOLDS (&read_value, DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS)); - - read_addresses = (GPtrArray *) g_value_get_boxed (&read_value); - g_assert (read_addresses); - g_assert_cmpint (read_addresses->len, ==, 1); - - read_array = (GValueArray *) g_ptr_array_index (read_addresses, 0); - - read_addr = g_value_array_get_nth (read_array, 0); - ba = g_value_get_boxed (read_addr); - g_assert_cmpint (ba->len, ==, sizeof (addr)); - g_assert_cmpmem (ba->data, ba->len, &addr[0], sizeof (addr)); - - read_prefix = g_value_array_get_nth (read_array, 1); - g_assert_cmpint (g_value_get_uint (read_prefix), ==, prefix); - - /* Ensure the gateway is all zeros, which is how the 2-item to 3-item - * conversion happens. - */ - read_gw = g_value_array_get_nth (read_array, 2); - ba = g_value_get_boxed (read_gw); - g_assert_cmpint (ba->len, ==, sizeof (gw)); - g_assert_cmpmem (ba->data, ba->len, &gw[0], sizeof (gw)); - - g_ptr_array_unref (addresses); - g_value_unset (&written_value); - g_value_unset (&read_value); - g_object_unref (s_ip6); -} - -static void -test_setting_gsm_apn_spaces (void) -{ - gs_unref_object NMSettingGsm *s_gsm = NULL; - const char *tmp; - - s_gsm = (NMSettingGsm *) nm_setting_gsm_new (); - g_assert (s_gsm); - - /* Trailing space */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar ", NULL); - tmp = nm_setting_gsm_get_apn (s_gsm); - g_assert_cmpstr (tmp, ==, "foobar"); - - /* Leading space */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, " foobar", NULL); - tmp = nm_setting_gsm_get_apn (s_gsm); - g_assert_cmpstr (tmp, ==, "foobar"); -} - -static void -test_setting_gsm_apn_bad_chars (void) -{ - gs_unref_object NMSettingGsm *s_gsm = NULL; - - s_gsm = (NMSettingGsm *) nm_setting_gsm_new (); - g_assert (s_gsm); - - g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL); - - /* Make sure a valid APN works */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar123.-baz", NULL); - g_assert (nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL)); - - /* Random invalid chars */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "@#%$@#%@#%", NULL); - g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL)); - - /* Spaces */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar baz", NULL); - g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL)); - - /* 0 characters long */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "", NULL); - g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL)); - - /* 65-character long */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl1", NULL); - g_assert (!nm_setting_verify (NM_SETTING (s_gsm), NULL, NULL)); -} - -static void -test_setting_gsm_apn_underscore (void) -{ - gs_unref_object NMSettingGsm *s_gsm = NULL; - GError *error = NULL; - gboolean success; - - s_gsm = (NMSettingGsm *) nm_setting_gsm_new (); - g_assert (s_gsm); - - g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL); - - /* 65-character long */ - g_object_set (s_gsm, NM_SETTING_GSM_APN, "foobar_baz", NULL); - success = nm_setting_verify (NM_SETTING (s_gsm), NULL, &error); - g_assert_no_error (error); - g_assert (success == TRUE); -} - -static void -test_setting_gsm_without_number (void) -{ - gs_unref_object NMSettingGsm *s_gsm = NULL; - GError *error = NULL; - gboolean success; - - s_gsm = (NMSettingGsm *) nm_setting_gsm_new (); - g_assert (s_gsm); - - g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, NULL, NULL); - success = nm_setting_verify (NM_SETTING (s_gsm), NULL, &error); - g_assert_no_error (error); - g_assert (success == TRUE); - - g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "", NULL); - success = nm_setting_verify (NM_SETTING (s_gsm), NULL, &error); - g_assert_error (error, NM_SETTING_GSM_ERROR, NM_SETTING_GSM_ERROR_INVALID_PROPERTY); - g_error_free (error); -} - -static NMSettingWirelessSecurity * -make_test_wsec_setting (const char *detail) -{ - NMSettingWirelessSecurity *s_wsec; - - s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); - g_assert (s_wsec); - g_object_set (s_wsec, - NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", - NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "foobarbaz", - NM_SETTING_WIRELESS_SECURITY_PSK, "random psk", - NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "aaaaaaaaaa", - NULL); - return s_wsec; -} - -static void -test_setting_to_hash_all (void) -{ - NMSettingWirelessSecurity *s_wsec; - GHashTable *hash; - - s_wsec = make_test_wsec_setting ("setting-to-hash-all"); - - hash = nm_setting_to_hash (NM_SETTING (s_wsec), NM_SETTING_HASH_FLAG_ALL); - - /* Make sure all keys are there */ - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT)); - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME)); - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_PSK)); - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)); - - g_hash_table_destroy (hash); - g_object_unref (s_wsec); -} - -static void -test_setting_to_hash_no_secrets (void) -{ - NMSettingWirelessSecurity *s_wsec; - GHashTable *hash; - - s_wsec = make_test_wsec_setting ("setting-to-hash-no-secrets"); - - hash = nm_setting_to_hash (NM_SETTING (s_wsec), NM_SETTING_HASH_FLAG_NO_SECRETS); - - /* Make sure non-secret keys are there */ - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT)); - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME)); - - /* Make sure secrets are not there */ - g_assert (!g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_PSK)); - g_assert (!g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)); - - g_hash_table_destroy (hash); - g_object_unref (s_wsec); -} - -static void -test_setting_to_hash_only_secrets (void) -{ - NMSettingWirelessSecurity *s_wsec; - GHashTable *hash; - - s_wsec = make_test_wsec_setting ("setting-to-hash-only-secrets"); - - hash = nm_setting_to_hash (NM_SETTING (s_wsec), NM_SETTING_HASH_FLAG_ONLY_SECRETS); - - /* Make sure non-secret keys are there */ - g_assert (!g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT)); - g_assert (!g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME)); - - /* Make sure secrets are not there */ - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_PSK)); - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0)); - - g_hash_table_destroy (hash); - g_object_unref (s_wsec); -} - -static void -test_connection_to_hash_setting_name (void) -{ - NMConnection *connection; - NMSettingWirelessSecurity *s_wsec; - GHashTable *hash; - - connection = nm_connection_new (); - s_wsec = make_test_wsec_setting ("connection-to-hash-setting-name"); - nm_connection_add_setting (connection, NM_SETTING (s_wsec)); - - hash = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); - - /* Make sure the keys of the first level hash are setting names, not - * the GType name of the setting objects. - */ - g_assert (g_hash_table_lookup (hash, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME)); - - g_hash_table_destroy (hash); - g_object_unref (connection); -} - -static void -test_setting_new_from_hash (void) -{ - NMSettingWirelessSecurity *s_wsec; - GHashTable *hash; - - s_wsec = make_test_wsec_setting ("setting-to-hash-all"); - hash = nm_setting_to_hash (NM_SETTING (s_wsec), NM_SETTING_HASH_FLAG_ALL); - g_object_unref (s_wsec); - - s_wsec = (NMSettingWirelessSecurity *) nm_setting_new_from_hash (NM_TYPE_SETTING_WIRELESS_SECURITY, hash); - g_hash_table_destroy (hash); - - g_assert (s_wsec); - g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "wpa-psk"); - g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, "foobarbaz"); - g_assert_cmpstr (nm_setting_wireless_security_get_psk (s_wsec), ==, "random psk"); - g_object_unref (s_wsec); -} - -static NMConnection * -new_test_connection (void) -{ - NMConnection *connection; - NMSetting *setting; - char *uuid; - guint64 timestamp = time (NULL); - - connection = nm_connection_new (); - - setting = nm_setting_connection_new (); - uuid = nm_utils_uuid_generate (); - g_object_set (G_OBJECT (setting), - NM_SETTING_CONNECTION_ID, "foobar", - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_CONNECTION_TIMESTAMP, timestamp, - NULL); - g_free (uuid); - nm_connection_add_setting (connection, setting); - - setting = nm_setting_wired_new (); - g_object_set (G_OBJECT (setting), - NM_SETTING_WIRED_MTU, 1592, - NULL); - nm_connection_add_setting (connection, setting); - - setting = nm_setting_ip4_config_new (); - g_object_set (G_OBJECT (setting), - NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, - NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "eyeofthetiger", - NULL); - nm_connection_add_setting (connection, setting); - - return connection; -} - -static GValue * -string_to_gvalue (const char *str) -{ - GValue *val; - - val = g_slice_new0 (GValue); - g_value_init (val, G_TYPE_STRING); - g_value_set_string (val, str); - return val; -} - -static void -destroy_gvalue (gpointer data) -{ - g_value_unset ((GValue *) data); - g_slice_free (GValue, data); -} - -static GHashTable * -new_connection_hash (char **out_uuid, - const char **out_expected_id, - const char **out_expected_ip6_method) -{ - GHashTable *hash; - GHashTable *setting; - - hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_hash_table_destroy); - - *out_uuid = nm_utils_uuid_generate (); - *out_expected_id = "My happy connection"; - *out_expected_ip6_method = NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL; - - /* Connection setting */ - setting = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue); - g_hash_table_insert (setting, - g_strdup (NM_SETTING_NAME), - string_to_gvalue (NM_SETTING_CONNECTION_SETTING_NAME)); - g_hash_table_insert (setting, - g_strdup (NM_SETTING_CONNECTION_ID), - string_to_gvalue (*out_expected_id)); - g_hash_table_insert (setting, - g_strdup (NM_SETTING_CONNECTION_UUID), - string_to_gvalue (*out_uuid)); - g_hash_table_insert (setting, - g_strdup (NM_SETTING_CONNECTION_TYPE), - string_to_gvalue (NM_SETTING_WIRED_SETTING_NAME)); - g_hash_table_insert (hash, g_strdup (NM_SETTING_CONNECTION_SETTING_NAME), setting); - - /* Wired setting */ - setting = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue); - g_hash_table_insert (hash, g_strdup (NM_SETTING_WIRED_SETTING_NAME), setting); - - /* IP6 */ - setting = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue); - g_hash_table_insert (setting, - g_strdup (NM_SETTING_IP6_CONFIG_METHOD), - string_to_gvalue (*out_expected_ip6_method)); - g_hash_table_insert (hash, g_strdup (NM_SETTING_IP6_CONFIG_SETTING_NAME), setting); - - return hash; -} - -static void -test_connection_replace_settings (void) -{ - NMConnection *connection; - GHashTable *new_settings; - GError *error = NULL; - gboolean success; - NMSettingConnection *s_con; - NMSettingIP6Config *s_ip6; - char *uuid = NULL; - const char *expected_id = NULL, *expected_method = NULL; - - connection = new_test_connection (); - - new_settings = new_connection_hash (&uuid, &expected_id, &expected_method); - g_assert (new_settings); - - /* Replace settings and test */ - success = nm_connection_replace_settings (connection, new_settings, &error); - g_assert_no_error (error); - g_assert (success); - - s_con = nm_connection_get_setting_connection (connection); - g_assert (s_con); - g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id); - g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid); - - g_assert (nm_connection_get_setting_wired (connection)); - g_assert (!nm_connection_get_setting_ip4_config (connection)); - - s_ip6 = nm_connection_get_setting_ip6_config (connection); - g_assert (s_ip6); - g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, expected_method); - - g_free (uuid); - g_hash_table_destroy (new_settings); - g_object_unref (connection); -} - -static void -test_connection_replace_settings_from_connection (void) -{ - NMConnection *connection, *replacement; - GError *error = NULL; - gboolean success; - NMSettingConnection *s_con; - NMSetting *setting; - GByteArray *ssid; - char *uuid = NULL; - const char *expected_id = "Awesome connection"; - - connection = new_test_connection (); - g_assert (connection); - - replacement = nm_connection_new (); - g_assert (replacement); - - /* New connection setting */ - setting = nm_setting_connection_new (); - g_assert (setting); - - uuid = nm_utils_uuid_generate (); - g_object_set (setting, - NM_SETTING_CONNECTION_ID, expected_id, - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, - NULL); - nm_connection_add_setting (replacement, setting); - - /* New wifi setting */ - setting = nm_setting_wireless_new (); - g_assert (setting); - - ssid = g_byte_array_new (); - g_byte_array_append (ssid, (const guint8 *) "1234567", 7); - g_object_set (setting, - NM_SETTING_WIRELESS_SSID, ssid, - NM_SETTING_WIRELESS_MODE, "infrastructure", - NULL); - g_byte_array_free (ssid, TRUE); - nm_connection_add_setting (replacement, setting); - - /* Replace settings and test */ - success = nm_connection_replace_settings_from_connection (connection, replacement, &error); - g_assert_no_error (error); - g_assert (success); - - s_con = nm_connection_get_setting_connection (connection); - g_assert (s_con); - g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id); - g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid); - - g_assert (!nm_connection_get_setting_wired (connection)); - g_assert (!nm_connection_get_setting_ip6_config (connection)); - g_assert (nm_connection_get_setting_wireless (connection)); - - g_free (uuid); - g_object_unref (replacement); - g_object_unref (connection); -} - -static void -test_connection_new_from_hash (void) -{ - NMConnection *connection; - GHashTable *new_settings; - GError *error = NULL; - NMSettingConnection *s_con; - NMSettingIP6Config *s_ip6; - char *uuid = NULL; - const char *expected_id = NULL, *expected_method = NULL; - - new_settings = new_connection_hash (&uuid, &expected_id, &expected_method); - g_assert (new_settings); - - /* Replace settings and test */ - connection = nm_connection_new_from_hash (new_settings, &error); - g_assert_no_error (error); - g_assert (connection); - - s_con = nm_connection_get_setting_connection (connection); - g_assert (s_con); - g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id); - g_assert_cmpstr (nm_setting_connection_get_uuid (s_con), ==, uuid); - - g_assert (nm_connection_get_setting_wired (connection)); - g_assert (!nm_connection_get_setting_ip4_config (connection)); - - s_ip6 = nm_connection_get_setting_ip6_config (connection); - g_assert (s_ip6); - g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, expected_method); - - g_free (uuid); - g_hash_table_destroy (new_settings); - g_object_unref (connection); -} - -static void -check_permission (NMSettingConnection *s_con, - guint32 idx, - const char *expected_uname) -{ - gboolean success; - const char *ptype = NULL, *pitem = NULL, *detail = NULL; - - success = nm_setting_connection_get_permission (s_con, 0, &ptype, &pitem, &detail); - g_assert (success); - - g_assert_cmpstr (ptype, ==, "user"); - - g_assert (pitem); - g_assert_cmpstr (pitem, ==, expected_uname); - - g_assert (!detail); -} - -#define TEST_UNAME "asdfasfasdf" - -static void -test_setting_connection_permissions_helpers (void) -{ - NMSettingConnection *s_con; - gboolean success; - char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 }; - GSList *list = NULL; - const char *expected_perm = "user:" TEST_UNAME ":"; - - s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); - - /* Ensure a bad [type] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strcmp (ptype, "user") == 0)); - success = nm_setting_connection_add_permission (s_con, "foobar", "blah", NULL); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure a bad [type] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (ptype)); - success = nm_setting_connection_add_permission (s_con, NULL, "blah", NULL); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure a bad [item] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (uname)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (p != NULL)); - success = nm_setting_connection_add_permission (s_con, "user", NULL, NULL); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure a bad [item] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (uname[0] != '\0')); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (p != NULL)); - success = nm_setting_connection_add_permission (s_con, "user", "", NULL); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure an [item] with ':' is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strchr (uname, ':') == NULL)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (p != NULL)); - success = nm_setting_connection_add_permission (s_con, "user", "ad:asdf", NULL); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure a non-UTF-8 [item] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (g_utf8_validate (uname, -1, NULL) == TRUE)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (p != NULL)); - success = nm_setting_connection_add_permission (s_con, "user", buf, NULL); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure a non-NULL [detail] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (detail == NULL)); - success = nm_setting_connection_add_permission (s_con, "user", "dafasdf", "asdf"); - g_test_assert_expected_messages (); - g_assert (!success); - - /* Ensure a valid call results in success */ - success = nm_setting_connection_add_permission (s_con, "user", TEST_UNAME, NULL); - g_assert (success); - - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 1); - - check_permission (s_con, 0, TEST_UNAME); - - /* Check the actual GObject property just to be paranoid */ - g_object_get (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, &list, NULL); - g_assert (list); - g_assert_cmpint (g_slist_length (list), ==, 1); - g_assert_cmpstr (list->data, ==, expected_perm); - g_slist_free_full (list, g_free); - - /* Now remove that permission and ensure we have 0 permissions */ - nm_setting_connection_remove_permission (s_con, 0); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - g_object_unref (s_con); -} - -static void -add_permission_property (NMSettingConnection *s_con, - const char *ptype, - const char *pitem, - int pitem_len, - const char *detail) -{ - GString *str; - GSList *list = NULL; - - str = g_string_sized_new (50); - if (ptype) - g_string_append (str, ptype); - g_string_append_c (str, ':'); - - if (pitem) { - if (pitem_len >= 0) - g_string_append_len (str, pitem, pitem_len); - else - g_string_append (str, pitem); - } - - g_string_append_c (str, ':'); - - if (detail) - g_string_append (str, detail); - - list = g_slist_append (list, str->str); - g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, list, NULL); - - g_string_free (str, TRUE); - g_slist_free (list); -} - -static void -test_setting_connection_permissions_property (void) -{ - NMSettingConnection *s_con; - gboolean success; - char buf[9] = { 0x61, 0x62, 0x63, 0xff, 0xfe, 0xfd, 0x23, 0x01, 0x00 }; - - s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); - - /* Ensure a bad [type] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0)); - add_permission_property (s_con, "foobar", "blah", -1, NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure a bad [type] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (strncmp (str, PERM_USER_PREFIX, strlen (PERM_USER_PREFIX)) == 0)); - add_permission_property (s_con, NULL, "blah", -1, NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure a bad [item] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (last_colon > str)); - add_permission_property (s_con, "user", NULL, -1, NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure a bad [item] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (last_colon > str)); - add_permission_property (s_con, "user", "", -1, NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure an [item] with ':' in the middle is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (str[i] != ':')); - add_permission_property (s_con, "user", "ad:asdf", -1, NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure an [item] with ':' at the end is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (str[i] != ':')); - add_permission_property (s_con, "user", "adasdfaf:", -1, NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure a non-UTF-8 [item] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (g_utf8_validate (str, -1, NULL) == TRUE)); - add_permission_property (s_con, "user", buf, (int) sizeof (buf), NULL); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure a non-NULL [detail] is rejected */ - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (*(last_colon + 1) == '\0')); - add_permission_property (s_con, "user", "dafasdf", -1, "asdf"); - g_test_assert_expected_messages (); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - /* Ensure a valid call results in success */ - success = nm_setting_connection_add_permission (s_con, "user", TEST_UNAME, NULL); - g_assert (success); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 1); - - check_permission (s_con, 0, TEST_UNAME); - - /* Now remove that permission and ensure we have 0 permissions */ - nm_setting_connection_remove_permission (s_con, 0); - g_assert_cmpint (nm_setting_connection_get_num_permissions (s_con), ==, 0); - - g_object_unref (s_con); -} - -static void -test_connection_compare_same (void) -{ - NMConnection *a, *b; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - g_assert (nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_compare_key_only_in_a (void) -{ - NMConnection *a, *b; - NMSettingConnection *s_con; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION); - g_assert (s_con); - g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL); - - g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_compare_setting_only_in_a (void) -{ - NMConnection *a, *b; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - nm_connection_remove_setting (b, NM_TYPE_SETTING_IP4_CONFIG); - g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_compare_key_only_in_b (void) -{ - NMConnection *a, *b; - NMSettingConnection *s_con; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION); - g_assert (s_con); - g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL); - - g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_compare_setting_only_in_b (void) -{ - NMConnection *a, *b; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - nm_connection_remove_setting (a, NM_TYPE_SETTING_IP4_CONFIG); - g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); - g_object_unref (a); - g_object_unref (b); -} - -typedef struct { - const char *key_name; - guint32 result; -} DiffKey; - -typedef struct { - const char *name; - DiffKey keys[30]; -} DiffSetting; - -#define ARRAY_LEN(a) (sizeof (a) / sizeof (a[0])) - -static void -ensure_diffs (GHashTable *diffs, const DiffSetting *check, gsize n_check) -{ - guint i; - - g_assert (g_hash_table_size (diffs) == n_check); - - /* Loop through the settings */ - for (i = 0; i < n_check; i++) { - GHashTable *setting_hash; - guint z = 0; - - setting_hash = g_hash_table_lookup (diffs, check[i].name); - g_assert (setting_hash); - - /* Get the number of keys to check */ - while (check[i].keys[z].key_name) - z++; - g_assert (g_hash_table_size (setting_hash) == z); - - /* Now compare the actual keys */ - for (z = 0; check[i].keys[z].key_name; z++) { - NMSettingDiffResult result; - - result = GPOINTER_TO_UINT (g_hash_table_lookup (setting_hash, check[i].keys[z].key_name)); - g_assert (result == check[i].keys[z].result); - } - } -} - -static void -test_connection_diff_a_only (void) -{ - NMConnection *connection; - GHashTable *out_diffs = NULL; - gboolean same; - const DiffSetting settings[] = { - { NM_SETTING_CONNECTION_SETTING_NAME, { - { NM_SETTING_CONNECTION_ID, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_UUID, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_TYPE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_TIMESTAMP, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_AUTOCONNECT, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_READ_ONLY, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_PERMISSIONS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_ZONE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_MASTER, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_SECONDARIES, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A }, - { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN } - } }, - { NM_SETTING_WIRED_SETTING_NAME, { - { NM_SETTING_WIRED_PORT, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_SPEED, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_DUPLEX, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_AUTO_NEGOTIATE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_CLONED_MAC_ADDRESS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_MTU, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_S390_SUBCHANNELS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_S390_NETTYPE, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_WIRED_S390_OPTIONS, NM_SETTING_DIFF_RESULT_IN_A }, - { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }, - } }, - { NM_SETTING_IP4_CONFIG_SETTING_NAME, { - { NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_DNS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_DNS_SEARCH, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_ADDRESSES, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_ROUTES, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_ROUTE_METRIC, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_DHCP_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_DHCP_SEND_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_NEVER_DEFAULT, NM_SETTING_DIFF_RESULT_IN_A }, - { NM_SETTING_IP4_CONFIG_MAY_FAIL, NM_SETTING_DIFF_RESULT_IN_A }, - { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }, - } }, - }; - - connection = new_test_connection (); - - same = nm_connection_diff (connection, NULL, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs); - g_assert (same == FALSE); - g_assert (out_diffs != NULL); - g_assert (g_hash_table_size (out_diffs) > 0); - - ensure_diffs (out_diffs, settings, ARRAY_LEN (settings)); - - g_hash_table_destroy (out_diffs); - g_object_unref (connection); -} - -static void -test_connection_diff_same (void) -{ - NMConnection *a, *b; - GHashTable *out_diffs = NULL; - gboolean same; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - - same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs); - g_assert (same == TRUE); - g_assert (out_diffs == NULL); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_diff_different (void) -{ - NMConnection *a, *b; - GHashTable *out_diffs = NULL; - NMSettingIP4Config *s_ip4; - gboolean same; - const DiffSetting settings[] = { - { NM_SETTING_IP4_CONFIG_SETTING_NAME, { - { NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B }, - { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }, - } }, - }; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - s_ip4 = nm_connection_get_setting_ip4_config (a); - g_assert (s_ip4); - g_object_set (G_OBJECT (s_ip4), - NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, - NULL); - - same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs); - g_assert (same == FALSE); - g_assert (out_diffs != NULL); - g_assert (g_hash_table_size (out_diffs) > 0); - - ensure_diffs (out_diffs, settings, ARRAY_LEN (settings)); - - g_hash_table_destroy (out_diffs); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_diff_no_secrets (void) -{ - NMConnection *a, *b; - GHashTable *out_diffs = NULL; - NMSetting *s_pppoe; - gboolean same; - const DiffSetting settings[] = { - { NM_SETTING_PPPOE_SETTING_NAME, { - { NM_SETTING_PPPOE_PASSWORD, NM_SETTING_DIFF_RESULT_IN_B }, - { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }, - } }, - }; - - a = new_test_connection (); - s_pppoe = nm_setting_pppoe_new (); - g_object_set (G_OBJECT (s_pppoe), - NM_SETTING_PPPOE_USERNAME, "thomas", - NULL); - nm_connection_add_setting (a, s_pppoe); - - b = nm_connection_duplicate (a); - - /* Add a secret to B */ - s_pppoe = NM_SETTING (nm_connection_get_setting_pppoe (b)); - g_assert (s_pppoe); - g_object_set (G_OBJECT (s_pppoe), - NM_SETTING_PPPOE_PASSWORD, "secretpassword", - NULL); - - /* Make sure the diff returns no results as secrets are ignored */ - same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, &out_diffs); - g_assert (same == TRUE); - g_assert (out_diffs == NULL); - - /* Now make sure the diff returns results if secrets are not ignored */ - same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs); - g_assert (same == FALSE); - g_assert (out_diffs != NULL); - g_assert (g_hash_table_size (out_diffs) > 0); - - ensure_diffs (out_diffs, settings, ARRAY_LEN (settings)); - - g_hash_table_destroy (out_diffs); - g_object_unref (a); - g_object_unref (b); -} - -static void -test_connection_diff_inferrable (void) -{ - NMConnection *a, *b; - GHashTable *out_diffs = NULL; - gboolean same; - NMSettingConnection *s_con; - NMSettingWired *s_wired; - NMSettingIP4Config *s_ip4; - char *uuid; - const DiffSetting settings[] = { - { NM_SETTING_CONNECTION_SETTING_NAME, { - { NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A }, - { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN }, - } }, - }; - - a = new_test_connection (); - b = nm_connection_duplicate (a); - - /* Change the UUID, wired MTU, and set ignore-auto-dns */ - s_con = nm_connection_get_setting_connection (a); - g_assert (s_con); - uuid = nm_utils_uuid_generate (); - g_object_set (G_OBJECT (s_con), - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_ID, "really neat connection", - NULL); - g_free (uuid); - - s_wired = nm_connection_get_setting_wired (a); - g_assert (s_wired); - g_object_set (G_OBJECT (s_wired), NM_SETTING_WIRED_MTU, 300, NULL); - - s_ip4 = nm_connection_get_setting_ip4_config (a); - g_assert (s_ip4); - g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE, NULL); - - /* Make sure the diff returns no results as secrets are ignored */ - same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs); - g_assert (same == TRUE); - g_assert (out_diffs == NULL); - - /* And change a INFERRABLE property to ensure that it shows up in the diff results */ - g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_INTERFACE_NAME, "usb0", NULL); - - /* Make sure the diff returns no results as secrets are ignored */ - same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_INFERRABLE, &out_diffs); - g_assert (same == FALSE); - g_assert (out_diffs != NULL); - g_assert (g_hash_table_size (out_diffs) > 0); - - ensure_diffs (out_diffs, settings, ARRAY_LEN (settings)); - - g_hash_table_destroy (out_diffs); - g_object_unref (a); - g_object_unref (b); -} - -static void -add_generic_settings (NMConnection *connection, const char *ctype) -{ - NMSetting *setting; - char *uuid; - - uuid = nm_utils_uuid_generate (); - - setting = nm_setting_connection_new (); - g_object_set (setting, - NM_SETTING_CONNECTION_ID, "asdfasdfadf", - NM_SETTING_CONNECTION_TYPE, ctype, - NM_SETTING_CONNECTION_UUID, uuid, - NULL); - nm_connection_add_setting (connection, setting); - - g_free (uuid); - - setting = nm_setting_ip4_config_new (); - g_object_set (setting, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); - nm_connection_add_setting (connection, setting); - - setting = nm_setting_ip6_config_new (); - g_object_set (setting, NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL); - nm_connection_add_setting (connection, setting); -} - -static void -test_connection_good_base_types (void) -{ - NMConnection *connection; - NMSetting *setting; - gboolean success; - GError *error = NULL; - GByteArray *array; - const guint8 bdaddr[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; - - /* Try a basic wired connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_WIRED_SETTING_NAME); - setting = nm_setting_wired_new (); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_no_error (error); - g_assert (success); - g_object_unref (connection); - - /* Try a wired PPPoE connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_PPPOE_SETTING_NAME); - setting = nm_setting_pppoe_new (); - g_object_set (setting, NM_SETTING_PPPOE_USERNAME, "bob smith", NULL); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_no_error (error); - g_assert (success); - g_object_unref (connection); - - /* Wifi connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_WIRELESS_SETTING_NAME); - - setting = nm_setting_wireless_new (); - array = g_byte_array_new (); - g_byte_array_append (array, (const guint8 *) "1234567", 7); - g_object_set (setting, - NM_SETTING_WIRELESS_SSID, array, - NM_SETTING_WIRELESS_MODE, "infrastructure", - NULL); - g_byte_array_free (array, TRUE); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_no_error (error); - g_assert (success); - g_object_unref (connection); - - /* Bluetooth connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_BLUETOOTH_SETTING_NAME); - - setting = nm_setting_bluetooth_new (); - array = g_byte_array_new (); - g_byte_array_append (array, bdaddr, sizeof (bdaddr)); - g_object_set (setting, - NM_SETTING_BLUETOOTH_BDADDR, array, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU, - NULL); - g_byte_array_free (array, TRUE); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_no_error (error); - g_assert (success); - g_object_unref (connection); - - /* WiMAX connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_WIMAX_SETTING_NAME); - setting = nm_setting_wimax_new (); - g_object_set (setting, NM_SETTING_WIMAX_NETWORK_NAME, "CLEAR", NULL); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_no_error (error); - g_assert (success); - g_object_unref (connection); - - /* GSM connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_GSM_SETTING_NAME); - - setting = nm_setting_gsm_new (); - g_object_set (setting, - NM_SETTING_GSM_NUMBER, "*99#", - NM_SETTING_GSM_APN, "metered.billing.sucks", - NULL); - nm_connection_add_setting (connection, setting); - g_clear_object (&connection); - - /* CDMA connection */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_CDMA_SETTING_NAME); - - setting = nm_setting_cdma_new (); - g_object_set (setting, - NM_SETTING_CDMA_NUMBER, "#777", - NM_SETTING_CDMA_USERNAME, "foobar@vzw.com", - NULL); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_no_error (error); - g_assert (success); - g_object_unref (connection); -} - -static void -test_connection_bad_base_types (void) -{ - NMConnection *connection; - NMSetting *setting; - gboolean success; - GError *error = NULL; - - /* Test various non-base connection types to make sure they are rejected; - * using a fake 'wired' connection so the rest of it verifies - */ - - /* Connection setting */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_CONNECTION_SETTING_NAME); - setting = nm_setting_wired_new (); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID); - g_assert (success == FALSE); - g_object_unref (connection); - g_clear_error (&error); - - /* PPP setting */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_PPP_SETTING_NAME); - setting = nm_setting_wired_new (); - nm_connection_add_setting (connection, setting); - setting = nm_setting_ppp_new (); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID); - g_assert (success == FALSE); - g_object_unref (connection); - g_clear_error (&error); - - /* Serial setting */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_SERIAL_SETTING_NAME); - setting = nm_setting_wired_new (); - nm_connection_add_setting (connection, setting); - setting = nm_setting_serial_new (); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID); - g_assert (success == FALSE); - g_object_unref (connection); - g_clear_error (&error); - - /* IP4 setting */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_IP4_CONFIG_SETTING_NAME); - setting = nm_setting_wired_new (); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID); - g_assert (success == FALSE); - g_object_unref (connection); - g_clear_error (&error); - - /* IP6 setting */ - connection = nm_connection_new (); - add_generic_settings (connection, NM_SETTING_IP6_CONFIG_SETTING_NAME); - setting = nm_setting_wired_new (); - nm_connection_add_setting (connection, setting); - - success = nm_connection_verify (connection, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID); - g_assert (success == FALSE); - g_object_unref (connection); - g_clear_error (&error); -} - -static void -test_setting_compare_id (void) -{ - gs_unref_object NMSetting *old = NULL, *new = NULL; - gboolean success; - - old = nm_setting_connection_new (); - g_object_set (old, - NM_SETTING_CONNECTION_ID, "really awesome cool connection", - NM_SETTING_CONNECTION_UUID, "fbbd59d5-acab-4e30-8f86-258d272617e7", - NM_SETTING_CONNECTION_AUTOCONNECT, FALSE, - NULL); - - new = nm_setting_duplicate (old); - g_object_set (new, NM_SETTING_CONNECTION_ID, "some different connection id", NULL); - - /* First make sure they are different */ - success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT); - g_assert (success == FALSE); - - success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_IGNORE_ID); - g_assert (success); -} - -static void -_compare_secrets (NMSettingSecretFlags secret_flags, - NMSettingCompareFlags comp_flags, - gboolean remove_secret) -{ - gs_unref_object NMSetting *old = NULL, *new = NULL; - gboolean success; - - /* Make sure that a connection with transient/unsaved secrets compares - * successfully to the same connection without those secrets. - */ - - old = nm_setting_wireless_security_new (); - g_object_set (old, - NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", - NM_SETTING_WIRELESS_SECURITY_PSK, "really cool psk", - NULL); - nm_setting_set_secret_flags (old, NM_SETTING_WIRELESS_SECURITY_PSK, secret_flags, NULL); - - /* Clear the PSK from the duplicated setting */ - new = nm_setting_duplicate (old); - if (remove_secret) { - g_object_set (new, NM_SETTING_WIRELESS_SECURITY_PSK, NULL, NULL); - - success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT); - g_assert (success == FALSE); - } - - success = nm_setting_compare (old, new, comp_flags); - g_assert (success); -} - -static void -test_setting_compare_secrets (void) -{ - _compare_secrets (NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE); - _compare_secrets (NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE); - _compare_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE); - _compare_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE); -} - -static void -_compare_vpn_secrets (NMSettingSecretFlags secret_flags, - NMSettingCompareFlags comp_flags, - gboolean remove_secret) -{ - gs_unref_object NMSetting *old = NULL, *new = NULL; - gboolean success; - - /* Make sure that a connection with transient/unsaved secrets compares - * successfully to the same connection without those secrets. - */ - - old = nm_setting_vpn_new (); - nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "foobarbaz", "really secret password"); - nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "asdfasdfasdf", "really adfasdfasdfasdf"); - nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "0123456778", "abcdefghijklmnpqrstuvqxyz"); - nm_setting_vpn_add_secret (NM_SETTING_VPN (old), "borkbork", "yet another really secret password"); - nm_setting_set_secret_flags (old, "borkbork", secret_flags, NULL); - - /* Clear "borkbork" from the duplicated setting */ - new = nm_setting_duplicate (old); - if (remove_secret) { - nm_setting_vpn_remove_secret (NM_SETTING_VPN (new), "borkbork"); - - /* First make sure they are different */ - success = nm_setting_compare (old, new, NM_SETTING_COMPARE_FLAG_EXACT); - g_assert (success == FALSE); - } - - success = nm_setting_compare (old, new, comp_flags); - g_assert (success); -} - -static void -test_setting_compare_vpn_secrets (void) -{ - _compare_vpn_secrets (NM_SETTING_SECRET_FLAG_AGENT_OWNED, NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS, TRUE); - _compare_vpn_secrets (NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS, TRUE); - _compare_vpn_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_IGNORE_SECRETS, TRUE); - _compare_vpn_secrets (NM_SETTING_SECRET_FLAG_NONE, NM_SETTING_COMPARE_FLAG_EXACT, FALSE); -} - -static void -test_hwaddr_aton_ether_normal (void) -{ - guint8 buf[100]; - guint8 expected[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; - - g_assert (nm_utils_hwaddr_aton ("00:11:22:33:44:55", ARPHRD_ETHER, buf) != NULL); - g_assert (memcmp (buf, expected, sizeof (expected)) == 0); -} - -static void -test_hwaddr_aton_ib_normal (void) -{ - guint8 buf[100]; - const char *source = "00:11:22:33:44:55:66:77:88:99:01:12:23:34:45:56:67:78:89:90"; - guint8 expected[INFINIBAND_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, - 0x77, 0x88, 0x99, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89, - 0x90 }; - - g_assert (nm_utils_hwaddr_aton (source, ARPHRD_INFINIBAND, buf) != NULL); - g_assert (memcmp (buf, expected, sizeof (expected)) == 0); -} - -static void -test_hwaddr_aton_no_leading_zeros (void) -{ - guint8 buf[100]; - guint8 expected[ETH_ALEN] = { 0x00, 0x1A, 0x2B, 0x03, 0x44, 0x05 }; - - g_assert (nm_utils_hwaddr_aton ("0:1a:2B:3:44:5", ARPHRD_ETHER, buf) != NULL); - g_assert (memcmp (buf, expected, sizeof (expected)) == 0); -} - -static void -test_hwaddr_aton_malformed (void) -{ - guint8 buf[100]; - - g_assert (nm_utils_hwaddr_aton ("0:1a:2B:3:a@%%", ARPHRD_ETHER, buf) == NULL); -} - -static void -test_connection_changed_cb (NMConnection *connection, gboolean *data) -{ - *data = TRUE; -} - -static void -test_ip4_prefix_to_netmask (void) -{ - int i; - - for (i = 0; i<=32; i++) { - guint32 netmask = nm_utils_ip4_prefix_to_netmask (i); - int plen = nm_utils_ip4_netmask_to_prefix (netmask); - - g_assert_cmpint (i, ==, plen); - { - guint32 msk = 0x80000000; - guint32 netmask2 = 0; - guint32 prefix = i; - while (prefix > 0) { - netmask2 |= msk; - msk >>= 1; - prefix--; - } - g_assert_cmpint (netmask, ==, (guint32) htonl (netmask2)); - } - } -} - -static void -test_ip4_netmask_to_prefix (void) -{ - int i, j; - - GRand *r = g_rand_new (); - - g_rand_set_seed (r, 1); - - for (i = 2; i<=32; i++) { - guint32 netmask = nm_utils_ip4_prefix_to_netmask (i); - guint32 netmask_lowest_bit = netmask & ~nm_utils_ip4_prefix_to_netmask (i-1); - - g_assert_cmpint (i, ==, nm_utils_ip4_netmask_to_prefix (netmask)); - - for (j = 0; j < 2*i; j++) { - guint32 n = g_rand_int (r); - guint32 netmask_holey; - guint32 prefix_holey; - - netmask_holey = (netmask & n) | netmask_lowest_bit; - - if (netmask_holey == netmask) - continue; - - /* create an invalid netmask with holes and check that the function - * returns the longest prefix. */ - prefix_holey = nm_utils_ip4_netmask_to_prefix (netmask_holey); - - g_assert_cmpint (i, ==, prefix_holey); - } - } - - g_rand_free (r); -} - -#define ASSERT_CHANGED(statement) \ -{ \ - changed = FALSE; \ - statement; \ - g_assert (changed); \ -} - -#define ASSERT_UNCHANGED(statement) \ -{ \ - changed = FALSE; \ - statement; \ - g_assert (!changed); \ -} - -static void -test_connection_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - - connection = new_test_connection (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - /* Add new setting */ - ASSERT_CHANGED (nm_connection_add_setting (connection, nm_setting_vlan_new ())); - - /* Remove existing setting */ - ASSERT_CHANGED (nm_connection_remove_setting (connection, NM_TYPE_SETTING_VLAN)); - - /* Remove non-existing setting */ - ASSERT_UNCHANGED (nm_connection_remove_setting (connection, NM_TYPE_SETTING_VLAN)); - - g_object_unref (connection); -} - -static void -test_setting_connection_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingConnection *s_con; - gs_free char *uuid = NULL; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_con = (NMSettingConnection *) nm_setting_connection_new (); - nm_connection_add_setting (connection, NM_SETTING (s_con)); - - ASSERT_CHANGED (g_object_set (s_con, NM_SETTING_CONNECTION_ID, "adfadfasdfaf", NULL)); - - ASSERT_CHANGED (nm_setting_connection_add_permission (s_con, "user", "billsmith", NULL)); - ASSERT_CHANGED (nm_setting_connection_remove_permission (s_con, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (iter != NULL)); - ASSERT_UNCHANGED (nm_setting_connection_remove_permission (s_con, 1)); - g_test_assert_expected_messages (); - - uuid = nm_utils_uuid_generate (); - ASSERT_CHANGED (nm_setting_connection_add_secondary (s_con, uuid)); - ASSERT_CHANGED (nm_setting_connection_remove_secondary (s_con, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_connection_remove_secondary (s_con, 1)); - g_test_assert_expected_messages (); - - g_object_unref (connection); -} - -static void -test_setting_bond_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingBond *s_bond; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_bond = (NMSettingBond *) nm_setting_bond_new (); - nm_connection_add_setting (connection, NM_SETTING (s_bond)); - - ASSERT_CHANGED (nm_setting_bond_add_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY, "10")); - ASSERT_CHANGED (nm_setting_bond_remove_option (s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY)); - ASSERT_UNCHANGED (nm_setting_bond_remove_option (s_bond, NM_SETTING_BOND_OPTION_UPDELAY)); - - g_object_unref (connection); -} - -static void -test_setting_ip4_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingIP4Config *s_ip4; - NMIP4Address *addr; - NMIP4Route *route; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); - nm_connection_add_setting (connection, NM_SETTING (s_ip4)); - - ASSERT_CHANGED (nm_setting_ip4_config_add_dns (s_ip4, 0x1122)); - ASSERT_CHANGED (nm_setting_ip4_config_remove_dns (s_ip4, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (i <= priv->dns->len)); - ASSERT_UNCHANGED (nm_setting_ip4_config_remove_dns (s_ip4, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip4_config_add_dns (s_ip4, 0x3344); - ASSERT_CHANGED (nm_setting_ip4_config_clear_dns (s_ip4)); - - ASSERT_CHANGED (nm_setting_ip4_config_add_dns_search (s_ip4, "foobar.com")); - ASSERT_CHANGED (nm_setting_ip4_config_remove_dns_search (s_ip4, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip4_config_remove_dns_search (s_ip4, 1)); - g_test_assert_expected_messages (); - - ASSERT_CHANGED (nm_setting_ip4_config_add_dns_search (s_ip4, "foobar.com")); - ASSERT_CHANGED (nm_setting_ip4_config_clear_dns_searches (s_ip4)); - - addr = nm_ip4_address_new (); - nm_ip4_address_set_address (addr, 0x2233); - nm_ip4_address_set_prefix (addr, 24); - ASSERT_CHANGED (nm_setting_ip4_config_add_address (s_ip4, addr)); - ASSERT_CHANGED (nm_setting_ip4_config_remove_address (s_ip4, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip4_config_remove_address (s_ip4, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip4_config_add_address (s_ip4, addr); - ASSERT_CHANGED (nm_setting_ip4_config_clear_addresses (s_ip4)); - - route = nm_ip4_route_new (); - nm_ip4_route_set_dest (route, 0x2233); - nm_ip4_route_set_prefix (route, 24); - - ASSERT_CHANGED (nm_setting_ip4_config_add_route (s_ip4, route)); - ASSERT_CHANGED (nm_setting_ip4_config_remove_route (s_ip4, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip4_config_remove_route (s_ip4, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip4_config_add_route (s_ip4, route); - ASSERT_CHANGED (nm_setting_ip4_config_clear_routes (s_ip4)); - - nm_ip4_address_unref (addr); - nm_ip4_route_unref (route); - g_object_unref (connection); -} - -static void -test_setting_ip6_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingIP6Config *s_ip6; - NMIP6Address *addr; - NMIP6Route *route; - const struct in6_addr t = { { { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 } } }; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); - nm_connection_add_setting (connection, NM_SETTING (s_ip6)); - - ASSERT_CHANGED (nm_setting_ip6_config_add_dns (s_ip6, &t)); - ASSERT_CHANGED (nm_setting_ip6_config_remove_dns (s_ip6, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip6_config_remove_dns (s_ip6, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip6_config_add_dns (s_ip6, &t); - ASSERT_CHANGED (nm_setting_ip6_config_clear_dns (s_ip6)); - - ASSERT_CHANGED (nm_setting_ip6_config_add_dns_search (s_ip6, "foobar.com")); - ASSERT_CHANGED (nm_setting_ip6_config_remove_dns_search (s_ip6, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip6_config_remove_dns_search (s_ip6, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip6_config_add_dns_search (s_ip6, "foobar.com"); - ASSERT_CHANGED (nm_setting_ip6_config_clear_dns_searches (s_ip6)); - - addr = nm_ip6_address_new (); - nm_ip6_address_set_address (addr, &t); - nm_ip6_address_set_prefix (addr, 64); - - ASSERT_CHANGED (nm_setting_ip6_config_add_address (s_ip6, addr)); - ASSERT_CHANGED (nm_setting_ip6_config_remove_address (s_ip6, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip6_config_remove_address (s_ip6, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip6_config_add_address (s_ip6, addr); - ASSERT_CHANGED (nm_setting_ip6_config_clear_addresses (s_ip6)); - - route = nm_ip6_route_new (); - nm_ip6_route_set_dest (route, &t); - nm_ip6_route_set_prefix (route, 128); - - ASSERT_CHANGED (nm_setting_ip6_config_add_route (s_ip6, route)); - ASSERT_CHANGED (nm_setting_ip6_config_remove_route (s_ip6, 0)); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_ip6_config_remove_route (s_ip6, 1)); - g_test_assert_expected_messages (); - - nm_setting_ip6_config_add_route (s_ip6, route); - ASSERT_CHANGED (nm_setting_ip6_config_clear_routes (s_ip6)); - - nm_ip6_address_unref (addr); - nm_ip6_route_unref (route); - g_object_unref (connection); -} - -static void -test_setting_vlan_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingVlan *s_vlan; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_vlan = (NMSettingVlan *) nm_setting_vlan_new (); - nm_connection_add_setting (connection, NM_SETTING (s_vlan)); - - ASSERT_CHANGED (nm_setting_vlan_add_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1, 3)); - ASSERT_CHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_INGRESS_MAP, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (idx < g_slist_length (list))); - ASSERT_UNCHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1)); - g_test_assert_expected_messages (); - ASSERT_CHANGED (nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_INGRESS_MAP, "1:3")); - ASSERT_CHANGED (nm_setting_vlan_clear_priorities (s_vlan, NM_VLAN_INGRESS_MAP)); - - ASSERT_CHANGED (nm_setting_vlan_add_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1, 3)); - ASSERT_CHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_EGRESS_MAP, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (idx < g_slist_length (list))); - ASSERT_UNCHANGED (nm_setting_vlan_remove_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1)); - g_test_assert_expected_messages (); - ASSERT_CHANGED (nm_setting_vlan_add_priority_str (s_vlan, NM_VLAN_EGRESS_MAP, "1:3")); - ASSERT_CHANGED (nm_setting_vlan_clear_priorities (s_vlan, NM_VLAN_EGRESS_MAP)); - - g_object_unref (connection); -} - -static void -test_setting_vpn_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingVPN *s_vpn; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_vpn = (NMSettingVPN *) nm_setting_vpn_new (); - nm_connection_add_setting (connection, NM_SETTING (s_vpn)); - - ASSERT_CHANGED (nm_setting_vpn_add_data_item (s_vpn, "foobar", "baz")); - ASSERT_CHANGED (nm_setting_vpn_remove_data_item (s_vpn, "foobar")); - ASSERT_UNCHANGED (nm_setting_vpn_remove_data_item (s_vpn, "not added")); - - ASSERT_CHANGED (nm_setting_vpn_add_secret (s_vpn, "foobar", "baz")); - ASSERT_CHANGED (nm_setting_vpn_remove_secret (s_vpn, "foobar")); - ASSERT_UNCHANGED (nm_setting_vpn_remove_secret (s_vpn, "not added")); - - g_object_unref (connection); -} - -static void -test_setting_wired_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingWired *s_wired; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_wired = (NMSettingWired *) nm_setting_wired_new (); - nm_connection_add_setting (connection, NM_SETTING (s_wired)); - - ASSERT_CHANGED (nm_setting_wired_add_s390_option (s_wired, "portno", "1")); - ASSERT_CHANGED (nm_setting_wired_remove_s390_option (s_wired, "portno")); - ASSERT_UNCHANGED (nm_setting_wired_remove_s390_option (s_wired, "layer2")); - - g_object_unref (connection); -} - -static void -test_setting_wireless_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingWireless *s_wifi; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_wifi = (NMSettingWireless *) nm_setting_wireless_new (); - nm_connection_add_setting (connection, NM_SETTING (s_wifi)); - - ASSERT_CHANGED (nm_setting_wireless_add_seen_bssid (s_wifi, "00:11:22:33:44:55")); - - g_object_unref (connection); -} - -static void -test_setting_wireless_security_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSettingWirelessSecurity *s_wsec; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); - nm_connection_add_setting (connection, NM_SETTING (s_wsec)); - - /* Protos */ - ASSERT_CHANGED (nm_setting_wireless_security_add_proto (s_wsec, "wpa")); - ASSERT_CHANGED (nm_setting_wireless_security_remove_proto (s_wsec, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_wireless_security_remove_proto (s_wsec, 1)); - g_test_assert_expected_messages (); - - nm_setting_wireless_security_add_proto (s_wsec, "wep"); - ASSERT_CHANGED (nm_setting_wireless_security_clear_protos (s_wsec)); - - /* Pairwise ciphers */ - ASSERT_CHANGED (nm_setting_wireless_security_add_pairwise (s_wsec, "tkip")); - ASSERT_CHANGED (nm_setting_wireless_security_remove_pairwise (s_wsec, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_wireless_security_remove_pairwise (s_wsec, 1)); - g_test_assert_expected_messages (); - - nm_setting_wireless_security_add_pairwise (s_wsec, "tkip"); - ASSERT_CHANGED (nm_setting_wireless_security_clear_pairwise (s_wsec)); - - /* Group ciphers */ - ASSERT_CHANGED (nm_setting_wireless_security_add_group (s_wsec, "ccmp")); - ASSERT_CHANGED (nm_setting_wireless_security_remove_group (s_wsec, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_wireless_security_remove_group (s_wsec, 1)); - g_test_assert_expected_messages (); - - nm_setting_wireless_security_add_group (s_wsec, "tkip"); - ASSERT_CHANGED (nm_setting_wireless_security_clear_groups (s_wsec)); - - /* WEP key secret flags */ - ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key0", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL))); - ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key1", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL))); - ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key2", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL))); - ASSERT_CHANGED (g_assert (nm_setting_set_secret_flags (NM_SETTING (s_wsec), "wep-key3", NM_SETTING_SECRET_FLAG_AGENT_OWNED, NULL))); - - g_object_unref (connection); -} - -static void -test_setting_802_1x_changed_signal (void) -{ - NMConnection *connection; - gboolean changed = FALSE; - NMSetting8021x *s_8021x; - - connection = nm_connection_new (); - g_signal_connect (connection, - NM_CONNECTION_CHANGED, - (GCallback) test_connection_changed_cb, - &changed); - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - nm_connection_add_setting (connection, NM_SETTING (s_8021x)); - - /* EAP methods */ - ASSERT_CHANGED (nm_setting_802_1x_add_eap_method (s_8021x, "tls")); - ASSERT_CHANGED (nm_setting_802_1x_remove_eap_method (s_8021x, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_802_1x_remove_eap_method (s_8021x, 1)); - g_test_assert_expected_messages (); - - nm_setting_802_1x_add_eap_method (s_8021x, "ttls"); - ASSERT_CHANGED (nm_setting_802_1x_clear_eap_methods (s_8021x)); - - /* alternate subject matches */ - ASSERT_CHANGED (nm_setting_802_1x_add_altsubject_match (s_8021x, "EMAIL:server@example.com")); - ASSERT_CHANGED (nm_setting_802_1x_remove_altsubject_match (s_8021x, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_802_1x_remove_altsubject_match (s_8021x, 1)); - g_test_assert_expected_messages (); - - nm_setting_802_1x_add_altsubject_match (s_8021x, "EMAIL:server@example.com"); - ASSERT_CHANGED (nm_setting_802_1x_clear_altsubject_matches (s_8021x)); - - /* phase2 alternate subject matches */ - ASSERT_CHANGED (nm_setting_802_1x_add_phase2_altsubject_match (s_8021x, "EMAIL:server@example.com")); - ASSERT_CHANGED (nm_setting_802_1x_remove_phase2_altsubject_match (s_8021x, 0)); - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (elt != NULL)); - ASSERT_UNCHANGED (nm_setting_802_1x_remove_phase2_altsubject_match (s_8021x, 1)); - g_test_assert_expected_messages (); - - nm_setting_802_1x_add_phase2_altsubject_match (s_8021x, "EMAIL:server@example.com"); - ASSERT_CHANGED (nm_setting_802_1x_clear_phase2_altsubject_matches (s_8021x)); - - g_object_unref (connection); -} - -static void -test_setting_old_uuid (void) -{ - GError *error = NULL; - gs_unref_object NMSetting *setting = NULL; - gboolean success; - - /* NetworkManager-0.9.4.0 generated 40-character UUIDs with no dashes, - * like this one. Test that we maintain compatibility. */ - const char *uuid = "f43bec2cdd60e5da381ebb1eb1fa39f3cc52660c"; - - setting = nm_setting_connection_new (); - g_object_set (G_OBJECT (setting), - NM_SETTING_CONNECTION_ID, "uuidtest", - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, - NULL); - - success = nm_setting_verify (NM_SETTING (setting), NULL, &error); - g_assert_no_error (error); - g_assert (success == TRUE); -} - -/* - * nm_connection_verify() modifies the connection by setting - * the interface-name property to the virtual_iface_name of - * the type specific settings. - * - * It would be preferable of verify() not to touch the connection, - * but as it is now, stick with it and test it. - **/ -static void -test_connection_verify_sets_interface_name (void) -{ - NMConnection *con; - NMSettingConnection *s_con; - NMSettingBond *s_bond; - GError *error = NULL; - gboolean success; - - s_con = (NMSettingConnection *) nm_setting_connection_new (); - g_object_set (G_OBJECT (s_con), - NM_SETTING_CONNECTION_ID, "test1", - NM_SETTING_CONNECTION_UUID, "22001632-bbb4-4616-b277-363dce3dfb5b", - NM_SETTING_CONNECTION_TYPE, NM_SETTING_BOND_SETTING_NAME, - NULL); - s_bond = (NMSettingBond *) nm_setting_bond_new (); - g_object_set (G_OBJECT (s_bond), - NM_SETTING_BOND_INTERFACE_NAME, "bond-x", - NULL); - - con = nm_connection_new (); - nm_connection_add_setting (con, NM_SETTING (s_con)); - nm_connection_add_setting (con, NM_SETTING (s_bond)); - - g_assert_cmpstr (nm_connection_get_interface_name (con), ==, NULL); - - /* for backward compatibility, normalizes the interface name */ - success = nm_connection_verify (con, &error); - g_assert (success && !error); - - g_assert_cmpstr (nm_connection_get_interface_name (con), ==, "bond-x"); - - g_object_unref (con); -} - -/* - * Test normalization of interface-name - **/ -static void -test_connection_normalize_virtual_iface_name (void) -{ - NMConnection *con; - NMSettingConnection *s_con; - NMSettingVlan *s_vlan; - NMSetting *setting; - GError *error = NULL; - gboolean success; - const char *IFACE_NAME = "iface"; - const char *IFACE_VIRT = "iface-X"; - gboolean modified = FALSE; - - con = nm_connection_new (); - - setting = nm_setting_ip4_config_new (); - g_object_set (setting, - NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, - NULL); - nm_connection_add_setting (con, setting); - - setting = nm_setting_ip6_config_new (); - g_object_set (setting, - NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, - NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE, - NULL); - nm_connection_add_setting (con, setting); - - s_con = (NMSettingConnection *) nm_setting_connection_new (); - g_object_set (G_OBJECT (s_con), - NM_SETTING_CONNECTION_ID, "test1", - NM_SETTING_CONNECTION_UUID, "22001632-bbb4-4616-b277-363dce3dfb5b", - NM_SETTING_CONNECTION_TYPE, NM_SETTING_VLAN_SETTING_NAME, - NM_SETTING_CONNECTION_INTERFACE_NAME, IFACE_NAME, - NULL); - s_vlan = (NMSettingVlan *) nm_setting_vlan_new (); - g_object_set (G_OBJECT (s_vlan), - NM_SETTING_VLAN_INTERFACE_NAME, IFACE_VIRT, - NM_SETTING_VLAN_PARENT, "eth0", - NULL); - - nm_connection_add_setting (con, NM_SETTING (s_con)); - nm_connection_add_setting (con, NM_SETTING (s_vlan)); - - g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME); - g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, IFACE_VIRT); - - /* for backward compatibility, normalizes the interface name */ - success = nm_connection_verify (con, &error); - g_assert (success && !error); - - g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME); - g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, IFACE_VIRT); - - success = nm_connection_normalize (con, NULL, &modified, &error); - g_assert (success && !error); - g_assert (modified); - - g_assert_cmpstr (nm_connection_get_interface_name (con), ==, IFACE_NAME); - g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, IFACE_NAME); - - success = nm_connection_verify (con, &error); - g_assert (success && !error); - - g_object_unref (con); -} - -#if defined (__SANITIZE_ADDRESS__) -static void -test_libnm_linking (void) -{ - g_test_skip ("Skipping test since address sanitizer is enabled"); -} -#else /* __SANITIZE_ADDRESS__ */ -static void -_test_libnm_linking_setup_child_process (gpointer user_data) -{ - int val; - struct rlimit limit; - - /* the child process is supposed to crash. We don't want it - * to write a core dump. */ - - val = getrlimit (RLIMIT_CORE, &limit); - if (val == 0) { - limit.rlim_cur = 0; - val = setrlimit (RLIMIT_CORE, &limit); - if (val == 0) - return; - } - /* on error, do not crash or fail assertion. Instead just exit */ - exit (1); -} - -static void -test_libnm_linking (void) -{ - char *argv[] = { "./test-libnm-linking", NULL }; - char *out, *err; - int status; - GError *error = NULL; - - g_spawn_sync (NM_BUILD_BUILDDIR"/libnm-util/tests", - argv, NULL, 0 /*G_SPAWN_DEFAULT*/, - _test_libnm_linking_setup_child_process, NULL, - &out, &err, &status, &error); - g_assert_no_error (error); - - g_assert (WIFSIGNALED (status)); - - g_assert (strstr (err, "Mixing libnm") != NULL); - g_free (out); - g_free (err); -} -#endif /* __SANITIZE_ADDRESS__ */ - -/*****************************************************************************/ - -static void -_test_uuid (const char *expected_uuid, const char *str) -{ - gs_free char *uuid_test = NULL; - - g_assert (str); - - uuid_test = nm_utils_uuid_generate_from_string (str); - - g_assert (uuid_test); - g_assert (nm_utils_is_uuid (uuid_test)); - - if (strcmp (uuid_test, expected_uuid)) { - g_error ("UUID test failed: text=%s, uuid=%s, expected=%s", - str, uuid_test, expected_uuid); - } -} - -static void -test_nm_utils_uuid_generate_from_string (void) -{ - gs_free char *uuid_test = NULL; - - _test_uuid ("0cc175b9-c0f1-b6a8-31c3-99e269772661", "a"); - _test_uuid ("098f6bcd-4621-d373-cade-4e832627b4f6", "test"); - _test_uuid ("59c0547b-7fe2-1c15-2cce-e328e8bf6742", "/etc/NetworkManager/system-connections/em1"); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (s && *s)); - uuid_test = nm_utils_uuid_generate_from_string (""); - g_assert (uuid_test == NULL); - g_test_assert_expected_messages (); - - NMTST_EXPECT_LIBNM_U_CRITICAL (NMTST_G_RETURN_MSG (s && *s)); - uuid_test = nm_utils_uuid_generate_from_string (NULL); - g_assert (uuid_test == NULL); - g_test_assert_expected_messages (); -} - -/*****************************************************************************/ - -NMTST_DEFINE (); - -int main (int argc, char **argv) -{ - nmtst_init (&argc, &argv, TRUE); - - /* The tests */ - g_test_add_func ("/libnm/setting_vpn_items", test_setting_vpn_items); - g_test_add_func ("/libnm/setting_vpn_update_secrets", test_setting_vpn_update_secrets); - g_test_add_func ("/libnm/setting_vpn_modify_during_foreach", test_setting_vpn_modify_during_foreach); - g_test_add_func ("/libnm/setting_ip6_config_old_address_array", test_setting_ip6_config_old_address_array); - g_test_add_func ("/libnm/setting_gsm_apn_spaces", test_setting_gsm_apn_spaces); - g_test_add_func ("/libnm/setting_gsm_apn_bad_chars", test_setting_gsm_apn_bad_chars); - g_test_add_func ("/libnm/setting_gsm_apn_underscore", test_setting_gsm_apn_underscore); - g_test_add_func ("/libnm/setting_gsm_without_number", test_setting_gsm_without_number); - g_test_add_func ("/libnm/setting_to_hash_all", test_setting_to_hash_all); - g_test_add_func ("/libnm/setting_to_hash_no_secrets", test_setting_to_hash_no_secrets); - g_test_add_func ("/libnm/setting_to_hash_only_secrets", test_setting_to_hash_only_secrets); - g_test_add_func ("/libnm/setting_compare_id", test_setting_compare_id); - g_test_add_func ("/libnm/setting_compare_secrets", test_setting_compare_secrets); - g_test_add_func ("/libnm/setting_compare_vpn_secrets", test_setting_compare_vpn_secrets); - g_test_add_func ("/libnm/setting_old_uuid", test_setting_old_uuid); - - g_test_add_func ("/libnm/connection_to_hash_setting_name", test_connection_to_hash_setting_name); - g_test_add_func ("/libnm/setting_new_from_hash", test_setting_new_from_hash); - g_test_add_func ("/libnm/connection_replace_settings", test_connection_replace_settings); - g_test_add_func ("/libnm/connection_replace_settings_from_connection", test_connection_replace_settings_from_connection); - g_test_add_func ("/libnm/connection_new_from_hash", test_connection_new_from_hash); - g_test_add_func ("/libnm/connection_verify_sets_interface_name", test_connection_verify_sets_interface_name); - g_test_add_func ("/libnm/connection_normalize_virtual_iface_name", test_connection_normalize_virtual_iface_name); - - g_test_add_func ("/libnm/setting_connection_permissions_helpers", test_setting_connection_permissions_helpers); - g_test_add_func ("/libnm/setting_connection_permissions_property", test_setting_connection_permissions_property); - - g_test_add_func ("/libnm/connection_compare_same", test_connection_compare_same); - g_test_add_func ("/libnm/connection_compare_key_only_in_a", test_connection_compare_key_only_in_a); - g_test_add_func ("/libnm/connection_compare_setting_only_in_a", test_connection_compare_setting_only_in_a); - g_test_add_func ("/libnm/connection_compare_key_only_in_b", test_connection_compare_key_only_in_b); - g_test_add_func ("/libnm/connection_compare_setting_only_in_b", test_connection_compare_setting_only_in_b); - - g_test_add_func ("/libnm/connection_diff_a_only", test_connection_diff_a_only); - g_test_add_func ("/libnm/connection_diff_same", test_connection_diff_same); - g_test_add_func ("/libnm/connection_diff_different", test_connection_diff_different); - g_test_add_func ("/libnm/connection_diff_no_secrets", test_connection_diff_no_secrets); - g_test_add_func ("/libnm/connection_diff_inferrable", test_connection_diff_inferrable); - g_test_add_func ("/libnm/connection_good_base_types", test_connection_good_base_types); - g_test_add_func ("/libnm/connection_bad_base_types", test_connection_bad_base_types); - - g_test_add_func ("/libnm/hwaddr_aton_ether_normal", test_hwaddr_aton_ether_normal); - g_test_add_func ("/libnm/hwaddr_aton_ib_normal", test_hwaddr_aton_ib_normal); - g_test_add_func ("/libnm/hwaddr_aton_no_leading_zeros", test_hwaddr_aton_no_leading_zeros); - g_test_add_func ("/libnm/hwaddr_aton_malformed", test_hwaddr_aton_malformed); - g_test_add_func ("/libnm/ip4_prefix_to_netmask", test_ip4_prefix_to_netmask); - g_test_add_func ("/libnm/ip4_netmask_to_prefix", test_ip4_netmask_to_prefix); - - g_test_add_func ("/libnm/connection_changed_signal", test_connection_changed_signal); - g_test_add_func ("/libnm/setting_connection_changed_signal", test_setting_connection_changed_signal); - g_test_add_func ("/libnm/setting_bond_changed_signal", test_setting_bond_changed_signal); - g_test_add_func ("/libnm/setting_ip4_changed_signal", test_setting_ip4_changed_signal); - g_test_add_func ("/libnm/setting_ip6_changed_signal", test_setting_ip6_changed_signal); - g_test_add_func ("/libnm/setting_vlan_changed_signal", test_setting_vlan_changed_signal); - g_test_add_func ("/libnm/setting_vpn_changed_signal", test_setting_vpn_changed_signal); - g_test_add_func ("/libnm/setting_wired_changed_signal", test_setting_wired_changed_signal); - g_test_add_func ("/libnm/setting_wireless_changed_signal", test_setting_wireless_changed_signal); - g_test_add_func ("/libnm/setting_wireless_security_changed_signal", test_setting_wireless_security_changed_signal); - g_test_add_func ("/libnm/setting_802_1x_changed_signal", test_setting_802_1x_changed_signal); - - g_test_add_func ("/libnm/libnm_linking", test_libnm_linking); - - g_test_add_func ("/libnm/nm_utils_uuid_generate_from_string", test_nm_utils_uuid_generate_from_string); - - return g_test_run (); -} - diff --git a/libnm-util/tests/test-libnm-linking.c b/libnm-util/tests/test-libnm-linking.c deleted file mode 100644 index 0e143e73..00000000 --- a/libnm-util/tests/test-libnm-linking.c +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright 2014 Red Hat, Inc. - * - */ - -#include "nm-default.h" - -#include "nm-utils.h" - -extern GType nm_state_get_type (void); - -int -main (int argc, char **argv) -{ - /* If we reach main(), then the test has failed. */ - g_printerr ("libnm/libnm-util constructor failed to detect symbol mixing\n"); - - /* This is just to ensure that both libnm.so and libnm-util.so get pulled - * in; libnm-util doesn't have "nm_state_get_type" and libnm doesn't have - * "nm_utils_slist_free". (We intentionally choose different symbols than the - * ones that the libraries check for.) - */ - nm_state_get_type (); - G_GNUC_BEGIN_IGNORE_DEPRECATIONS; - nm_utils_slist_free (NULL, g_free); - G_GNUC_END_IGNORE_DEPRECATIONS; - - g_assert_not_reached (); -} diff --git a/libnm-util/tests/test-secrets.c b/libnm-util/tests/test-secrets.c deleted file mode 100644 index 43c206ff..00000000 --- a/libnm-util/tests/test-secrets.c +++ /dev/null @@ -1,684 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright 2008 - 2011 Red Hat, Inc. - * - */ - -#include "nm-default.h" - -#include <string.h> - -#include "nm-utils.h" - -#include "nm-setting-connection.h" -#include "nm-setting-wired.h" -#include "nm-setting-8021x.h" -#include "nm-setting-ip4-config.h" -#include "nm-setting-wireless.h" -#include "nm-setting-wireless-security.h" -#include "nm-setting-cdma.h" -#include "nm-setting-gsm.h" -#include "nm-setting-ppp.h" -#include "nm-setting-pppoe.h" -#include "nm-setting-vpn.h" - -#include "nm-utils/nm-test-utils.h" - -#define TEST_CERT_DIR NM_BUILD_SRCDIR"/libnm-core/tests/certs" -#define TEST_NEED_SECRETS_EAP_TLS_CA_CERT TEST_CERT_DIR "/test_ca_cert.pem" -#define TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT TEST_CERT_DIR "/test_key_and_cert.pem" -#define TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY TEST_CERT_DIR "/test_key_and_cert.pem" - -static void -_assert_hints_has (GPtrArray *hints, const char *item) -{ - guint i; - guint found = 0; - - g_assert (hints); - g_assert (item); - for (i = 0; i < hints->len; i++) { - g_assert (hints->pdata[i]); - if (!strcmp (item, hints->pdata[i])) - found++; - } - g_assert_cmpint (found, ==, 1); -} - -static NMConnection * -make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme) -{ - NMConnection *connection; - NMSettingConnection *s_con; - NMSetting8021x *s_8021x; - NMSettingWired *s_wired; - NMSettingIP4Config *s_ip4; - char *uuid; - gboolean success; - GError *error = NULL; - - connection = nm_connection_new (); - - /* Connection setting */ - s_con = (NMSettingConnection *) nm_setting_connection_new (); - nm_connection_add_setting (connection, NM_SETTING (s_con)); - - uuid = nm_utils_uuid_generate (); - g_object_set (s_con, - NM_SETTING_CONNECTION_ID, "Test Need TLS Secrets", - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, - NULL); - g_free (uuid); - - /* Wired setting */ - s_wired = (NMSettingWired *) nm_setting_wired_new (); - nm_connection_add_setting (connection, NM_SETTING (s_wired)); - - /* Wireless security setting */ - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - nm_connection_add_setting (connection, NM_SETTING (s_8021x)); - - g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL); - - nm_setting_802_1x_add_eap_method (s_8021x, "tls"); - - success = nm_setting_802_1x_set_ca_cert (s_8021x, - TEST_NEED_SECRETS_EAP_TLS_CA_CERT, - scheme, - NULL, - &error); - nmtst_assert_success (success, error); - - success = nm_setting_802_1x_set_client_cert (s_8021x, - TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT, - scheme, - NULL, - &error); - nmtst_assert_success (success, error); - - success = nm_setting_802_1x_set_private_key (s_8021x, - TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY, - "test", - scheme, - NULL, - &error); - nmtst_assert_success (success, error); - - /* IP4 setting */ - s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); - nm_connection_add_setting (connection, NM_SETTING (s_ip4)); - - g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); - - nmtst_assert_connection_verifies_and_normalizable (connection); - - return connection; -} - -static void -test_need_tls_secrets_path (void) -{ - NMConnection *connection; - const char *setting_name; - GPtrArray *hints = NULL; - - connection = make_tls_connection ("need-tls-secrets-path-key", NM_SETTING_802_1X_CK_SCHEME_PATH); - - /* Ensure we don't need any secrets since we just set up the connection */ - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert (!setting_name); - g_assert (!hints); - - /* Connection is good; clear secrets and ensure private key password is then required */ - nm_connection_clear_secrets (connection); - - hints = NULL; - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME); - _assert_hints_has (hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD); - - g_ptr_array_free (hints, TRUE); - g_object_unref (connection); -} - -static void -test_need_tls_secrets_blob (void) -{ - NMConnection *connection; - const char *setting_name; - GPtrArray *hints = NULL; - - connection = make_tls_connection ("need-tls-secrets-blob-key", NM_SETTING_802_1X_CK_SCHEME_BLOB); - - /* Ensure we don't need any secrets since we just set up the connection */ - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert (!setting_name); - g_assert (!hints); - - /* Clear secrets and ensure password is again required */ - nm_connection_clear_secrets (connection); - - hints = NULL; - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME); - _assert_hints_has (hints, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD); - - g_ptr_array_free (hints, TRUE); - g_object_unref (connection); -} - -static NMConnection * -make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme) -{ - NMConnection *connection; - NMSettingConnection *s_con; - NMSetting8021x *s_8021x; - NMSettingWired *s_wired; - NMSettingIP4Config *s_ip4; - char *uuid; - gboolean success; - GError *error = NULL; - - connection = nm_connection_new (); - - /* Connection setting */ - s_con = (NMSettingConnection *) nm_setting_connection_new (); - nm_connection_add_setting (connection, NM_SETTING (s_con)); - - uuid = nm_utils_uuid_generate (); - g_object_set (s_con, - NM_SETTING_CONNECTION_ID, "Test Need TLS Secrets", - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, - NULL); - g_free (uuid); - - /* Wired setting */ - s_wired = (NMSettingWired *) nm_setting_wired_new (); - nm_connection_add_setting (connection, NM_SETTING (s_wired)); - - /* Wireless security setting */ - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - nm_connection_add_setting (connection, NM_SETTING (s_8021x)); - - g_object_set (s_8021x, NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "blahblah", NULL); - g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL); - - nm_setting_802_1x_add_eap_method (s_8021x, "ttls"); - g_object_set (s_8021x, NM_SETTING_802_1X_PHASE2_AUTH, "tls", NULL); - - success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x, - TEST_NEED_SECRETS_EAP_TLS_CA_CERT, - scheme, - NULL, - &error); - nmtst_assert_success (success, error); - - success = nm_setting_802_1x_set_phase2_client_cert (s_8021x, - TEST_NEED_SECRETS_EAP_TLS_CLIENT_CERT, - scheme, - NULL, - &error); - nmtst_assert_success (success, error); - - success = nm_setting_802_1x_set_phase2_private_key (s_8021x, - TEST_NEED_SECRETS_EAP_TLS_PRIVATE_KEY, - "test", - scheme, - NULL, - &error); - nmtst_assert_success (success, error); - - /* IP4 setting */ - s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); - nm_connection_add_setting (connection, NM_SETTING (s_ip4)); - - g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); - - nmtst_assert_connection_verifies_and_normalizable (connection); - - return connection; -} - -static void -test_need_tls_phase2_secrets_path (void) -{ - NMConnection *connection; - const char *setting_name; - GPtrArray *hints = NULL; - - connection = make_tls_phase2_connection ("need-tls-phase2-secrets-path-key", - NM_SETTING_802_1X_CK_SCHEME_PATH); - - /* Ensure we don't need any secrets since we just set up the connection */ - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert (!setting_name); - g_assert (!hints); - - /* Connection is good; clear secrets and ensure private key password is then required */ - nm_connection_clear_secrets (connection); - - hints = NULL; - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME); - _assert_hints_has (hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD); - - g_ptr_array_free (hints, TRUE); - g_object_unref (connection); -} - -static void -test_need_tls_phase2_secrets_blob (void) -{ - NMConnection *connection; - const char *setting_name; - GPtrArray *hints = NULL; - - connection = make_tls_phase2_connection ("need-tls-phase2-secrets-blob-key", - NM_SETTING_802_1X_CK_SCHEME_BLOB); - - /* Ensure we don't need any secrets since we just set up the connection */ - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert (!setting_name); - g_assert (!hints); - - /* Connection is good; clear secrets and ensure private key password is then required */ - nm_connection_clear_secrets (connection); - - hints = NULL; - setting_name = nm_connection_need_secrets (connection, &hints); - g_assert_cmpstr (setting_name, ==, NM_SETTING_802_1X_SETTING_NAME); - _assert_hints_has (hints, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD); - - g_ptr_array_free (hints, TRUE); - g_object_unref (connection); -} - -static NMConnection * -wifi_connection_new (void) -{ - NMConnection *connection; - NMSettingConnection *s_con; - NMSettingWireless *s_wifi; - NMSettingWirelessSecurity *s_wsec; - unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 }; - char *uuid; - GByteArray *ssid; - - connection = nm_connection_new (); - g_assert (connection); - - /* Connection setting */ - s_con = (NMSettingConnection *) nm_setting_connection_new (); - g_assert (s_con); - - uuid = nm_utils_uuid_generate (); - g_object_set (s_con, - NM_SETTING_CONNECTION_ID, "Test Wireless", - NM_SETTING_CONNECTION_UUID, uuid, - NM_SETTING_CONNECTION_AUTOCONNECT, FALSE, - NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, - NULL); - g_free (uuid); - nm_connection_add_setting (connection, NM_SETTING (s_con)); - - /* Wireless setting */ - s_wifi = (NMSettingWireless *) nm_setting_wireless_new (); - g_assert (s_wifi); - - ssid = g_byte_array_sized_new (sizeof (tmpssid)); - g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid)); - g_object_set (s_wifi, - NM_SETTING_WIRELESS_SSID, ssid, - NULL); - g_byte_array_free (ssid, TRUE); - nm_connection_add_setting (connection, NM_SETTING (s_wifi)); - - /* Wifi security */ - s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); - g_assert (s_wsec); - - g_object_set (G_OBJECT (s_wsec), - NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", - NULL); - nm_connection_add_setting (connection, NM_SETTING (s_wsec)); - - return connection; -} - -static void -value_destroy (gpointer data) -{ - GValue *value = (GValue *) data; - - g_value_unset (value); - g_slice_free (GValue, value); -} - -static GValue * -string_to_gvalue (const char *str) -{ - GValue *val = g_slice_new0 (GValue); - - g_value_init (val, G_TYPE_STRING); - g_value_set_string (val, str); - return val; -} - -static GValue * -uint_to_gvalue (guint32 i) -{ - GValue *val; - - val = g_slice_new0 (GValue); - g_value_init (val, G_TYPE_UINT); - g_value_set_uint (val, i); - return val; -} - -static void -test_update_secrets_wifi_single_setting (void) -{ - NMConnection *connection; - NMSettingWirelessSecurity *s_wsec; - GHashTable *secrets; - GError *error = NULL; - gboolean success; - const char *wepkey = "11111111111111111111111111"; - const char *tmp; - - /* Test update with a hashed setting of 802-11-wireless secrets */ - - connection = wifi_connection_new (); - - /* Build up the secrets hash */ - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, value_destroy); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey)); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, uint_to_gvalue (NM_WEP_KEY_TYPE_KEY)); - - success = nm_connection_update_secrets (connection, - NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, - secrets, - &error); - g_assert_no_error (error); - g_assert (success); - - /* Make sure the secret is now in the connection */ - s_wsec = nm_connection_get_setting_wireless_security (connection); - g_assert (s_wsec); - tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0); - g_assert_cmpstr (tmp, ==, wepkey); - - g_hash_table_unref (secrets); - g_object_unref (connection); -} - -static void -test_update_secrets_wifi_full_hash (void) -{ - NMConnection *connection; - NMSettingWirelessSecurity *s_wsec; - GHashTable *secrets, *all; - GError *error = NULL; - gboolean success; - const char *wepkey = "11111111111111111111111111"; - const char *tmp; - - /* Test update with a hashed connection containing only 802-11-wireless - * setting and secrets. - */ - - connection = wifi_connection_new (); - - /* Build up the secrets hash */ - all = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_hash_table_destroy); - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, value_destroy); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey)); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, uint_to_gvalue (NM_WEP_KEY_TYPE_KEY)); - g_hash_table_insert (all, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, secrets); - - success = nm_connection_update_secrets (connection, - NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, - all, - &error); - g_assert_no_error (error); - g_assert (success); - - /* Make sure the secret is now in the connection */ - s_wsec = nm_connection_get_setting_wireless_security (connection); - g_assert (s_wsec); - tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0); - g_assert_cmpstr (tmp, ==, wepkey); - - g_hash_table_unref (all); - g_object_unref (connection); -} - -static void -test_update_secrets_wifi_bad_setting_name (void) -{ - NMConnection *connection; - GHashTable *secrets; - GError *error = NULL; - gboolean success; - const char *wepkey = "11111111111111111111111111"; - - /* Test that passing an invalid setting name to - * nm_connection_update_secrets() fails with the correct error. - */ - - connection = wifi_connection_new (); - - /* Build up the secrets hash */ - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, value_destroy); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey)); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, uint_to_gvalue (NM_WEP_KEY_TYPE_KEY)); - - success = nm_connection_update_secrets (connection, - "asdfasdfasdfasf", - secrets, - &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND); - g_assert (success == FALSE); - - g_clear_error (&error); - g_hash_table_unref (secrets); - g_object_unref (connection); -} - -static void -test_update_secrets_whole_connection (void) -{ - NMConnection *connection; - NMSettingWirelessSecurity *s_wsec; - GHashTable *secrets, *wsec_hash; - GError *error = NULL; - gboolean success; - const char *wepkey = "11111111111111111111111111"; - - /* Test calling nm_connection_update_secrets() with an entire hashed - * connection including non-secrets. - */ - - connection = wifi_connection_new (); - - /* Build up the secrets hash */ - secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); - wsec_hash = g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); - g_assert (wsec_hash); - g_hash_table_insert (wsec_hash, g_strdup (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0), string_to_gvalue (wepkey)); - - success = nm_connection_update_secrets (connection, NULL, secrets, &error); - g_assert_no_error (error); - g_assert (success == TRUE); - - s_wsec = nm_connection_get_setting_wireless_security (connection); - g_assert (s_wsec); - g_assert_cmpstr (nm_setting_wireless_security_get_wep_key (s_wsec, 0), ==, wepkey); - - g_hash_table_unref (secrets); - g_object_unref (connection); -} - -static void -test_update_secrets_whole_connection_empty_hash (void) -{ - NMConnection *connection; - GHashTable *secrets; - GError *error = NULL; - gboolean success; - - /* Test that updating secrets with an empty hash returns success */ - - connection = wifi_connection_new (); - secrets = g_hash_table_new (g_str_hash, g_str_equal); - success = nm_connection_update_secrets (connection, NULL, secrets, &error); - g_assert_no_error (error); - g_assert (success == TRUE); - g_object_unref (connection); - g_hash_table_unref (secrets); -} - -static void -test_update_secrets_whole_connection_bad_setting (void) -{ - NMConnection *connection; - GHashTable *secrets, *wsec_hash; - GError *error = NULL; - gboolean success; - const char *wepkey = "11111111111111111111111111"; - - /* Test that sending a hashed connection containing an invalid setting - * name fails with the right error. - */ - - connection = wifi_connection_new (); - - /* Build up the secrets hash */ - secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); - wsec_hash = g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); - g_assert (wsec_hash); - g_hash_table_insert (wsec_hash, g_strdup (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0), string_to_gvalue (wepkey)); - - /* Steal the wsec setting hash so it's not deallocated, and stuff it back - * in with a different name so we ensure libnm-util is returning the right - * error when it finds an entry in the connection hash that doesn't match - * any setting in the connection. - */ - g_hash_table_ref (wsec_hash); - g_hash_table_remove (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); - g_hash_table_insert (secrets, g_strdup ("asdfasdfasdfasdf"), wsec_hash); - - success = nm_connection_update_secrets (connection, NULL, secrets, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND); - g_assert (success == FALSE); - - g_clear_error (&error); - g_hash_table_destroy (secrets); - g_object_unref (connection); -} - -static void -test_update_secrets_whole_connection_empty_base_setting (void) -{ - NMConnection *connection; - GHashTable *secrets; - GError *error = NULL; - gboolean success; - - /* Test that a hashed connection which does not have any hashed secrets - * for the requested setting returns success. - */ - - connection = wifi_connection_new (); - secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ONLY_SECRETS); - g_assert_cmpint (g_hash_table_size (secrets), ==, 3); - g_assert (g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SETTING_NAME)); - - success = nm_connection_update_secrets (connection, - NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, - secrets, - &error); - g_assert_no_error (error); - g_assert (success); - - g_hash_table_destroy (secrets); - g_object_unref (connection); -} - -static void -test_update_secrets_null_setting_name_with_setting_hash (void) -{ - NMConnection *connection; - GHashTable *secrets; - GError *error = NULL; - gboolean success; - const char *wepkey = "11111111111111111111111111"; - - /* Ensure that a NULL setting name and only a hashed setting fails */ - - connection = wifi_connection_new (); - - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, value_destroy); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey)); - g_hash_table_insert (secrets, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, uint_to_gvalue (NM_WEP_KEY_TYPE_KEY)); - - success = nm_connection_update_secrets (connection, NULL, secrets, &error); - g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND); - g_assert (!success); - - g_clear_error (&error); - g_hash_table_destroy (secrets); - g_object_unref (connection); -} - -NMTST_DEFINE (); - -int main (int argc, char **argv) -{ - GError *error = NULL; - gboolean success; - - nmtst_init (&argc, &argv, TRUE); - - success = nm_utils_init (&error); - g_assert_no_error (error); - g_assert (success); - - /* The tests */ - g_test_add_func ("/libnm/need_tls_secrets_path", test_need_tls_secrets_path); - g_test_add_func ("/libnm/need_tls_secrets_blob", test_need_tls_secrets_blob); - g_test_add_func ("/libnm/need_tls_phase2_secrets_path", test_need_tls_phase2_secrets_path); - g_test_add_func ("/libnm/need_tls_phase2_secrets_blob", test_need_tls_phase2_secrets_blob); - - g_test_add_func ("/libnm/update_secrets_wifi_single_setting", test_update_secrets_wifi_single_setting); - g_test_add_func ("/libnm/update_secrets_wifi_full_hash", test_update_secrets_wifi_full_hash); - g_test_add_func ("/libnm/update_secrets_wifi_bad_setting_name", test_update_secrets_wifi_bad_setting_name); - - g_test_add_func ("/libnm/update_secrets_whole_connection", test_update_secrets_whole_connection); - g_test_add_func ("/libnm/update_secrets_whole_connection_empty_hash", test_update_secrets_whole_connection_empty_hash); - g_test_add_func ("/libnm/update_secrets_whole_connection_bad_setting", test_update_secrets_whole_connection_bad_setting); - g_test_add_func ("/libnm/update_secrets_whole_connection_empty_base_setting", test_update_secrets_whole_connection_empty_base_setting); - g_test_add_func ("/libnm/update_secrets_null_setting_name_with_setting_hash", test_update_secrets_null_setting_name_with_setting_hash); - - return g_test_run (); -} - diff --git a/libnm-util/tests/test-setting-8021x.c b/libnm-util/tests/test-setting-8021x.c deleted file mode 100644 index 373b2a75..00000000 --- a/libnm-util/tests/test-setting-8021x.c +++ /dev/null @@ -1,407 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright 2008 - 2011 Red Hat, Inc. - * - */ - -#include "nm-default.h" - -#include <string.h> - -#include "nm-utils.h" -#include "nm-setting-connection.h" -#include "nm-setting-8021x.h" - -#include "nm-utils/nm-test-utils.h" - -#define TEST_CERT_DIR NM_BUILD_SRCDIR"/libnm-core/tests/certs" - -static void -compare_blob_data (const char *test, - const char *key_path, - const GByteArray *key) -{ - char *contents = NULL; - gsize len = 0; - GError *error = NULL; - gboolean success; - - g_assert (key && key->len > 0); - - success = g_file_get_contents (key_path, &contents, &len, &error); - nmtst_assert_success (success, error); - - g_assert_cmpmem (contents, len, key->data, key->len); - g_free (contents); -} - -#define SCHEME_PATH "file://" - -static void -check_scheme_path (GByteArray *value, const char *path) -{ - guint8 *p; - - g_assert (value); - - p = value->data; - g_assert (memcmp (p, SCHEME_PATH, strlen (SCHEME_PATH)) == 0); - p += strlen (SCHEME_PATH); - g_assert (memcmp (p, path, strlen (path)) == 0); - p += strlen (path); - g_assert (*p == '\0'); -} - -static void -test_private_key_import (const char *path, - const char *password, - NMSetting8021xCKScheme scheme) -{ - NMSetting8021x *s_8021x; - gboolean success; - NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - NMSetting8021xCKFormat tmp_fmt; - GError *error = NULL; - GByteArray *tmp_key = NULL, *client_cert = NULL; - const char *pw; - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - g_assert (s_8021x); - - success = nm_setting_802_1x_set_private_key (s_8021x, - path, - password, - scheme, - &format, - &error); - nmtst_assert_success (success, error); - g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - tmp_fmt = nm_setting_802_1x_get_private_key_format (s_8021x); - g_assert (tmp_fmt == format); - - /* Make sure the password is what we expect */ - pw = nm_setting_802_1x_get_private_key_password (s_8021x); - g_assert (pw); - g_assert_cmpstr (pw, ==, password); - - if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) { - tmp_key = (GByteArray *) nm_setting_802_1x_get_private_key_blob (s_8021x); - compare_blob_data ("private-key-import", path, tmp_key); - } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) { - g_object_get (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL); - check_scheme_path (tmp_key, path); - g_byte_array_free (tmp_key, TRUE); - } else - g_assert_not_reached (); - - /* If it's PKCS#12 ensure the client cert is the same value */ - if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) { - g_object_get (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY, &tmp_key, NULL); - g_assert (tmp_key); - - g_object_get (s_8021x, NM_SETTING_802_1X_CLIENT_CERT, &client_cert, NULL); - g_assert (client_cert); - - /* make sure they are the same */ - g_assert_cmpmem (tmp_key->data, tmp_key->len, client_cert->data, client_cert->len); - - g_byte_array_free (tmp_key, TRUE); - g_byte_array_free (client_cert, TRUE); - } - - g_object_unref (s_8021x); -} - -static void -test_phase2_private_key_import (const char *path, - const char *password, - NMSetting8021xCKScheme scheme) -{ - NMSetting8021x *s_8021x; - gboolean success; - NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - NMSetting8021xCKFormat tmp_fmt; - GError *error = NULL; - GByteArray *tmp_key = NULL, *client_cert = NULL; - const char *pw; - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - g_assert (s_8021x); - - success = nm_setting_802_1x_set_phase2_private_key (s_8021x, - path, - password, - scheme, - &format, - &error); - nmtst_assert_success (success, error); - g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - tmp_fmt = nm_setting_802_1x_get_phase2_private_key_format (s_8021x); - g_assert (tmp_fmt == format); - - /* Make sure the password is what we expect */ - pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x); - g_assert (pw); - g_assert_cmpstr (pw, ==, password); - - if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) { - tmp_key = (GByteArray *) nm_setting_802_1x_get_phase2_private_key_blob (s_8021x); - compare_blob_data ("phase2-private-key-import", path, tmp_key); - } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) { - g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL); - check_scheme_path (tmp_key, path); - g_byte_array_free (tmp_key, TRUE); - } else - g_assert_not_reached (); - - /* If it's PKCS#12 ensure the client cert is the same value */ - if (format == NM_SETTING_802_1X_CK_FORMAT_PKCS12) { - g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, &tmp_key, NULL); - g_assert (tmp_key); - - g_object_get (s_8021x, NM_SETTING_802_1X_PHASE2_CLIENT_CERT, &client_cert, NULL); - g_assert (client_cert); - - /* make sure they are the same */ - g_assert_cmpmem (tmp_key->data, tmp_key->len, client_cert->data, client_cert->len); - - g_byte_array_free (tmp_key, TRUE); - g_byte_array_free (client_cert, TRUE); - } - - g_object_unref (s_8021x); -} - -static void -test_wrong_password_keeps_data (const char *path, const char *password) -{ - NMSetting8021x *s_8021x; - gboolean success; - NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - GError *error = NULL; - const char *pw; - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - g_assert (s_8021x); - - success = nm_setting_802_1x_set_private_key (s_8021x, - path, - password, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - &format, - &error); - nmtst_assert_success (success, error); - g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - - /* Now try to set it to something that's not a certificate */ - format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - success = nm_setting_802_1x_set_private_key (s_8021x, - "Makefile.am", - password, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - &format, - &error); - nmtst_assert_no_success (success, error); - g_assert (format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - g_clear_error (&error); - - /* Make sure the password hasn't changed */ - pw = nm_setting_802_1x_get_private_key_password (s_8021x); - g_assert (pw); - g_assert_cmpstr (pw, ==, password); - - g_object_unref (s_8021x); -} - -static void -test_clear_private_key (const char *path, const char *password) -{ - NMSetting8021x *s_8021x; - gboolean success; - NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - GError *error = NULL; - const char *pw; - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - g_assert (s_8021x); - - success = nm_setting_802_1x_set_private_key (s_8021x, - path, - password, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - &format, - &error); - nmtst_assert_success (success, error); - g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - - /* Make sure the password is what we expect */ - pw = nm_setting_802_1x_get_private_key_password (s_8021x); - g_assert (pw); - g_assert_cmpstr (pw, ==, password); - - /* Now clear it */ - success = nm_setting_802_1x_set_private_key (s_8021x, - NULL, - NULL, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - NULL, - &error); - nmtst_assert_success (success, error); - - /* Ensure the password is also now clear */ - g_assert (!nm_setting_802_1x_get_private_key_password (s_8021x)); - - g_object_unref (s_8021x); -} - -static void -test_wrong_phase2_password_keeps_data (const char *path, const char *password) -{ - NMSetting8021x *s_8021x; - gboolean success; - NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - GError *error = NULL; - const char *pw; - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - g_assert (s_8021x); - - success = nm_setting_802_1x_set_phase2_private_key (s_8021x, - path, - password, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - &format, - &error); - nmtst_assert_success (success, error); - g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - - /* Now try to set it to something that's not a certificate */ - format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - success = nm_setting_802_1x_set_phase2_private_key (s_8021x, - "Makefile.am", - password, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - &format, - &error); - nmtst_assert_no_success (success, error); - g_assert (format == NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - g_clear_error (&error); - - /* Make sure the password hasn't changed */ - pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x); - g_assert (pw); - g_assert_cmpstr (pw, ==, password); - - g_object_unref (s_8021x); -} - -static void -test_clear_phase2_private_key (const char *path, const char *password) -{ - NMSetting8021x *s_8021x; - gboolean success; - NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; - GError *error = NULL; - const char *pw; - - s_8021x = (NMSetting8021x *) nm_setting_802_1x_new (); - g_assert (s_8021x); - - success = nm_setting_802_1x_set_phase2_private_key (s_8021x, - path, - password, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - &format, - &error); - nmtst_assert_success (success, error); - g_assert (format != NM_SETTING_802_1X_CK_FORMAT_UNKNOWN); - - /* Make sure the password is what we expect */ - pw = nm_setting_802_1x_get_phase2_private_key_password (s_8021x); - g_assert (pw); - g_assert_cmpstr (pw, ==, password); - - /* Now clear it */ - success = nm_setting_802_1x_set_phase2_private_key (s_8021x, - NULL, - NULL, - NM_SETTING_802_1X_CK_SCHEME_BLOB, - NULL, - &error); - nmtst_assert_success (success, error); - - /* Ensure the password is also now clear */ - g_assert (!nm_setting_802_1x_get_phase2_private_key_password (s_8021x)); - - g_object_unref (s_8021x); -} - -static void -do_8021x_test (gconstpointer test_data) -{ - char **parts, *path, *password; - - parts = g_strsplit ((const char *) test_data, ", ", -1); - g_assert_cmpint (g_strv_length (parts), ==, 2); - - path = g_build_filename (TEST_CERT_DIR, parts[0], NULL); - password = parts[1]; - - /* Test phase1 and phase2 path scheme */ - test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH); - test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_PATH); - - /* Test phase1 and phase2 blob scheme */ - test_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB); - test_phase2_private_key_import (path, password, NM_SETTING_802_1X_CK_SCHEME_BLOB); - - /* Test that using a wrong password does not change existing data */ - test_wrong_password_keeps_data (path, password); - test_wrong_phase2_password_keeps_data (path, password); - - /* Test clearing the private key */ - test_clear_private_key (path, password); - test_clear_phase2_private_key (path, password); - - g_free (path); - g_strfreev (parts); -} - -NMTST_DEFINE (); - -int -main (int argc, char **argv) -{ - nmtst_init (&argc, &argv, TRUE); - - g_test_add_data_func ("/libnm-utils/setting-8021x/key-and-cert", - "test_key_and_cert.pem, test", - do_8021x_test); - g_test_add_data_func ("/libnm-utils/setting-8021x/key-only", - "test-key-only.pem, test", - do_8021x_test); - g_test_add_data_func ("/libnm-utils/setting-8021x/pkcs8-enc-key", - "pkcs8-enc-key.pem, 1234567890", - do_8021x_test); - g_test_add_data_func ("/libnm-utils/setting-8021x/pkcs12", - "test-cert.p12, test", - do_8021x_test); - - return g_test_run (); -} - diff --git a/libnm-util/tests/test-setting-dcb.c b/libnm-util/tests/test-setting-dcb.c deleted file mode 100644 index eb7113c3..00000000 --- a/libnm-util/tests/test-setting-dcb.c +++ /dev/null @@ -1,319 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright 2013 Red Hat, Inc. - * - */ - -#include "nm-default.h" - -#include <string.h> - -#include "nm-utils.h" -#include "nm-default.h" -#include "nm-setting-dcb.h" - -#include "nm-utils/nm-test-utils.h" - -#define DCB_FLAGS_ALL (NM_SETTING_DCB_FLAG_ENABLE | \ - NM_SETTING_DCB_FLAG_ADVERTISE | \ - NM_SETTING_DCB_FLAG_WILLING) - -static void -test_dcb_flags_valid (void) -{ - gs_unref_object NMSettingDcb *s_dcb = NULL; - GError *error = NULL; - gboolean success; - guint i; - - s_dcb = (NMSettingDcb *) nm_setting_dcb_new (); - g_assert (s_dcb); - - g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, 0); - g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, 0); - g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, 0); - g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, 0); - g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, 0); - - g_object_set (G_OBJECT (s_dcb), - NM_SETTING_DCB_APP_FCOE_FLAGS, DCB_FLAGS_ALL, - NM_SETTING_DCB_APP_ISCSI_FLAGS, DCB_FLAGS_ALL, - NM_SETTING_DCB_APP_FIP_FLAGS, DCB_FLAGS_ALL, - NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, DCB_FLAGS_ALL, - NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, DCB_FLAGS_ALL, - NULL); - /* Priority Group Bandwidth must total 100% */ - for (i = 0; i < 7; i++) - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, 12); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16); - - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); - g_assert_no_error (error); - g_assert (success); - - g_assert_cmpint (nm_setting_dcb_get_app_fcoe_flags (s_dcb), ==, DCB_FLAGS_ALL); - g_assert_cmpint (nm_setting_dcb_get_app_iscsi_flags (s_dcb), ==, DCB_FLAGS_ALL); - g_assert_cmpint (nm_setting_dcb_get_app_fip_flags (s_dcb), ==, DCB_FLAGS_ALL); - g_assert_cmpint (nm_setting_dcb_get_priority_flow_control_flags (s_dcb), ==, DCB_FLAGS_ALL); - g_assert_cmpint (nm_setting_dcb_get_priority_group_flags (s_dcb), ==, DCB_FLAGS_ALL); -} - -#define TEST_FLAG(p, f, v) \ -{ \ - /* GObject property min/max should ensure the property does not get set to \ - * the invalid value, so we ensure the value we just tried to set is 0 and \ - * that verify is successful since the property never got set. \ - */ \ - g_object_set (G_OBJECT (s_dcb), p, v, NULL); \ - g_assert_cmpint (f (s_dcb), ==, 0); \ - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \ - g_assert_no_error (error); \ - g_assert (success); \ -} - -static void -test_dcb_flags_invalid (void) -{ - gs_unref_object NMSettingDcb *s_dcb = NULL; - GError *error = NULL; - gboolean success; - - s_dcb = (NMSettingDcb *) nm_setting_dcb_new (); - g_assert (s_dcb); - - NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*"); - TEST_FLAG (NM_SETTING_DCB_APP_FCOE_FLAGS, nm_setting_dcb_get_app_fcoe_flags, 0x332523); - g_test_assert_expected_messages (); - - NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*"); - TEST_FLAG (NM_SETTING_DCB_APP_ISCSI_FLAGS, nm_setting_dcb_get_app_iscsi_flags, 0xFF); - g_test_assert_expected_messages (); - - NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*"); - TEST_FLAG (NM_SETTING_DCB_APP_FIP_FLAGS, nm_setting_dcb_get_app_fip_flags, 0x1111); - g_test_assert_expected_messages (); - - NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*"); - TEST_FLAG (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, nm_setting_dcb_get_priority_flow_control_flags, G_MAXUINT32); - g_test_assert_expected_messages (); - - NMTST_EXPECT ("GLib-GObject", G_LOG_LEVEL_WARNING, "*invalid or out of range*"); - TEST_FLAG (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, nm_setting_dcb_get_priority_group_flags, - (NM_SETTING_DCB_FLAG_ENABLE | NM_SETTING_DCB_FLAG_ADVERTISE | NM_SETTING_DCB_FLAG_WILLING) + 1); - g_test_assert_expected_messages (); -} - -#define TEST_APP_PRIORITY(lcprop, ucprop, v) \ -{ \ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_FLAGS, NM_SETTING_DCB_FLAG_NONE, NULL); \ - \ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, v, NULL); \ - g_assert_cmpint (nm_setting_dcb_get_app_##lcprop##_priority (s_dcb), ==, v); \ - \ - /* Assert that the setting is invalid while the app is disabled unless v is default */ \ - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \ - if (v >= 0) { \ - g_assert_error (error, NM_SETTING_DCB_ERROR, NM_SETTING_DCB_ERROR_INVALID_PROPERTY); \ - g_assert (success == FALSE); \ - } else { \ - g_assert_no_error (error); \ - g_assert (success); \ - } \ - g_clear_error (&error); \ - \ - /* Set the enable flag and re-verify, this time it should be valid */ \ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); \ - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \ - g_assert_no_error (error); \ - g_assert (success); \ - \ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_APP_##ucprop##_PRIORITY, 0, NULL); \ -} - -static void -test_dcb_app_priorities (void) -{ - gs_unref_object NMSettingDcb *s_dcb = NULL; - GError *error = NULL; - gboolean success; - - s_dcb = (NMSettingDcb *) nm_setting_dcb_new (); - g_assert (s_dcb); - - /* Defaults */ - g_assert_cmpint (nm_setting_dcb_get_app_fcoe_priority (s_dcb), ==, -1); - g_assert_cmpint (nm_setting_dcb_get_app_iscsi_priority (s_dcb), ==, -1); - g_assert_cmpint (nm_setting_dcb_get_app_fip_priority (s_dcb), ==, -1); - - TEST_APP_PRIORITY (fcoe, FCOE, 6); - TEST_APP_PRIORITY (iscsi, ISCSI, 5); - TEST_APP_PRIORITY (fip, FIP, 4); - - TEST_APP_PRIORITY (fcoe, FCOE, -1); - TEST_APP_PRIORITY (iscsi, ISCSI, -1); - TEST_APP_PRIORITY (fip, FIP, -1); -} - -#define TEST_PRIORITY_VALID(fn, id, val, flagsprop, verify) \ -{ \ - /* Assert that setting the value gets the same value back out */ \ - nm_setting_dcb_set_priority_##fn (s_dcb, id, val); \ - g_assert_cmpint (nm_setting_dcb_get_priority_##fn (s_dcb, id), ==, val); \ - \ - if (verify) { \ - if (val != 0) { \ - /* Assert that verify fails because the flags do not include 'enabled' \ - * and a value has been set. \ - */ \ - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \ - g_assert_error (error, NM_SETTING_DCB_ERROR, NM_SETTING_DCB_ERROR_INVALID_PROPERTY); \ - g_assert (success == FALSE); \ - g_clear_error (&error); \ - } \ - \ - /* Assert that adding the 'enabled' flag verifies the setting */ \ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); \ - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); \ - g_assert_no_error (error); \ - g_assert (success); \ - } \ - \ - /* Reset everything */ \ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_##flagsprop##_FLAGS, NM_SETTING_DCB_FLAG_NONE, NULL); \ - nm_setting_dcb_set_priority_##fn (s_dcb, id, 0); \ -} - -/* If Priority Groups are enabled, PG bandwidth must equal 100% */ -#define SET_VALID_PRIORITY_GROUP_BANDWIDTH \ -{ \ - guint x; \ - for (x = 0; x < 7; x++) \ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, x, 12); \ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16); \ -} - -static void -test_dcb_priorities_valid (void) -{ - gs_unref_object NMSettingDcb *s_dcb = NULL; - GError *error = NULL; - gboolean success; - guint i; - - s_dcb = (NMSettingDcb *) nm_setting_dcb_new (); - g_assert (s_dcb); - - for (i = 0; i < 8; i++) - TEST_PRIORITY_VALID (flow_control, i, TRUE, FLOW_CONTROL, TRUE); - - SET_VALID_PRIORITY_GROUP_BANDWIDTH - for (i = 0; i < 8; i++) { - TEST_PRIORITY_VALID (group_id, i, i, GROUP, TRUE); - TEST_PRIORITY_VALID (group_id, i, 7 - i, GROUP, TRUE); - } - - /* Clear PG bandwidth from earlier tests */ - for (i = 0; i < 8; i++) - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, i, 0); - - /* Priority Group Bandwidth must add up to 100% if enabled, which requires - * some dancing for verifying individual values here. - */ - for (i = 0; i < 8; i++) { - guint other = 7 - (i % 8); - - /* Set another priority group to the remaining bandwidth */ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 100 - i); - TEST_PRIORITY_VALID (group_bandwidth, i, i, GROUP, TRUE); - - /* Set another priority group to the remaining bandwidth */ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 100 - (7 - i)); - TEST_PRIORITY_VALID (group_bandwidth, i, 7 - i, GROUP, TRUE); - - /* Clear remaining bandwidth */ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, other, 0); - } - - SET_VALID_PRIORITY_GROUP_BANDWIDTH - for (i = 0; i < 8; i++) { - TEST_PRIORITY_VALID (bandwidth, i, i, GROUP, TRUE); - TEST_PRIORITY_VALID (bandwidth, i, 7 - i, GROUP, TRUE); - } - - SET_VALID_PRIORITY_GROUP_BANDWIDTH - for (i = 0; i < 8; i++) - TEST_PRIORITY_VALID (strict_bandwidth, i, TRUE, GROUP, TRUE); - - SET_VALID_PRIORITY_GROUP_BANDWIDTH - for (i = 0; i < 8; i++) { - TEST_PRIORITY_VALID (traffic_class, i, i, GROUP, TRUE); - TEST_PRIORITY_VALID (traffic_class, i, 7 - i, GROUP, TRUE); - } -} - -static void -test_dcb_bandwidth_sums (void) -{ - gs_unref_object NMSettingDcb *s_dcb = NULL; - GError *error = NULL; - gboolean success; - - s_dcb = (NMSettingDcb *) nm_setting_dcb_new (); - g_assert (s_dcb); - - /* Assert that setting the value gets the same value back out */ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 0, 9); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 1, 10); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 2, 11); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 3, 12); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 13); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 5, 14); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 6, 15); - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 7, 16); - - /* Assert verify success when sums total 100% */ - g_object_set (G_OBJECT (s_dcb), NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, NM_SETTING_DCB_FLAG_ENABLE, NULL); - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); - g_assert_no_error (error); - g_assert (success); - - /* Assert verify fails when sums do not total 100% */ - nm_setting_dcb_set_priority_group_bandwidth (s_dcb, 4, 20); - success = nm_setting_verify (NM_SETTING (s_dcb), NULL, &error); - g_assert_error (error, NM_SETTING_DCB_ERROR, NM_SETTING_DCB_ERROR_INVALID_PROPERTY); - g_assert (success == FALSE); - g_clear_error (&error); -} - -#define TPATH "/libnm-util/settings/dcb/" - -NMTST_DEFINE (); - -int main (int argc, char **argv) -{ - nmtst_init (&argc, &argv, TRUE); - - g_test_add_func (TPATH "flags-valid", test_dcb_flags_valid); - g_test_add_func (TPATH "flags-invalid", test_dcb_flags_invalid); - g_test_add_func (TPATH "app-priorities", test_dcb_app_priorities); - g_test_add_func (TPATH "priorities", test_dcb_priorities_valid); - g_test_add_func (TPATH "bandwidth-sums", test_dcb_bandwidth_sums); - - return g_test_run (); -} - diff --git a/libnm-util/tests/test-settings-defaults.c b/libnm-util/tests/test-settings-defaults.c deleted file mode 100644 index 0bd4feee..00000000 --- a/libnm-util/tests/test-settings-defaults.c +++ /dev/null @@ -1,127 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright 2008 - 2011 Red Hat, Inc. - * - */ - -#include "nm-default.h" - -#include <string.h> - -#include "nm-utils.h" -#include "nm-setting-8021x.h" -#include "nm-setting-cdma.h" -#include "nm-setting-connection.h" -#include "nm-setting-gsm.h" -#include "nm-setting-ip4-config.h" -#include "nm-setting-ip6-config.h" -#include "nm-setting-ppp.h" -#include "nm-setting-pppoe.h" -#include "nm-setting-serial.h" -#include "nm-setting-vpn.h" -#include "nm-setting-wired.h" -#include "nm-setting-wireless.h" -#include "nm-setting-wireless-security.h" - -#include "nm-utils/nm-test-utils.h" - -static void -test_defaults (GType type, const char *name) -{ - GParamSpec **property_specs; - guint n_property_specs; - GObject *setting; - int i; - - setting = g_object_new (type, NULL); - - property_specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (setting), &n_property_specs); - g_assert (property_specs); - - for (i = 0; i < n_property_specs; i++) { - GParamSpec *prop_spec = property_specs[i]; - GValue value = G_VALUE_INIT; - GValue defvalue = G_VALUE_INIT; - char *actual, *expected; - gboolean ok = FALSE; - - /* Ignore non-fundamental types since they won't really have - * defaults. - */ - if (!G_TYPE_IS_FUNDAMENTAL (prop_spec->value_type)) - continue; - - g_value_init (&value, prop_spec->value_type); - g_object_get_property (G_OBJECT (setting), prop_spec->name, &value); - - g_value_init (&defvalue, prop_spec->value_type); - g_param_value_set_default (prop_spec, &defvalue); - - actual = g_strdup_value_contents (&value); - expected = g_strdup_value_contents (&defvalue); - - if (!strcmp (prop_spec->name, NM_SETTING_NAME)) { - /* 'name' is always the setting name, not the default value */ - ok = !strcmp (nm_setting_get_name (NM_SETTING (setting)), name); - g_free (expected); - expected = g_strdup (name); - } else - ok = g_param_value_defaults (prop_spec, &value); - - g_assert (ok); - - g_free (actual); - g_free (expected); - g_value_unset (&value); - g_value_unset (&defvalue); - } - - g_free (property_specs); - g_object_unref (setting); -} - -static void -defaults (void) -{ - /* The tests */ - test_defaults (NM_TYPE_SETTING_CONNECTION, NM_SETTING_CONNECTION_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_802_1X, NM_SETTING_802_1X_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_CDMA, NM_SETTING_CDMA_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_GSM, NM_SETTING_GSM_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_IP4_CONFIG, NM_SETTING_IP4_CONFIG_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_IP6_CONFIG, NM_SETTING_IP6_CONFIG_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_PPP, NM_SETTING_PPP_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_PPPOE, NM_SETTING_PPPOE_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_SERIAL, NM_SETTING_SERIAL_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_VPN, NM_SETTING_VPN_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_WIRED, NM_SETTING_WIRED_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_WIRELESS, NM_SETTING_WIRELESS_SETTING_NAME); - test_defaults (NM_TYPE_SETTING_WIRELESS_SECURITY, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME); -} - -NMTST_DEFINE (); - -int -main (int argc, char **argv) -{ - nmtst_init (&argc, &argv, TRUE); - - g_test_add_func ("/libnm/defaults", defaults); - - return g_test_run (); -} |