@@ -219,11 +219,11 @@ def test_server_session_cache
219219 # deadlock.
220220 TEST_SESSION_REMOVE_CB = ENV [ "OSSL_TEST_ALL" ] == "1"
221221
222- def test_ctx_client_session_cb
223- ctx_proc = proc { |ctx | ctx . ssl_version = :TLSv1_2 }
224- start_server ( ctx_proc : ctx_proc ) do |port |
222+ def test_ctx_client_session_cb_tls12
223+ start_server do |port |
225224 called = { }
226225 ctx = OpenSSL ::SSL ::SSLContext . new
226+ ctx . min_version = ctx . max_version = :TLS1_2
227227 ctx . session_cache_mode = OpenSSL ::SSL ::SSLContext ::SESSION_CACHE_CLIENT
228228 ctx . session_new_cb = lambda { |ary |
229229 sock , sess = ary
@@ -233,23 +233,66 @@ def test_ctx_client_session_cb
233233 ctx . session_remove_cb = lambda { |ary |
234234 ctx , sess = ary
235235 called [ :remove ] = [ ctx , sess ]
236- # any resulting value is OK (ignored)
237236 }
238237 end
239238
240239 server_connect_with_session ( port , ctx , nil ) { |ssl |
241240 assert_equal ( 1 , ctx . session_cache_stats [ :cache_num ] )
242241 assert_equal ( 1 , ctx . session_cache_stats [ :connect_good ] )
243242 assert_equal ( [ ssl , ssl . session ] , called [ :new ] )
244- assert ( ctx . session_remove ( ssl . session ) )
245- assert ( ! ctx . session_remove ( ssl . session ) )
243+ assert_equal ( true , ctx . session_remove ( ssl . session ) )
244+ assert_equal ( false , ctx . session_remove ( ssl . session ) )
246245 if TEST_SESSION_REMOVE_CB
247246 assert_equal ( [ ctx , ssl . session ] , called [ :remove ] )
248247 end
249248 }
250249 end
251250 end
252251
252+ def test_ctx_client_session_cb_tls13
253+ omit "TLS 1.3 not supported" unless tls13_supported?
254+ omit "LibreSSL does not call session_new_cb in TLS 1.3" if libressl?
255+
256+ start_server do |port |
257+ called = { }
258+ ctx = OpenSSL ::SSL ::SSLContext . new
259+ ctx . min_version = :TLS1_3
260+ ctx . session_cache_mode = OpenSSL ::SSL ::SSLContext ::SESSION_CACHE_CLIENT
261+ ctx . session_new_cb = lambda { |ary |
262+ sock , sess = ary
263+ called [ :new ] = [ sock , sess ]
264+ }
265+
266+ server_connect_with_session ( port , ctx , nil ) { |ssl |
267+ ssl . puts ( "abc" ) ; assert_equal ( "abc\n " , ssl . gets )
268+
269+ assert_operator ( 1 , :<= , ctx . session_cache_stats [ :cache_num ] )
270+ assert_operator ( 1 , :<= , ctx . session_cache_stats [ :connect_good ] )
271+ assert_equal ( [ ssl , ssl . session ] , called [ :new ] )
272+ }
273+ end
274+ end
275+
276+ def test_ctx_client_session_cb_tls13_exception
277+ omit "TLS 1.3 not supported" unless tls13_supported?
278+ omit "LibreSSL does not call session_new_cb in TLS 1.3" if libressl?
279+
280+ start_server do |port |
281+ ctx = OpenSSL ::SSL ::SSLContext . new
282+ ctx . min_version = :TLS1_3
283+ ctx . session_cache_mode = OpenSSL ::SSL ::SSLContext ::SESSION_CACHE_CLIENT
284+ ctx . session_new_cb = lambda { |ary |
285+ raise "in session_new_cb"
286+ }
287+
288+ server_connect_with_session ( port , ctx , nil ) { |ssl |
289+ assert_raise_with_message ( RuntimeError , /in session_new_cb/ ) {
290+ ssl . puts ( "abc" ) ; assert_equal ( "abc\n " , ssl . gets )
291+ }
292+ }
293+ end
294+ end
295+
253296 def test_ctx_server_session_cb
254297 connections = nil
255298 called = { }
0 commit comments