diff options
author | Dan Winship <danw@gnome.org> | 2014-11-23 17:20:50 -0500 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-11-23 17:23:53 -0500 |
commit | c8ff05b7308818b914ab7738fdaf3dbf5fa11e16 (patch) | |
tree | 161c1ef2cd08683ecb9e265696ef42569b97737f /tests/connection-test.c | |
parent | b24ef29be4ccd9b051d75b15b290448b5490bc53 (diff) | |
download | libsoup-c8ff05b7308818b914ab7738fdaf3dbf5fa11e16.tar.gz |
SoupConnection: fix connection in TLS_HANDSHAKING event signal
SoupConnection was generating its own :event signals for
TLS_HANDSHAKING/TLS_HANDSHAKED, since we don't use GSocketClient's TLS
negotiation, and so just re-emitting the socket client signal won't
cover that.
However, it ended up emitting it before the SoupSocket had even
created the GTlsClientConnection, and so was emitting it with the
GTcpConnection, contrary to the documentation.
Fix this by making the SoupSocket generate those event signals at the
correct time, and having SoupConnection just re-emit them. Also, add
code to connection-test to verify that each even is emitted with the
expected kind of GIOStream.
https://bugzilla.gnome.org/show_bug.cgi?id=739951
Diffstat (limited to 'tests/connection-test.c')
-rw-r--r-- | tests/connection-test.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/tests/connection-test.c b/tests/connection-test.c index d953a771..f4846c30 100644 --- a/tests/connection-test.c +++ b/tests/connection-test.c @@ -768,11 +768,46 @@ network_event (SoupMessage *msg, GSocketClientEvent event, { const char **events = user_data; - debug_printf (2, " %s\n", event_name_from_abbrev (**events)); + debug_printf (2, " %s\n", event_names[event]); soup_test_assert (**events == event_abbrevs[event], - "Unexpected event: %s (expected %s)\n", + "Unexpected event: %s (expected %s)", event_names[event], event_name_from_abbrev (**events)); + + if (**events == event_abbrevs[event]) { + if (event == G_SOCKET_CLIENT_RESOLVING || + event == G_SOCKET_CLIENT_RESOLVED) { + soup_test_assert (connection == NULL, + "Unexpectedly got connection (%s) with '%s' event", + G_OBJECT_TYPE_NAME (connection), + event_names[event]); + } else if (event < G_SOCKET_CLIENT_TLS_HANDSHAKING) { + soup_test_assert (G_IS_SOCKET_CONNECTION (connection), + "Unexpectedly got %s with '%s' event", + G_OBJECT_TYPE_NAME (connection), + event_names[event]); + } else if (event == G_SOCKET_CLIENT_TLS_HANDSHAKING || + event == G_SOCKET_CLIENT_TLS_HANDSHAKED) { + soup_test_assert (G_IS_TLS_CLIENT_CONNECTION (connection), + "Unexpectedly got %s with '%s' event", + G_OBJECT_TYPE_NAME (connection), + event_names[event]); + } else if (event == G_SOCKET_CLIENT_COMPLETE) { + /* See if the previous expected event was TLS_HANDSHAKED */ + if ((*events)[-1] == 'T') { + soup_test_assert (G_IS_TLS_CLIENT_CONNECTION (connection), + "Unexpectedly got %s with '%s' event", + G_OBJECT_TYPE_NAME (connection), + event_names[event]); + } else { + soup_test_assert (G_IS_SOCKET_CONNECTION (connection), + "Unexpectedly got %s with '%s' event", + G_OBJECT_TYPE_NAME (connection), + event_names[event]); + } + } + } + *events = *events + 1; } |