|
|
|
|
@@ -15,6 +15,7 @@
|
|
|
|
|
*/
|
|
|
|
|
package org.springframework.data.r2dbc.connectionfactory.lookup;
|
|
|
|
|
|
|
|
|
|
import static java.util.Collections.*;
|
|
|
|
|
import static org.assertj.core.api.Assertions.*;
|
|
|
|
|
|
|
|
|
|
import io.r2dbc.spi.ConnectionFactory;
|
|
|
|
|
@@ -22,9 +23,6 @@ import reactor.core.publisher.Mono;
|
|
|
|
|
import reactor.test.StepVerifier;
|
|
|
|
|
import reactor.util.context.Context;
|
|
|
|
|
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import org.junit.Before;
|
|
|
|
|
import org.junit.Test;
|
|
|
|
|
import org.junit.runner.RunWith;
|
|
|
|
|
@@ -35,6 +33,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
|
|
|
|
* Unit tests for {@link AbstractRoutingConnectionFactory}.
|
|
|
|
|
*
|
|
|
|
|
* @author Mark Paluch
|
|
|
|
|
* @author Jens Schauder
|
|
|
|
|
*/
|
|
|
|
|
@RunWith(MockitoJUnitRunner.class)
|
|
|
|
|
public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
@@ -44,23 +43,23 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
@Mock ConnectionFactory defaultConnectionFactory;
|
|
|
|
|
@Mock ConnectionFactory routedConnectionFactory;
|
|
|
|
|
|
|
|
|
|
DummyRoutingConnectionFactory sut;
|
|
|
|
|
DummyRoutingConnectionFactory connectionFactory;
|
|
|
|
|
|
|
|
|
|
@Before
|
|
|
|
|
public void before() {
|
|
|
|
|
|
|
|
|
|
sut = new DummyRoutingConnectionFactory();
|
|
|
|
|
sut.setDefaultTargetConnectionFactory(defaultConnectionFactory);
|
|
|
|
|
connectionFactory = new DummyRoutingConnectionFactory();
|
|
|
|
|
connectionFactory.setDefaultTargetConnectionFactory(defaultConnectionFactory);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void shouldDetermineRoutedFactory() {
|
|
|
|
|
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", routedConnectionFactory));
|
|
|
|
|
sut.setConnectionFactoryLookup(new MapConnectionFactoryLookup());
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", routedConnectionFactory));
|
|
|
|
|
connectionFactory.setConnectionFactoryLookup(new MapConnectionFactoryLookup());
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.subscriberContext(Context.of(ROUTING_KEY, "key")) //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(routedConnectionFactory) //
|
|
|
|
|
@@ -70,10 +69,10 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void shouldFallbackToDefaultConnectionFactory() {
|
|
|
|
|
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", routedConnectionFactory));
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", routedConnectionFactory));
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(defaultConnectionFactory) //
|
|
|
|
|
.verifyComplete();
|
|
|
|
|
@@ -82,30 +81,31 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void initializationShouldFailUnsupportedLookupKey() {
|
|
|
|
|
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", new Object()));
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", new Object()));
|
|
|
|
|
|
|
|
|
|
assertThatThrownBy(() -> sut.afterPropertiesSet()).isInstanceOf(IllegalArgumentException.class);
|
|
|
|
|
assertThatThrownBy(() -> connectionFactory.afterPropertiesSet()).isInstanceOf(IllegalArgumentException.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void initializationShouldFailUnresolvableKey() {
|
|
|
|
|
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", "value"));
|
|
|
|
|
sut.setConnectionFactoryLookup(new MapConnectionFactoryLookup());
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", "value"));
|
|
|
|
|
connectionFactory.setConnectionFactoryLookup(new MapConnectionFactoryLookup());
|
|
|
|
|
|
|
|
|
|
assertThatThrownBy(() -> sut.afterPropertiesSet()).isInstanceOf(ConnectionFactoryLookupFailureException.class)
|
|
|
|
|
assertThatThrownBy(() -> connectionFactory.afterPropertiesSet()) //
|
|
|
|
|
.isInstanceOf(ConnectionFactoryLookupFailureException.class) //
|
|
|
|
|
.hasMessageContaining("No ConnectionFactory with name 'value' registered");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void unresolvableConnectionFactoryRetrievalShouldFail() {
|
|
|
|
|
|
|
|
|
|
sut.setLenientFallback(false);
|
|
|
|
|
sut.setConnectionFactoryLookup(new MapConnectionFactoryLookup());
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", routedConnectionFactory));
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setLenientFallback(false);
|
|
|
|
|
connectionFactory.setConnectionFactoryLookup(new MapConnectionFactoryLookup());
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", routedConnectionFactory));
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.subscriberContext(Context.of(ROUTING_KEY, "unknown")) //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.verifyError(IllegalStateException.class);
|
|
|
|
|
@@ -114,11 +114,11 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void connectionFactoryRetrievalWithUnknownLookupKeyShouldReturnDefaultConnectionFactory() {
|
|
|
|
|
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", routedConnectionFactory));
|
|
|
|
|
sut.setDefaultTargetConnectionFactory(defaultConnectionFactory);
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", routedConnectionFactory));
|
|
|
|
|
connectionFactory.setDefaultTargetConnectionFactory(defaultConnectionFactory);
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.subscriberContext(Context.of(ROUTING_KEY, "unknown")) //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(defaultConnectionFactory) //
|
|
|
|
|
@@ -128,12 +128,12 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
public void connectionFactoryRetrievalWithoutLookupKeyShouldReturnDefaultConnectionFactory() {
|
|
|
|
|
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("key", routedConnectionFactory));
|
|
|
|
|
sut.setDefaultTargetConnectionFactory(defaultConnectionFactory);
|
|
|
|
|
sut.setLenientFallback(false);
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("key", routedConnectionFactory));
|
|
|
|
|
connectionFactory.setDefaultTargetConnectionFactory(defaultConnectionFactory);
|
|
|
|
|
connectionFactory.setLenientFallback(false);
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(defaultConnectionFactory) //
|
|
|
|
|
.verifyComplete();
|
|
|
|
|
@@ -144,11 +144,11 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
|
|
|
|
|
MapConnectionFactoryLookup lookup = new MapConnectionFactoryLookup("lookup-key", routedConnectionFactory);
|
|
|
|
|
|
|
|
|
|
sut.setConnectionFactoryLookup(lookup);
|
|
|
|
|
sut.setTargetConnectionFactories(Collections.singletonMap("my-key", "lookup-key"));
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setConnectionFactoryLookup(lookup);
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(singletonMap("my-key", "lookup-key"));
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.subscriberContext(Context.of(ROUTING_KEY, "my-key")) //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(routedConnectionFactory) //
|
|
|
|
|
@@ -156,25 +156,24 @@ public class AbstractRoutingConnectionFactoryUnitTests {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // gh-98
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
public void shouldAllowModificationsAfterInitialization() {
|
|
|
|
|
|
|
|
|
|
MapConnectionFactoryLookup lookup = new MapConnectionFactoryLookup();
|
|
|
|
|
|
|
|
|
|
sut.setConnectionFactoryLookup(lookup);
|
|
|
|
|
sut.setTargetConnectionFactories((Map) lookup.getConnectionFactories());
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.setConnectionFactoryLookup(lookup);
|
|
|
|
|
connectionFactory.setTargetConnectionFactories(lookup.getConnectionFactories());
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.subscriberContext(Context.of(ROUTING_KEY, "lookup-key")) //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(defaultConnectionFactory) //
|
|
|
|
|
.verifyComplete();
|
|
|
|
|
|
|
|
|
|
lookup.addConnectionFactory("lookup-key", routedConnectionFactory);
|
|
|
|
|
sut.afterPropertiesSet();
|
|
|
|
|
connectionFactory.afterPropertiesSet();
|
|
|
|
|
|
|
|
|
|
sut.determineTargetConnectionFactory() //
|
|
|
|
|
connectionFactory.determineTargetConnectionFactory() //
|
|
|
|
|
.subscriberContext(Context.of(ROUTING_KEY, "lookup-key")) //
|
|
|
|
|
.as(StepVerifier::create) //
|
|
|
|
|
.expectNext(routedConnectionFactory) //
|
|
|
|
|
|