diff --git a/.gitignore b/.gitignore index 7cdb4ecd7..5f384eeab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,14 @@ -/.classpath -/.project -/.settings -**/target -/.idea -/*.iml -/bin +.classpath +.project +.settings +target +.idea +*.iml +.directory /docker/jwtHeader /docker/jwtSecret - /docker/data -**/test-results-native + +test-results-native .flattened-pom.xml diff --git a/driver/src/main/java/com/arangodb/ArangoDB.java b/driver/src/main/java/com/arangodb/ArangoDB.java index d7de287d3..c001e823e 100644 --- a/driver/src/main/java/com/arangodb/ArangoDB.java +++ b/driver/src/main/java/com/arangodb/ArangoDB.java @@ -20,6 +20,8 @@ package com.arangodb; +import com.arangodb.config.ConfigPropertiesProvider; +import com.arangodb.config.ConfigPropertyKey; import com.arangodb.entity.*; import com.arangodb.internal.ArangoDBImpl; import com.arangodb.internal.ArangoDefaults; @@ -39,10 +41,8 @@ import javax.annotation.concurrent.ThreadSafe; import javax.net.ssl.SSLContext; -import java.io.InputStream; import java.util.Collection; import java.util.Locale; -import java.util.Properties; /** * Central access point for applications to communicate with an ArangoDB server. @@ -333,25 +333,21 @@ public interface ArangoDB extends ArangoSerdeAccessor { * @author Mark Vollmary */ class Builder extends InternalArangoDBBuilder { - private static final String PROPERTY_KEY_PROTOCOL = "arangodb.protocol"; - protected Protocol protocol; + protected Protocol protocol = ArangoDefaults.DEFAULT_NETWORK_PROTOCOL; public Builder() { super(); } - private static Protocol loadProtocol(final Properties properties, final Protocol currentValue) { - return Protocol.valueOf( - getProperty(properties, PROPERTY_KEY_PROTOCOL, currentValue, - ArangoDefaults.DEFAULT_NETWORK_PROTOCOL) - .toUpperCase(Locale.ROOT)); + private static Protocol loadProtocol(final ConfigPropertiesProvider properties, final Protocol currentValue) { + return Protocol.valueOf(getProperty(properties, ConfigPropertyKey.PROTOCOL, currentValue).toUpperCase(Locale.ROOT)); } - @Override - protected void loadProperties(final Properties properties) { - super.loadProperties(properties); + public Builder loadProperties(final ConfigPropertiesProvider properties) { + doLoadProperties(properties); protocol = loadProtocol(properties, protocol); + return this; } public Builder useProtocol(final Protocol protocol) { @@ -359,12 +355,6 @@ public Builder useProtocol(final Protocol protocol) { return this; } - @Override - public Builder loadProperties(final InputStream in) { - super.loadProperties(in); - return this; - } - /** * Adds a host to connect to. Multiple hosts can be added to provide fallbacks. * @@ -461,7 +451,7 @@ public Builder verifyHost(final Boolean verifyHost) { * @return {@link ArangoDB.Builder} */ public Builder chunksize(final Integer chunksize) { - setChunksize(chunksize); + setChunkSize(chunksize); return this; } @@ -617,7 +607,7 @@ public ArangoDB build() { return new ArangoDBImpl( new VstCommunicationSync.Builder(hostHandler).timeout(timeout).user(user).password(password) - .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunksize) + .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunkSize) .maxConnections(maxConnections).connectionTtl(connectionTtl), new HttpCommunication.Builder().hostHandler(hostHandler), serde, diff --git a/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java b/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java index adea1eee3..07bdc3861 100644 --- a/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java +++ b/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java @@ -24,6 +24,7 @@ import com.arangodb.async.internal.ArangoDBAsyncImpl; import com.arangodb.async.internal.velocystream.VstCommunicationAsync; import com.arangodb.async.internal.velocystream.VstConnectionFactoryAsync; +import com.arangodb.config.ConfigPropertiesProvider; import com.arangodb.entity.*; import com.arangodb.internal.ArangoDefaults; import com.arangodb.internal.InternalArangoDBBuilder; @@ -42,7 +43,6 @@ import javax.annotation.concurrent.ThreadSafe; import javax.net.ssl.SSLContext; -import java.io.InputStream; import java.util.Collection; import java.util.concurrent.CompletableFuture; @@ -308,9 +308,8 @@ public Builder() { super(); } - @Override - public Builder loadProperties(final InputStream in) { - super.loadProperties(in); + public Builder loadProperties(final ConfigPropertiesProvider config) { + super.doLoadProperties(config); return this; } @@ -399,7 +398,7 @@ public Builder sslContext(final SSLContext sslContext) { * @return {@link ArangoDBAsync.Builder} */ public Builder chunksize(final Integer chunksize) { - setChunksize(chunksize); + setChunkSize(chunksize); return this; } @@ -535,13 +534,13 @@ public ArangoDBAsync build() { private VstCommunicationAsync.Builder asyncBuilder(final HostHandler hostHandler) { return new VstCommunicationAsync.Builder(hostHandler).timeout(timeout).user(user).password(password) - .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunksize).maxConnections(maxConnections) + .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunkSize).maxConnections(maxConnections) .connectionTtl(connectionTtl); } private VstCommunicationSync.Builder syncBuilder(final HostHandler hostHandler) { return new VstCommunicationSync.Builder(hostHandler).timeout(timeout).user(user).password(password) - .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunksize).maxConnections(maxConnections) + .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunkSize).maxConnections(maxConnections) .connectionTtl(connectionTtl); } diff --git a/driver/src/main/java/com/arangodb/config/ConfigPropertiesProvider.java b/driver/src/main/java/com/arangodb/config/ConfigPropertiesProvider.java new file mode 100644 index 000000000..2e3f6af0c --- /dev/null +++ b/driver/src/main/java/com/arangodb/config/ConfigPropertiesProvider.java @@ -0,0 +1,25 @@ +package com.arangodb.config; + + +public interface ConfigPropertiesProvider { + + /** + * @param key the property key + * @return the configuration property with the specified key if present, {@code null} otherwise + */ + String getProperty(String key); + + default String getProperty(ConfigPropertyKey key) { + return getProperty(key.getValue()); + } + + default String getProperty(String key, String defaultValue) { + String p = getProperty(key); + return p != null ? p : defaultValue; + } + + default String getProperty(ConfigPropertyKey key, String defaultValue) { + String p = getProperty(key); + return p != null ? p : defaultValue; + } +} diff --git a/driver/src/main/java/com/arangodb/config/ConfigPropertyKey.java b/driver/src/main/java/com/arangodb/config/ConfigPropertyKey.java new file mode 100644 index 000000000..db82cd09b --- /dev/null +++ b/driver/src/main/java/com/arangodb/config/ConfigPropertyKey.java @@ -0,0 +1,31 @@ +package com.arangodb.config; + +public enum ConfigPropertyKey { + HOSTS("hosts"), + TIMEOUT("timeout"), + USER("user"), + PASSWORD("password"), + JWT("jwt"), + USE_SSL("ssl"), + VERIFY_HOST("verifyHost"), + VST_CHUNK_SIZE("chunkSize"), + MAX_CONNECTIONS("connections.max"), + CONNECTION_TTL("connections.ttl"), + KEEP_ALIVE_INTERVAL("connections.keepAlive.interval"), + ACQUIRE_HOST_LIST("acquireHostList"), + ACQUIRE_HOST_LIST_INTERVAL("acquireHostList.interval"), + LOAD_BALANCING_STRATEGY("loadBalancingStrategy"), + RESPONSE_QUEUE_TIME_SAMPLES("metrics.responseQueueTimeSamples"), + PROTOCOL("protocol"); + + private final String value; + + ConfigPropertyKey(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + +} diff --git a/driver/src/main/java/com/arangodb/internal/ArangoDefaults.java b/driver/src/main/java/com/arangodb/internal/ArangoDefaults.java index ac5e3c2de..ce452eed0 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoDefaults.java +++ b/driver/src/main/java/com/arangodb/internal/ArangoDefaults.java @@ -38,7 +38,7 @@ public final class ArangoDefaults { public static final int CHUNK_MAX_HEADER_SIZE = CHUNK_MIN_HEADER_SIZE + LONG_BYTES; public static final int CHUNK_DEFAULT_CONTENT_SIZE = 30000; public static final int MAX_CONNECTIONS_VST_DEFAULT = 1; - public static final Integer CONNECTION_TTL_VST_DEFAULT = null; + public static final Long CONNECTION_TTL_VST_DEFAULT = null; public static final int MAX_CONNECTIONS_HTTP_DEFAULT = 20; public static final int MAX_CONNECTIONS_HTTP2_DEFAULT = 1; public static final Protocol DEFAULT_NETWORK_PROTOCOL = Protocol.HTTP2_JSON; diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java b/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java index 78ab6a7f1..88264b25b 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java @@ -20,8 +20,9 @@ package com.arangodb.internal; -import com.arangodb.ArangoDB; import com.arangodb.ArangoDBException; +import com.arangodb.config.ConfigPropertiesProvider; +import com.arangodb.config.ConfigPropertyKey; import com.arangodb.entity.LoadBalancingStrategy; import com.arangodb.internal.net.*; import com.arangodb.internal.util.HostUtils; @@ -30,67 +31,38 @@ import org.slf4j.LoggerFactory; import javax.net.ssl.SSLContext; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Locale; /** * @author Mark Vollmary */ public abstract class InternalArangoDBBuilder { - private static final Logger LOG = LoggerFactory.getLogger(InternalArangoDBBuilder.class); - private static final String PROPERTY_KEY_HOSTS = "arangodb.hosts"; - private static final String PROPERTY_KEY_TIMEOUT = "arangodb.timeout"; - private static final String PROPERTY_KEY_USER = "arangodb.user"; - private static final String PROPERTY_KEY_PASSWORD = "arangodb.password"; - private static final String PROPERTY_KEY_JWT = "arangodb.jwt"; - private static final String PROPERTY_KEY_USE_SSL = "arangodb.usessl"; - private static final String PROPERTY_KEY_VERIFY_HOST = "arangodb.verifyHost"; - private static final String PROPERTY_KEY_V_STREAM_CHUNK_CONTENT_SIZE = "arangodb.chunksize"; - private static final String PROPERTY_KEY_MAX_CONNECTIONS = "arangodb.connections.max"; - private static final String PROPERTY_KEY_CONNECTION_TTL = "arangodb.connections.ttl"; - private static final String PROPERTY_KEEP_ALIVE_INTERVAL = "arangodb.connections.keepAlive.interval"; - private static final String PROPERTY_KEY_ACQUIRE_HOST_LIST = "arangodb.acquireHostList"; - private static final String PROPERTY_KEY_ACQUIRE_HOST_LIST_INTERVAL = "arangodb.acquireHostList.interval"; - private static final String PROPERTY_KEY_LOAD_BALANCING_STRATEGY = "arangodb.loadBalancingStrategy"; - private static final String PROPERTY_KEY_RESPONSE_QUEUE_TIME_SAMPLES = "arangodb.metrics.responseQueueTimeSamples"; - private static final String DEFAULT_PROPERTY_FILE = "/arangodb.properties"; - - protected final List hosts; - protected Integer timeout; - protected String user; - protected String password; - protected String jwt; - protected Boolean useSsl; - protected SSLContext sslContext; - protected Boolean verifyHost; - protected Integer chunksize; - protected Integer maxConnections; - protected Long connectionTtl; - protected Integer keepAliveInterval; - protected Boolean acquireHostList; - protected Integer acquireHostListInterval; - protected LoadBalancingStrategy loadBalancingStrategy; + protected final List hosts = new ArrayList<>(); + protected Integer timeout = ArangoDefaults.DEFAULT_TIMEOUT; + protected String user = ArangoDefaults.DEFAULT_USER; + protected String password = null; + protected String jwt = null; + protected Boolean useSsl = ArangoDefaults.DEFAULT_USE_SSL; + protected SSLContext sslContext = null; + protected Boolean verifyHost = ArangoDefaults.DEFAULT_VERIFY_HOST; + protected Integer chunkSize = ArangoDefaults.CHUNK_DEFAULT_CONTENT_SIZE; + protected Integer maxConnections = null; + protected Long connectionTtl = ArangoDefaults.CONNECTION_TTL_VST_DEFAULT; + protected Integer keepAliveInterval = null; + protected Boolean acquireHostList = ArangoDefaults.DEFAULT_ACQUIRE_HOST_LIST; + protected Integer acquireHostListInterval = ArangoDefaults.DEFAULT_ACQUIRE_HOST_LIST_INTERVAL; + protected LoadBalancingStrategy loadBalancingStrategy = ArangoDefaults.DEFAULT_LOAD_BALANCING_STRATEGY; protected ArangoSerde customSerializer; - protected Integer responseQueueTimeSamples; - - - protected InternalArangoDBBuilder() { - super(); - hosts = new ArrayList<>(); - user = ArangoDefaults.DEFAULT_USER; - try (InputStream is = ArangoDB.class.getResourceAsStream(DEFAULT_PROPERTY_FILE)) { - loadProperties(is); - } catch (IOException e) { - throw new ArangoDBException(e); - } - } + protected Integer responseQueueTimeSamples = ArangoDefaults.DEFAULT_RESPONSE_QUEUE_TIME_SAMPLES; - private static void loadHosts(final Properties properties, final Collection hosts) { - final String hostsProp = properties.getProperty(PROPERTY_KEY_HOSTS); + private static void loadHosts(final ConfigPropertiesProvider properties, final Collection hosts) { + final String hostsProp = properties.getProperty(ConfigPropertyKey.HOSTS); if (hostsProp != null) { final String[] hostsSplit = hostsProp.split(","); for (final String host : hostsSplit) { @@ -106,122 +78,81 @@ private static void loadHosts(final Properties properties, final Collection String getProperty( - final Properties properties, - final String key, - final T currentValue, - final T defaultValue) { - - String overrideDefaultValue = null; - - if (currentValue != null) { - overrideDefaultValue = currentValue.toString(); - } else if (defaultValue != null) { - overrideDefaultValue = defaultValue.toString(); - } - - return properties.getProperty(key, overrideDefaultValue); - } - - public InternalArangoDBBuilder loadProperties(final InputStream in) { - - final Properties properties = new Properties(); - - if (in != null) { - - try { - properties.load(in); - } catch (final IOException e) { - throw new ArangoDBException(e); - } - } - - loadProperties(properties); - - return this; - + protected static String getProperty(ConfigPropertiesProvider props, ConfigPropertyKey key, Object currentValue) { + String defaultValue = currentValue == null ? null : currentValue.toString(); + return props.getProperty(key, defaultValue); } - protected void loadProperties(final Properties properties) { - loadHosts(properties, this.hosts); + protected void doLoadProperties(final ConfigPropertiesProvider properties) { + loadHosts(properties, hosts); timeout = loadTimeout(properties, timeout); user = loadUser(properties, user); password = loadPassword(properties, password); jwt = loadJwt(properties, jwt); useSsl = loadUseSsl(properties, useSsl); verifyHost = loadVerifyHost(properties, verifyHost); - chunksize = loadChunkSize(properties, chunksize); + chunkSize = loadChunkSize(properties, chunkSize); maxConnections = loadMaxConnections(properties, maxConnections); connectionTtl = loadConnectionTtl(properties, connectionTtl); keepAliveInterval = loadKeepAliveInterval(properties, keepAliveInterval); @@ -263,8 +194,8 @@ protected void setVerifyHost(final Boolean verifyHost) { this.verifyHost = verifyHost; } - protected void setChunksize(final Integer chunksize) { - this.chunksize = chunksize; + protected void setChunkSize(final Integer chunkSize) { + this.chunkSize = chunkSize; } protected void setMaxConnections(final Integer maxConnections) { diff --git a/driver/src/main/java/com/arangodb/internal/config/FileConfigPropertiesProvider.java b/driver/src/main/java/com/arangodb/internal/config/FileConfigPropertiesProvider.java new file mode 100644 index 000000000..99763ca39 --- /dev/null +++ b/driver/src/main/java/com/arangodb/internal/config/FileConfigPropertiesProvider.java @@ -0,0 +1,52 @@ +package com.arangodb.internal.config; + +import com.arangodb.ArangoDBException; +import com.arangodb.config.ConfigPropertiesProvider; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +/** + * ConfigProvider that reads configuration entries from local file. Properties path prefix can be configured, so that it + * is possible to distinguish configurations for multiple driver instances in the same file. + */ +public class FileConfigPropertiesProvider implements ConfigPropertiesProvider { + private static final String DEFAULT_PREFIX = "arangodb"; + private static final String DEFAULT_PROPERTY_FILE = "/arangodb.properties"; + private final Properties properties; + private final String prefix; + + public FileConfigPropertiesProvider() { + this(DEFAULT_PREFIX, DEFAULT_PROPERTY_FILE); + } + + public FileConfigPropertiesProvider(String prefix, String fileName) { + this.prefix = initPrefix(prefix); + properties = initProperties(fileName); + } + + private String initPrefix(String p) { + if (p == null) { + return ""; + } else { + return p + "."; + } + } + + private Properties initProperties(String fileName) { + Properties p = new Properties(); + try (InputStream is = FileConfigPropertiesProvider.class.getResourceAsStream(fileName)) { + p.load(is); + } catch (IOException e) { + throw new ArangoDBException(e); + } + return p; + } + + @Override + public String getProperty(String key) { + return properties.getProperty(prefix + key); + } +} + diff --git a/driver/src/test/java/com/arangodb/ArangoDBTest.java b/driver/src/test/java/com/arangodb/ArangoDBTest.java index 8e3336a02..d54647b58 100644 --- a/driver/src/test/java/com/arangodb/ArangoDBTest.java +++ b/driver/src/test/java/com/arangodb/ArangoDBTest.java @@ -21,6 +21,7 @@ package com.arangodb; import com.arangodb.entity.*; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.*; import com.arangodb.model.LogOptions.SortOrder; import com.arangodb.util.TestUtils; @@ -206,7 +207,7 @@ void createDatabaseWithUsers(ArangoDB arangoDB) throws InterruptedException { Thread.sleep(2_000); ArangoDB arangoDBTestUser = new ArangoDB.Builder() - + .loadProperties(new FileConfigPropertiesProvider()) .user("testUser") .password("testPasswd") .build(); @@ -368,7 +369,9 @@ void updateUserDefaultCollectionAccess(ArangoDB arangoDB) { @Test void authenticationFailPassword() { - final ArangoDB arangoDB = new ArangoDB.Builder().password("no").jwt(null).build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .password("no").jwt(null).build(); Throwable thrown = catchThrowable(arangoDB::getVersion); assertThat(thrown).isInstanceOf(ArangoDBException.class); assertThat(((ArangoDBException) thrown).getResponseCode()).isEqualTo(401); @@ -377,7 +380,9 @@ void authenticationFailPassword() { @ParameterizedTest(name = "{index}") @MethodSource("arangos") void authenticationFailUser() { - final ArangoDB arangoDB = new ArangoDB.Builder().user("no").jwt(null).build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .user("no").jwt(null).build(); Throwable thrown = catchThrowable(arangoDB::getVersion); assertThat(thrown).isInstanceOf(ArangoDBException.class); assertThat(((ArangoDBException) thrown).getResponseCode()).isEqualTo(401); @@ -567,7 +572,9 @@ void arangoDBException(ArangoDB arangoDB) { @ParameterizedTest(name = "{index}") @MethodSource("arangos") void fallbackHost() { - final ArangoDB arangoDB = new ArangoDB.Builder().host("not-accessible", 8529).host("127.0.0.1", 8529).build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .host("not-accessible", 8529).host("127.0.0.1", 8529).build(); final ArangoDBVersion version = arangoDB.getVersion(); assertThat(version).isNotNull(); } @@ -575,9 +582,8 @@ void fallbackHost() { @ParameterizedTest(name = "{index}") @MethodSource("arangos") void loadproperties() { - Throwable thrown = catchThrowable(() -> - new ArangoDB.Builder().loadProperties(ArangoDBTest.class.getResourceAsStream("/arangodb-bad" + - ".properties")) + Throwable thrown = catchThrowable(() -> new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider("arangodb", "/arangodb-bad.properties")) ); assertThat(thrown).isInstanceOf(ArangoDBException.class); } diff --git a/driver/src/test/java/com/arangodb/BaseJunit5.java b/driver/src/test/java/com/arangodb/BaseJunit5.java index 3e3b35ca1..7e2ecc2a6 100644 --- a/driver/src/test/java/com/arangodb/BaseJunit5.java +++ b/driver/src/test/java/com/arangodb/BaseJunit5.java @@ -1,6 +1,7 @@ package com.arangodb; import com.arangodb.entity.*; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.CollectionCreateOptions; import com.arangodb.model.GraphCreateOptions; import com.arangodb.serde.JsonbSerde; @@ -19,12 +20,12 @@ class BaseJunit5 { protected static final DbName TEST_DB = DbName.of("java_driver_test_db"); private static final List adbs = Arrays.asList( - new ArangoDB.Builder().useProtocol(Protocol.VST).build(), - new ArangoDB.Builder().useProtocol(Protocol.HTTP_VPACK).build(), - new ArangoDB.Builder().useProtocol(Protocol.HTTP_JSON).build(), - new ArangoDB.Builder().useProtocol(Protocol.HTTP2_VPACK).build(), - new ArangoDB.Builder().useProtocol(Protocol.HTTP2_JSON).build(), - new ArangoDB.Builder().useProtocol(Protocol.HTTP2_JSON).serializer(JsonbSerde.create()).build() + new ArangoDB.Builder().loadProperties(new FileConfigPropertiesProvider()).useProtocol(Protocol.VST).build(), + new ArangoDB.Builder().loadProperties(new FileConfigPropertiesProvider()).useProtocol(Protocol.HTTP_VPACK).build(), + new ArangoDB.Builder().loadProperties(new FileConfigPropertiesProvider()).useProtocol(Protocol.HTTP_JSON).build(), + new ArangoDB.Builder().loadProperties(new FileConfigPropertiesProvider()).useProtocol(Protocol.HTTP2_VPACK).build(), + new ArangoDB.Builder().loadProperties(new FileConfigPropertiesProvider()).useProtocol(Protocol.HTTP2_JSON).build(), + new ArangoDB.Builder().loadProperties(new FileConfigPropertiesProvider()).useProtocol(Protocol.HTTP2_JSON).serializer(JsonbSerde.create()).build() ); protected static Stream dbsStream() { diff --git a/driver/src/test/java/com/arangodb/ConcurrencyTests.java b/driver/src/test/java/com/arangodb/ConcurrencyTests.java index 2140a0f07..1103cb6df 100644 --- a/driver/src/test/java/com/arangodb/ConcurrencyTests.java +++ b/driver/src/test/java/com/arangodb/ConcurrencyTests.java @@ -1,5 +1,6 @@ package com.arangodb; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -17,7 +18,9 @@ class ConcurrencyTests { @EnumSource(Protocol.class) void concurrentPendingRequests(Protocol protocol) throws ExecutionException, InterruptedException { ExecutorService es = Executors.newFixedThreadPool(10); - ArangoDB adb = new ArangoDB.Builder().useProtocol(protocol).build(); + ArangoDB adb = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .useProtocol(protocol).build(); List> futures = IntStream.range(0, 10) .mapToObj(__ -> CompletableFuture.runAsync(() -> adb.db().query("RETURN SLEEP(1)", Void.class), es)) .collect(Collectors.toList()); diff --git a/driver/src/test/java/com/arangodb/JwtAuthTest.java b/driver/src/test/java/com/arangodb/JwtAuthTest.java index 57d9f3001..c56a5fb57 100644 --- a/driver/src/test/java/com/arangodb/JwtAuthTest.java +++ b/driver/src/test/java/com/arangodb/JwtAuthTest.java @@ -1,5 +1,6 @@ package com.arangodb; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.serde.ArangoSerde; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; @@ -23,7 +24,9 @@ class JwtAuthTest { @BeforeAll static void init() { - ArangoDB arangoDB = new ArangoDB.Builder().build(); + ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); jwt = getJwt(arangoDB); arangoDB.shutdown(); } @@ -85,8 +88,8 @@ void updateJwt(Protocol protocol) { private ArangoDB.Builder getBuilder(Protocol protocol) { return new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) .useProtocol(protocol) - .jwt(null) // unset credentials from properties file .user(null) // unset credentials from properties file .password(null); // unset credentials from properties file diff --git a/driver/src/test/java/com/arangodb/ParallelTest.java b/driver/src/test/java/com/arangodb/ParallelTest.java index 16ac5a702..2df8079bb 100644 --- a/driver/src/test/java/com/arangodb/ParallelTest.java +++ b/driver/src/test/java/com/arangodb/ParallelTest.java @@ -1,5 +1,6 @@ package com.arangodb; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -21,6 +22,7 @@ void connectionParallelism(Protocol protocol) throws InterruptedException { // BTS-1102: the server does not run pipelined HTTP/1.1 requests in parallel assumeTrue(protocol != Protocol.HTTP_JSON && protocol != Protocol.HTTP_VPACK); ArangoDB adb = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) .useProtocol(protocol) .maxConnections(1) .build(); diff --git a/driver/src/test/java/com/arangodb/async/ArangoDBTest.java b/driver/src/test/java/com/arangodb/async/ArangoDBTest.java index 51980226b..7d35cdaa9 100644 --- a/driver/src/test/java/com/arangodb/async/ArangoDBTest.java +++ b/driver/src/test/java/com/arangodb/async/ArangoDBTest.java @@ -22,6 +22,7 @@ import com.arangodb.*; import com.arangodb.entity.*; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.*; import com.arangodb.util.TestUtils; import com.arangodb.Request; @@ -54,8 +55,12 @@ class ArangoDBTest { private static final String PW = "machts der hund"; private static Boolean extendedNames; - private final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().build(); - private final ArangoDB arangoDBSync = new ArangoDB.Builder().build(); + private final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); + private final ArangoDB arangoDBSync = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); private boolean isEnterprise() { return arangoDBSync.getVersion().getLicense() == License.ENTERPRISE; @@ -413,7 +418,9 @@ void updateUserDefaultCollectionAccess() throws InterruptedException, ExecutionE @Test void authenticationFailPassword() throws InterruptedException { - final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().password("no").jwt(null).build(); + final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .password("no").jwt(null).build(); try { arangoDB.getVersion().get(); fail(); @@ -424,7 +431,9 @@ void authenticationFailPassword() throws InterruptedException { @Test void authenticationFailUser() throws InterruptedException { - final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().user("no").jwt(null).build(); + final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .user("no").jwt(null).build(); try { arangoDB.getVersion().get(); fail(); @@ -446,7 +455,9 @@ void execute() throws InterruptedException, ExecutionException { @Test void execute_acquireHostList_enabled() throws InterruptedException, ExecutionException { - final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().acquireHostList(true).build(); + final ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .acquireHostList(true).build(); arangoDB .execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")) .whenComplete((response, ex) -> { diff --git a/driver/src/test/java/com/arangodb/async/BaseTest.java b/driver/src/test/java/com/arangodb/async/BaseTest.java index 520fe6aa0..354e689f8 100644 --- a/driver/src/test/java/com/arangodb/async/BaseTest.java +++ b/driver/src/test/java/com/arangodb/async/BaseTest.java @@ -24,6 +24,7 @@ import com.arangodb.entity.ArangoDBEngine; import com.arangodb.entity.License; import com.arangodb.entity.ServerRole; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.util.TestUtils; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -44,7 +45,9 @@ public abstract class BaseTest { @BeforeAll static void init() throws InterruptedException, ExecutionException { if (arangoDB == null) { - arangoDB = new ArangoDBAsync.Builder().build(); + arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); } if (arangoDB.db(TEST_DB).exists().get()) { diff --git a/driver/src/test/java/com/arangodb/async/ConcurrencyTests.java b/driver/src/test/java/com/arangodb/async/ConcurrencyTests.java index e01a76156..504c550a7 100644 --- a/driver/src/test/java/com/arangodb/async/ConcurrencyTests.java +++ b/driver/src/test/java/com/arangodb/async/ConcurrencyTests.java @@ -1,6 +1,7 @@ package com.arangodb.async; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.api.Test; import java.util.List; @@ -13,7 +14,9 @@ class ConcurrencyTests { @Test void concurrentPendingRequests() throws ExecutionException, InterruptedException { - ArangoDBAsync adb = new ArangoDBAsync.Builder().build(); + ArangoDBAsync adb = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); List>> reqs = IntStream.range(0, 10) .mapToObj(__ -> adb.db().query("RETURN SLEEP(1)", Void.class)) .collect(Collectors.toList()); diff --git a/driver/src/test/java/com/arangodb/async/JwtAuthTest.java b/driver/src/test/java/com/arangodb/async/JwtAuthTest.java index 5750e7ecf..e0c8717cc 100644 --- a/driver/src/test/java/com/arangodb/async/JwtAuthTest.java +++ b/driver/src/test/java/com/arangodb/async/JwtAuthTest.java @@ -3,6 +3,7 @@ import com.arangodb.ArangoDB; import com.arangodb.ArangoDBException; import com.arangodb.DbName; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.serde.ArangoSerde; import com.arangodb.Request; import com.arangodb.RequestType; @@ -26,7 +27,9 @@ class JwtAuthTest { @BeforeAll static void init() { - ArangoDB arangoDB = new ArangoDB.Builder().build(); + ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); jwt = getJwt(arangoDB); arangoDB.shutdown(); } @@ -96,7 +99,7 @@ void updateJwt() throws ExecutionException, InterruptedException { private ArangoDBAsync.Builder getBuilder() { return new ArangoDBAsync.Builder() - + .loadProperties(new FileConfigPropertiesProvider()) .jwt(null) // unset credentials from properties file .user(null) // unset credentials from properties file .password(null); // unset credentials from properties file diff --git a/driver/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsecTest.java b/driver/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsecTest.java index d6c8ebccd..5a3d0ddad 100644 --- a/driver/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsecTest.java +++ b/driver/src/test/java/com/arangodb/async/debug/ConsolidationIntervalMsecTest.java @@ -29,6 +29,7 @@ import com.arangodb.entity.arangosearch.ArangoSearchPropertiesEntity; import com.arangodb.entity.arangosearch.CollectionLink; import com.arangodb.entity.arangosearch.FieldLink; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.arangosearch.ArangoSearchCreateOptions; import org.junit.jupiter.api.Test; @@ -49,6 +50,7 @@ void consolidationIntervalMsec() throws ExecutionException, InterruptedException assumeTrue(isAtLeastVersion(3, 4)); ArangoDBAsync arango = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) .user("root") .password("test") .build(); diff --git a/driver/src/test/java/com/arangodb/async/example/ExampleBase.java b/driver/src/test/java/com/arangodb/async/example/ExampleBase.java index 22ca7f7a8..9c1ce81e2 100644 --- a/driver/src/test/java/com/arangodb/async/example/ExampleBase.java +++ b/driver/src/test/java/com/arangodb/async/example/ExampleBase.java @@ -24,6 +24,7 @@ import com.arangodb.async.ArangoCollectionAsync; import com.arangodb.async.ArangoDBAsync; import com.arangodb.async.ArangoDatabaseAsync; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -42,7 +43,9 @@ public class ExampleBase { @BeforeAll static void setUp() throws InterruptedException, ExecutionException { - arangoDB = new ArangoDBAsync.Builder().build(); + arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); if (arangoDB.db(DB_NAME).exists().get()) { arangoDB.db(DB_NAME).drop().get(); } diff --git a/driver/src/test/java/com/arangodb/async/example/graph/AQLActorsAndMoviesExampleTest.java b/driver/src/test/java/com/arangodb/async/example/graph/AQLActorsAndMoviesExampleTest.java index f619b5c40..259cc4451 100644 --- a/driver/src/test/java/com/arangodb/async/example/graph/AQLActorsAndMoviesExampleTest.java +++ b/driver/src/test/java/com/arangodb/async/example/graph/AQLActorsAndMoviesExampleTest.java @@ -29,6 +29,7 @@ import com.arangodb.entity.BaseEdgeDocument; import com.arangodb.entity.CollectionType; import com.arangodb.entity.DocumentCreateEntity; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.CollectionCreateOptions; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -57,7 +58,9 @@ class AQLActorsAndMoviesExampleTest { @BeforeAll static void setUp() throws InterruptedException, ExecutionException { - arangoDB = new ArangoDBAsync.Builder().build(); + arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); if (arangoDB.db(TEST_DB).exists().get()) { arangoDB.db(TEST_DB).drop().get(); } diff --git a/driver/src/test/java/com/arangodb/async/example/graph/BaseGraphTest.java b/driver/src/test/java/com/arangodb/async/example/graph/BaseGraphTest.java index 7e3c7a190..8a16b9231 100644 --- a/driver/src/test/java/com/arangodb/async/example/graph/BaseGraphTest.java +++ b/driver/src/test/java/com/arangodb/async/example/graph/BaseGraphTest.java @@ -25,6 +25,7 @@ import com.arangodb.async.ArangoDatabaseAsync; import com.arangodb.entity.EdgeDefinition; import com.arangodb.entity.VertexEntity; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -47,7 +48,9 @@ public abstract class BaseGraphTest { @BeforeAll static void init() throws InterruptedException, ExecutionException { if (arangoDB == null) { - arangoDB = new ArangoDBAsync.Builder().build(); + arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); } if (arangoDB.db(TEST_DB).exists().get()) { arangoDB.db(TEST_DB).drop().get(); diff --git a/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java b/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java index 270a15872..1b8e71a97 100644 --- a/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java +++ b/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java @@ -25,6 +25,7 @@ import com.arangodb.async.ArangoCollectionAsync; import com.arangodb.async.ArangoDBAsync; import com.arangodb.async.ArangoDatabaseAsync; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.DocumentCreateOptions; import com.arangodb.ContentType; import com.arangodb.serde.JacksonSerde; @@ -61,7 +62,9 @@ void init() throws ExecutionException, InterruptedException { mapper.configure(WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED, true); mapper.configure(USE_BIG_INTEGER_FOR_INTS, true); }); - ArangoDBAsync arangoDB = new ArangoDBAsync.Builder().serializer(serde).build(); + ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .serializer(serde).build(); DbName TEST_DB = DbName.of("custom-serde-test"); db = arangoDB.db(TEST_DB); diff --git a/driver/src/test/java/com/arangodb/example/ExampleBase.java b/driver/src/test/java/com/arangodb/example/ExampleBase.java index 77a2bfce1..c99610836 100644 --- a/driver/src/test/java/com/arangodb/example/ExampleBase.java +++ b/driver/src/test/java/com/arangodb/example/ExampleBase.java @@ -24,6 +24,7 @@ import com.arangodb.ArangoDB; import com.arangodb.ArangoDatabase; import com.arangodb.DbName; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -40,7 +41,9 @@ public class ExampleBase { @BeforeAll static void setUp() { - arangoDB = new ArangoDB.Builder().build(); + arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); DbName dbName = DbName.of(DB_NAME); if (arangoDB.db(dbName).exists()) arangoDB.db(dbName).drop(); diff --git a/driver/src/test/java/com/arangodb/example/graph/AQLActorsAndMoviesExampleTest.java b/driver/src/test/java/com/arangodb/example/graph/AQLActorsAndMoviesExampleTest.java index b7208f6a1..682bed1b1 100644 --- a/driver/src/test/java/com/arangodb/example/graph/AQLActorsAndMoviesExampleTest.java +++ b/driver/src/test/java/com/arangodb/example/graph/AQLActorsAndMoviesExampleTest.java @@ -25,6 +25,7 @@ import com.arangodb.entity.BaseEdgeDocument; import com.arangodb.entity.CollectionType; import com.arangodb.entity.DocumentCreateEntity; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.CollectionCreateOptions; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -51,7 +52,9 @@ class AQLActorsAndMoviesExampleTest { @BeforeAll static void setUp() { - arangoDB = new ArangoDB.Builder().build(); + arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); if (arangoDB.db(TEST_DB).exists()) arangoDB.db(TEST_DB).drop(); arangoDB.createDatabase(TEST_DB); diff --git a/driver/src/test/java/com/arangodb/example/graph/BaseGraphTest.java b/driver/src/test/java/com/arangodb/example/graph/BaseGraphTest.java index d9f5e811b..514af943f 100644 --- a/driver/src/test/java/com/arangodb/example/graph/BaseGraphTest.java +++ b/driver/src/test/java/com/arangodb/example/graph/BaseGraphTest.java @@ -26,6 +26,7 @@ import com.arangodb.DbName; import com.arangodb.entity.EdgeDefinition; import com.arangodb.entity.VertexEntity; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -47,7 +48,9 @@ abstract class BaseGraphTest { @BeforeAll static void init() { if (arangoDB == null) { - arangoDB = new ArangoDB.Builder().build(); + arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); } if (arangoDB.db(TEST_DB).exists()) arangoDB.db(TEST_DB).drop(); diff --git a/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java b/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java index d08c1e4b0..bfdeb444a 100644 --- a/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java +++ b/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java @@ -23,6 +23,7 @@ import com.arangodb.ArangoDB; import com.arangodb.ArangoDatabase; import com.arangodb.entity.ArangoDBVersion; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import org.junit.jupiter.api.Test; import java.util.Collection; @@ -41,14 +42,18 @@ class CommunicationTest { @Test void chunkSizeSmall() { - final ArangoDB arangoDB = new ArangoDB.Builder().chunksize(20).build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .chunksize(20).build(); final ArangoDBVersion version = arangoDB.getVersion(); assertThat(version).isNotNull(); } @Test void multiThread() throws Exception { - final ArangoDB arangoDB = new ArangoDB.Builder().build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); arangoDB.getUsers(); // authentication and active-failover connection redirect to master final Collection result = new ConcurrentLinkedQueue<>(); @@ -74,7 +79,9 @@ void multiThread() throws Exception { @Test void multiThreadSameDatabases() throws Exception { - final ArangoDB arangoDB = new ArangoDB.Builder().build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); arangoDB.getUsers(); // authentication and active-failover connection redirect to master final ArangoDatabase db = arangoDB.db(); @@ -97,14 +104,18 @@ void multiThreadSameDatabases() throws Exception { @Test void minOneConnection() { - final ArangoDB arangoDB = new ArangoDB.Builder().maxConnections(0).build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .maxConnections(0).build(); final ArangoDBVersion version = arangoDB.getVersion(); assertThat(version).isNotNull(); } @Test void defaultMaxConnection() { - final ArangoDB arangoDB = new ArangoDB.Builder().maxConnections(null).build(); + final ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .maxConnections(null).build(); final ArangoDBVersion version = arangoDB.getVersion(); assertThat(version).isNotNull(); } diff --git a/driver/src/test/java/com/arangodb/serde/CustomSerdeTest.java b/driver/src/test/java/com/arangodb/serde/CustomSerdeTest.java index c80665c1f..249d7fcca 100644 --- a/driver/src/test/java/com/arangodb/serde/CustomSerdeTest.java +++ b/driver/src/test/java/com/arangodb/serde/CustomSerdeTest.java @@ -22,6 +22,7 @@ import com.arangodb.*; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.model.DocumentCreateOptions; import com.fasterxml.jackson.core.JsonGenerator; @@ -69,6 +70,7 @@ static void init() { mapper.registerModule(module); }); arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) .useProtocol(Protocol.VST) .serializer(serde).build(); diff --git a/driver/src/test/java/com/arangodb/serde/CustomTypeHintTest.java b/driver/src/test/java/com/arangodb/serde/CustomTypeHintTest.java index cf3569bd6..2de790a5e 100644 --- a/driver/src/test/java/com/arangodb/serde/CustomTypeHintTest.java +++ b/driver/src/test/java/com/arangodb/serde/CustomTypeHintTest.java @@ -26,6 +26,7 @@ import com.arangodb.ArangoDatabase; import com.arangodb.DbName; import com.arangodb.entity.Key; +import com.arangodb.internal.config.FileConfigPropertiesProvider; import com.arangodb.model.DocumentCreateOptions; import com.fasterxml.jackson.annotation.JsonTypeInfo; import org.junit.jupiter.api.AfterEach; @@ -46,7 +47,9 @@ class CustomTypeHintTest { @BeforeEach void init() { - ArangoDB arangoDB = new ArangoDB.Builder().build(); + ArangoDB arangoDB = new ArangoDB.Builder() + .loadProperties(new FileConfigPropertiesProvider()) + .build(); db = arangoDB.db(DbName.of("custom-serde-test")); if (!db.exists()) {