summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2018-05-24 18:46:45 +0200
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2018-05-28 22:13:47 +0000
commit803a85aad1a72c30391d2b0af4c3bfa48acf1d99 (patch)
treed810c61ffa818b35bbfdf7d0a8d0b73754f9327c
parente6f917acebe29a03b2cee8032997140e2b8cb72d (diff)
downloadgnome-control-center-wip/benzea/ci.tar.gz
tests/network: Add VPN related testswip/benzea/ci
This adds tests for the VPN section. Note that the tests to check sorting are disabled currently as sorting is not implemented.
-rw-r--r--tests/network/test-network-panel.c293
1 files changed, 293 insertions, 0 deletions
diff --git a/tests/network/test-network-panel.c b/tests/network/test-network-panel.c
index 7e0fd3c1d..0ce09ba56 100644
--- a/tests/network/test-network-panel.c
+++ b/tests/network/test-network-panel.c
@@ -379,6 +379,264 @@ test_connection_multi_add_activate (NetworkPanelFixture *fixture,
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
main (int argc, char **argv)
{
@@ -444,6 +702,41 @@ main (int argc, char **argv)
test_connection_multi_add_activate,
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 ();
}