| 
29 | 29 | import static org.junit.jupiter.api.Assertions.assertNotNull;  | 
30 | 30 | import static org.junit.jupiter.api.Assertions.assertThrows;  | 
31 | 31 | import static org.mockito.ArgumentMatchers.any;  | 
 | 32 | +import static org.mockito.BDDMockito.given;  | 
 | 33 | +import static org.mockito.Mockito.doAnswer;  | 
32 | 34 | import static org.mockito.Mockito.mock;  | 
33 | 35 | import static org.mockito.Mockito.never;  | 
34 | 36 | import static org.mockito.Mockito.startsWith;  | 
 | 
52 | 54 | import java.net.InetAddress;  | 
53 | 55 | import java.net.UnknownHostException;  | 
54 | 56 | import java.util.Arrays;  | 
 | 57 | +import java.util.Collections;  | 
55 | 58 | import java.util.HashMap;  | 
56 | 59 | import java.util.List;  | 
57 | 60 | import java.util.Map;  | 
 | 61 | +import java.util.concurrent.CompletableFuture;  | 
58 | 62 | import org.junit.jupiter.api.Test;  | 
59 | 63 | import org.junit.jupiter.params.ParameterizedTest;  | 
60 | 64 | import org.junit.jupiter.params.provider.ValueSource;  | 
@@ -524,6 +528,43 @@ void shouldResolveToIP() throws UnknownHostException {  | 
524 | 528 |         assertEquals(new BoltServerAddress(A.host(), localhost.getHostAddress(), A.port()), addresses.get(0));  | 
525 | 529 |     }  | 
526 | 530 | 
 
  | 
 | 531 | +    @Test  | 
 | 532 | +    void shouldLogScopedIPV6AddressWithStringFormattingLogger() throws UnknownHostException {  | 
 | 533 | +        // GIVEN  | 
 | 534 | +        BoltServerAddress initialRouter = new BoltServerAddress("initialRouter", 7687);  | 
 | 535 | +        ClusterCompositionProvider compositionProvider = compositionProviderMock(Collections.emptyMap());  | 
 | 536 | +        ServerAddressResolver resolver = resolverMock(initialRouter, initialRouter);  | 
 | 537 | +        DomainNameResolver domainNameResolver = mock(DomainNameResolver.class);  | 
 | 538 | +        InetAddress address = mock(InetAddress.class);  | 
 | 539 | +        given(address.getHostAddress()).willReturn("fe80:0:0:0:ce66:1564:db8q:94b6%6");  | 
 | 540 | +        given(domainNameResolver.resolve(initialRouter.host())).willReturn(new InetAddress[] {address});  | 
 | 541 | +        RoutingTable table = routingTableMock(true);  | 
 | 542 | +        ConnectionPool pool = mock(ConnectionPool.class);  | 
 | 543 | +        CompletableFuture<Connection> failedAcquisition = new CompletableFuture<>();  | 
 | 544 | +        failedAcquisition.completeExceptionally(new ServiceUnavailableException("not available"));  | 
 | 545 | +        given(pool.acquire(any())).willReturn(failedAcquisition);  | 
 | 546 | +        Logging logging = mock(Logging.class);  | 
 | 547 | +        Logger logger = mock(Logger.class);  | 
 | 548 | +        given(logging.getLog(any(Class.class))).willReturn(logger);  | 
 | 549 | +        doAnswer(invocationOnMock -> String.format(invocationOnMock.getArgument(0), invocationOnMock.getArgument(1)))  | 
 | 550 | +                .when(logger)  | 
 | 551 | +                .warn(any());  | 
 | 552 | +        RoutingSettings settings = new RoutingSettings(1, 0, 0);  | 
 | 553 | +        RediscoveryImpl rediscovery = new RediscoveryImpl(  | 
 | 554 | +                initialRouter,  | 
 | 555 | +                settings,  | 
 | 556 | +                compositionProvider,  | 
 | 557 | +                GlobalEventExecutor.INSTANCE,  | 
 | 558 | +                resolver,  | 
 | 559 | +                logging,  | 
 | 560 | +                domainNameResolver);  | 
 | 561 | + | 
 | 562 | +        // WHEN & THEN  | 
 | 563 | +        assertThrows(  | 
 | 564 | +                ServiceUnavailableException.class,  | 
 | 565 | +                () -> await(rediscovery.lookupClusterComposition(table, pool, null, null)));  | 
 | 566 | +    }  | 
 | 567 | + | 
527 | 568 |     private Rediscovery newRediscovery(  | 
528 | 569 |             BoltServerAddress initialRouter,  | 
529 | 570 |             ClusterCompositionProvider compositionProvider,  | 
 | 
0 commit comments