Skip to content

Commit 6decdae

Browse files
committed
Fix tests for non-localhost and/or non-default port
1 parent fa95162 commit 6decdae

File tree

4 files changed

+41
-18
lines changed

4 files changed

+41
-18
lines changed

src/test/org/firebirdsql/common/FBTestProperties.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.firebirdsql.jaybird.fb.constants.TpbItems;
1919
import org.firebirdsql.jaybird.props.AttachmentProperties;
2020
import org.firebirdsql.jaybird.props.DatabaseConnectionProperties;
21+
import org.firebirdsql.jaybird.props.PropertyConstants;
2122
import org.firebirdsql.jaybird.props.ServiceConnectionProperties;
2223
import org.firebirdsql.jaybird.util.BasicVersion;
2324
import org.firebirdsql.jaybird.xca.FBManagedConnectionFactory;
@@ -99,6 +100,10 @@ public static boolean isLocalhost() {
99100
return "localhost".equals(DB_SERVER_URL) || "127.0.0.1".equals(DB_SERVER_URL);
100101
}
101102

103+
public static boolean isDefaultPort() {
104+
return DB_SERVER_PORT == PropertyConstants.DEFAULT_PORT;
105+
}
106+
102107
public static String getDatabasePath() {
103108
return getDatabasePath(DB_NAME);
104109
}

src/test/org/firebirdsql/jdbc/DatabaseUrlFormatsTest.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
// SPDX-FileCopyrightText: Copyright 2021-2025 Mark Rotteveel
1+
// SPDX-FileCopyrightText: Copyright 2021-2026 Mark Rotteveel
22
// SPDX-License-Identifier: LGPL-2.1-or-later
33
package org.firebirdsql.jdbc;
44

55
import org.firebirdsql.common.FBTestProperties;
66
import org.firebirdsql.common.extension.UsesDatabaseExtension;
77
import org.firebirdsql.ds.FBSimpleDataSource;
88
import org.firebirdsql.gds.impl.GDSFactory;
9-
import org.firebirdsql.jaybird.props.PropertyConstants;
109
import org.firebirdsql.jaybird.props.PropertyNames;
1110
import org.firebirdsql.util.FirebirdSupportInfo;
1211
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -20,7 +19,6 @@
2019
import java.util.List;
2120
import java.util.Locale;
2221
import java.util.Properties;
23-
import java.util.stream.Collectors;
2422
import java.util.stream.Stream;
2523

