summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-02-09 14:20:04 +0100
committerThomas Haller <thaller@redhat.com>2021-02-10 18:35:13 +0100
commitd0552e00d0f1dabd6a8f6b01f3617fc4b282c78b (patch)
treefa82e52bccca61b1a98a2ecd143534c879d9444b
parent7e8809a9c565400038850f9700d906f97a564934 (diff)
downloadNetworkManager-d0552e00d0f1dabd6a8f6b01f3617fc4b282c78b.tar.gz
cloud-setup/tests: add test for nmcs_setting_ip_replace_ipv4_addresses()
-rw-r--r--clients/cloud-setup/tests/test-cloud-setup-general.c100
1 files changed, 100 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
index 7aa9a92f22..63f3c13d59 100644
--- a/clients/cloud-setup/tests/test-cloud-setup-general.c
+++ b/clients/cloud-setup/tests/test-cloud-setup-general.c
@@ -2,10 +2,108 @@
#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
@@ -13,5 +111,7 @@ 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();
}