diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
index 963bbd257ed1..7c4b7f83b48e 100755
--- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
+++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
@@ -1836,7 +1836,7 @@
-
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/GatewayConnectionConfig.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/GatewayConnectionConfig.java
index 5dcfc2d1be6d..7be90be45a44 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/GatewayConnectionConfig.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/GatewayConnectionConfig.java
@@ -3,7 +3,8 @@
package com.azure.cosmos;
-import java.net.InetSocketAddress;
+import com.azure.core.http.ProxyOptions;
+
import java.time.Duration;
/**
@@ -18,7 +19,7 @@ public final class GatewayConnectionConfig {
private Duration requestTimeout;
private int maxConnectionPoolSize;
private Duration idleConnectionTimeout;
- private InetSocketAddress inetSocketProxyAddress;
+ private ProxyOptions proxy;
/**
* Constructor.
@@ -103,12 +104,12 @@ public GatewayConnectionConfig setIdleConnectionTimeout(Duration idleConnectionT
}
/**
- * Gets the InetSocketAddress of proxy server.
+ * Gets the proxy options which contain the InetSocketAddress of proxy server.
*
- * @return the value of proxyHost.
+ * @return the proxy options.
*/
- public InetSocketAddress getProxy() {
- return this.inetSocketProxyAddress;
+ public ProxyOptions getProxy() {
+ return this.proxy;
}
/**
@@ -119,18 +120,26 @@ public InetSocketAddress getProxy() {
* @return the {@link GatewayConnectionConfig}.
*/
- public GatewayConnectionConfig setProxy(InetSocketAddress proxy) {
- this.inetSocketProxyAddress = proxy;
+ public GatewayConnectionConfig setProxy(ProxyOptions proxy) {
+ if (proxy.getType() != ProxyOptions.Type.HTTP) {
+ throw new IllegalArgumentException("Only http proxy type is supported.");
+ }
+
+ this.proxy = proxy;
return this;
}
@Override
public String toString() {
+ String proxyType = proxy != null ? proxy.getType().toString() : null;
+ String proxyAddress = proxy != null ? proxy.getAddress().toString() : null;
+
return "GatewayConnectionConfig{" +
"requestTimeout=" + requestTimeout +
", maxConnectionPoolSize=" + maxConnectionPoolSize +
", idleConnectionTimeout=" + idleConnectionTimeout +
- ", inetSocketProxyAddress=" + inetSocketProxyAddress +
+ ", proxyType=" + proxyType +
+ ", inetSocketProxyAddress=" + proxyAddress +
'}';
}
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java
index d4154305eb64..097943296d7b 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java
@@ -3,12 +3,12 @@
package com.azure.cosmos.implementation;
+import com.azure.core.http.ProxyOptions;
import com.azure.cosmos.ConnectionMode;
import com.azure.cosmos.DirectConnectionConfig;
import com.azure.cosmos.GatewayConnectionConfig;
import com.azure.cosmos.ThrottlingRetryOptions;
-import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
@@ -37,7 +37,7 @@ public final class ConnectionPolicy {
private int maxConnectionPoolSize = DEFAULT_MAX_POOL_SIZE;
private Duration requestTimeout = DEFAULT_REQUEST_TIMEOUT;
private Duration idleConnectionTimeout = DEFAULT_IDLE_CONNECTION_TIMEOUT;
- private InetSocketAddress inetSocketProxyAddress;
+ private ProxyOptions proxy;
// Direct connection config properties
private Duration connectionTimeout;
@@ -54,7 +54,7 @@ public ConnectionPolicy(GatewayConnectionConfig gatewayConnectionConfig) {
this.idleConnectionTimeout = gatewayConnectionConfig.getIdleConnectionTimeout();
this.maxConnectionPoolSize = gatewayConnectionConfig.getMaxConnectionPoolSize();
this.requestTimeout = gatewayConnectionConfig.getRequestTimeout();
- this.inetSocketProxyAddress = gatewayConnectionConfig.getProxy();
+ this.proxy = gatewayConnectionConfig.getProxy();
}
public ConnectionPolicy(DirectConnectionConfig directConnectionConfig) {
@@ -350,12 +350,12 @@ public ConnectionPolicy setPreferredRegions(List preferredRegions) {
}
/**
- * Gets the InetSocketAddress of proxy server.
+ * Gets the proxy options which contain the InetSocketAddress of proxy server.
*
- * @return the value of proxyHost.
+ * @return the proxy options.
*/
- public InetSocketAddress getProxy() {
- return this.inetSocketProxyAddress;
+ public ProxyOptions getProxy() {
+ return this.proxy;
}
/**
@@ -366,8 +366,8 @@ public InetSocketAddress getProxy() {
* @return the ConnectionPolicy.
*/
- public ConnectionPolicy setProxy(InetSocketAddress proxy) {
- this.inetSocketProxyAddress = proxy;
+ public ConnectionPolicy setProxy(ProxyOptions proxy) {
+ this.proxy = proxy;
return this;
}
@@ -473,7 +473,8 @@ public String toString() {
", endpointDiscoveryEnabled=" + endpointDiscoveryEnabled +
", preferredRegions=" + preferredRegions +
", multipleWriteRegionsEnabled=" + multipleWriteRegionsEnabled +
- ", inetSocketProxyAddress=" + inetSocketProxyAddress +
+ ", proxyType=" + proxy.getType() +
+ ", inetSocketProxyAddress=" + proxy.getAddress() +
", readRequestsFallbackEnabled=" + readRequestsFallbackEnabled +
", connectionTimeout=" + connectionTimeout +
", idleChannelTimeout=" + idleChannelTimeout +
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java
index 0b6eb7cdfdf9..f92550947945 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java
@@ -359,7 +359,7 @@ private HttpClient httpClient() {
HttpClientConfig httpClientConfig = new HttpClientConfig(this.configs)
.withMaxIdleConnectionTimeout(this.connectionPolicy.getIdleConnectionTimeout())
.withPoolSize(this.connectionPolicy.getMaxConnectionPoolSize())
- .withHttpProxy(this.connectionPolicy.getProxy())
+ .withProxy(this.connectionPolicy.getProxy())
.withRequestTimeout(this.connectionPolicy.getRequestTimeout());
if (connectionSharingAcrossClientsEnabled) {
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/HttpClientConfig.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/HttpClientConfig.java
index f1c646485494..2eb3dd9537c6 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/HttpClientConfig.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/HttpClientConfig.java
@@ -3,9 +3,9 @@
package com.azure.cosmos.implementation.http;
+import com.azure.core.http.ProxyOptions;
import com.azure.cosmos.implementation.Configs;
-import java.net.InetSocketAddress;
import java.time.Duration;
/**
@@ -18,7 +18,7 @@ public class HttpClientConfig {
private Integer maxPoolSize;
private Duration maxIdleConnectionTimeout;
private Duration requestTimeout;
- private InetSocketAddress proxy;
+ private ProxyOptions proxy;
private boolean connectionKeepAlive = true;
public HttpClientConfig(Configs configs) {
@@ -30,7 +30,7 @@ public HttpClientConfig withPoolSize(int maxPoolSize) {
return this;
}
- public HttpClientConfig withHttpProxy(InetSocketAddress proxy) {
+ public HttpClientConfig withProxy(ProxyOptions proxy) {
this.proxy = proxy;
return this;
}
@@ -66,7 +66,7 @@ public Duration getRequestTimeout() {
return requestTimeout;
}
- public InetSocketAddress getProxy() {
+ public ProxyOptions getProxy() {
return proxy;
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java
index 4cbcb58fd28b..b63fff78dab8 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java
@@ -70,7 +70,7 @@ private void configureChannelPipelineHandlers() {
if (this.httpClientConfig.getProxy() != null) {
tcpClient =
- tcpClient.proxy(typeSpec -> typeSpec.type(ProxyProvider.Proxy.HTTP).address(this.httpClientConfig.getProxy()));
+ tcpClient.proxy(typeSpec -> typeSpec.type(ProxyProvider.Proxy.HTTP).address(this.httpClientConfig.getProxy().getAddress()));
}
tcpClient =
tcpClient.secure(sslContextSpec -> sslContextSpec.sslContext(configs.getSslContext()));
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/models/CosmosPartitionKeyTests.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/models/CosmosPartitionKeyTests.java
index d30a3e6c082a..eae00feb5ad9 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/models/CosmosPartitionKeyTests.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/models/CosmosPartitionKeyTests.java
@@ -80,7 +80,7 @@ private void createContainerWithoutPk() throws URISyntaxException, IOException {
HttpClientConfig httpClientConfig = new HttpClientConfig(new Configs())
.withMaxIdleConnectionTimeout(connectionPolicy.getIdleConnectionTimeout())
.withPoolSize(connectionPolicy.getMaxConnectionPoolSize())
- .withHttpProxy(connectionPolicy.getProxy())
+ .withProxy(connectionPolicy.getProxy())
.withRequestTimeout(connectionPolicy.getRequestTimeout());
HttpClient httpClient = HttpClient.createFixed(httpClientConfig);
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/ProxyHostTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/ProxyHostTest.java
index 8330807a6fa2..24c27af61bd2 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/ProxyHostTest.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/ProxyHostTest.java
@@ -2,16 +2,17 @@
// Licensed under the MIT License.
package com.azure.cosmos.rx;
-import com.azure.cosmos.GatewayConnectionConfig;
+import com.azure.core.http.ProxyOptions;
import com.azure.cosmos.ConsistencyLevel;
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosAsyncContainer;
import com.azure.cosmos.CosmosAsyncDatabase;
-import com.azure.cosmos.models.CosmosItemResponse;
import com.azure.cosmos.CosmosClientBuilder;
+import com.azure.cosmos.GatewayConnectionConfig;
import com.azure.cosmos.implementation.CosmosItemProperties;
-import com.azure.cosmos.models.CosmosItemRequestOptions;
import com.azure.cosmos.implementation.TestConfigurations;
+import com.azure.cosmos.models.CosmosItemRequestOptions;
+import com.azure.cosmos.models.CosmosItemResponse;
import com.azure.cosmos.rx.proxy.HttpProxyServer;
import org.apache.logging.log4j.Level;
import org.testng.annotations.AfterClass;
@@ -70,7 +71,7 @@ public void createDocumentWithValidHttpProxy() throws Exception {
CosmosAsyncClient clientWithRightProxy = null;
try {
GatewayConnectionConfig gatewayConnectionConfig = new GatewayConnectionConfig();
- gatewayConnectionConfig.setProxy(new InetSocketAddress(PROXY_HOST, PROXY_PORT));
+ gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT)));
clientWithRightProxy = new CosmosClientBuilder().endpoint(TestConfigurations.HOST)
.key(TestConfigurations.MASTER_KEY)
.gatewayMode(gatewayConnectionConfig)
@@ -106,7 +107,7 @@ public void createDocumentWithValidHttpProxyWithNettyWireLogging() throws Except
"ProxyStringAppender", consoleWriter);
GatewayConnectionConfig gatewayConnectionConfig = new GatewayConnectionConfig();
- gatewayConnectionConfig.setProxy(new InetSocketAddress(PROXY_HOST, PROXY_PORT));
+ gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT)));
clientWithRightProxy = new CosmosClientBuilder().endpoint(TestConfigurations.HOST)
.key(TestConfigurations.MASTER_KEY)
.gatewayMode(gatewayConnectionConfig)
@@ -155,4 +156,16 @@ private CosmosItemProperties getDocumentDefinition() {
, uuid, uuid));
return doc;
}
+
+ /**
+ * This test will try to create gateway connection policy via non http proxy.
+ *
+ */
+ @Test(groups = { "simple" }, timeOut = TIMEOUT,
+ expectedExceptions = IllegalArgumentException.class,
+ expectedExceptionsMessageRegExp = "Only http proxy type is supported.")
+ public void createWithNonHttpProxy() {
+ GatewayConnectionConfig gatewayConnectionConfig = new GatewayConnectionConfig();
+ gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.SOCKS4, new InetSocketAddress(PROXY_HOST, PROXY_PORT)));
+ }
}