/** * Takes a raw address that can have a single port or 2 ports (lower and upper bounds of port range) and * processes it to a clean separation of host and ports. When only one port is specified, it is in the lower bound. * The presence of an upper bound implies a range. * * @param rawAddress the raw address that a user can provide via config or command line * @return the host, lower bound port, and upper bound port */ public static OptionalHostnamePort toOptionalHostnamePortFromRawAddress( String rawAddress ) { HostnamePort hostnamePort = new HostnamePort( rawAddress ); Optional<String> processedHost = Optional.ofNullable( hostnamePort.getHost() ) .map( str -> str.replaceAll( "\\[", "" ) ) .map( str -> str.replaceAll( "]", "" ) ); return new OptionalHostnamePort( processedHost, optionalFromZeroable( hostnamePort.getPorts()[0] ), optionalFromZeroable( hostnamePort.getPorts()[1] ) ); }
public String toString( String defaultHost ) { StringBuilder builder = new StringBuilder(); String host = getHost( defaultHost ); if ( host != null ) { builder.append( host ); } if ( getPort() != 0 ) { builder.append( ':' ); builder.append( getPort() ); if ( isRange() ) { builder.append( '-' ).append( getPorts()[1] ); } } return builder.toString(); }
@Test void testHostnamePortRange() { HostnamePort hostnamePort = new HostnamePort( "myhost:1234-1243" ); assertThat( hostnamePort.getHost(), equalTo( "myhost" ) ); assertThat( hostnamePort.getPort(), equalTo( 1234 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[] {1234, 1243} ) ); }
@Test void testIPv6AddressWithSchemeAndPort() { HostnamePort hostnamePort = new HostnamePort( "foo://[ff02::1:1]:9191" ); assertThat( hostnamePort.getHost( null ), equalTo( "[ff02::1:1]" ) ); assertThat( hostnamePort.getPort(), equalTo( 9191 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[]{9191, 9191} ) ); }
@Test void testHostnameOnly() { HostnamePort hostnamePort = new HostnamePort( "myhost" ); assertThat( hostnamePort.getHost(), equalTo( "myhost" ) ); assertThat( hostnamePort.getPort(), equalTo( 0 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[]{0, 0} ) ); }
@Test void testIPv6Address() { HostnamePort hostnamePort = new HostnamePort( "[2001:cdba:0:0:0:0:3257:9652]" ); assertThat( hostnamePort.getHost( null ), equalTo( "[2001:cdba:0:0:0:0:3257:9652]" ) ); assertThat( hostnamePort.getPort(), equalTo( 0 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[]{0, 0} ) ); }
@Test void testIPv6LocalhostWithSchemeAndPort() { HostnamePort hostnamePort = new HostnamePort( "foo://[::1]:6362" ); assertThat( hostnamePort.getHost( null ), equalTo( "[::1]" ) ); assertThat( hostnamePort.getPort(), equalTo( 6362 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[]{6362, 6362} ) ); } }
@Test void testHostnamePort() { HostnamePort hostnamePort = new HostnamePort( "myhost:1234" ); assertThat( hostnamePort.getHost(), equalTo( "myhost" ) ); assertThat( hostnamePort.getPort(), equalTo( 1234 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[] {1234, 1234} ) ); }
@Test void testHostnamePortRangeInversed() { HostnamePort hostnamePort = new HostnamePort( "myhost:1243-1234" ); assertThat( hostnamePort.getHost(), equalTo( "myhost" ) ); assertThat( hostnamePort.getPort(), equalTo( 1243 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[] {1243, 1234} ) ); }
@Test void testIPv6Localhost() { HostnamePort hostnamePort = new HostnamePort( "[::1]" ); assertThat( hostnamePort.getHost( null ), equalTo( "[::1]" ) ); assertThat( hostnamePort.getPort(), equalTo( 0 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[]{0, 0} ) ); }
@Test void testSinglePortOnly() { HostnamePort hostnamePort = new HostnamePort( ":1234" ); assertNull( hostnamePort.getHost() ); assertThat( hostnamePort.getPort(), equalTo( 1234 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[] { 1234, 1234 } ) ); }
@Test void testPortRangeOnly() { HostnamePort hostnamePort = new HostnamePort( ":1230-1240" ); assertNull( hostnamePort.getHost() ); assertThat( hostnamePort.getPort(), equalTo( 1230 ) ); assertThat( hostnamePort.getPorts(), equalTo( new int[] { 1230, 1240 } ) ); }
public String toString( String defaultHost ) { StringBuilder builder = new StringBuilder(); String host = getHost( defaultHost ); if ( host != null ) { builder.append( host ); } if ( getPort() != 0 ) { builder.append( ':' ); builder.append( getPort() ); if ( isRange() ) { builder.append( '-' ).append( getPorts()[1] ); } } return builder.toString(); }
/** * Takes a raw address that can have a single port or 2 ports (lower and upper bounds of port range) and * processes it to a clean separation of host and ports. When only one port is specified, it is in the lower bound. * The presence of an upper bound implies a range. * * @param rawAddress the raw address that a user can provide via config or command line * @return the host, lower bound port, and upper bound port */ public static OptionalHostnamePort toOptionalHostnamePortFromRawAddress( String rawAddress ) { HostnamePort hostnamePort = new HostnamePort( rawAddress ); Optional<String> processedHost = Optional.ofNullable( hostnamePort.getHost() ) .map( str -> str.replaceAll( "\\[", "" ) ) .map( str -> str.replaceAll( "]", "" ) ); return new OptionalHostnamePort( processedHost, optionalFromZeroable( hostnamePort.getPorts()[0] ), optionalFromZeroable( hostnamePort.getPorts()[1] ) ); }
public Connection bindToFirstAvailablePortInRange( HostnamePort serverAddress ) throws ChannelException int[] ports = serverAddress.getPorts(); String host = serverAddress.getHost();