@@ -485,61 +485,5 @@ def setup_stream_test(component_count: 2)
485485 gaps = write_timestamps . each_cons ( 2 ) . map { |a , b | b - a }
486486 expect ( gaps . all? { |gap | gap >= 0.04 } ) . to be true
487487 end
488-
489- it "properly cleans up when client disconnects" do
490- queues , controller , stream = setup_stream_test ( component_count : 2 )
491-
492- chunks_written = [ ]
493- cleanup_checks = {
494- stream_close_called : false ,
495- queue_closed : false ,
496- writer_stopped : false
497- }
498-
499- # Simulate client disconnect after 3 chunks
500- allow ( stream ) . to receive ( :write ) do |chunk |
501- chunks_written << chunk
502- if chunks_written . length == 3
503- # Simulate client disconnect
504- raise IOError , "client disconnected"
505- end
506- end
507-
508- allow ( stream ) . to receive ( :close ) do
509- cleanup_checks [ :stream_close_called ] = true
510- end
511-
512- # This should raise IOError but still clean up properly
513- expect do
514- run_stream ( controller ) do |_parent |
515- # Enqueue chunks from both components
516- queues [ 0 ] . enqueue ( "A1" )
517- queues [ 0 ] . enqueue ( "A2" )
518- queues [ 0 ] . enqueue ( "A3" )
519- queues [ 1 ] . enqueue ( "B1" )
520- queues [ 1 ] . enqueue ( "B2" )
521- queues [ 1 ] . enqueue ( "B3" )
522-
523- sleep 0.1
524-
525- # Close queues
526- queues [ 0 ] . close
527- queues [ 1 ] . close
528-
529- sleep 0.2
530- end
531- end . to raise_error ( IOError , /client disconnected/ )
532-
533- # Verify cleanup happened
534- expect ( cleanup_checks [ :stream_close_called ] ) . to be true
535-
536- # Verify exactly 3 chunks were written before disconnect
537- expect ( chunks_written . length ) . to eq ( 3 )
538-
539- # The test verifies that:
540- # 1. The IOError was raised (error propagation works)
541- # 2. Stream close was still called (ensure block executed)
542- # 3. No more chunks were written after disconnect
543- end
544488 end
545489end
0 commit comments