From 078d177874736bdc9ee06ef7406a31702b63a69a Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 22 Jan 2014 16:34:04 -0600 Subject: [PATCH] ifcfg-rh: add tests for Team master and port --- .../tests/network-scripts/Makefile.am | 4 +- .../network-scripts/ifcfg-test-team-master | 6 + .../network-scripts/ifcfg-test-team-port | 5 + .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 245 ++++++++++++++++++ 4 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master create mode 100644 src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am index 113c5cab30..d13f5621d0 100644 --- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am @@ -110,7 +110,9 @@ EXTRA_DIST = \ ifcfg-test-dcb-short-percent \ ifcfg-test-dcb-pgpct-not-100 \ ifcfg-test-fcoe-fabric \ - ifcfg-test-fcoe-vn2vn + ifcfg-test-fcoe-vn2vn \ + ifcfg-test-team-master \ + ifcfg-test-team-port check-local: @for f in $(EXTRA_DIST); do \ diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master new file mode 100644 index 0000000000..7edc736af0 --- /dev/null +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-master @@ -0,0 +1,6 @@ +DEVICE=team0 +ONBOOT=no +DEVICETYPE=Team +BOOTPROTO=dhcp +TEAM_CONFIG="{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }" + diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port new file mode 100644 index 0000000000..966bec6777 --- /dev/null +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port @@ -0,0 +1,5 @@ +TYPE=Ethernet +TEAM_PORT_CONFIG="{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }" +DEVICE=p4p1 +TEAM_MASTER=team0 +DEVICETYPE=TeamPort diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 771cf173f8..271e24a598 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -13236,6 +13236,245 @@ test_write_fcoe_mode (gconstpointer user_data) g_free (testfile); } +static void +test_read_team_master (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingTeam *s_team; + gboolean success; + GError *error = NULL; + const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }"; + + connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-master", + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + g_assert_no_error (error); + g_assert (connection); + + success = nm_connection_verify (connection, &error); + g_assert_no_error (error); + g_assert (success); + + s_con = nm_connection_get_setting_connection (connection); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_TEAM_SETTING_NAME); + + s_team = nm_connection_get_setting_team (connection); + g_assert (s_team); + g_assert_cmpstr (nm_setting_team_get_interface_name (s_team), ==, "team0"); + g_assert_cmpstr (nm_setting_team_get_config (s_team), ==, expected_config); + + g_object_unref (connection); +} + +static void +test_write_team_master (void) +{ + NMConnection *connection, *reread; + NMSettingConnection *s_con; + NMSettingTeam *s_team; + NMSettingWired *s_wired; + char *uuid, *testfile = NULL, *val; + gboolean success; + GError *error = NULL; + const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }"; + const char *escaped_expected_config = "\"{ \\\"device\\\": \\\"team0\\\", \\\"link_watch\\\": { \\\"name\\\": \\\"ethtool\\\" } }\""; + shvarFile *f; + + connection = nm_connection_new (); + + /* Connection setting */ + s_con = (NMSettingConnection *) nm_setting_connection_new (); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + + uuid = nm_utils_uuid_generate (); + g_object_set (s_con, + NM_SETTING_CONNECTION_ID, "Test Write Team Master", + NM_SETTING_CONNECTION_UUID, uuid, + NM_SETTING_CONNECTION_TYPE, NM_SETTING_TEAM_SETTING_NAME, + NULL); + g_free (uuid); + + /* Team setting */ + s_team = (NMSettingTeam *) nm_setting_team_new (); + nm_connection_add_setting (connection, NM_SETTING (s_team)); + + g_object_set (s_team, + NM_SETTING_TEAM_INTERFACE_NAME, "team0", + NM_SETTING_TEAM_CONFIG, expected_config, + NULL); + + /* Wired setting */ + s_wired = (NMSettingWired *) nm_setting_wired_new (); + nm_connection_add_setting (connection, NM_SETTING (s_wired)); + + success = nm_connection_verify (connection, &error); + g_assert_no_error (error); + g_assert (success); + + /* Save the ifcfg */ + success = writer_new_connection (connection, + TEST_SCRATCH_DIR "/network-scripts/", + &testfile, + &error); + f = svNewFile (testfile); + g_assert (f); + + g_assert_no_error (error); + g_assert (success); + + /* re-read the file to check that what key was written. */ + val = svGetValue (f, "DEVICETYPE", FALSE); + g_assert (val); + g_assert_cmpstr (val, ==, "Team"); + g_free (val); + val = svGetValue (f, "TEAM_CONFIG", TRUE); + g_assert (val); + g_assert_cmpstr (val, ==, escaped_expected_config); + g_free (val); + svCloseFile (f); + + /* reread will be normalized, so we must normalize connection too. */ + nm_utils_normalize_connection (connection, TRUE); + + /* re-read the connection for comparison */ + reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL, + NULL, NULL, NULL, NULL, &error, NULL); + unlink (testfile); + g_assert_no_error (error); + g_assert (reread); + + success = nm_connection_verify (reread, &error); + g_assert_no_error (error); + g_assert (success); + + g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT)); + + g_free (testfile); + g_object_unref (connection); + g_object_unref (reread); +} + +static void +test_read_team_port (void) +{ + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingTeamPort *s_team_port; + gboolean success; + GError *error = NULL; + const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }"; + + connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port", + NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL); + g_assert_no_error (error); + g_assert (connection); + + success = nm_connection_verify (connection, &error); + g_assert_no_error (error); + g_assert (success); + + s_con = nm_connection_get_setting_connection (connection); + g_assert (s_con); + g_assert_cmpstr (nm_setting_connection_get_connection_type (s_con), ==, NM_SETTING_WIRED_SETTING_NAME); + g_assert_cmpstr (nm_setting_connection_get_master (s_con), ==, "team0"); + + s_team_port = nm_connection_get_setting_team_port (connection); + g_assert (s_team_port); + g_assert_cmpstr (nm_setting_team_port_get_config (s_team_port), ==, expected_config); + + g_object_unref (connection); +} + +static void +test_write_team_port (void) +{ + NMConnection *connection, *reread; + NMSettingConnection *s_con; + NMSettingTeamPort *s_team_port; + NMSettingWired *s_wired; + char *uuid, *testfile = NULL, *val; + gboolean success; + GError *error = NULL; + const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }"; + const char *escaped_expected_config = "\"{ \\\"p4p1\\\": { \\\"prio\\\": -10, \\\"sticky\\\": true } }\""; + shvarFile *f; + + connection = nm_connection_new (); + + /* Connection setting */ + s_con = (NMSettingConnection *) nm_setting_connection_new (); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + + uuid = nm_utils_uuid_generate (); + g_object_set (s_con, + NM_SETTING_CONNECTION_ID, "Test Write Team Port", + NM_SETTING_CONNECTION_UUID, uuid, + NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME, + NM_SETTING_CONNECTION_MASTER, "team0", + NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, + NULL); + g_free (uuid); + + /* Team setting */ + s_team_port = (NMSettingTeamPort *) nm_setting_team_port_new (); + nm_connection_add_setting (connection, NM_SETTING (s_team_port)); + g_object_set (s_team_port, NM_SETTING_TEAM_PORT_CONFIG, expected_config, NULL); + + /* Wired setting */ + s_wired = (NMSettingWired *) nm_setting_wired_new (); + nm_connection_add_setting (connection, NM_SETTING (s_wired)); + + success = nm_connection_verify (connection, &error); + g_assert_no_error (error); + g_assert (success); + + /* Save the ifcfg */ + success = writer_new_connection (connection, + TEST_SCRATCH_DIR "/network-scripts/", + &testfile, + &error); + f = svNewFile (testfile); + g_assert (f); + + g_assert_no_error (error); + g_assert (success); + + /* re-read the file to check that what key was written. */ + val = svGetValue (f, "DEVICETYPE", FALSE); + g_assert (val); + g_assert_cmpstr (val, ==, "TeamPort"); + g_free (val); + val = svGetValue (f, "TEAM_PORT_CONFIG", TRUE); + g_assert (val); + g_assert_cmpstr (val, ==, escaped_expected_config); + val = svGetValue (f, "TEAM_MASTER", TRUE); + g_assert (val); + g_assert_cmpstr (val, ==, "team0"); + g_free (val); + svCloseFile (f); + + /* reread will be normalized, so we must normalize connection too. */ + nm_utils_normalize_connection (connection, TRUE); + + /* re-read the connection for comparison */ + reread = connection_from_file (testfile, NULL, TYPE_ETHERNET, NULL, + NULL, NULL, NULL, NULL, &error, NULL); + unlink (testfile); + g_assert_no_error (error); + g_assert (reread); + + success = nm_connection_verify (reread, &error); + g_assert_no_error (error); + g_assert (success); + + g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT)); + + g_free (testfile); + g_object_unref (connection); + g_object_unref (reread); +} + #define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex" #define TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-quoted" #define TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-hex" @@ -13454,6 +13693,12 @@ int main (int argc, char **argv) test_write_bridge_component (); test_read_bridge_missing_stp (); + /* Team */ + g_test_add_func (TPATH "team/read-master", test_read_team_master); + g_test_add_func (TPATH "team/write-master", test_write_team_master); + g_test_add_func (TPATH "team/read-port", test_read_team_port); + g_test_add_func (TPATH "team/write-port", test_write_team_port); + /* Stuff we expect to fail for now */ test_write_wired_pppoe (); test_write_vpn ();