Skip to content

Commit 37b49bd

Browse files
author
Zhen
committed
Add support of IPv6 addresses
1 parent 5578383 commit 37b49bd

File tree

5 files changed

+62
-3
lines changed

5 files changed

+62
-3
lines changed

driver/src/main/java/org/neo4j/driver/internal/net/BoltServerAddress.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ public static BoltServerAddress from( URI uri )
4141
{
4242
port = DEFAULT_PORT;
4343
}
44+
45+
if( uri.getHost() == null )
46+
{
47+
throw new IllegalArgumentException( "Invalid URI format `" + uri.toString() + "`");
48+
}
49+
4450
return new BoltServerAddress( uri.getHost(), port );
4551
}
4652

driver/src/test/java/org/neo4j/driver/internal/DirectDriverTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import static org.hamcrest.Matchers.is;
3333
import static org.hamcrest.core.IsEqual.equalTo;
3434
import static org.junit.Assert.assertThat;
35+
import static org.junit.Assert.fail;
3536
import static org.neo4j.driver.internal.net.BoltServerAddress.LOCAL_DEFAULT;
3637
import static org.neo4j.driver.internal.util.Matchers.directDriverWithAddress;
3738
import static org.neo4j.driver.v1.Values.parameters;
@@ -52,6 +53,38 @@ public void shouldUseDefaultPortIfMissing()
5253
assertThat( driver, is( directDriverWithAddress( LOCAL_DEFAULT ) ) );
5354
}
5455

56+
@Test
57+
public void shouldAllowIPv6Address()
58+
{
59+
// Given
60+
URI uri = URI.create( "bolt://[::1]" );
61+
BoltServerAddress address = BoltServerAddress.from( uri );
62+
63+
// When
64+
Driver driver = GraphDatabase.driver( uri );
65+
66+
// Then
67+
assertThat( driver, is( directDriverWithAddress( address ) ) );
68+
}
69+
70+
@Test
71+
public void shouldRejectInvalidAddress()
72+
{
73+
// Given
74+
URI uri = URI.create( "*" );
75+
76+
// When & Then
77+
try
78+
{
79+
Driver driver = GraphDatabase.driver( uri );
80+
fail("Expecting error for wrong uri");
81+
}
82+
catch( IllegalArgumentException e )
83+
{
84+
assertThat( e.getMessage(), equalTo( "Invalid URI format `*`" ) );
85+
}
86+
}
87+
5588
@Test
5689
public void shouldRegisterSingleServer()
5790
{

driver/src/test/java/org/neo4j/driver/v1/integration/BookmarkIT.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@
2727

2828
import org.neo4j.driver.v1.AccessMode;
2929
import org.neo4j.driver.v1.Driver;
30+
import org.neo4j.driver.v1.GraphDatabase;
3031
import org.neo4j.driver.v1.Session;
32+
import org.neo4j.driver.v1.StatementResult;
3133
import org.neo4j.driver.v1.Transaction;
3234
import org.neo4j.driver.v1.exceptions.ClientException;
3335
import org.neo4j.driver.v1.exceptions.TransientException;
3436
import org.neo4j.driver.v1.util.ServerVersion;
3537
import org.neo4j.driver.v1.util.TestNeo4jSession;
3638

3739
import static java.util.Arrays.asList;
40+
import static org.hamcrest.CoreMatchers.equalTo;
3841
import static org.hamcrest.Matchers.instanceOf;
3942
import static org.hamcrest.Matchers.startsWith;
4043
import static org.junit.Assert.assertEquals;
@@ -66,6 +69,21 @@ public void assumeBookmarkSupport()
6669
serverVersion.greaterThanOrEqual( v3_1_0 ) );
6770
}
6871

72+
@Test
73+
public void shouldConnectIPv6Uri()
74+
{
75+
// Given
76+
try( Driver driver = GraphDatabase.driver( "bolt://[::1]:7687" );
77+
Session session = driver.session() )
78+
{
79+
// When
80+
StatementResult result = session.run( "RETURN 1" );
81+
82+
// Then
83+
assertThat( result.single().get( 0 ).asInt(), equalTo( 1 ) );
84+
}
85+
}
86+
6987
@Test
7088
public void shouldReceiveBookmarkOnSuccessfulCommit() throws Throwable
7189
{

driver/src/test/java/org/neo4j/driver/v1/integration/TLSSocketChannelIT.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,7 @@ private void createFakeServerCertPairInKnownCerts( BoltServerAddress address, Fi
231231
public void shouldFailTLSHandshakeDueToServerCertNotSignedByKnownCA() throws Throwable
232232
{
233233
// Given
234-
neo4j.restart(
235-
Neo4jSettings.TEST_SETTINGS.updateWith(
234+
neo4j.restart( Neo4jSettings.TEST_SETTINGS.updateWith(
236235
Neo4jSettings.CERT_DIR,
237236
folder.getRoot().getAbsolutePath().replace( "\\", "/" ) ) );
238237
SocketChannel channel = SocketChannel.open();

driver/src/test/java/org/neo4j/driver/v1/util/Neo4jSettings.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public class Neo4jSettings
3232
public static final String DATA_DIR = "dbms.directories.data";
3333
public static final String CERT_DIR = "dbms.directories.certificates";
3434
public static final String IMPORT_DIR = "dbms.directories.import";
35+
public static final String LISTEN_ADDR = "dbms.connectors.default_listen_address"; // only valid for 3.1+
36+
public static final String IPV6_ENABLED_ADDR = "::";
3537

3638
private static final String DEFAULT_IMPORT_DIR = "import";
3739
private static final String DEFAULT_CERT_DIR = "certificates";
@@ -48,7 +50,8 @@ public class Neo4jSettings
4850
CERT_DIR, DEFAULT_CERT_DIR,
4951
DATA_DIR, DEFAULT_DATA_DIR,
5052
IMPORT_DIR, DEFAULT_IMPORT_DIR,
51-
AUTH_ENABLED, "false" ), Collections.<String>emptySet() );
53+
AUTH_ENABLED, "false",
54+
LISTEN_ADDR, IPV6_ENABLED_ADDR ), Collections.<String>emptySet() );
5255

5356
private Neo4jSettings( Map<String, String> settings, Set<String> excludes )
5457
{

0 commit comments

Comments
 (0)