@@ -22,8 +22,24 @@ def trigger_error!(resource = @resource, error = SomeError)
2222
2323 def assert_circuit_closed ( resource = @resource )
2424 block_called = false
25+
26+ circuit_breaker = resource . circuit_breaker
27+
28+ old_errors = create_sliding_window_copy ( circuit_breaker . instance_variable_get ( :@errors ) )
29+ previously_half_open = circuit_breaker &.send ( :half_open? )
30+
2531 resource . acquire { block_called = true }
2632
33+ STDERR . puts "old_errors: #{ old_errors . size } "
34+ STDERR . puts "new_errors: #{ circuit_breaker . instance_variable_get ( :@errors ) . size } "
35+
36+ unless previously_half_open || circuit_breaker . instance_variable_get ( :@error_threshold_timeout_enabled ) . nil? || circuit_breaker . instance_variable_get ( :@error_threshold_timeout_enabled )
37+ circuit_breaker . instance_variable_set ( :@errors , old_errors )
38+ end
39+
40+ STDERR . puts "previously_half_open: #{ previously_half_open } "
41+ STDERR . puts "error_threshold_timeout_enabled: #{ circuit_breaker . instance_variable_get ( :@error_threshold_timeout_enabled ) } "
42+
2743 assert ( block_called , "Expected the circuit to be closed, but it was open" )
2844 end
2945
@@ -37,4 +53,21 @@ def assert_circuit_opened(resource = @resource)
3753
3854 assert ( open , "Expected the circuit to be open, but it was closed" )
3955 end
56+
57+ def create_sliding_window_copy ( sliding_window )
58+ return if sliding_window . nil?
59+
60+ implementation_class = sliding_window . class
61+
62+ new_window = implementation_class . new ( max_size : sliding_window . max_size )
63+
64+ if sliding_window . respond_to? ( :size ) && !sliding_window . empty?
65+ original_data = sliding_window . instance_variable_get ( :@window )
66+ if original_data . is_a? ( Array )
67+ new_window . instance_variable_set ( :@window , original_data . dup )
68+ end
69+ end
70+
71+ new_window
72+ end
4073end
0 commit comments