5 #include "libsoup/soup.h"
7 #include "test-utils.h"
10 do_properties_test_for_session (SoupSession *session, char *uri)
13 GTlsCertificate *cert;
14 GTlsCertificateFlags flags;
16 msg = soup_message_new ("GET", uri);
17 soup_session_send_message (session, msg);
18 if (msg->status_code != SOUP_STATUS_OK) {
19 debug_printf (1, " FAILED: %d %s\n",
20 msg->status_code, msg->reason_phrase);
24 if (soup_message_get_https_status (msg, &cert, &flags)) {
25 if (!G_IS_TLS_CERTIFICATE (cert)) {
26 debug_printf (1, " No certificate?\n");
29 if (flags != G_TLS_CERTIFICATE_UNKNOWN_CA) {
30 debug_printf (1, " Wrong cert flags (got %x, wanted %x)\n",
31 flags, G_TLS_CERTIFICATE_UNKNOWN_CA);
35 debug_printf (1, " Response not https\n");
43 do_properties_tests (char *uri)
47 debug_printf (1, "\nSoupMessage properties\n");
49 debug_printf (1, " async\n");
50 session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC, NULL);
51 g_object_set (G_OBJECT (session),
52 SOUP_SESSION_SSL_CA_FILE, "/dev/null",
53 SOUP_SESSION_SSL_STRICT, FALSE,
55 do_properties_test_for_session (session, uri);
56 soup_test_session_abort_unref (session);
58 debug_printf (1, " sync\n");
59 session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC, NULL);
60 g_object_set (G_OBJECT (session),
61 SOUP_SESSION_SSL_CA_FILE, "/dev/null",
62 SOUP_SESSION_SSL_STRICT, FALSE,
64 do_properties_test_for_session (session, uri);
65 soup_test_session_abort_unref (session);
69 do_one_strict_test (SoupSession *session, char *uri,
70 gboolean strict, gboolean with_ca_list,
71 guint expected_status)
75 /* Note that soup_test_session_new() sets
76 * SOUP_SESSION_SSL_CA_FILE by default, and turns off
77 * SOUP_SESSION_SSL_STRICT.
80 g_object_set (G_OBJECT (session),
81 SOUP_SESSION_SSL_STRICT, strict,
82 SOUP_SESSION_SSL_CA_FILE, with_ca_list ? SRCDIR "/test-cert.pem" : "/dev/null",
84 /* Close existing connections with old params */
85 soup_session_abort (session);
87 msg = soup_message_new ("GET", uri);
88 soup_session_send_message (session, msg);
89 if (msg->status_code != expected_status) {
90 debug_printf (1, " FAILED: %d %s (expected %d %s)\n",
91 msg->status_code, msg->reason_phrase,
93 soup_status_get_phrase (expected_status));
94 if (msg->status_code == SOUP_STATUS_SSL_FAILED) {
95 GTlsCertificateFlags flags = 0;
97 soup_message_get_https_status (msg, NULL, &flags);
98 debug_printf (1, " tls error flags: 0x%x\n", flags);
102 g_object_unref (msg);
106 do_strict_tests (char *uri)
108 SoupSession *session;
110 debug_printf (1, "strict/nonstrict\n");
112 session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC, NULL);
113 debug_printf (1, " async with CA list\n");
114 do_one_strict_test (session, uri, TRUE, TRUE, SOUP_STATUS_OK);
115 debug_printf (1, " async without CA list\n");
116 do_one_strict_test (session, uri, TRUE, FALSE, SOUP_STATUS_SSL_FAILED);
117 debug_printf (1, " async non-strict with CA list\n");
118 do_one_strict_test (session, uri, FALSE, TRUE, SOUP_STATUS_OK);
119 debug_printf (1, " async non-strict without CA list\n");
120 do_one_strict_test (session, uri, FALSE, FALSE, SOUP_STATUS_OK);
121 soup_test_session_abort_unref (session);
123 session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC, NULL);
124 debug_printf (1, " sync with CA list\n");
125 do_one_strict_test (session, uri, TRUE, TRUE, SOUP_STATUS_OK);
126 debug_printf (1, " sync without CA list\n");
127 do_one_strict_test (session, uri, TRUE, FALSE, SOUP_STATUS_SSL_FAILED);
128 debug_printf (1, " sync non-strict with CA list\n");
129 do_one_strict_test (session, uri, FALSE, TRUE, SOUP_STATUS_OK);
130 debug_printf (1, " sync non-strict without CA list\n");
131 do_one_strict_test (session, uri, FALSE, FALSE, SOUP_STATUS_OK);
132 soup_test_session_abort_unref (session);
136 server_handler (SoupServer *server,
140 SoupClientContext *client,
143 soup_message_set_status (msg, SOUP_STATUS_OK);
144 soup_message_set_response (msg, "text/plain",
150 main (int argc, char **argv)
155 test_init (argc, argv, NULL);
158 server = soup_test_server_new_ssl (TRUE);
159 soup_server_add_handler (server, NULL, server_handler, NULL, NULL);
160 uri = g_strdup_printf ("https://127.0.0.1:%u/",
161 soup_server_get_port (server));
163 do_strict_tests (uri);
164 do_properties_tests (uri);
167 soup_test_server_quit_unref (server);