2624
import static org.firebirdsql.common.FBTestProperties.*;
@@ -47,7 +45,7 @@ void testConnectionWithDriverManager(String url) throws Exception {
4745
@SuppressWarnings("unused")
4846
static Stream<Arguments> testConnectionWithDriverManager() {
4947
final List<String> urlPrefixes = GDSFactory.getPlugin(FBTestProperties.getGdsType()).getSupportedProtocolList();
50-
final List<String> urls = urlsWithoutProtocolPrefix();
48+
final List<String> urls = urlsWithoutProtocolPrefix().toList();
5149

5250
return urlPrefixes.stream()
5351
.flatMap(urlPrefix -> urls.stream()
@@ -62,9 +60,12 @@ static Stream<Arguments> testConnectionWithDriverManager() {
6260
@MethodSource
6361
void testConnectionWithEmptyUrl(String url) throws Exception {
6462
Properties properties = FBTestProperties.getDefaultPropertiesForConnection();
65-
properties.put(PropertyNames.databaseName, getDatabasePath());
63+
String databaseName = isEmbeddedType().matches(GDS_TYPE) || (isLocalhost() && isDefaultPort())
64+
? getDatabasePath()
65+
: getdbpath(DB_NAME);
66+
properties.put(PropertyNames.databaseName, databaseName);
6667

67-
try (Connection connection = DriverManager.getConnection(url, properties)) {
68+
try (var connection = DriverManager.getConnection(url, properties)) {
6869
assertTrue(connection.isValid(1000));
6970
}
7071
}
@@ -97,35 +98,34 @@ void testConnectionWithSimpleDataSource(String serverName, Integer portNumber, S
9798
@SuppressWarnings("unused")
9899
static Stream<Arguments> testConnectionWithSimpleDataSource() {
99100
return Stream.concat(
100-
urlsWithoutProtocolPrefix().stream()
101+
urlsWithoutProtocolPrefix()
101102
// URLS with a question mark are only for JDBC url test
102103
.filter(url -> url.indexOf('?') == -1)
103104
.map(url -> Arguments.of(null, null, url)),
104105
Stream.of(Arguments.of(DB_SERVER_URL, DB_SERVER_PORT, FBTestProperties.getDatabasePath())));
105106
}
106107

107-
private static List<String> urlsWithoutProtocolPrefix() {
108+
private static Stream<String> urlsWithoutProtocolPrefix() {
108109
final String databasePath = getDatabasePath();
109110
final String serverName = DB_SERVER_URL;
110111
final boolean localhost = isLocalhost();
111112
final String ipv6SafeServerName = serverName.indexOf(':') != -1 ? '[' + serverName + ']' : serverName;
112-
final int portNumber = DB_SERVER_PORT;
113113
final String gdsTypeName = GDS_TYPE;
114114
final List<String> urlFormats = new ArrayList<>();
115115
if (isEmbeddedType().matches(gdsTypeName)) {
116116
// file path only
117117
urlFormats.add("%3$s");
118118
urlFormats.add("nopath?databaseName=%3$s");
119119
} else {
120-
urlFormats.add("///%3$s");
121120
urlFormats.add("%1$s/%2$d:%3$s");
122121
urlFormats.add("//%1$s:%2$d/%3$s");
123-
if (portNumber == PropertyConstants.DEFAULT_PORT) {
122+
if (isDefaultPort()) {
124123
urlFormats.add("%1$s:%3$s");
125124
urlFormats.add("//%1$s/%3$s");
126125
if (localhost) {
127126
// no hostname + port:
128127
urlFormats.add("%3$s");
128+
urlFormats.add("///%3$s");
129129
}
130130
}
131131

@@ -167,8 +167,8 @@ private static List<String> urlsWithoutProtocolPrefix() {
167167
}
168168

169169
return urlFormats.stream()
170-
.map(urlFormat -> String.format(urlFormat, ipv6SafeServerName, portNumber, databasePath, serverName))
171-
.collect(Collectors.toList());
170+
.map(urlFormat ->
171+
urlFormat.formatted(ipv6SafeServerName, DB_SERVER_PORT, databasePath, serverName));
172172
}
173173

174174
private static boolean isWindowsSystem() {

src/test/org/firebirdsql/jdbc/FBConnectionTest.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,18 @@
3535
import org.mockito.junit.jupiter.MockitoExtension;
3636

3737
import java.lang.invoke.MethodHandles;
38+
import java.net.Inet6Address;
39+
import java.net.InetAddress;
3840
import java.nio.charset.StandardCharsets;
3941
import java.sql.*;
42+
import java.util.Arrays;
4043
import java.util.List;
4144
import java.util.Map;
45+
import java.util.Optional;
4246
import java.util.Properties;
4347
import java.util.concurrent.*;
4448

49+
import static java.util.Objects.requireNonNull;
4550
import static org.firebirdsql.common.DdlHelper.executeCreateTable;
4651
import static org.firebirdsql.common.FBTestProperties.*;
4752
import static org.firebirdsql.common.SystemPropertyHelper.withTemporarySystemProperty;
@@ -215,7 +220,8 @@ void testLockTable() throws Exception {
215220
Statement stmt = connection.createStatement()) {
216221
executeCreateTable(connection, "CREATE TABLE test_lock(col1 INTEGER)");
217222

218-
TransactionParameterBuffer tpb = connection.getTransactionParameters(Connection.TRANSACTION_READ_COMMITTED);
223+
TransactionParameterBuffer tpb = requireNonNull(
224+
connection.getTransactionParameters(Connection.TRANSACTION_READ_COMMITTED));
219225

220226
if (tpb.hasArgument(isc_tpb_wait)) {
221227
tpb.removeArgument(isc_tpb_wait);
@@ -519,8 +525,20 @@ void testConnectionsViaDriverManagerAreDistinct() throws Exception {
519525
void testIPv6AddressHandling() throws Exception {
520526
assumeThat("Test only works in pure java", GDS_TYPE, isPureJavaType());
521527
assumeTrue(getDefaultSupportInfo().isVersionEqualOrAbove(3, 0), "Firebird 3 or higher required for IPv6 testing");
522-
try (Connection connection = DriverManager.getConnection(
523-
"jdbc:firebirdsql://[::1]/" + getDatabasePath() + "?charSet=utf-8", DB_USER, DB_PASSWORD)) {
528+
String ipv6;
529+
if (isLocalhost()) {
530+
ipv6 = "::1";
531+
} else {
532+
Optional<String> optIpv6 = Arrays.stream(InetAddress.getAllByName(DB_SERVER_URL))
533+
.filter(a -> a instanceof Inet6Address)
534+
.map(InetAddress::getHostAddress)
535+
.findAny();
536+
assumeTrue(optIpv6.isPresent(), "Test assumes %s resolves to an IPv6 address".formatted(DB_SERVER_URL));
537+
ipv6 = optIpv6.get();
538+
}
539+
try (var connection = DriverManager.getConnection(
540+
"jdbc:firebirdsql://[%s]:%d/%s?charSet=utf-8".formatted(ipv6, DB_SERVER_PORT, getDatabasePath()),
541+
DB_USER, DB_PASSWORD)) {
524542
assertTrue(connection.isValid(0));
525543
}
526544
}

src/test/org/firebirdsql/management/FBServiceManagerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.firebirdsql.common.extension.UsesDatabaseExtension;
88
import org.firebirdsql.gds.impl.GDSServerVersion;
99
import org.firebirdsql.gds.ng.WireCrypt;
10-
import org.firebirdsql.jaybird.props.PropertyConstants;
1110
import org.firebirdsql.jaybird.props.PropertyNames;
1211
import org.firebirdsql.util.FirebirdSupportInfo;
1312
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -32,6 +31,7 @@
3231
import static org.firebirdsql.common.FBTestProperties.GDS_TYPE;
3332
import static org.firebirdsql.common.FBTestProperties.configureServiceManager;
3433
import static org.firebirdsql.common.FBTestProperties.getDefaultSupportInfo;
34+
import static org.firebirdsql.common.FBTestProperties.isDefaultPort;
3535
import static org.firebirdsql.common.FBTestProperties.isLocalhost;
3636
import static org.firebirdsql.common.FBTestProperties.supportsNativeModernUrls;
3737
import static org.firebirdsql.common.FbAssumptions.assumeFeature;
@@ -110,7 +110,7 @@ static Stream<Arguments> testGetServerVersion() {
110110
urlFormats.add("//%1$s:%2$d/");
111111
}
112112
urlFormats.add("//%1$s:%2$d/%3$s");
113-
if (DB_SERVER_PORT == PropertyConstants.DEFAULT_PORT) {
113+
if (isDefaultPort()) {
114114
urlFormats.add("%1$s:%3$s");
115115
if (supportsNamelessServiceManager) {
116116
urlFormats.add("%1$s:");

0 commit comments

Comments
 (0)