summaryrefslogtreecommitdiff
path: root/src/dhcp-manager/tests/test-dhcp-dhclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dhcp-manager/tests/test-dhcp-dhclient.c')
-rw-r--r--src/dhcp-manager/tests/test-dhcp-dhclient.c125
1 files changed, 112 insertions, 13 deletions
diff --git a/src/dhcp-manager/tests/test-dhcp-dhclient.c b/src/dhcp-manager/tests/test-dhcp-dhclient.c
index ab496b38bd..544bd89efe 100644
--- a/src/dhcp-manager/tests/test-dhcp-dhclient.c
+++ b/src/dhcp-manager/tests/test-dhcp-dhclient.c
@@ -21,31 +21,44 @@
#include <glib.h>
#include <string.h>
#include <unistd.h>
+#include <arpa/inet.h>
+#include "gsystem-local-alloc.h"
+#include "NetworkManagerUtils.h"
#include "nm-dhcp-dhclient-utils.h"
+#include "nm-dhcp-utils.h"
#include "nm-utils.h"
#include "nm-ip4-config.h"
#include "nm-platform.h"
-#define DEBUG 0
+#define DEBUG 1
static void
test_config (const char *orig,
const char *expected,
const char *hostname,
const char *dhcp_client_id,
+ GBytes *expected_new_client_id,
const char *iface,
const char *anycast_addr)
{
- char *new;
+ gs_free char *new = NULL;
+ gs_unref_bytes GBytes *client_id = NULL;
+ gs_unref_bytes GBytes *new_client_id = NULL;
+
+ if (dhcp_client_id) {
+ client_id = nm_dhcp_utils_client_id_string_to_bytes (dhcp_client_id);
+ g_assert (client_id);
+ }
new = nm_dhcp_dhclient_create_config (iface,
FALSE,
- dhcp_client_id,
+ client_id,
anycast_addr,
hostname,
"/path/to/dhclient.conf",
- orig);
+ orig,
+ &new_client_id);
g_assert (new != NULL);
#if DEBUG
@@ -59,9 +72,13 @@ test_config (const char *orig,
new, expected);
}
#endif
- g_assert (strlen (new) == strlen (expected));
- g_assert (strcmp (new, expected) == 0);
- g_free (new);
+ g_assert_cmpstr (new, ==, expected);
+
+ if (expected_new_client_id) {
+ g_assert (new_client_id);
+ g_assert (g_bytes_equal (new_client_id, expected_new_client_id));
+ } else
+ g_assert (new_client_id == NULL);
}
/*******************************************/
@@ -83,11 +100,7 @@ static const char *orig_missing_expected = \
static void
test_orig_missing (void)
{
- test_config (NULL, orig_missing_expected,
- NULL,
- NULL,
- "eth0",
- NULL);
+ test_config (NULL, orig_missing_expected, NULL, NULL, NULL, "eth0", NULL);
}
/*******************************************/
@@ -118,6 +131,7 @@ test_override_client_id (void)
test_config (override_client_id_orig, override_client_id_expected,
NULL,
"11:22:33:44:55:66",
+ NULL,
"eth0",
NULL);
}
@@ -146,6 +160,7 @@ test_quote_client_id (void)
test_config (NULL, quote_client_id_expected,
NULL,
"1234",
+ NULL,
"eth0",
NULL);
}
@@ -174,6 +189,7 @@ test_ascii_client_id (void)
test_config (NULL, ascii_client_id_expected,
NULL,
"qb:cd:ef:12:34:56",
+ NULL,
"eth0",
NULL);
}
@@ -183,7 +199,7 @@ test_ascii_client_id (void)
static const char *hex_single_client_id_expected = \
"# Created by NetworkManager\n"
"\n"
- "send dhcp-client-identifier ab:cd:e:12:34:56; # added by NetworkManager\n"
+ "send dhcp-client-identifier ab:cd:0e:12:34:56; # added by NetworkManager\n"
"\n"
"option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
"option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
@@ -202,6 +218,84 @@ test_hex_single_client_id (void)
test_config (NULL, hex_single_client_id_expected,
NULL,
"ab:cd:e:12:34:56",
+ NULL,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+static const char *existing_hex_client_id_orig = \
+ "send dhcp-client-identifier 00:30:04:20:7A:08;\n";
+
+static const char *existing_hex_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "send dhcp-client-identifier 00:30:04:20:7A:08;\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_existing_hex_client_id (void)
+{
+ gs_unref_bytes GBytes *new_client_id = NULL;
+ const guint8 bytes[] = { 0x00, 0x30, 0x04,0x20, 0x7A, 0x08 };
+
+ new_client_id = g_bytes_new (bytes, sizeof (bytes));
+ test_config (existing_hex_client_id_orig, existing_hex_client_id_expected,
+ NULL,
+ NULL,
+ new_client_id,
+ "eth0",
+ NULL);
+}
+
+/*******************************************/
+
+#define EACID "qb:cd:ef:12:34:56"
+
+static const char *existing_ascii_client_id_orig = \
+ "send dhcp-client-identifier \"" EACID "\";\n";
+
+static const char *existing_ascii_client_id_expected = \
+ "# Created by NetworkManager\n"
+ "# Merged from /path/to/dhclient.conf\n"
+ "\n"
+ "send dhcp-client-identifier \"" EACID "\";\n"
+ "\n"
+ "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
+ "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
+ "option wpad code 252 = string;\n"
+ "\n"
+ "also request rfc3442-classless-static-routes;\n"
+ "also request ms-classless-static-routes;\n"
+ "also request static-routes;\n"
+ "also request wpad;\n"
+ "also request ntp-servers;\n"
+ "\n";
+
+static void
+test_existing_ascii_client_id (void)
+{
+ gs_unref_bytes GBytes *new_client_id = NULL;
+ char buf[STRLEN (EACID) + 1] = { 0 };
+
+ memcpy (buf + 1, EACID, STRLEN (EACID));
+ new_client_id = g_bytes_new (buf, sizeof (buf));
+ test_config (existing_ascii_client_id_orig, existing_ascii_client_id_expected,
+ NULL,
+ NULL,
+ new_client_id,
"eth0",
NULL);
}
@@ -234,6 +328,7 @@ test_override_hostname (void)
test_config (override_hostname_orig, override_hostname_expected,
"blahblah",
NULL,
+ NULL,
"eth0",
NULL);
}
@@ -268,6 +363,7 @@ test_existing_alsoreq (void)
test_config (existing_alsoreq_orig, existing_alsoreq_expected,
NULL,
NULL,
+ NULL,
"eth0",
NULL);
}
@@ -306,6 +402,7 @@ test_existing_multiline_alsoreq (void)
test_config (existing_multiline_alsoreq_orig, existing_multiline_alsoreq_expected,
NULL,
NULL,
+ NULL,
"eth0",
NULL);
}
@@ -615,6 +712,8 @@ main (int argc, char **argv)
g_test_add_func ("/dhcp/dhclient/quote_client_id", test_quote_client_id);
g_test_add_func ("/dhcp/dhclient/ascii_client_id", test_ascii_client_id);
g_test_add_func ("/dhcp/dhclient/hex_single_client_id", test_hex_single_client_id);
+ g_test_add_func ("/dhcp/dhclient/existing-hex-client-id", test_existing_hex_client_id);
+ g_test_add_func ("/dhcp/dhclient/existing-ascii-client-id", test_existing_ascii_client_id);
g_test_add_func ("/dhcp/dhclient/override_hostname", test_override_hostname);
g_test_add_func ("/dhcp/dhclient/existing_alsoreq", test_existing_alsoreq);
g_test_add_func ("/dhcp/dhclient/existing_multiline_alsoreq", test_existing_multiline_alsoreq);