summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2013-09-29 16:23:53 -0400
committerDan Winship <danw@gnome.org>2013-09-29 16:25:53 -0400
commitd1cb3455a7278a7a5d8ac770852ae489a54e6452 (patch)
tree03158821cf17c7e9e7db89bde07e425343302e11 /tests
parent96da2df64c9dd8cc52e97ce73e54615d6b520664 (diff)
downloadlibsoup-d1cb3455a7278a7a5d8ac770852ae489a54e6452.tar.gz
soup-session: don't resolve default proxy-resolver/tlsdb if not needed
If the user overrides the proxy or TLS configuration of a session at construct time, we should avoid ever trying to resolve the default extensions. https://bugzilla.gnome.org/show_bug.cgi?id=708696
Diffstat (limited to 'tests')
-rw-r--r--tests/session-test.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/session-test.c b/tests/session-test.c
index b8e224ea..d40e7766 100644
--- a/tests/session-test.c
+++ b/tests/session-test.c
@@ -263,6 +263,135 @@ do_priority_tests (char *uri)
soup_test_session_abort_unref (session);
}
+static void
+test_session_properties (const char *name,
+ SoupSession *session,
+ GProxyResolver *expected_proxy_resolver,
+ GTlsDatabase *expected_tls_database)
+{
+ GProxyResolver *proxy_resolver = NULL;
+ GTlsDatabase *tlsdb = NULL;
+
+ g_object_get (G_OBJECT (session),
+ SOUP_SESSION_PROXY_RESOLVER, &proxy_resolver,
+ SOUP_SESSION_TLS_DATABASE, &tlsdb,
+ NULL);
+ if (proxy_resolver != expected_proxy_resolver) {
+ debug_printf (1, " %s has %s proxy resolver!\n",
+ name, proxy_resolver ? (expected_proxy_resolver ? "wrong" : "a") : "no");
+ errors++;
+ }
+ if (tlsdb != expected_tls_database) {
+ debug_printf (1, " %s has %s TLS database!\n",
+ name, tlsdb ? (expected_tls_database ? "wrong" : "a") : "no");
+ errors++;
+ }
+ g_clear_object (&proxy_resolver);
+ g_clear_object (&tlsdb);
+}
+
+static void
+do_property_tests (void)
+{
+ SoupSession *session;
+ GProxyResolver *proxy_resolver, *default_proxy_resolver;
+ GTlsDatabase *tlsdb, *default_tlsdb;
+ SoupURI *uri;
+
+ debug_printf (1, "\nTesting session init properties\n");
+
+ default_proxy_resolver = g_proxy_resolver_get_default ();
+ default_tlsdb = g_tls_backend_get_default_database (g_tls_backend_get_default ());
+
+ /* NOTE: We intentionally do not use soup_test_session_new() here */
+
+ session = g_object_new (SOUP_TYPE_SESSION,
+ NULL);
+ test_session_properties ("Base plain session", session,
+ default_proxy_resolver, default_tlsdb);
+ g_object_unref (session);
+
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_PROXY_RESOLVER, NULL,
+ NULL);
+ test_session_properties ("Session with NULL :proxy-resolver", session,
+ NULL, default_tlsdb);
+ g_object_unref (session);
+
+ proxy_resolver = g_simple_proxy_resolver_new (NULL, NULL);
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_PROXY_RESOLVER, proxy_resolver,
+ NULL);
+ test_session_properties ("Session with non-NULL :proxy-resolver", session,
+ proxy_resolver, default_tlsdb);
+ g_object_unref (proxy_resolver);
+ g_object_unref (session);
+
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_PROXY_URI, NULL,
+ NULL);
+ test_session_properties ("Session with NULL :proxy-uri", session,
+ NULL, default_tlsdb);
+ g_object_unref (session);
+
+ uri = soup_uri_new ("http://example.com/");
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_PROXY_URI, uri,
+ NULL);
+ g_object_get (G_OBJECT (session),
+ SOUP_SESSION_PROXY_RESOLVER, &proxy_resolver,
+ NULL);
+ test_session_properties ("Session with non-NULL :proxy-uri", session,
+ proxy_resolver, default_tlsdb);
+ if (!G_IS_SIMPLE_PROXY_RESOLVER (proxy_resolver)) {
+ debug_printf (1, " proxy resolver had wrong type (%s)\n",
+ G_OBJECT_TYPE_NAME (proxy_resolver));
+ errors++;
+ }
+ g_object_unref (proxy_resolver);
+ g_object_unref (session);
+ soup_uri_free (uri);
+
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_REMOVE_FEATURE_BY_TYPE, SOUP_TYPE_PROXY_URI_RESOLVER,
+ NULL);
+ test_session_properties ("Session with removed proxy resolver feature", session,
+ NULL, default_tlsdb);
+ g_object_unref (session);
+ G_GNUC_END_IGNORE_DEPRECATIONS;
+
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_TLS_DATABASE, NULL,
+ NULL);
+ test_session_properties ("Session with NULL :tls-database", session,
+ default_proxy_resolver, NULL);
+ g_object_unref (session);
+
+ tlsdb = g_tls_file_database_new (SRCDIR "/test-cert.pem", NULL);
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_TLS_DATABASE, tlsdb,
+ NULL);
+ test_session_properties ("Session with non-NULL :tls-database", session,
+ default_proxy_resolver, tlsdb);
+ g_object_unref (tlsdb);
+ g_object_unref (session);
+
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, FALSE,
+ NULL);
+ test_session_properties ("Session with :ssl-use-system-ca-file FALSE", session,
+ default_proxy_resolver, NULL);
+ g_object_unref (session);
+
+ session = g_object_new (SOUP_TYPE_SESSION,
+ SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE,
+ NULL);
+ test_session_properties ("Session with :ssl-use-system-ca-file TRUE", session,
+ default_proxy_resolver, default_tlsdb);
+ g_object_unref (session);
+}
+
int
main (int argc, char **argv)
{
@@ -281,6 +410,7 @@ main (int argc, char **argv)
do_async_tests (uri, timeout_uri);
do_sync_tests (uri, timeout_uri);
do_priority_tests (uri);
+ do_property_tests ();
g_free (uri);
g_free (timeout_uri);