openssl: merge test fix from upstream
Merge a commit from upstream: d1cbf6d75280 test/test_ssl_session: skip tests for session_remove_cb Tests using SSL::SSLContext#session_remove_cb= are now skipped. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
0fcac8f1a3
commit
66fd565153
@ -2457,6 +2457,10 @@ Init_ossl_ssl(void)
|
|||||||
* A callback invoked when a session is removed from the internal cache.
|
* A callback invoked when a session is removed from the internal cache.
|
||||||
*
|
*
|
||||||
* The callback is invoked with an SSLContext and a Session.
|
* The callback is invoked with an SSLContext and a Session.
|
||||||
|
*
|
||||||
|
* IMPORTANT NOTE: It is currently not possible to use this safely in a
|
||||||
|
* multi-threaded application. The callback is called inside a global lock
|
||||||
|
* and it can randomly cause deadlock on Ruby thread switching.
|
||||||
*/
|
*/
|
||||||
rb_attr(cSSLContext, rb_intern("session_remove_cb"), 1, 1, Qfalse);
|
rb_attr(cSSLContext, rb_intern("session_remove_cb"), 1, 1, Qfalse);
|
||||||
|
|
||||||
|
@ -215,6 +215,10 @@ __EOS__
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Skipping tests that use session_remove_cb by default because it may cause
|
||||||
|
# deadlock.
|
||||||
|
TEST_SESSION_REMOVE_CB = ENV["OSSL_TEST_ALL"] == "1"
|
||||||
|
|
||||||
def test_ctx_client_session_cb
|
def test_ctx_client_session_cb
|
||||||
pend "TLS 1.2 is not supported" unless tls12_supported?
|
pend "TLS 1.2 is not supported" unless tls12_supported?
|
||||||
|
|
||||||
@ -227,11 +231,13 @@ __EOS__
|
|||||||
sock, sess = ary
|
sock, sess = ary
|
||||||
called[:new] = [sock, sess]
|
called[:new] = [sock, sess]
|
||||||
}
|
}
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
ctx.session_remove_cb = lambda { |ary|
|
ctx.session_remove_cb = lambda { |ary|
|
||||||
ctx, sess = ary
|
ctx, sess = ary
|
||||||
called[:remove] = [ctx, sess]
|
called[:remove] = [ctx, sess]
|
||||||
# any resulting value is OK (ignored)
|
# any resulting value is OK (ignored)
|
||||||
}
|
}
|
||||||
|
end
|
||||||
|
|
||||||
server_connect_with_session(port, ctx, nil) { |ssl|
|
server_connect_with_session(port, ctx, nil) { |ssl|
|
||||||
assert_equal(1, ctx.session_cache_stats[:cache_num])
|
assert_equal(1, ctx.session_cache_stats[:cache_num])
|
||||||
@ -239,7 +245,9 @@ __EOS__
|
|||||||
assert_equal([ssl, ssl.session], called[:new])
|
assert_equal([ssl, ssl.session], called[:new])
|
||||||
assert(ctx.session_remove(ssl.session))
|
assert(ctx.session_remove(ssl.session))
|
||||||
assert(!ctx.session_remove(ssl.session))
|
assert(!ctx.session_remove(ssl.session))
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_equal([ctx, ssl.session], called[:remove])
|
assert_equal([ctx, ssl.session], called[:remove])
|
||||||
|
end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -275,10 +283,12 @@ __EOS__
|
|||||||
last_server_session = sess
|
last_server_session = sess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
ctx.session_remove_cb = lambda { |ary|
|
ctx.session_remove_cb = lambda { |ary|
|
||||||
_ctx, sess = ary
|
_ctx, sess = ary
|
||||||
called[:remove] = sess
|
called[:remove] = sess
|
||||||
}
|
}
|
||||||
|
end
|
||||||
}
|
}
|
||||||
start_server(ctx_proc: ctx_proc) do |port|
|
start_server(ctx_proc: ctx_proc) do |port|
|
||||||
connections = 0
|
connections = 0
|
||||||
@ -290,7 +300,9 @@ __EOS__
|
|||||||
assert_nil called[:get]
|
assert_nil called[:get]
|
||||||
assert_not_nil called[:new]
|
assert_not_nil called[:new]
|
||||||
assert_equal sess0.id, called[:new].id
|
assert_equal sess0.id, called[:new].id
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_nil called[:remove]
|
assert_nil called[:remove]
|
||||||
|
end
|
||||||
called.clear
|
called.clear
|
||||||
|
|
||||||
# Internal cache hit
|
# Internal cache hit
|
||||||
@ -302,12 +314,16 @@ __EOS__
|
|||||||
}
|
}
|
||||||
assert_nil called[:get]
|
assert_nil called[:get]
|
||||||
assert_nil called[:new]
|
assert_nil called[:new]
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_nil called[:remove]
|
assert_nil called[:remove]
|
||||||
|
end
|
||||||
called.clear
|
called.clear
|
||||||
|
|
||||||
sctx.flush_sessions(Time.now + 10000)
|
sctx.flush_sessions(Time.now + 10000)
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_not_nil called[:remove]
|
assert_not_nil called[:remove]
|
||||||
assert_equal sess0.id, called[:remove].id
|
assert_equal sess0.id, called[:remove].id
|
||||||
|
end
|
||||||
called.clear
|
called.clear
|
||||||
|
|
||||||
# External cache hit
|
# External cache hit
|
||||||
@ -325,12 +341,16 @@ __EOS__
|
|||||||
assert_equal sess0.id, sess2.id
|
assert_equal sess0.id, sess2.id
|
||||||
assert_equal sess0.id, called[:get]
|
assert_equal sess0.id, called[:get]
|
||||||
assert_nil called[:new]
|
assert_nil called[:new]
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_nil called[:remove]
|
assert_nil called[:remove]
|
||||||
|
end
|
||||||
called.clear
|
called.clear
|
||||||
|
|
||||||
sctx.flush_sessions(Time.now + 10000)
|
sctx.flush_sessions(Time.now + 10000)
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_not_nil called[:remove]
|
assert_not_nil called[:remove]
|
||||||
assert_equal sess0.id, called[:remove].id
|
assert_equal sess0.id, called[:remove].id
|
||||||
|
end
|
||||||
called.clear
|
called.clear
|
||||||
|
|
||||||
# Cache miss
|
# Cache miss
|
||||||
@ -344,9 +364,11 @@ __EOS__
|
|||||||
assert_equal sess0.id, called[:get]
|
assert_equal sess0.id, called[:get]
|
||||||
assert_not_nil called[:new]
|
assert_not_nil called[:new]
|
||||||
assert_equal sess3.id, called[:new].id
|
assert_equal sess3.id, called[:new].id
|
||||||
|
if TEST_SESSION_REMOVE_CB
|
||||||
assert_nil called[:remove]
|
assert_nil called[:remove]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_dup
|
def test_dup
|
||||||
sess_orig = OpenSSL::SSL::Session.new(DUMMY_SESSION)
|
sess_orig = OpenSSL::SSL::Session.new(DUMMY_SESSION)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user