diff options
Diffstat (limited to 'src/libnm-core-impl/tests')
| -rw-r--r-- | src/libnm-core-impl/tests/test-general.c | 250 | ||||
| -rw-r--r-- | src/libnm-core-impl/tests/test-setting.c | 10 |
2 files changed, 198 insertions, 62 deletions
diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c index 1856f6ad..3c8cd3ba 100644 --- a/src/libnm-core-impl/tests/test-general.c +++ b/src/libnm-core-impl/tests/test-general.c @@ -1338,6 +1338,7 @@ typedef struct { static int _c_list_sort_cmp(const CList *lst_a, const CList *lst_b, const void *user_data) { + const int MODFIER = user_data ? GPOINTER_TO_INT(user_data) : 0; const CListSort *a, *b; g_assert(lst_a); @@ -1351,9 +1352,36 @@ _c_list_sort_cmp(const CList *lst_a, const CList *lst_b, const void *user_data) return -1; if (a->val > b->val) return 1; + + switch (MODFIER) { + case 0: + break; + case 1: + NM_CMP_DIRECT_PTR(a, b); + g_assert_not_reached(); + break; + case 2: + NM_CMP_DIRECT_PTR(b, a); + g_assert_not_reached(); + break; + default: + g_assert_not_reached(); + break; + } + return 0; } +static int +_c_list_sort_cmp_inverse(const CList *lst_a, const CList *lst_b, const void *user_data) +{ + int c; + + c = _c_list_sort_cmp(lst_b, lst_a, user_data); + g_assert(NM_IN_SET(c, -1, 0, 1)); + return c; +} + static void _do_test_c_list_sort(CListSort *elements, guint n_list, gboolean headless) { @@ -1411,8 +1439,9 @@ static void test_c_list_sort(void) { const guint N_ELEMENTS = 10000; - guint n_list, repeat; - gs_free CListSort *elements = NULL; + gs_free CListSort *elements = NULL; + guint n_list; + guint repeat; { CList head; @@ -1441,6 +1470,97 @@ test_c_list_sort(void) /*****************************************************************************/ +static void +_do_test_c_list_insert_sorted(CListSort *elements, guint n_list, bool append_equal) +{ + CList head; + guint i; + const CListSort *el_prev; + CListSort *el; + + c_list_init(&head); + for (i = 0; i < n_list; i++) { + el = &elements[i]; + el->val = nmtst_get_rand_uint32() % (2 * n_list); + + if (nmtst_get_rand_bool()) { + c_list_insert_sorted(&head, &el->lst, TRUE, append_equal, _c_list_sort_cmp, NULL); + } else { + c_list_insert_sorted(&head, + &el->lst, + FALSE, + append_equal, + _c_list_sort_cmp_inverse, + NULL); + } + + if (nmtst_get_rand_one_case_in(20)) { + nm_assert(c_list_is_sorted(&head, TRUE, _c_list_sort_cmp, NULL)); + if (append_equal) { + nm_assert(c_list_is_sorted(&head, TRUE, _c_list_sort_cmp, GINT_TO_POINTER(1))); + } else { + nm_assert(c_list_is_sorted(&head, TRUE, _c_list_sort_cmp, GINT_TO_POINTER(2))); + } + nm_assert(c_list_is_sorted(&head, FALSE, _c_list_sort_cmp_inverse, NULL)); + if (append_equal) { + nm_assert( + c_list_is_sorted(&head, FALSE, _c_list_sort_cmp_inverse, GINT_TO_POINTER(1))); + } else { + nm_assert( + c_list_is_sorted(&head, FALSE, _c_list_sort_cmp_inverse, GINT_TO_POINTER(2))); + } + } + } + + g_assert_cmpint(c_list_length(&head), ==, n_list); + g_assert(!c_list_length_is(&head, n_list - 1)); + g_assert(c_list_length_is(&head, n_list)); + g_assert(!c_list_length_is(&head, n_list + 1)); + + el_prev = NULL; + c_list_for_each_entry (el, &head, lst) { + if (el_prev) { + int c; + + c = _c_list_sort_cmp(&el_prev->lst, &el->lst, NULL); + g_assert_cmpint(c, <=, 0); + if (c == 0) { + if (append_equal) + g_assert(&el_prev->lst < &el->lst); + else + g_assert(&el_prev->lst > &el->lst); + } + } + el_prev = el; + } +} + +static void +test_c_list_insert_sorted(void) +{ + const guint N_ELEMENTS = 1000; + gs_free CListSort *elements = NULL; + guint n_list; + guint repeat; + + elements = g_new0(CListSort, N_ELEMENTS); + for (n_list = 1; n_list < N_ELEMENTS; n_list++) { + if (n_list > 150) { + n_list += nmtst_get_rand_uint32() % n_list; + if (n_list >= N_ELEMENTS) + break; + } + { + const guint N_REPEAT = n_list > 50 ? 1 : 5; + + for (repeat = 0; repeat < N_REPEAT; repeat++) + _do_test_c_list_insert_sorted(elements, n_list, nmtst_get_rand_bool()); + } + } +} + +/*****************************************************************************/ + typedef struct { NMDedupMultiObj parent; guint val; @@ -2381,12 +2501,18 @@ test_setting_ip_route_attributes(void) TEST_ATTR("tos", byte, 127, AF_INET, TRUE, TRUE); TEST_ATTR("tos", string, "0x28", AF_INET, FALSE, TRUE); + TEST_ATTR("advmss", uint32, 1400, AF_INET, TRUE, TRUE); + TEST_ATTR("advmss", string, "1400", AF_INET, FALSE, TRUE); + TEST_ATTR("cwnd", uint32, 10, AF_INET, TRUE, TRUE); TEST_ATTR("cwnd", string, "11", AF_INET, FALSE, TRUE); TEST_ATTR("lock-mtu", boolean, TRUE, AF_INET, TRUE, TRUE); TEST_ATTR("lock-mtu", uint32, 1, AF_INET, FALSE, TRUE); + TEST_ATTR("lock-advmss", boolean, TRUE, AF_INET, TRUE, TRUE); + TEST_ATTR("lock-advmss", boolean, TRUE, AF_INET6, TRUE, TRUE); + TEST_ATTR("from", string, "fd01::1", AF_INET6, TRUE, TRUE); TEST_ATTR("from", string, "fd01::1/64", AF_INET6, TRUE, TRUE); TEST_ATTR("from", string, "fd01::1/128", AF_INET6, TRUE, TRUE); @@ -2396,6 +2522,12 @@ test_setting_ip_route_attributes(void) TEST_ATTR("from", string, "1.2.3.4", AF_INET, FALSE, TRUE); TEST_ATTR("from", string, "1.2.3.4", AF_INET6, FALSE, TRUE); + TEST_ATTR("quickack", boolean, TRUE, AF_INET, TRUE, TRUE); + TEST_ATTR("quickack", boolean, TRUE, AF_INET6, TRUE, TRUE); + + TEST_ATTR("rto_min", uint32, 1000, AF_INET, TRUE, TRUE); + TEST_ATTR("rto_min", uint32, 1000, AF_INET6, TRUE, TRUE); + TEST_ATTR("src", string, "1.2.3.4", AF_INET, TRUE, TRUE); TEST_ATTR("src", string, "1.2.3.4", AF_INET6, FALSE, TRUE); TEST_ATTR("src", string, "1.2.3.0/24", AF_INET, FALSE, TRUE); @@ -3822,8 +3954,10 @@ test_connection_diff_a_only(void) {NM_SETTING_CONNECTION_MDNS, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_LLMNR, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_DNS_OVER_TLS, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_CONNECTION_MPTCP_FLAGS, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_MUD_URL, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_CONNECTION_WAIT_ACTIVATION_DELAY, NM_SETTING_DIFF_RESULT_IN_A}, {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}}}, {NM_SETTING_WIRED_SETTING_NAME, { @@ -3872,6 +4006,7 @@ test_connection_diff_a_only(void) {NM_SETTING_IP_CONFIG_DHCP_IAID, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER, NM_SETTING_DIFF_RESULT_IN_A}, {NM_SETTING_IP_CONFIG_DHCP_REJECT_SERVERS, NM_SETTING_DIFF_RESULT_IN_A}, + {NM_SETTING_IP4_CONFIG_LINK_LOCAL, NM_SETTING_DIFF_RESULT_IN_A}, {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}, }}, }; @@ -3914,11 +4049,11 @@ test_connection_diff_different(void) NMSettingIPConfig *s_ip4; gboolean same; const DiffSetting settings[] = { - {NM_SETTING_IP4_CONFIG_SETTING_NAME, - { - {NM_SETTING_IP_CONFIG_METHOD, - NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B}, - {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}, + {NM_SETTING_IP4_CONFIG_SETTING_NAME, + { + {NM_SETTING_IP_CONFIG_METHOD, + NM_SETTING_DIFF_RESULT_IN_A | NM_SETTING_DIFF_RESULT_IN_B}, + {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}, }}, }; @@ -3999,10 +4134,10 @@ test_connection_diff_inferrable(void) NMSettingIPConfig *s_ip4; char *uuid; const DiffSetting settings[] = { - {NM_SETTING_CONNECTION_SETTING_NAME, - { - {NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A}, - {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}, + {NM_SETTING_CONNECTION_SETTING_NAME, + { + {NM_SETTING_CONNECTION_INTERFACE_NAME, NM_SETTING_DIFF_RESULT_IN_A}, + {NULL, NM_SETTING_DIFF_RESULT_UNKNOWN}, }}, }; @@ -4923,7 +5058,7 @@ _netmask_to_prefix(guint32 netmask) /* we re-implemented the netmask-to-prefix code differently. Check * that they agree. */ - g_assert_cmpint(prefix, ==, nm_utils_ip4_netmask_to_prefix(netmask)); + g_assert_cmpint(prefix, ==, _nm_utils_ip4_netmask_to_prefix(netmask)); return prefix; } @@ -6722,53 +6857,53 @@ test_setting_ip6_gateway(void) GVariant *gateway_var; GVariantBuilder addrs_builder; guint8 addr_bytes_0[] = {0xab, - 0xcd, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0a}; + 0xcd, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0a}; guint8 addr_bytes_1[] = {0xab, - 0xcd, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0b}; + 0xcd, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0b}; guint8 gateway_bytes_1[] = {0xab, - 0xcd, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01}; + 0xcd, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01}; GError *error = NULL; /* When serializing on the daemon side, ipv6.gateway is copied to the first @@ -10824,6 +10959,7 @@ main(int argc, char **argv) g_test_add_func("/core/general/test_nm_hash", test_nm_hash); g_test_add_func("/core/general/test_nm_g_slice_free_fcn", test_nm_g_slice_free_fcn); g_test_add_func("/core/general/test_c_list_sort", test_c_list_sort); + g_test_add_func("/core/general/test_c_list_insert_sorted", test_c_list_insert_sorted); g_test_add_func("/core/general/test_dedup_multi", test_dedup_multi); g_test_add_func("/core/general/test_utils_str_utf8safe", test_utils_str_utf8safe); g_test_add_func("/core/general/test_nm_strsplit_set", test_nm_strsplit_set); diff --git a/src/libnm-core-impl/tests/test-setting.c b/src/libnm-core-impl/tests/test-setting.c index 788f218d..5bdae716 100644 --- a/src/libnm-core-impl/tests/test-setting.c +++ b/src/libnm-core-impl/tests/test-setting.c @@ -3596,7 +3596,7 @@ test_roundtrip_conversion(gconstpointer test_data) "method=auto\n" "\n" "[ipv6]\n" - "addr-gen-mode=stable-privacy\n" + "addr-gen-mode=default\n" "method=auto\n" "\n" "[proxy]\n" @@ -3623,7 +3623,7 @@ test_roundtrip_conversion(gconstpointer test_data) "method=auto\n" "\n" "[ipv6]\n" - "addr-gen-mode=stable-privacy\n" + "addr-gen-mode=default\n" "method=auto\n" "", ID, @@ -3660,7 +3660,7 @@ test_roundtrip_conversion(gconstpointer test_data) "method=disabled\n" "\n" "[ipv6]\n" - "addr-gen-mode=stable-privacy\n" + "addr-gen-mode=default\n" "method=disabled\n" "\n" "[proxy]\n" @@ -3714,7 +3714,7 @@ test_roundtrip_conversion(gconstpointer test_data) "method=disabled\n" "\n" "[ipv6]\n" - "addr-gen-mode=stable-privacy\n" + "addr-gen-mode=default\n" "method=disabled\n" "\n" "[proxy]\n" @@ -3795,7 +3795,7 @@ test_roundtrip_conversion(gconstpointer test_data) "routing-rule3=priority 3 from 192.168.2.0/26 table 1002\n" "\n" "[ipv6]\n" - "addr-gen-mode=stable-privacy\n" + "addr-gen-mode=default\n" "method=auto\n" "routing-rule1=priority 1 from ::/0 table 1000\n" "routing-rule2=priority 2 from 1:2:3:b::/65 table 1001\n" |