diff options
| author | Sebastien Bacher <seb128@ubuntu.com> | 2021-02-25 11:35:01 +0100 |
|---|---|---|
| committer | Sebastien Bacher <seb128@ubuntu.com> | 2021-02-25 11:49:48 +0100 |
| commit | 77dea84aa6e816f66dc622cec8ae2668eba3c068 (patch) | |
| tree | 755536a0ed1fb36c2899e9bff9e092c4008a25c4 /src/dhcp/tests/test-dhcp-utils.c | |
| parent | 47f08826b44eed651b44dc8bacb5b46bc4c52067 (diff) | |
| parent | fd80297a396cc4dd7da4da20208fb360aa369aa7 (diff) | |
Merge branch 'debian/master' into ubuntu/master
Diffstat (limited to 'src/dhcp/tests/test-dhcp-utils.c')
| -rw-r--r-- | src/dhcp/tests/test-dhcp-utils.c | 781 |
1 files changed, 0 insertions, 781 deletions
diff --git a/src/dhcp/tests/test-dhcp-utils.c b/src/dhcp/tests/test-dhcp-utils.c deleted file mode 100644 index 50245c79..00000000 --- a/src/dhcp/tests/test-dhcp-utils.c +++ /dev/null @@ -1,781 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * Copyright (C) 2008 - 2014 Red Hat, Inc. - */ - -#include "nm-default.h" - -#include <netinet/in.h> -#include <arpa/inet.h> -#include <linux/rtnetlink.h> - -#include "nm-glib-aux/nm-dedup-multi.h" -#include "nm-utils.h" - -#include "dhcp/nm-dhcp-utils.h" -#include "platform/nm-platform.h" - -#include "nm-test-utils-core.h" - -static NMIP4Config * -_ip4_config_from_options(int ifindex, const char *iface, GHashTable *options, guint32 route_metric) -{ - nm_auto_unref_dedup_multi_index NMDedupMultiIndex *multi_idx = nm_dedup_multi_index_new(); - NMIP4Config * config; - - config = nm_dhcp_utils_ip4_config_from_options(multi_idx, - ifindex, - iface, - options, - RT_TABLE_MAIN, - route_metric); - g_assert(config); - return config; -} - -typedef struct { - const char *name; - const char *value; -} Option; - -static GHashTable * -fill_table(const Option *test_options, GHashTable *table) -{ - const Option *opt; - - if (!table) - table = g_hash_table_new_full(nm_str_hash, g_str_equal, NULL, NULL); - for (opt = test_options; opt->name; opt++) - g_hash_table_insert(table, (gpointer) opt->name, (gpointer) opt->value); - return table; -} - -static const Option generic_options[] = { - {"subnet_mask", "255.255.255.0"}, - {"ip_address", "192.168.1.106"}, - {"network_number", "192.168.1.0"}, - {"expiry", "1232324877"}, - {"dhcp_lease_time", "3600"}, - {"dhcp_server_identifier", "192.168.1.1"}, - {"routers", "192.168.1.1"}, - {"domain_name_servers", "216.254.95.2 216.231.41.2"}, - {"dhcp_message_type", "5"}, - {"broadcast_address", "192.168.1.255"}, - {"domain_search", "foobar.com blah.foobar.com"}, - {"host_name", "nmreallywhipsthe"}, - {"domain_name", "lamasass.com"}, - {"interface_mtu", "987"}, - {"static_routes", "10.1.1.5 10.1.1.1 100.99.88.56 10.1.1.1"}, - {NULL, NULL}}; - -static void -test_generic_options(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const NMPlatformIP4Address * address; - const NMPlatformIP4Route * route; - guint32 tmp; - const char * expected_addr = "192.168.1.106"; - const char * expected_gw = "192.168.1.1"; - const char * expected_dns1 = "216.254.95.2"; - const char * expected_dns2 = "216.231.41.2"; - const char * expected_search1 = "foobar.com"; - const char * expected_search2 = "blah.foobar.com"; - const char * expected_route1_dest = "10.1.1.5"; - const char * expected_route1_gw = "10.1.1.1"; - const char * expected_route2_dest = "100.99.88.56"; - const char * expected_route2_gw = "10.1.1.1"; - - options = fill_table(generic_options, NULL); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 address */ - g_assert_cmpint(nm_ip4_config_get_num_addresses(ip4_config), ==, 1); - address = _nmtst_ip4_config_get_address(ip4_config, 0); - g_assert(inet_pton(AF_INET, expected_addr, &tmp) > 0); - g_assert(address->address == tmp); - g_assert(address->peer_address == tmp); - g_assert_cmpint(address->plen, ==, 24); - - /* Gateway */ - g_assert(inet_pton(AF_INET, expected_gw, &tmp) > 0); - g_assert(nmtst_ip4_config_get_gateway(ip4_config) == tmp); - - g_assert_cmpint(nm_ip4_config_get_num_wins(ip4_config), ==, 0); - - g_assert_cmpint(nm_ip4_config_get_mtu(ip4_config), ==, 987); - - /* Domain searches */ - g_assert_cmpint(nm_ip4_config_get_num_searches(ip4_config), ==, 2); - g_assert_cmpstr(nm_ip4_config_get_search(ip4_config, 0), ==, expected_search1); - g_assert_cmpstr(nm_ip4_config_get_search(ip4_config, 1), ==, expected_search2); - - /* DNS servers */ - g_assert_cmpint(nm_ip4_config_get_num_nameservers(ip4_config), ==, 2); - g_assert(inet_pton(AF_INET, expected_dns1, &tmp) > 0); - g_assert(nm_ip4_config_get_nameserver(ip4_config, 0) == tmp); - g_assert(inet_pton(AF_INET, expected_dns2, &tmp) > 0); - g_assert(nm_ip4_config_get_nameserver(ip4_config, 1) == tmp); - - /* Routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - - /* Route #1 */ - route = _nmtst_ip4_config_get_route(ip4_config, 0); - g_assert(inet_pton(AF_INET, expected_route1_dest, &tmp) > 0); - g_assert(route->network == tmp); - g_assert(inet_pton(AF_INET, expected_route1_gw, &tmp) > 0); - g_assert(route->gateway == tmp); - g_assert_cmpint(route->plen, ==, 32); - g_assert_cmpint(route->metric, ==, 0); - - /* Route #2 */ - route = _nmtst_ip4_config_get_route(ip4_config, 1); - g_assert(route->network == nmtst_inet4_from_string(expected_route2_dest)); - g_assert(route->gateway == nmtst_inet4_from_string(expected_route2_gw)); - g_assert_cmpint(route->plen, ==, 32); - g_assert_cmpint(route->metric, ==, 0); - - route = _nmtst_ip4_config_get_route(ip4_config, 2); - g_assert(route->network == nmtst_inet4_from_string("0.0.0.0")); - g_assert(route->gateway == nmtst_inet4_from_string("192.168.1.1")); - g_assert_cmpint(route->plen, ==, 0); - g_assert_cmpint(route->metric, ==, 0); - - g_hash_table_destroy(options); -} - -static void -test_wins_options(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const NMPlatformIP4Address * address; - guint32 tmp; - const char * expected_wins1 = "63.12.199.5"; - const char * expected_wins2 = "150.4.88.120"; - static const Option data[] = {{"netbios_name_servers", "63.12.199.5 150.4.88.120"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 address */ - g_assert_cmpint(nm_ip4_config_get_num_addresses(ip4_config), ==, 1); - address = _nmtst_ip4_config_get_address(ip4_config, 0); - g_assert(address); - g_assert_cmpint(nm_ip4_config_get_num_wins(ip4_config), ==, 2); - g_assert(inet_pton(AF_INET, expected_wins1, &tmp) > 0); - g_assert(nm_ip4_config_get_wins(ip4_config, 0) == tmp); - g_assert(inet_pton(AF_INET, expected_wins2, &tmp) > 0); - g_assert(nm_ip4_config_get_wins(ip4_config, 1) == tmp); - - g_hash_table_destroy(options); -} - -static void -test_vendor_option_metered(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - static const Option data[] = {{"vendor_encapsulated_options", "ANDROID_METERED"}, {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_assert(nm_ip4_config_get_metered(ip4_config) == FALSE); - g_hash_table_destroy(options); - g_clear_object(&ip4_config); - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_assert(nm_ip4_config_get_metered(ip4_config) == TRUE); - g_hash_table_destroy(options); -} - -static void -test_parse_search_list(void) -{ - guint8 *data; - char ** domains; - - data = (guint8[]){0x05, 'l', 'o', 'c', 'a', 'l', 0x00}; - domains = nm_dhcp_parse_search_list(data, 7); - g_assert(domains); - g_assert_cmpint(g_strv_length(domains), ==, 1); - g_assert_cmpstr(domains[0], ==, "local"); - g_strfreev(domains); - - data = (guint8[]){0x04, 't', 'e', 's', 't', 0x07, 'e', 'x', 'a', 'm', 'p', 'l', - 'e', 0x03, 'c', 'o', 'm', 0x00, 0xc0, 0x05, 0x03, 'a', 'b', 'c', - 0xc0, 0x0d, 0x06, 'f', 'o', 'o', 'b', 'a', 'r', 0x00}; - domains = nm_dhcp_parse_search_list(data, 34); - g_assert(domains); - g_assert_cmpint(g_strv_length(domains), ==, 4); - g_assert_cmpstr(domains[0], ==, "test.example.com"); - g_assert_cmpstr(domains[1], ==, "example.com"); - g_assert_cmpstr(domains[2], ==, "abc.com"); - g_assert_cmpstr(domains[3], ==, "foobar"); - g_strfreev(domains); - - data = (guint8[]){ - 0x40, - 'b', - 'a', - 'd', - }; - domains = nm_dhcp_parse_search_list(data, 4); - g_assert(!domains); - - data = (guint8[]){ - 0x04, - 'o', - 'k', - 'a', - 'y', - 0x00, - 0x40, - 'b', - 'a', - 'd', - }; - domains = nm_dhcp_parse_search_list(data, 10); - g_assert(domains); - g_assert_cmpint(g_strv_length(domains), ==, 1); - g_assert_cmpstr(domains[0], ==, "okay"); - g_strfreev(domains); -} - -static void -ip4_test_route(NMIP4Config *ip4_config, - guint route_num, - const char * expected_dest, - const char * expected_gw, - guint expected_prefix) -{ - const NMPlatformIP4Route *route; - guint32 tmp; - - g_assert(expected_prefix <= 32); - - route = _nmtst_ip4_config_get_route(ip4_config, route_num); - g_assert(inet_pton(AF_INET, expected_dest, &tmp) > 0); - g_assert(route->network == tmp); - g_assert(inet_pton(AF_INET, expected_gw, &tmp) > 0); - g_assert(route->gateway == tmp); - g_assert_cmpint(route->plen, ==, expected_prefix); - g_assert_cmpint(route->metric, ==, 0); -} - -static void -ip4_test_gateway(NMIP4Config *ip4_config, const char *expected_gw) -{ - guint32 tmp; - - g_assert_cmpint(nm_ip4_config_get_num_addresses(ip4_config), ==, 1); - g_assert(inet_pton(AF_INET, expected_gw, &tmp) > 0); - g_assert(nmtst_ip4_config_get_gateway(ip4_config) == tmp); -} - -static void -test_classless_static_routes_1(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - const char * expected_route2_dest = "10.0.0.0"; - const char * expected_route2_gw = "10.17.66.41"; - static const Option data[] = { - /* dhclient custom format */ - {"rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 8 10 10 17 66 41"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, expected_route2_dest, expected_route2_gw, 8); - ip4_test_route(ip4_config, 2, "0.0.0.0", "192.168.1.1", 0); - - g_hash_table_destroy(options); -} - -static void -test_classless_static_routes_2(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - const char * expected_route2_dest = "10.0.0.0"; - const char * expected_route2_gw = "10.17.66.41"; - static const Option data[] = { - /* dhcpcd format */ - {"classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.0.0/8 10.17.66.41"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, expected_route2_dest, expected_route2_gw, 8); - ip4_test_route(ip4_config, 2, "0.0.0.0", expected_route1_gw, 0); - - g_hash_table_destroy(options); -} - -static void -test_fedora_dhclient_classless_static_routes(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "129.210.177.128"; - const char * expected_route1_gw = "192.168.0.113"; - const char * expected_route2_dest = "2.0.0.0"; - const char * expected_route2_gw = "10.34.255.6"; - const char * expected_gateway = "192.168.0.113"; - static const Option data[] = { - /* Fedora dhclient format */ - {"classless_static_routes", - "0 192.168.0.113 25.129.210.177.132 192.168.0.113 7.2 10.34.255.6"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 25); - ip4_test_route(ip4_config, 1, expected_route2_dest, expected_route2_gw, 7); - ip4_test_route(ip4_config, 2, "0.0.0.0", expected_route1_gw, 0); - - /* Gateway */ - ip4_test_gateway(ip4_config, expected_gateway); - - g_hash_table_destroy(options); -} - -static void -test_dhclient_invalid_classless_routes_1(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - static const Option data[] = { - /* dhclient format */ - {"rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 45 10 17 66 41"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*ignoring invalid classless static routes*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 2); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, "0.0.0.0", expected_route1_gw, 0); - - g_hash_table_destroy(options); -} - -static void -test_dhcpcd_invalid_classless_routes_1(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "10.1.1.5"; - const char * expected_route1_gw = "10.1.1.1"; - const char * expected_route2_dest = "100.99.88.56"; - const char * expected_route2_gw = "10.1.1.1"; - static const Option data[] = { - /* dhcpcd format */ - {"classless_static_routes", "192.168.10.0/24 192.168.1.1 10.0.adfadf/44 10.17.66.41"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*ignoring invalid classless static routes*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* Test falling back to old-style static routes if the classless static - * routes are invalid. - */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 32); - ip4_test_route(ip4_config, 1, expected_route2_dest, expected_route2_gw, 32); - ip4_test_route(ip4_config, 2, "0.0.0.0", "192.168.1.1", 0); - - g_hash_table_destroy(options); -} - -static void -test_dhclient_invalid_classless_routes_2(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "10.1.1.5"; - const char * expected_route1_gw = "10.1.1.1"; - const char * expected_route2_dest = "100.99.88.56"; - const char * expected_route2_gw = "10.1.1.1"; - static const Option data[] = { - {"rfc3442_classless_static_routes", "45 10 17 66 41 24 192 168 10 192 168 1 1"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*ignoring invalid classless static routes*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* Test falling back to old-style static routes if the classless static - * routes are invalid. - */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 32); - ip4_test_route(ip4_config, 1, expected_route2_dest, expected_route2_gw, 32); - ip4_test_route(ip4_config, 2, "0.0.0.0", "192.168.1.1", 0); - - g_hash_table_destroy(options); -} - -static void -test_dhcpcd_invalid_classless_routes_2(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "10.1.1.5"; - const char * expected_route1_gw = "10.1.1.1"; - const char * expected_route2_dest = "100.99.88.56"; - const char * expected_route2_gw = "10.1.1.1"; - static const Option data[] = { - {"classless_static_routes", "10.0.adfadf/44 10.17.66.41 192.168.10.0/24 192.168.1.1"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*ignoring invalid classless static routes*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* Test falling back to old-style static routes if the classless static - * routes are invalid. - */ - - /* Routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 3); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 32); - ip4_test_route(ip4_config, 1, expected_route2_dest, expected_route2_gw, 32); - ip4_test_route(ip4_config, 2, "0.0.0.0", "192.168.1.1", 0); - - g_hash_table_destroy(options); -} - -static void -test_dhclient_invalid_classless_routes_3(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - static const Option data[] = { - {"rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 32 128 10 17 66 41"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*ignoring invalid classless static routes*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 2); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, "0.0.0.0", expected_route1_gw, 0); - - g_hash_table_destroy(options); -} - -static void -test_dhcpcd_invalid_classless_routes_3(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - static Option data[] = { - {"classless_static_routes", "192.168.10.0/24 192.168.1.1 128/32 10.17.66.41"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*DHCP provided invalid classless static route*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 2); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, "0.0.0.0", expected_route1_gw, 0); - - g_hash_table_destroy(options); -} - -static void -test_dhclient_gw_in_classless_routes(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - const char * expected_gateway = "192.2.3.4"; - static Option data[] = { - {"rfc3442_classless_static_routes", "24 192 168 10 192 168 1 1 0 192 2 3 4"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 2); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, "0.0.0.0", "192.2.3.4", 0); - - /* Gateway */ - ip4_test_gateway(ip4_config, expected_gateway); - - g_hash_table_destroy(options); -} - -static void -test_dhcpcd_gw_in_classless_routes(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_route1_dest = "192.168.10.0"; - const char * expected_route1_gw = "192.168.1.1"; - const char * expected_gateway = "192.2.3.4"; - static Option data[] = { - {"classless_static_routes", "192.168.10.0/24 192.168.1.1 0.0.0.0/0 192.2.3.4"}, - {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* IP4 routes */ - g_assert_cmpint(nm_ip4_config_get_num_routes(ip4_config), ==, 2); - ip4_test_route(ip4_config, 0, expected_route1_dest, expected_route1_gw, 24); - ip4_test_route(ip4_config, 1, "0.0.0.0", "192.2.3.4", 0); - - /* Gateway */ - ip4_test_gateway(ip4_config, expected_gateway); - - g_hash_table_destroy(options); -} - -static void -test_escaped_domain_searches(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const char * expected_search0 = "host1"; - const char * expected_search1 = "host2"; - const char * expected_search2 = "host3"; - static const Option data[] = {{"domain_search", "host1\\032host2\\032host3"}, {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - /* domain searches */ - g_assert_cmpint(nm_ip4_config_get_num_searches(ip4_config), ==, 3); - g_assert_cmpstr(nm_ip4_config_get_search(ip4_config, 0), ==, expected_search0); - g_assert_cmpstr(nm_ip4_config_get_search(ip4_config, 1), ==, expected_search1); - g_assert_cmpstr(nm_ip4_config_get_search(ip4_config, 2), ==, expected_search2); - - g_hash_table_destroy(options); -} - -static void -test_invalid_escaped_domain_searches(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - static const Option data[] = {{"domain_search", "host1\\aahost2\\032host3"}, {NULL, NULL}}; - - options = fill_table(generic_options, NULL); - options = fill_table(data, options); - - NMTST_EXPECT_NM_WARN("*invalid domain search*"); - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - g_test_assert_expected_messages(); - - /* domain searches */ - g_assert_cmpint(nm_ip4_config_get_num_searches(ip4_config), ==, 0); - - g_hash_table_destroy(options); -} - -static void -test_ip4_missing_prefix(const char *ip, guint32 expected_prefix) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const NMPlatformIP4Address * address; - - options = fill_table(generic_options, NULL); - g_hash_table_insert(options, "ip_address", (gpointer) ip); - g_hash_table_remove(options, "subnet_mask"); - - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - g_assert_cmpint(nm_ip4_config_get_num_addresses(ip4_config), ==, 1); - address = _nmtst_ip4_config_get_address(ip4_config, 0); - g_assert(address); - g_assert_cmpint(address->plen, ==, expected_prefix); - - g_hash_table_destroy(options); -} - -static void -test_ip4_missing_prefix_24(void) -{ - test_ip4_missing_prefix("192.168.1.10", 24); -} - -static void -test_ip4_missing_prefix_16(void) -{ - test_ip4_missing_prefix("172.16.54.50", 16); -} - -static void -test_ip4_missing_prefix_8(void) -{ - test_ip4_missing_prefix("10.1.2.3", 8); -} - -static void -test_ip4_prefix_classless(void) -{ - GHashTable * options; - gs_unref_object NMIP4Config *ip4_config = NULL; - const NMPlatformIP4Address * address; - - /* Ensure that the missing-subnet-mask handler doesn't mangle classless - * subnet masks at all. The handler should trigger only if the server - * doesn't send the subnet mask. - */ - - options = fill_table(generic_options, NULL); - g_hash_table_insert(options, "ip_address", "172.16.54.22"); - g_hash_table_insert(options, "subnet_mask", "255.255.252.0"); - - ip4_config = _ip4_config_from_options(1, "eth0", options, 0); - - g_assert_cmpint(nm_ip4_config_get_num_addresses(ip4_config), ==, 1); - address = _nmtst_ip4_config_get_address(ip4_config, 0); - g_assert(address); - g_assert_cmpint(address->plen, ==, 22); - - g_hash_table_destroy(options); -} - -#define COMPARE_ID(src, is_str, expected, expected_len) \ - G_STMT_START \ - { \ - gs_unref_bytes GBytes *b = NULL; \ - const char * p; \ - gsize l; \ - \ - b = nm_dhcp_utils_client_id_string_to_bytes(src); \ - g_assert(b); \ - p = g_bytes_get_data(b, &l); \ - if (is_str) { \ - g_assert_cmpint(l, ==, expected_len + 1); \ - g_assert_cmpint(((const char *) p)[0], ==, 0); \ - g_assert(memcmp(p + 1, expected, expected_len) == 0); \ - } else { \ - g_assert_cmpint(l, ==, expected_len); \ - g_assert(memcmp(p, expected, expected_len) == 0); \ - } \ - } \ - G_STMT_END - -static void -test_client_id_from_string(void) -{ - const char * nothex = "asdfasdfasdfasdfasdfasdfasdf"; - const char * allhex = "00:11:22:33:4:55:66:77:88"; - const guint8 allhex_bin[] = {0x00, 0x11, 0x22, 0x33, 0x04, 0x55, 0x66, 0x77, 0x88}; - const char * somehex = "00:11:22:33:44:55:asdfasdfasdf:99:10"; - const char * nocolons = "0011223344559910"; - const char * endcolon = "00:11:22:33:44:55:"; - - COMPARE_ID(nothex, TRUE, nothex, strlen(nothex)); - COMPARE_ID(allhex, FALSE, allhex_bin, sizeof(allhex_bin)); - COMPARE_ID(somehex, TRUE, somehex, strlen(somehex)); - COMPARE_ID(nocolons, TRUE, nocolons, strlen(nocolons)); - COMPARE_ID(endcolon, TRUE, endcolon, strlen(endcolon)); -} - -NMTST_DEFINE(); - -int -main(int argc, char **argv) -{ - nmtst_init_assert_logging(&argc, &argv, "WARN", "DEFAULT"); - - g_test_add_func("/dhcp/generic-options", test_generic_options); - g_test_add_func("/dhcp/wins-options", test_wins_options); - g_test_add_func("/dhcp/classless-static-routes-1", test_classless_static_routes_1); - g_test_add_func("/dhcp/classless-static-routes-2", test_classless_static_routes_2); - g_test_add_func("/dhcp/fedora-dhclient-classless-static-routes", - test_fedora_dhclient_classless_static_routes); - g_test_add_func("/dhcp/dhclient-invalid-classless-routes-1", - test_dhclient_invalid_classless_routes_1); - g_test_add_func("/dhcp/dhcpcd-invalid-classless-routes-1", - test_dhcpcd_invalid_classless_routes_1); - g_test_add_func("/dhcp/dhclient-invalid-classless-routes-2", - test_dhclient_invalid_classless_routes_2); - g_test_add_func("/dhcp/dhcpcd-invalid-classless-routes-2", - test_dhcpcd_invalid_classless_routes_2); - g_test_add_func("/dhcp/dhclient-invalid-classless-routes-3", - test_dhclient_invalid_classless_routes_3); - g_test_add_func("/dhcp/dhcpcd-invalid-classless-routes-3", - test_dhcpcd_invalid_classless_routes_3); - g_test_add_func("/dhcp/dhclient-gw-in-classless-routes", test_dhclient_gw_in_classless_routes); - g_test_add_func("/dhcp/dhcpcd-gw-in-classless-routes", test_dhcpcd_gw_in_classless_routes); - g_test_add_func("/dhcp/escaped-domain-searches", test_escaped_domain_searches); - g_test_add_func("/dhcp/invalid-escaped-domain-searches", test_invalid_escaped_domain_searches); - g_test_add_func("/dhcp/ip4-missing-prefix-24", test_ip4_missing_prefix_24); - g_test_add_func("/dhcp/ip4-missing-prefix-16", test_ip4_missing_prefix_16); - g_test_add_func("/dhcp/ip4-missing-prefix-8", test_ip4_missing_prefix_8); - g_test_add_func("/dhcp/ip4-prefix-classless", test_ip4_prefix_classless); - g_test_add_func("/dhcp/client-id-from-string", test_client_id_from_string); - g_test_add_func("/dhcp/vendor-option-metered", test_vendor_option_metered); - g_test_add_func("/dhcp/parse-search-list", test_parse_search_list); - - return g_test_run(); -} |