tests: Add VPN related tests

This adds tests for the VPN section. Note that the tests to check
sorting are disabled currently as sorting is not implemented.
This commit is contained in:
Benjamin Berg 2018-05-24 18:46:45 +02:00
parent 870b64b848
commit e1e82ccda4

View file

@ -379,6 +379,264 @@ test_connection_multi_add_activate (NetworkPanelFixture *fixture,
g_assert_false (bt_header && gtk_widget_is_visible(bt_header)); g_assert_false (bt_header && gtk_widget_is_visible(bt_header));
} }
/*****************************************************************************/
static void
test_vpn_add (NetworkPanelFixture *fixture,
gconstpointer user_data)
{
NMConnection *conn;
NMSettingConnection *connsetting;
NMSettingVpn *setting;
g_autoptr(GError) error = NULL;
WAIT_DECL()
conn = nmtst_create_minimal_connection ("test_vpn_a", NULL, NM_SETTING_VPN_SETTING_NAME, &connsetting);
setting = nm_connection_get_setting_vpn (conn);
g_object_set (G_OBJECT (connsetting), NM_SETTING_CONNECTION_ID, "A", NULL);
g_object_set (G_OBJECT (setting), NM_SETTING_VPN_SERVICE_TYPE, "org.freedesktop.NetworkManager.vpnc", NULL);
nm_client_add_connection_async (fixture->client, conn, TRUE, NULL, add_cb, &info);
info.other_remaining = 1;
WAIT_CLIENT(fixture->client, 2, NM_CLIENT_CONNECTIONS, NM_CLIENT_CONNECTION_ADDED);
g_object_unref (conn);
WAIT_FINISHED(5)
g_clear_object (&info.rc);
/* Make sure it shows up. */
g_assert_nonnull (gtk_test_find_label (fixture->shell, "A VPN"));
}
/*****************************************************************************/
static void
test_vpn_add_remove (NetworkPanelFixture *fixture,
gconstpointer user_data)
{
NMConnection *conn;
NMSettingConnection *connsetting;
NMSettingVpn *setting;
g_autoptr(GError) error = NULL;
WAIT_DECL()
conn = nmtst_create_minimal_connection ("test_vpn_a", NULL, NM_SETTING_VPN_SETTING_NAME, &connsetting);
setting = nm_connection_get_setting_vpn (conn);
g_object_set (G_OBJECT (connsetting), NM_SETTING_CONNECTION_ID, "A", NULL);
g_object_set (G_OBJECT (setting), NM_SETTING_VPN_SERVICE_TYPE, "org.freedesktop.NetworkManager.vpnc", NULL);
nm_client_add_connection_async (fixture->client, conn, TRUE, NULL, add_cb, &info);
info.other_remaining = 1;
WAIT_CLIENT(fixture->client, 2, NM_CLIENT_CONNECTIONS, NM_CLIENT_CONNECTION_ADDED);
WAIT_FINISHED(5)
/* Make sure it shows up. */
g_assert_nonnull (gtk_test_find_label (fixture->shell, "A VPN"));
/* And delete again */
nm_remote_connection_delete_async (info.rc, NULL, delete_cb, &info);
info.other_remaining = 1;
WAIT_CLIENT(fixture->client, 2, NM_CLIENT_CONNECTIONS, NM_CLIENT_CONNECTION_REMOVED);
WAIT_FINISHED(5)
g_clear_object (&info.rc);
g_object_unref (conn);
/* Make sure it does not show up. */
g_assert_null (gtk_test_find_label (fixture->shell, "A VPN"));
}
/*****************************************************************************/
static void
test_vpn_updating (NetworkPanelFixture *fixture,
gconstpointer user_data)
{
NMConnection *conn;
NMSettingConnection *connsetting;
NMSettingVpn *setting;
g_autoptr(GError) error = NULL;
GVariantBuilder builder;
WAIT_DECL()
conn = nmtst_create_minimal_connection ("test_vpn_a", NULL, NM_SETTING_VPN_SETTING_NAME, &connsetting);
setting = nm_connection_get_setting_vpn (conn);
g_object_set (G_OBJECT (connsetting), NM_SETTING_CONNECTION_ID, "A", NULL);
g_object_set (G_OBJECT (setting), NM_SETTING_VPN_SERVICE_TYPE, "org.freedesktop.NetworkManager.vpnc", NULL);
nm_client_add_connection_async (fixture->client, conn, TRUE, NULL, add_cb, &info);
info.other_remaining = 1;
WAIT_CLIENT(fixture->client, 2, NM_CLIENT_CONNECTIONS, NM_CLIENT_CONNECTION_ADDED);
WAIT_FINISHED(5)
g_object_unref (conn);
/* Make sure it shows up. */
g_assert_nonnull (gtk_test_find_label (fixture->shell, "A VPN"));
/* Rename VPN from A to B */
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sa{sv}}"));
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sa{sv}}"));
g_variant_builder_add (&builder, "s", "connection");
g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
g_variant_builder_add (&builder, "s", "id");
g_variant_builder_add (&builder, "v", g_variant_new_string ("B"));
g_variant_builder_close (&builder);
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
g_variant_builder_add (&builder, "s", "type");
g_variant_builder_add (&builder, "v", g_variant_new_string (nm_connection_get_connection_type (NM_CONNECTION (info.rc))));
g_variant_builder_close (&builder);
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
g_variant_builder_add (&builder, "s", "uuid");
g_variant_builder_add (&builder, "v", g_variant_new_string (nm_connection_get_uuid (NM_CONNECTION (info.rc))));
g_variant_builder_close (&builder);
g_variant_builder_close (&builder);
g_variant_builder_close (&builder);
nmtstc_service_update_connection_variant (
fixture->sinfo,
nm_object_get_path (NM_OBJECT (info.rc)),
g_variant_builder_end (&builder),
FALSE);
g_variant_builder_clear (&builder);
WAIT_CONNECTION(info.rc, 1, "changed");
WAIT_FINISHED(5)
g_clear_object (&info.rc);
/* Make sure it the label got renamed. */
g_assert_null (gtk_test_find_label (fixture->shell, "A VPN"));
g_assert_nonnull (gtk_test_find_label (fixture->shell, "B VPN"));
}
/*****************************************************************************/
static void
test_vpn_sorting (NetworkPanelFixture *fixture,
gconstpointer user_data)
{
NMConnection *conn;
NMSettingConnection *connsetting;
NMSettingVpn *setting;
g_autoptr(GError) error = NULL;
GVariantBuilder builder;
GtkWidget *a, *b, *container;
GList *list;
WAIT_DECL()
conn = nmtst_create_minimal_connection ("test_vpn_a", NULL, NM_SETTING_VPN_SETTING_NAME, &connsetting);
setting = nm_connection_get_setting_vpn (conn);
g_object_set (G_OBJECT (connsetting), NM_SETTING_CONNECTION_ID, "A", NULL);
g_object_set (G_OBJECT (setting), NM_SETTING_VPN_SERVICE_TYPE, "org.freedesktop.NetworkManager.vpnc", NULL);
nm_client_add_connection_async (fixture->client, conn, TRUE, NULL, add_cb, &info);
info.other_remaining = 1;
WAIT_CLIENT(fixture->client, 2, NM_CLIENT_CONNECTIONS, NM_CLIENT_CONNECTION_ADDED);
WAIT_FINISHED(5)
g_object_unref (conn);
g_clear_object (&info.rc);
/* Create a second VPN which should be in front in the list */
conn = nmtst_create_minimal_connection ("test_vpn_b", NULL, NM_SETTING_VPN_SETTING_NAME, &connsetting);
setting = nm_connection_get_setting_vpn (conn);
g_object_set (G_OBJECT (connsetting), NM_SETTING_CONNECTION_ID, "1", NULL);
g_object_set (G_OBJECT (setting), NM_SETTING_VPN_SERVICE_TYPE, "org.freedesktop.NetworkManager.vpnc", NULL);
nm_client_add_connection_async (fixture->client, conn, TRUE, NULL, add_cb, &info);
info.other_remaining = 1;
WAIT_CLIENT(fixture->client, 2, NM_CLIENT_CONNECTIONS, NM_CLIENT_CONNECTION_ADDED);
WAIT_FINISHED(5)
g_object_unref (conn);
/* Make sure both VPNs are there. */
g_assert_nonnull (gtk_test_find_label (fixture->shell, "A VPN"));
g_assert_nonnull (gtk_test_find_label (fixture->shell, "1 VPN"));
/* And test that A is after 1 */
a = find_parent_of_type (gtk_test_find_label (fixture->shell, "A VPN"), GTK_TYPE_STACK);
b = find_parent_of_type (gtk_test_find_label (fixture->shell, "1 VPN"), GTK_TYPE_STACK);
container = gtk_widget_get_parent (a);
list = gtk_container_get_children (GTK_CONTAINER (container));
g_assert_cmpint (g_list_index (list, a), >, g_list_index (list, b));
g_list_free (list);
/* Rename VPN from 1 to B */
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sa{sv}}"));
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sa{sv}}"));
g_variant_builder_add (&builder, "s", "connection");
g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
g_variant_builder_add (&builder, "s", "id");
g_variant_builder_add (&builder, "v", g_variant_new_string ("B"));
g_variant_builder_close (&builder);
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
g_variant_builder_add (&builder, "s", "type");
g_variant_builder_add (&builder, "v", g_variant_new_string (nm_connection_get_connection_type (NM_CONNECTION (info.rc))));
g_variant_builder_close (&builder);
g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
g_variant_builder_add (&builder, "s", "uuid");
g_variant_builder_add (&builder, "v", g_variant_new_string (nm_connection_get_uuid (NM_CONNECTION (info.rc))));
g_variant_builder_close (&builder);
g_variant_builder_close (&builder);
g_variant_builder_close (&builder);
nmtstc_service_update_connection_variant (
fixture->sinfo,
nm_object_get_path (NM_OBJECT (info.rc)),
g_variant_builder_end (&builder),
FALSE);
g_variant_builder_clear (&builder);
WAIT_CONNECTION(info.rc, 1, "changed");
WAIT_FINISHED(5)
g_clear_object (&info.rc);
/* Make sure it the label got renamed. */
g_assert_null (gtk_test_find_label (fixture->shell, "1 VPN"));
g_assert_nonnull (gtk_test_find_label (fixture->shell, "A VPN"));
g_assert_nonnull (gtk_test_find_label (fixture->shell, "B VPN"));
/* And test that A is before B */
a = find_parent_of_type (gtk_test_find_label (fixture->shell, "A VPN"), GTK_TYPE_STACK);
b = find_parent_of_type (gtk_test_find_label (fixture->shell, "B VPN"), GTK_TYPE_STACK);
container = gtk_widget_get_parent (a);
list = gtk_container_get_children (GTK_CONTAINER (container));
g_assert_cmpint (g_list_index (list, a), <, g_list_index (list, b));
g_list_free (list);
}
/*****************************************************************************/
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
@ -444,6 +702,41 @@ main (int argc, char **argv)
test_connection_multi_add_activate, test_connection_multi_add_activate,
fixture_tear_down); fixture_tear_down);
g_test_add ("/network-panel-wired/vpn-add",
NetworkPanelFixture,
NULL,
fixture_set_up_empty,
test_vpn_add,
fixture_tear_down);
g_test_add ("/network-panel-wired/vpn-add-remove",
NetworkPanelFixture,
NULL,
fixture_set_up_empty,
test_vpn_add_remove,
fixture_tear_down);
g_test_add ("/network-panel-wired/vpn-updating",
NetworkPanelFixture,
NULL,
fixture_set_up_empty,
test_vpn_updating,
fixture_tear_down);
#if 0
/*
* FIXME: Currently broken, so test is disabled. Test will likely need
* updating when this is fixed to look for GTK_TYPE_LIST_BOX_ROW rather
* than GTK_TYPE_STACK.
*/
g_test_add ("/network-panel-wired/vpn-sorting",
NetworkPanelFixture,
NULL,
fixture_set_up_empty,
test_vpn_sorting,
fixture_tear_down);
#endif
return g_test_run (); return g_test_run ();
} }