Test that client and server enforce session timeouts. We were only testing one side. Change-Id: Ieb755e27b235aaf1317bd2c8e5fb374cb0ecfdb3 Reviewed-on: https://boringssl-review.googlesource.com/12001 CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/ssl/ssl_test.cc b/ssl/ssl_test.cc index 55ac923..ab1a599 100644 --- a/ssl/ssl_test.cc +++ b/ssl/ssl_test.cc
@@ -2047,58 +2047,68 @@ } for (uint16_t version : kTLSVersions) { - static const int kStartTime = 1000; - g_current_time.tv_sec = kStartTime; + for (bool server_test : std::vector<bool>{false, true}) { + static const int kStartTime = 1000; + g_current_time.tv_sec = kStartTime; - bssl::UniquePtr<SSL_CTX> server_ctx(SSL_CTX_new(TLS_method())); - bssl::UniquePtr<SSL_CTX> client_ctx(SSL_CTX_new(TLS_method())); - if (!server_ctx || !client_ctx || - !SSL_CTX_use_certificate(server_ctx.get(), cert.get()) || - !SSL_CTX_use_PrivateKey(server_ctx.get(), key.get()) || - !SSL_CTX_set_min_proto_version(client_ctx.get(), version) || - !SSL_CTX_set_max_proto_version(client_ctx.get(), version) || - !SSL_CTX_set_min_proto_version(server_ctx.get(), version) || - !SSL_CTX_set_max_proto_version(server_ctx.get(), version)) { - return false; - } + bssl::UniquePtr<SSL_CTX> server_ctx(SSL_CTX_new(TLS_method())); + bssl::UniquePtr<SSL_CTX> client_ctx(SSL_CTX_new(TLS_method())); + if (!server_ctx || !client_ctx || + !SSL_CTX_use_certificate(server_ctx.get(), cert.get()) || + !SSL_CTX_use_PrivateKey(server_ctx.get(), key.get()) || + !SSL_CTX_set_min_proto_version(client_ctx.get(), version) || + !SSL_CTX_set_max_proto_version(client_ctx.get(), version) || + !SSL_CTX_set_min_proto_version(server_ctx.get(), version) || + !SSL_CTX_set_max_proto_version(server_ctx.get(), version)) { + return false; + } - SSL_CTX_set_session_cache_mode(client_ctx.get(), SSL_SESS_CACHE_BOTH); + SSL_CTX_set_session_cache_mode(client_ctx.get(), SSL_SESS_CACHE_BOTH); + SSL_CTX_set_session_cache_mode(server_ctx.get(), SSL_SESS_CACHE_BOTH); - SSL_CTX_set_session_cache_mode(server_ctx.get(), SSL_SESS_CACHE_BOTH); - SSL_CTX_set_current_time_cb(server_ctx.get(), CurrentTimeCallback); + // Both client and server must enforce session timeouts. + if (server_test) { + SSL_CTX_set_current_time_cb(server_ctx.get(), CurrentTimeCallback); + } else { + SSL_CTX_set_current_time_cb(client_ctx.get(), CurrentTimeCallback); + } - bssl::UniquePtr<SSL_SESSION> session = - CreateClientSession(client_ctx.get(), server_ctx.get()); - if (!session) { - fprintf(stderr, "Error getting session (version = %04x).\n", version); - return false; - } + bssl::UniquePtr<SSL_SESSION> session = + CreateClientSession(client_ctx.get(), server_ctx.get()); + if (!session) { + fprintf(stderr, "Error getting session (version = %04x).\n", version); + return false; + } - // Advance the clock just behind the timeout. - g_current_time.tv_sec += SSL_DEFAULT_SESSION_TIMEOUT; + // Advance the clock just behind the timeout. + g_current_time.tv_sec += SSL_DEFAULT_SESSION_TIMEOUT; - if (!ExpectSessionReused(client_ctx.get(), server_ctx.get(), session.get(), - true /* expect session reused */)) { - fprintf(stderr, "Error resuming session (version = %04x).\n", version); - return false; - } + if (!ExpectSessionReused(client_ctx.get(), server_ctx.get(), + session.get(), + true /* expect session reused */)) { + fprintf(stderr, "Error resuming session (version = %04x).\n", version); + return false; + } - // Advance the clock one more second. - g_current_time.tv_sec++; + // Advance the clock one more second. + g_current_time.tv_sec++; - if (!ExpectSessionReused(client_ctx.get(), server_ctx.get(), session.get(), - false /* expect session not reused */)) { - fprintf(stderr, "Error resuming session (version = %04x).\n", version); - return false; - } + if (!ExpectSessionReused(client_ctx.get(), server_ctx.get(), + session.get(), + false /* expect session not reused */)) { + fprintf(stderr, "Error resuming session (version = %04x).\n", version); + return false; + } - // Rewind the clock to before the session was minted. - g_current_time.tv_sec = kStartTime - 1; + // Rewind the clock to before the session was minted. + g_current_time.tv_sec = kStartTime - 1; - if (!ExpectSessionReused(client_ctx.get(), server_ctx.get(), session.get(), - false /* expect session not reused */)) { - fprintf(stderr, "Error resuming session (version = %04x).\n", version); - return false; + if (!ExpectSessionReused(client_ctx.get(), server_ctx.get(), + session.get(), + false /* expect session not reused */)) { + fprintf(stderr, "Error resuming session (version = %04x).\n", version); + return false; + } } }