@@ -128,4 +128,49 @@ void shouldCacheCircuitBreakerInstances() {
128128 verify (circuitBreakerRegistry , times (1 ))
129129 .circuitBreaker (eq (ENABLED_SERVICE ), eq (serviceConfig ));
130130 }
131+
132+ @ Test
133+ void shouldHandleAllBuildNewCircuitBreakerScenarios () {
134+ // Case 1: Service with specific config against circuit breaker key
135+ Optional <CircuitBreaker > serviceSpecificResult = provider .getCircuitBreaker (ENABLED_SERVICE );
136+ assertTrue (serviceSpecificResult .isPresent ());
137+ assertEquals (mockCircuitBreaker , serviceSpecificResult .get ());
138+ verify (circuitBreakerRegistry ).circuitBreaker (ENABLED_SERVICE , serviceConfig );
139+
140+ // Case 2: Service without specific config against circuit breaker key but with config present against config key
141+ String fallbackService = "fallbackService" ;
142+ lenient ().when (circuitBreakerRegistry .circuitBreaker (eq (fallbackService ), eq (defaultConfig )))
143+ .thenReturn (mockCircuitBreaker );
144+ Optional <CircuitBreaker > fallbackResult = provider .getCircuitBreaker (fallbackService );
145+ assertTrue (fallbackResult .isPresent ());
146+ assertEquals (mockCircuitBreaker , fallbackResult .get ());
147+ verify (circuitBreakerRegistry ).circuitBreaker (fallbackService , defaultConfig );
148+
149+ // Case 3: Service with no config present against circuit breaker key and no config key, but defaultEnabled=true
150+ String noConfigService = "noConfigService" ;
151+ ResilienceCircuitBreakerProvider defaultEnabledProvider = new ResilienceCircuitBreakerProvider (
152+ circuitBreakerRegistry ,
153+ configMap ,
154+ disabledKeys ,
155+ true , // defaultEnabled = true
156+ null ); // no config key
157+
158+ lenient ().when (circuitBreakerRegistry .circuitBreaker (eq (noConfigService )))
159+ .thenReturn (mockCircuitBreaker );
160+ Optional <CircuitBreaker > noConfigResult = defaultEnabledProvider .getCircuitBreaker (noConfigService );
161+ assertTrue (noConfigResult .isPresent ());
162+ assertEquals (mockCircuitBreaker , noConfigResult .get ());
163+ verify (circuitBreakerRegistry ).circuitBreaker (noConfigService );
164+
165+ // Case 4: Service with no config present against circuit breaker key and no config key, and defaultEnabled=false
166+ ResilienceCircuitBreakerProvider disabledDefaultProvider = new ResilienceCircuitBreakerProvider (
167+ circuitBreakerRegistry ,
168+ configMap ,
169+ disabledKeys ,
170+ false , // defaultEnabled = false
171+ null ); // no config key
172+
173+ Optional <CircuitBreaker > disabledDefaultResult = disabledDefaultProvider .getCircuitBreaker (noConfigService );
174+ assertFalse (disabledDefaultResult .isPresent ());
175+ }
131176}
0 commit comments