add missing slash in %configure
[platform/upstream/libsoup.git] / tests / no-ssl-test.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2
3 #include "test-utils.h"
4
5 static void
6 do_ssl_test_for_session (SoupSession *session, const char *uri)
7 {
8         SoupMessage *msg;
9         GTlsCertificate *cert = NULL;
10         GTlsCertificateFlags flags;
11         gboolean is_https;
12
13         msg = soup_message_new ("GET", uri);
14         soup_session_send_message (session, msg);
15         soup_test_assert_message_status (msg, SOUP_STATUS_SSL_FAILED);
16
17         is_https = soup_message_get_https_status (msg, &cert, &flags);
18         soup_test_assert (!is_https, "get_http_status() returned TRUE? (flags %x)", flags);
19
20         g_assert_null (cert);
21         g_assert_false (soup_message_get_flags (msg) & SOUP_MESSAGE_CERTIFICATE_TRUSTED);
22
23         g_object_unref (msg);
24 }
25
26 static void
27 do_ssl_tests (gconstpointer uri)
28 {
29         SoupSession *session;
30
31         g_test_bug ("700518");
32
33         debug_printf (1, "  plain\n");
34         session = soup_test_session_new (SOUP_TYPE_SESSION, NULL);
35         do_ssl_test_for_session (session, uri);
36         soup_test_session_abort_unref (session);
37
38         debug_printf (1, "  async\n");
39         session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC, NULL);
40         do_ssl_test_for_session (session, uri);
41         soup_test_session_abort_unref (session);
42
43         debug_printf (1, "  sync\n");
44         session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC, NULL);
45         do_ssl_test_for_session (session, uri);
46         soup_test_session_abort_unref (session);
47 }
48
49 static void
50 do_session_property_tests (void)
51 {
52         gboolean use_system;
53         GTlsDatabase *tlsdb;
54         char *ca_file;
55         SoupSession *session;
56
57         g_test_bug ("700518");
58
59         session = soup_session_async_new ();
60
61         g_object_get (G_OBJECT (session),
62                       "ssl-use-system-ca-file", &use_system,
63                       "tls-database", &tlsdb,
64                       "ssl-ca-file", &ca_file,
65                       NULL);
66         soup_test_assert (!use_system, "ssl-use-system-ca-file defaults to TRUE");
67         soup_test_assert (tlsdb == NULL, "tls-database set by default");
68         soup_test_assert (ca_file == NULL, "ca-file set by default");
69
70         g_object_set (G_OBJECT (session),
71                       "ssl-use-system-ca-file", TRUE,
72                       NULL);
73         g_object_get (G_OBJECT (session),
74                       "ssl-ca-file", &ca_file,
75                       NULL);
76         soup_test_assert (ca_file == NULL, "setting ssl-use-system-ca-file set ssl-ca-file");
77
78         g_object_set (G_OBJECT (session),
79                       "ssl-ca-file",
80                       g_test_get_filename (G_TEST_DIST, "test-cert.pem", NULL),
81                       NULL);
82         g_object_get (G_OBJECT (session),
83                       "ssl-use-system-ca-file", &use_system,
84                       "tls-database", &tlsdb,
85                       "ssl-ca-file", &ca_file,
86                       NULL);
87         soup_test_assert (ca_file == NULL, "setting ssl-ca-file did not fail");
88         soup_test_assert (!use_system, "setting ssl-ca-file set ssl-use-system-ca-file");
89         soup_test_assert (tlsdb == NULL, "setting ssl-ca-file set tls-database");
90
91         g_object_set (G_OBJECT (session),
92                       "tls-database", NULL,
93                       NULL);
94         g_object_get (G_OBJECT (session),
95                       "ssl-use-system-ca-file", &use_system,
96                       "tls-database", &tlsdb,
97                       "ssl-ca-file", &ca_file,
98                       NULL);
99         soup_test_assert (tlsdb == NULL, "setting tls-database NULL failed");
100         soup_test_assert (!use_system, "setting tls-database NULL set ssl-use-system-ca-file");
101         soup_test_assert (ca_file == NULL, "setting tls-database NULL set ssl-ca-file");
102
103         soup_test_session_abort_unref (session);
104 }
105
106 static void
107 server_handler (SoupServer        *server,
108                 SoupMessage       *msg,
109                 const char        *path,
110                 GHashTable        *query,
111                 SoupClientContext *client,
112                 gpointer           user_data)
113 {
114         soup_message_set_status (msg, SOUP_STATUS_OK);
115         soup_message_set_response (msg, "text/plain",
116                                    SOUP_MEMORY_STATIC,
117                                    "ok\r\n", 4);
118 }
119
120 int
121 main (int argc, char **argv)
122 {
123         SoupServer *server;
124         char *uri;
125         int ret;
126
127         /* Force this test to use the dummy TLS backend */
128         g_setenv ("GIO_USE_TLS", "dummy", TRUE);
129
130         test_init (argc, argv, NULL);
131
132         /* Make a non-SSL server and pretend that it's ssl, which is fine
133          * since we won't ever actually talk to it anyway. We don't
134          * currently test that failing to construct an SSL server works.
135          */
136         server = soup_test_server_new (TRUE);
137         soup_server_add_handler (server, NULL, server_handler, NULL, NULL);
138         uri = g_strdup_printf ("https://127.0.0.1:%u/",
139                                soup_server_get_port (server));
140
141         g_test_add_func ("/no-ssl/session-properties", do_session_property_tests);
142         g_test_add_data_func ("/no-ssl/request-error", uri, do_ssl_tests);
143
144         ret = g_test_run ();
145
146         g_free (uri);
147         soup_test_server_quit_unref (server);
148
149         test_cleanup ();
150         return ret;
151 }