diff options
| author | Michael Biebl <biebl@debian.org> | 2021-02-11 18:11:46 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2021-02-11 18:11:46 +0100 |
| commit | 80ec1decc49c72efec2a8b87c06245c92c0ab807 (patch) | |
| tree | e3b229aa94e8dcf0590f2317664176e7b8f7607b /clients/cloud-setup/tests/test-cloud-setup-general.c | |
| parent | 65f86e8f56267192d42f2b629fc6b0c99fb9cd0c (diff) | |
New upstream version 1.29.90 upstream/1.29.90
Diffstat (limited to 'clients/cloud-setup/tests/test-cloud-setup-general.c')
| -rw-r--r-- | clients/cloud-setup/tests/test-cloud-setup-general.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/clients/cloud-setup/tests/test-cloud-setup-general.c b/clients/cloud-setup/tests/test-cloud-setup-general.c new file mode 100644 index 00000000..63f3c13d --- /dev/null +++ b/clients/cloud-setup/tests/test-cloud-setup-general.c @@ -0,0 +1,117 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "libnm/nm-default-client.h" + +#include "nm-cloud-setup-utils.h" +#include "nm-libnm-core-intern/nm-libnm-core-utils.h" + +#include "nm-utils/nm-test-utils.h" + +/*****************************************************************************/ + +static NMSettingIPConfig * +_ri4a_new_s_ip(const char *const *addrs) +{ + NMSettingIPConfig *s_ip; + + s_ip = NM_SETTING_IP_CONFIG(nm_setting_ip4_config_new()); + + for (; addrs && addrs[0]; addrs++) { + nm_auto_unref_ip_address NMIPAddress *a = nmtst_ip_address_new(AF_INET, addrs[0]); + + nm_setting_ip_config_add_address(s_ip, a); + } + return s_ip; +} + +static GPtrArray * +_ri4a_new_arr(const char *const *addrs) +{ + GPtrArray *arr; + + arr = g_ptr_array_new_with_free_func((GDestroyNotify) nm_ip_address_unref); + + for (; addrs && addrs[0]; addrs++) + g_ptr_array_add(arr, nmtst_ip_address_new(AF_INET, addrs[0])); + + return arr; +} + +static void +_test_ri4a(const char *const *addrs_before, const char *const *addrs_new) +{ + gs_unref_object NMSettingIPConfig *s_ip = NULL; + gs_unref_ptrarray GPtrArray *arr = NULL; + const gsize n = NM_PTRARRAY_LEN(addrs_new); + gboolean changed; + gsize i; + + s_ip = _ri4a_new_s_ip(addrs_before); + arr = _ri4a_new_arr(addrs_new); + + g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip), + ==, + NM_PTRARRAY_LEN(addrs_before)); + g_assert_cmpint(arr->len, ==, n); + + changed = nmcs_setting_ip_replace_ipv4_addresses(s_ip, (NMIPAddress **) arr->pdata, arr->len); + + g_assert_cmpint(changed, !=, nm_utils_strv_equal(addrs_before, addrs_new)); + g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip), ==, n); + + for (i = 0; i < n; i++) { + NMIPAddress *a = arr->pdata[i]; + NMIPAddress *b = nm_setting_ip_config_get_address(s_ip, i); + + if (nmtst_get_rand_bool()) + NM_SWAP(&a, &b); + + g_assert(nm_ip_address_cmp_full(a, b, NM_IP_ADDRESS_CMP_FLAGS_WITH_ATTRS) == 0); + } +} + +static void +test_replace_ipv4_addresses(void) +{ + const char *const *const LISTS[] = { + NM_MAKE_STRV(), + NM_MAKE_STRV("192.168.5.1/24"), + NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), + NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24", "192.168.5.3/24"), + NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24", "192.168.5.3/24", "192.168.5.4/24"), + }; + int i_run; + + for (i_run = 0; i_run < 20; i_run++) { + gs_free const char **addrs_before = NULL; + gs_free const char **addrs_new = NULL; + + addrs_before = nmtst_rand_perm_strv(LISTS[nmtst_get_rand_uint32() % G_N_ELEMENTS(LISTS)]); + addrs_new = nmtst_rand_perm_strv(LISTS[nmtst_get_rand_uint32() % G_N_ELEMENTS(LISTS)]); + + _test_ri4a(addrs_before, addrs_new); + } + + _test_ri4a(NM_MAKE_STRV(), NM_MAKE_STRV()); + _test_ri4a(NM_MAKE_STRV(), NM_MAKE_STRV("192.168.5.1/24")); + _test_ri4a(NM_MAKE_STRV(), NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24")); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24"), NM_MAKE_STRV()); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24"), NM_MAKE_STRV("192.168.5.1/24")); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), NM_MAKE_STRV()); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), NM_MAKE_STRV("192.168.5.1/24")); + _test_ri4a(NM_MAKE_STRV("192.168.5.1/24", "192.168.5.2/24"), NM_MAKE_STRV("192.168.5.2/24")); +} + +/*****************************************************************************/ + +NMTST_DEFINE(); + +int +main(int argc, char **argv) +{ + nmtst_init(&argc, &argv, TRUE); + + g_test_add_func("/cloud-setup/general/replace-ipv4-addresses", test_replace_ipv4_addresses); + + return g_test_run(); +} |