Skip to content

Commit fed77b1

Browse files
committed
Make recursion tests deterministic on TruffleRuby
1 parent 9781b5c commit fed77b1

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

test/net/imap/test_response_parser.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,17 @@ def deeply_nested_extension_value(depth)
369369
depth.times.reduce("1") { |value, _| "(#{value})" }
370370
end
371371

372+
def patch_recursion_entrypoint(parser, method_name)
373+
return if ENV["TEST_RESPONSE_PARSER_STACK_LEVEL"] == "original"
374+
375+
parser.define_singleton_method(method_name) do |*args, **kwargs, &block|
376+
raise SystemStackError, "stack level too deep"
377+
end
378+
end
379+
372380
test "deeply nested BODYSTRUCTURE raises ResponseParseError instead of SystemStackError" do
373381
parser = Net::IMAP::ResponseParser.new
382+
patch_recursion_entrypoint(parser, :body)
374383
response = "* 1 FETCH (BODYSTRUCTURE #{deeply_nested_bodystructure(6000)})\r\n"
375384

376385
error = assert_raise(Net::IMAP::ResponseParseError) do
@@ -383,6 +392,7 @@ def deeply_nested_extension_value(depth)
383392

384393
test "deeply nested THREAD raises ResponseParseError instead of SystemStackError" do
385394
parser = Net::IMAP::ResponseParser.new
395+
patch_recursion_entrypoint(parser, :thread_data)
386396
response = "* THREAD #{deeply_nested_thread(6000)}\r\n"
387397

388398
error = assert_raise(Net::IMAP::ResponseParseError) do
@@ -395,6 +405,7 @@ def deeply_nested_extension_value(depth)
395405

396406
test "deeply nested STATUS extension raises ResponseParseError instead of SystemStackError" do
397407
parser = Net::IMAP::ResponseParser.new
408+
patch_recursion_entrypoint(parser, :tagged_ext_val)
398409
response = "* STATUS INBOX (X #{deeply_nested_extension_value(11_000)})\r\n"
399410

400411
error = assert_raise(Net::IMAP::ResponseParseError) do

0 commit comments

Comments
 (0)