summary refs log tree commit diff
path: root/src/nm-initrd-generator/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-initrd-generator/tests')
-rw-r--r--src/nm-initrd-generator/tests/test-cmdline-reader.c126
1 files changed, 120 insertions, 6 deletions
diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c
index a0100764..cd7b1069 100644
--- a/src/nm-initrd-generator/tests/test-cmdline-reader.c
+++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c
@@ -597,7 +597,7 @@ static void
 test_if_ip6_manual(void)
 {
     gs_unref_hashtable GHashTable *connections = NULL;
-    const char *const             *ARGV = NM_MAKE_STRV("ip=[2001:0db8::02]/64::[2001:0db8::01]::"
+    const char *const             *ARGV = NM_MAKE_STRV("ip=[2001:0db8::02]/56::[2001:0db8::01]::"
                                                        "hostname0.example.com:eth4::[2001:0db8::53]");
     NMConnection                  *connection;
     NMSettingIPConfig             *s_ip4;
@@ -633,7 +633,7 @@ test_if_ip6_manual(void)
     ip_addr = nm_setting_ip_config_get_address(s_ip6, 0);
     g_assert(ip_addr);
     g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::2");
-    g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64);
+    g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 56);
     g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1");
     g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL);
 }
@@ -975,8 +975,8 @@ static void
 test_bond(void)
 {
     gs_unref_hashtable GHashTable *connections = NULL;
-    const char *const             *ARGV        = NM_MAKE_STRV("rd.route=192.0.2.53::bong0",
-                                           "bond=bong0:eth0,eth1:mode=balance-rr:9000",
+    const char *const             *ARGV        = NM_MAKE_STRV("rd.route=192.0.2.53::bond0",
+                                           "bond=bond0:eth0,eth1:mode=balance-rr:9000",
                                            "nameserver=203.0.113.53");
     NMConnection                  *connection;
     NMSettingConnection           *s_con;
@@ -990,12 +990,12 @@ test_bond(void)
     connections = _parse_cons(ARGV);
     g_assert_cmpint(g_hash_table_size(connections), ==, 3);
 
-    connection = g_hash_table_lookup(connections, "bong0");
+    connection = g_hash_table_lookup(connections, "bond0");
     nmtst_assert_connection_verifies_without_normalization(connection);
     g_assert_cmpstr(nm_connection_get_connection_type(connection),
                     ==,
                     NM_SETTING_BOND_SETTING_NAME);
-    g_assert_cmpstr(nm_connection_get_id(connection), ==, "bong0");
+    g_assert_cmpstr(nm_connection_get_id(connection), ==, "bond0");
     controller_uuid = nm_connection_get_uuid(connection);
     g_assert(controller_uuid);
 
@@ -1163,6 +1163,118 @@ test_bond_ip(void)
 }
 
 static void
+test_bond_ip6_option(void)
+{
+    /* Test that IPv6 addresses within [] are parsed fine in different positions */
+
+    gs_unref_hashtable GHashTable *connections = NULL;
+    const char *const             *ARGV =
+        NM_MAKE_STRV("bond=bond0:eth0,eth1:arp_interval=100,ns_ip6_target=[fc08::1]",
+                     "bond=bond1:eth2,eth3:arp_interval=100,ns_ip6_target=[fc08::1]:9000",
+                     "bond=bond2:eth4,eth5:ns_ip6_target=[fc08::1],arp_interval=100");
+    NMConnection  *connection;
+    NMSettingBond *s_bond;
+
+    connections = _parse_cons(ARGV);
+    g_assert_cmpint(g_hash_table_size(connections), ==, 9);
+
+    connection = g_hash_table_lookup(connections, "bond0");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "ns_ip6_target"), ==, "fc08::1");
+
+    connection = g_hash_table_lookup(connections, "bond1");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "ns_ip6_target"), ==, "fc08::1");
+
+    connection = g_hash_table_lookup(connections, "bond2");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "ns_ip6_target"), ==, "fc08::1");
+}
+
+static void
+test_bond_multi_values_option(void)
+{
+    /* Test that semicolon-separated multi-valued options are parsed fine in different positions */
+
+    gs_unref_hashtable GHashTable *connections = NULL;
+    const char *const             *ARGV =
+        NM_MAKE_STRV("bond=bond0:eth0,eth1:arp_interval=100,ns_ip6_target=[fc08::1];[fc08::2]",
+                     "bond=bond1:eth2,eth3:arp_interval=100,ns_ip6_target=[fc08::1];[fc08::2]:9000",
+                     "bond=bond2:eth4,eth5:ns_ip6_target=[fc08::1];[fc08::2],arp_interval=100",
+                     "bond=bond3:eth6,eth7:arp_interval=100,arp_ip_target=10.0.0.1;10.0.0.2",
+                     "bond=bond4:eth8,eth9:arp_interval=100,arp_ip_target=10.0.0.1;10.0.0.2:9000",
+                     "bond=bond5:eth10,eth11:arp_ip_target=10.0.0.1;10.0.0.2,arp_interval=100");
+    NMConnection  *connection;
+    NMSettingBond *s_bond;
+
+    connections = _parse_cons(ARGV);
+    g_assert_cmpint(g_hash_table_size(connections), ==, 18);
+
+    connection = g_hash_table_lookup(connections, "bond0");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "ns_ip6_target"),
+                    ==,
+                    "fc08::1,fc08::2");
+
+    connection = g_hash_table_lookup(connections, "bond1");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "ns_ip6_target"),
+                    ==,
+                    "fc08::1,fc08::2");
+
+    connection = g_hash_table_lookup(connections, "bond2");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "ns_ip6_target"),
+                    ==,
+                    "fc08::1,fc08::2");
+
+    connection = g_hash_table_lookup(connections, "bond3");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "arp_ip_target"),
+                    ==,
+                    "10.0.0.1,10.0.0.2");
+
+    connection = g_hash_table_lookup(connections, "bond4");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "arp_ip_target"),
+                    ==,
+                    "10.0.0.1,10.0.0.2");
+
+    connection = g_hash_table_lookup(connections, "bond5");
+    nmtst_assert_connection_verifies_without_normalization(connection);
+    s_bond = nm_connection_get_setting_bond(connection);
+    g_assert(s_bond);
+    g_assert_cmpint(nm_setting_bond_get_num_options(s_bond), ==, 3);
+    g_assert_cmpstr(nm_setting_bond_get_option_by_name(s_bond, "arp_ip_target"),
+                    ==,
+                    "10.0.0.1,10.0.0.2");
+}
+
+static void
 test_bond_default(void)
 {
     gs_unref_hashtable GHashTable *connections = NULL;
@@ -2701,6 +2813,8 @@ main(int argc, char **argv)
     g_test_add_func("/initrd/cmdline/bootdev", test_bootdev);
     g_test_add_func("/initrd/cmdline/bond", test_bond);
     g_test_add_func("/initrd/cmdline/bond/ip", test_bond_ip);
+    g_test_add_func("/initrd/cmdline/bond/ip6-option", test_bond_ip6_option);
+    g_test_add_func("/initrd/cmdline/bond/multi-values-option", test_bond_multi_values_option);
     g_test_add_func("/initrd/cmdline/bond/default", test_bond_default);
     g_test_add_func("/initrd/cmdline/team", test_team);
     g_test_add_func("/initrd/cmdline/vlan", test_vlan);