diff --git a/sdk-actors/src/test/java/io/dapr/client/DaprHttpProxy.java b/sdk-actors/src/test/java/io/dapr/client/DaprHttpProxy.java index 6381b1641..a1c263dd9 100644 --- a/sdk-actors/src/test/java/io/dapr/client/DaprHttpProxy.java +++ b/sdk-actors/src/test/java/io/dapr/client/DaprHttpProxy.java @@ -17,8 +17,8 @@ import okhttp3.OkHttpClient; public class DaprHttpProxy extends io.dapr.client.DaprHttp { - public DaprHttpProxy(String hostname, int port, OkHttpClient httpClient) { - super(hostname, port, httpClient); + public DaprHttpProxy(String hostname, int port, String daprApiToken, OkHttpClient httpClient) { + super(hostname, port, daprApiToken, httpClient); } } diff --git a/sdk-tests/src/test/java/io/dapr/it/methodinvoke/grpc/MethodInvokeIT.java b/sdk-tests/src/test/java/io/dapr/it/methodinvoke/grpc/MethodInvokeIT.java index a4d9dd835..d5bb45669 100644 --- a/sdk-tests/src/test/java/io/dapr/it/methodinvoke/grpc/MethodInvokeIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/methodinvoke/grpc/MethodInvokeIT.java @@ -91,8 +91,8 @@ public class MethodInvokeIT extends BaseIT { String message = assertThrows(StatusRuntimeException.class, () -> stub.sleep(req)).getMessage(); long delay = System.currentTimeMillis() - started; assertTrue(delay >= TIMEOUT_MS, "Delay: " + delay + " is not greater than timeout: " + TIMEOUT_MS); - assertTrue(message.contains("DEADLINE_EXCEEDED")); - assertTrue(message.contains("CallOptions deadline exceeded after")); + assertTrue(message.contains("DEADLINE_EXCEEDED"), "The message contains DEADLINE_EXCEEDED: " + message); + assertTrue(message.contains("CallOptions deadline exceeded after"), "The message contains DEADLINE_EXCEEDED: " + message); } } diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/client/DaprWorkflowClient.java b/sdk-workflows/src/main/java/io/dapr/workflows/client/DaprWorkflowClient.java index 784f86434..517cd06ad 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/client/DaprWorkflowClient.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/client/DaprWorkflowClient.java @@ -49,7 +49,7 @@ public class DaprWorkflowClient implements AutoCloseable { * Public constructor for DaprWorkflowClient. This layer constructs the GRPC Channel. */ public DaprWorkflowClient() { - this(NetworkUtils.buildGrpcManagedChannel(WORKFLOW_INTERCEPTOR)); + this(NetworkUtils.buildGrpcManagedChannel(new Properties(), WORKFLOW_INTERCEPTOR)); } /** diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java index 05c9adb26..e3955924b 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/WorkflowRuntimeBuilder.java @@ -14,6 +14,7 @@ limitations under the License. package io.dapr.workflows.runtime; import com.microsoft.durabletask.DurableTaskGrpcWorkerBuilder; +import io.dapr.config.Properties; import io.dapr.utils.NetworkUtils; import io.dapr.workflows.Workflow; import io.dapr.workflows.internal.ApiTokenClientInterceptor; @@ -38,15 +39,20 @@ public class WorkflowRuntimeBuilder { * Constructs the WorkflowRuntimeBuilder. */ public WorkflowRuntimeBuilder() { - this(LoggerFactory.getLogger(WorkflowRuntimeBuilder.class)); + this(new Properties(), LoggerFactory.getLogger(WorkflowRuntimeBuilder.class)); } - WorkflowRuntimeBuilder(Logger logger) { + public WorkflowRuntimeBuilder(Logger logger) { + this(new Properties(), logger); + } + + WorkflowRuntimeBuilder(Properties properties, Logger logger) { this.builder = new DurableTaskGrpcWorkerBuilder().grpcChannel( - NetworkUtils.buildGrpcManagedChannel(WORKFLOW_INTERCEPTOR)); + NetworkUtils.buildGrpcManagedChannel(properties, WORKFLOW_INTERCEPTOR)); this.logger = logger; } + /** * Returns a WorkflowRuntime object. * diff --git a/sdk/src/main/java/io/dapr/client/DaprClientBuilder.java b/sdk/src/main/java/io/dapr/client/DaprClientBuilder.java index f57f122d2..a31276b9d 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClientBuilder.java +++ b/sdk/src/main/java/io/dapr/client/DaprClientBuilder.java @@ -14,18 +14,25 @@ limitations under the License. package io.dapr.client; import io.dapr.client.resiliency.ResiliencyOptions; +import io.dapr.config.Properties; +import io.dapr.config.Property; import io.dapr.serializer.DaprObjectSerializer; import io.dapr.serializer.DefaultObjectSerializer; import io.dapr.utils.NetworkUtils; import io.dapr.v1.DaprGrpc; import io.grpc.ManagedChannel; +import java.util.HashMap; +import java.util.Map; + /** * A builder for the DaprClient, * Currently only gRPC and HTTP Client will be supported. */ public class DaprClientBuilder { + private final Map propertyOverrides = new HashMap<>(); + /** * Builder for Dapr's HTTP Client. */ @@ -105,6 +112,17 @@ public class DaprClientBuilder { return this; } + /** + * Allow to set up properties override for static properties. + * @param property that we want to override + * @param value the value of such property + * @return an instance of the setup Client + */ + public DaprClientBuilder withPropertyOverride(Property property, String value) { + this.propertyOverrides.put(property.getName(), value); + return this; + } + /** * Build an instance of the Client based on the provided setup. * @@ -132,8 +150,9 @@ public class DaprClientBuilder { * @throws java.lang.IllegalStateException if either host is missing or if port is missing or a negative number. */ private DaprClientImpl buildDaprClient() { - final ManagedChannel channel = NetworkUtils.buildGrpcManagedChannel(); - final DaprHttp daprHttp = this.daprHttpBuilder.build(); + final Properties properties = new Properties(this.propertyOverrides); + final ManagedChannel channel = NetworkUtils.buildGrpcManagedChannel(properties); + final DaprHttp daprHttp = this.daprHttpBuilder.build(properties); final GrpcChannelFacade channelFacade = new GrpcChannelFacade(channel); DaprGrpc.DaprStub asyncStub = DaprGrpc.newStub(channel); return new DaprClientImpl( diff --git a/sdk/src/main/java/io/dapr/client/DaprHttp.java b/sdk/src/main/java/io/dapr/client/DaprHttp.java index 05da6efd5..54b64bd77 100644 --- a/sdk/src/main/java/io/dapr/client/DaprHttp.java +++ b/sdk/src/main/java/io/dapr/client/DaprHttp.java @@ -151,6 +151,11 @@ public class DaprHttp implements AutoCloseable { */ private final OkHttpClient httpClient; + /** + * Dapr API Token required to interact with DAPR APIs. + */ + private final String daprApiToken; + /** * Creates a new instance of {@link DaprHttp}. * @@ -158,9 +163,10 @@ public class DaprHttp implements AutoCloseable { * @param port Port for calling Dapr. (e.g. 3500) * @param httpClient RestClient used for all API calls in this new instance. */ - DaprHttp(String hostname, int port, OkHttpClient httpClient) { + DaprHttp(String hostname, int port, String daprApiToken, OkHttpClient httpClient) { this.uri = URI.create(DEFAULT_HTTP_SCHEME + "://" + hostname + ":" + port); this.httpClient = httpClient; + this.daprApiToken = daprApiToken; } /** @@ -169,9 +175,10 @@ public class DaprHttp implements AutoCloseable { * @param uri Endpoint for calling Dapr. (e.g. "https://my-dapr-api.company.com") * @param httpClient RestClient used for all API calls in this new instance. */ - DaprHttp(String uri, OkHttpClient httpClient) { + DaprHttp(String uri, String daprApiToken, OkHttpClient httpClient) { this.uri = URI.create(uri); this.httpClient = httpClient; + this.daprApiToken = daprApiToken; } /** @@ -314,7 +321,6 @@ public class DaprHttp implements AutoCloseable { requestBuilder.method(method, body); } - String daprApiToken = Properties.API_TOKEN.get(); if (daprApiToken != null) { requestBuilder.addHeader(Headers.DAPR_API_TOKEN, daprApiToken); } diff --git a/sdk/src/main/java/io/dapr/client/DaprHttpBuilder.java b/sdk/src/main/java/io/dapr/client/DaprHttpBuilder.java index e33b2e698..8ef163dd9 100644 --- a/sdk/src/main/java/io/dapr/client/DaprHttpBuilder.java +++ b/sdk/src/main/java/io/dapr/client/DaprHttpBuilder.java @@ -21,6 +21,14 @@ import okhttp3.OkHttpClient; import java.time.Duration; import java.util.concurrent.TimeUnit; +import static io.dapr.config.Properties.API_TOKEN; +import static io.dapr.config.Properties.HTTP_CLIENT_MAX_IDLE_CONNECTIONS; +import static io.dapr.config.Properties.HTTP_CLIENT_MAX_REQUESTS; +import static io.dapr.config.Properties.HTTP_CLIENT_READ_TIMEOUT_SECONDS; +import static io.dapr.config.Properties.HTTP_ENDPOINT; +import static io.dapr.config.Properties.HTTP_PORT; +import static io.dapr.config.Properties.SIDECAR_IP; + /** * A builder for the DaprHttp. */ @@ -43,38 +51,39 @@ public class DaprHttpBuilder { */ private static final int KEEP_ALIVE_DURATION = 30; + /** * Build an instance of the Http client based on the provided setup. - * + * @param properties to configure the DaprHttp client * @return an instance of {@link DaprHttp} * @throws IllegalStateException if any required field is missing */ - public DaprHttp build() { - return buildDaprHttp(); + public DaprHttp build(Properties properties) { + return buildDaprHttp(properties); } /** * Creates an instance of the HTTP Client. - * + * @param properties to configure the DaprHttp client * @return Instance of {@link DaprHttp} */ - private DaprHttp buildDaprHttp() { + private DaprHttp buildDaprHttp(Properties properties) { if (OK_HTTP_CLIENT == null) { synchronized (LOCK) { if (OK_HTTP_CLIENT == null) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); - Duration readTimeout = Duration.ofSeconds(Properties.HTTP_CLIENT_READ_TIMEOUT_SECONDS.get()); + Duration readTimeout = Duration.ofSeconds(properties.getValue(HTTP_CLIENT_READ_TIMEOUT_SECONDS)); builder.readTimeout(readTimeout); Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequests(Properties.HTTP_CLIENT_MAX_REQUESTS.get()); + dispatcher.setMaxRequests(properties.getValue(HTTP_CLIENT_MAX_REQUESTS)); // The maximum number of requests for each host to execute concurrently. // Default value is 5 in okhttp which is totally UNACCEPTABLE! // For sidecar case, set it the same as maxRequests. - dispatcher.setMaxRequestsPerHost(Properties.HTTP_CLIENT_MAX_REQUESTS.get()); + dispatcher.setMaxRequestsPerHost(HTTP_CLIENT_MAX_REQUESTS.get()); builder.dispatcher(dispatcher); - ConnectionPool pool = new ConnectionPool(Properties.HTTP_CLIENT_MAX_IDLE_CONNECTIONS.get(), + ConnectionPool pool = new ConnectionPool(properties.getValue(HTTP_CLIENT_MAX_IDLE_CONNECTIONS), KEEP_ALIVE_DURATION, TimeUnit.SECONDS); builder.connectionPool(pool); @@ -83,11 +92,14 @@ public class DaprHttpBuilder { } } - String endpoint = Properties.HTTP_ENDPOINT.get(); + String endpoint = properties.getValue(HTTP_ENDPOINT); if ((endpoint != null) && !endpoint.isEmpty()) { - return new DaprHttp(endpoint, OK_HTTP_CLIENT); + return new DaprHttp(endpoint, properties.getValue(API_TOKEN), OK_HTTP_CLIENT); } - return new DaprHttp(Properties.SIDECAR_IP.get(), Properties.HTTP_PORT.get(), OK_HTTP_CLIENT); + return new DaprHttp(properties.getValue(SIDECAR_IP), properties.getValue(HTTP_PORT), properties.getValue(API_TOKEN), + OK_HTTP_CLIENT); + + } } diff --git a/sdk/src/main/java/io/dapr/config/Properties.java b/sdk/src/main/java/io/dapr/config/Properties.java index 27769c6cc..38a88b767 100644 --- a/sdk/src/main/java/io/dapr/config/Properties.java +++ b/sdk/src/main/java/io/dapr/config/Properties.java @@ -18,6 +18,8 @@ import io.dapr.utils.NetworkUtils; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Collections; +import java.util.Map; /** * Global properties for Dapr's SDK, using Supplier so they are dynamically resolved. @@ -172,4 +174,39 @@ public class Properties { "dapr.http.client.maxIdleConnections", "DAPR_HTTP_CLIENT_MAX_IDLE_CONNECTIONS", DEFAULT_HTTP_CLIENT_MAX_IDLE_CONNECTIONS); + + /** + * Mechanism to override properties set in a static context. + */ + private final Map overrides; + + /** + * Creates a new instance to handle Properties per instance. + */ + public Properties() { + this.overrides = null; + } + + /** + * Creates a new instance to handle Properties per instance. + * @param overrides to override static properties + */ + public Properties(Map overrides) { + this.overrides = Collections.unmodifiableMap(overrides); + } + + /** + * Gets a property value taking in consideration the override values. + * @param type of the property that we want to get the value from + * @param property to override static property value from overrides + * @return the property's value + */ + public T getValue(Property property) { + if (overrides != null) { + String override = overrides.get(property.getName()); + return property.get(override); + } else { + return property.get(); + } + } } diff --git a/sdk/src/main/java/io/dapr/config/Property.java b/sdk/src/main/java/io/dapr/config/Property.java index 6552aee38..f0e54f2e7 100644 --- a/sdk/src/main/java/io/dapr/config/Property.java +++ b/sdk/src/main/java/io/dapr/config/Property.java @@ -72,6 +72,24 @@ public abstract class Property { * @return Value from system property (1st) or env variable (2nd) or default (last). */ public T get() { + return this.get(null); + } + + /** + * Gets the value defined by system property first, then env variable or sticks to default. + * @param override overrides the property value + * @return Value from system property (1st) or env variable (2nd) or default (last). + */ + public T get(String override) { + if ((override != null) && !override.isEmpty()) { + try { + return this.parse(override); + } catch (IllegalArgumentException e) { + LOGGER.warning(String.format("Invalid override value in property: %s", this.name)); + // OK, we tried. Falling back to system environment variable. + } + } + String propValue = System.getProperty(this.name); if (propValue != null && !propValue.trim().isEmpty()) { try { diff --git a/sdk/src/main/java/io/dapr/utils/NetworkUtils.java b/sdk/src/main/java/io/dapr/utils/NetworkUtils.java index 815e6472e..6ce15782c 100644 --- a/sdk/src/main/java/io/dapr/utils/NetworkUtils.java +++ b/sdk/src/main/java/io/dapr/utils/NetworkUtils.java @@ -24,6 +24,11 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.util.regex.Pattern; +import static io.dapr.config.Properties.GRPC_ENDPOINT; +import static io.dapr.config.Properties.GRPC_PORT; +import static io.dapr.config.Properties.SIDECAR_IP; + + /** * Utility methods for network, internal to Dapr SDK. */ @@ -102,12 +107,12 @@ public final class NetworkUtils { /** * Creates a GRPC managed channel. - * + * @param properties instance to set up the GrpcEndpoint * @param interceptors Optional interceptors to add to the channel. * @return GRPC managed channel to communicate with the sidecar. */ - public static ManagedChannel buildGrpcManagedChannel(ClientInterceptor... interceptors) { - var settings = GrpcEndpointSettings.parse(); + public static ManagedChannel buildGrpcManagedChannel(Properties properties, ClientInterceptor... interceptors) { + var settings = GrpcEndpointSettings.parse(properties); ManagedChannelBuilder builder = ManagedChannelBuilder.forTarget(settings.endpoint) .userAgent(Version.getSdkVersion()); if (!settings.secure) { @@ -129,11 +134,11 @@ public final class NetworkUtils { this.secure = secure; } - static GrpcEndpointSettings parse() { - String address = Properties.SIDECAR_IP.get(); - int port = Properties.GRPC_PORT.get(); + static GrpcEndpointSettings parse(Properties properties) { + String address = properties.getValue(SIDECAR_IP); + int port = properties.getValue(GRPC_PORT); boolean secure = false; - String grpcEndpoint = Properties.GRPC_ENDPOINT.get(); + String grpcEndpoint = properties.getValue(GRPC_ENDPOINT); if ((grpcEndpoint != null) && !grpcEndpoint.isEmpty()) { var matcher = GRPC_ENDPOINT_PATTERN.matcher(grpcEndpoint); if (!matcher.matches()) { diff --git a/sdk/src/test/java/io/dapr/client/DaprClientBuilderTest.java b/sdk/src/test/java/io/dapr/client/DaprClientBuilderTest.java index bd94043bc..4a972a019 100644 --- a/sdk/src/test/java/io/dapr/client/DaprClientBuilderTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprClientBuilderTest.java @@ -13,11 +13,15 @@ limitations under the License. package io.dapr.client; +import io.dapr.config.Properties; +import io.dapr.exceptions.DaprErrorDetails; +import io.dapr.exceptions.DaprException; import io.dapr.serializer.DaprObjectSerializer; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -35,6 +39,18 @@ public class DaprClientBuilderTest { assertNotNull(daprClient); } + @Test + public void buildWithOverrideSidecarIP() { + + DaprClientBuilder daprClientBuilder = new DaprClientBuilder(); + daprClientBuilder.withPropertyOverride(Properties.SIDECAR_IP, "unknown-host"); + DaprClient daprClient = daprClientBuilder.build(); + assertNotNull(daprClient); + DaprException thrown = assertThrows(DaprException.class, () -> { daprClient.getMetadata().block(); }); + assertTrue(thrown.toString().contains("UNAVAILABLE")); + + } + @Test public void noObjectSerializer() { assertThrows(IllegalArgumentException.class, () -> { new DaprClientBuilder().withObjectSerializer(null);}); diff --git a/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java b/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java index 48b7cd0ac..fae617c69 100644 --- a/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java @@ -66,6 +66,8 @@ public class DaprClientHttpTest { private String sidecarIp; + private String daprApiToken; + private DaprClient daprClientHttp; private DaprHttp daprHttp; @@ -77,9 +79,10 @@ public class DaprClientHttpTest { @BeforeEach public void setUp() { sidecarIp = formatIpAddress(Properties.SIDECAR_IP.get()); + daprApiToken = Properties.API_TOKEN.get(); mockInterceptor = new MockInterceptor(Behavior.UNORDERED); okHttpClient = new OkHttpClient.Builder().addInterceptor(mockInterceptor).build(); - daprHttp = new DaprHttp(sidecarIp, 3000, okHttpClient); + daprHttp = new DaprHttp(sidecarIp, 3000, daprApiToken, okHttpClient); daprClientHttp = buildDaprClient(daprHttp); } @@ -97,7 +100,7 @@ public class DaprClientHttpTest { @Test public void waitForSidecarTimeOutHealthCheck() throws Exception { - daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3000, okHttpClient); + daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3000, daprApiToken, okHttpClient); DaprClient daprClientHttp = buildDaprClient(daprHttp); mockInterceptor.addRule() @@ -122,7 +125,7 @@ public class DaprClientHttpTest { public void waitForSidecarBadHealthCheck() throws Exception { int port = findFreePort(); System.setProperty(Properties.HTTP_PORT.getName(), Integer.toString(port)); - daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), port, okHttpClient); + daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), port, daprApiToken, okHttpClient); DaprClient daprClientHttp = buildDaprClient(daprHttp); mockInterceptor.addRule() @@ -147,7 +150,7 @@ public class DaprClientHttpTest { public void waitForSidecarSlowSuccessfulHealthCheck() throws Exception { int port = findFreePort(); System.setProperty(Properties.HTTP_PORT.getName(), Integer.toString(port)); - daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), port, okHttpClient); + daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), port, daprApiToken, okHttpClient); DaprClient daprClientHttp = buildDaprClient(daprHttp); // Simulate a slow response @@ -176,7 +179,7 @@ public class DaprClientHttpTest { public void waitForSidecarOK() throws Exception { int port = findFreePort(); System.setProperty(Properties.HTTP_PORT.getName(), Integer.toString(port)); - daprHttp = new DaprHttp(sidecarIp, port, okHttpClient); + daprHttp = new DaprHttp(sidecarIp, port, daprApiToken, okHttpClient); DaprClient daprClientHttp = buildDaprClient(daprHttp); mockInterceptor.addRule() @@ -207,7 +210,7 @@ public class DaprClientHttpTest { } }); t.start(); - daprHttp = new DaprHttp(sidecarIp, port, okHttpClient); + daprHttp = new DaprHttp(sidecarIp, port, daprApiToken, okHttpClient); DaprClient daprClientHttp = buildDaprClient(daprHttp); daprClientHttp.waitForSidecar(10000).block(); } diff --git a/sdk/src/test/java/io/dapr/client/DaprHttpBuilderTest.java b/sdk/src/test/java/io/dapr/client/DaprHttpBuilderTest.java index e299cb083..78470719c 100644 --- a/sdk/src/test/java/io/dapr/client/DaprHttpBuilderTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprHttpBuilderTest.java @@ -13,6 +13,7 @@ limitations under the License. package io.dapr.client; +import io.dapr.config.Properties; import okhttp3.OkHttpClient; import org.junit.jupiter.api.Test; @@ -25,8 +26,9 @@ public class DaprHttpBuilderTest { @Test public void singletonOkHttpClient() throws Exception { - DaprHttp daprHttp = new DaprHttpBuilder().build(); - DaprHttp anotherDaprHttp = new DaprHttpBuilder().build(); + Properties properties = new Properties(); + DaprHttp daprHttp = new DaprHttpBuilder().build(properties); + DaprHttp anotherDaprHttp = new DaprHttpBuilder().build(properties); assertSame(getOkHttpClient(daprHttp), getOkHttpClient(anotherDaprHttp)); } diff --git a/sdk/src/test/java/io/dapr/client/DaprHttpStub.java b/sdk/src/test/java/io/dapr/client/DaprHttpStub.java index f6a52b8c4..2b38d7809 100644 --- a/sdk/src/test/java/io/dapr/client/DaprHttpStub.java +++ b/sdk/src/test/java/io/dapr/client/DaprHttpStub.java @@ -34,7 +34,7 @@ public class DaprHttpStub extends DaprHttp { * Instantiates a stub for DaprHttp */ public DaprHttpStub() { - super(null, 3000, null); + super(null, 3000, "stubToken", null); } /** diff --git a/sdk/src/test/java/io/dapr/client/DaprHttpTest.java b/sdk/src/test/java/io/dapr/client/DaprHttpTest.java index e976e41b4..b65270ba5 100644 --- a/sdk/src/test/java/io/dapr/client/DaprHttpTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprHttpTest.java @@ -56,6 +56,8 @@ public class DaprHttpTest { private String sidecarIp; + private String daprTokenApi; + private OkHttpClient okHttpClient; private MockInterceptor mockInterceptor; @@ -65,6 +67,7 @@ public class DaprHttpTest { @BeforeEach public void setUp() { sidecarIp = formatIpAddress(Properties.SIDECAR_IP.get()); + daprTokenApi = Properties.API_TOKEN.get(); mockInterceptor = new MockInterceptor(Behavior.UNORDERED); okHttpClient = new OkHttpClient.Builder().addInterceptor(mockInterceptor).build(); } @@ -77,7 +80,7 @@ public class DaprHttpTest { .respond(serializer.serialize(EXPECTED_RESULT)); environmentVariables.set(Properties.API_TOKEN.getEnvName(), "xyz"); assertEquals("xyz", Properties.API_TOKEN.get()); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, Properties.API_TOKEN.get(), okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, (byte[]) null, null, Context.empty()); DaprHttp.Response response = mono.block(); @@ -93,7 +96,7 @@ public class DaprHttpTest { .hasHeader(Headers.DAPR_API_TOKEN) .respond(serializer.serialize(EXPECTED_RESULT)); assertNull(Properties.API_TOKEN.get()); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, (byte[]) null, null, Context.empty()); DaprHttp.Response response = mono.block(); @@ -109,7 +112,7 @@ public class DaprHttpTest { mockInterceptor.addRule() .post("http://" + sidecarIp + ":3500/v1.0/state") .respond(serializer.serialize(EXPECTED_RESULT)); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, (byte[]) null, headers, Context.empty()); DaprHttp.Response response = mono.block(); @@ -128,7 +131,7 @@ public class DaprHttpTest { mockInterceptor.addRule() .post("http://" + sidecarIp + ":3500/v1.0/state") .respond(serializer.serialize(EXPECTED_RESULT)); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); System.setProperty(Properties.SIDECAR_IP.getName(), prevSidecarIp); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, (byte[]) null, headers, Context.empty()); @@ -143,7 +146,7 @@ public class DaprHttpTest { .post("http://" + sidecarIp + ":3500/v1.0/state") .respond(serializer.serialize(EXPECTED_RESULT)) .addHeader("Header", "Value"); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, "", null, Context.empty()); DaprHttp.Response response = mono.block(); @@ -156,7 +159,7 @@ public class DaprHttpTest { mockInterceptor.addRule() .delete("http://" + sidecarIp + ":3500/v1.0/state") .respond(serializer.serialize(EXPECTED_RESULT)); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("DELETE", "v1.0/state".split("/"), null, (String) null, null, Context.empty()); DaprHttp.Response response = mono.block(); @@ -167,7 +170,7 @@ public class DaprHttpTest { @Test public void invokeHEADMethod() throws IOException { mockInterceptor.addRule().head("http://127.0.0.1:3500/v1.0/state").respond(HttpURLConnection.HTTP_OK); - DaprHttp daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("HEAD", "v1.0/state".split("/"), null, (String) null, null, Context.empty()); DaprHttp.Response response = mono.block(); @@ -179,7 +182,7 @@ public class DaprHttpTest { mockInterceptor.addRule() .get("http://" + sidecarIp + ":3500/v1.0/get") .respond(serializer.serialize(EXPECTED_RESULT)); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("GET", "v1.0/get".split("/"), null, null, Context.empty()); DaprHttp.Response response = mono.block(); String body = serializer.deserialize(response.getBody(), String.class); @@ -196,7 +199,7 @@ public class DaprHttpTest { mockInterceptor.addRule() .get("http://" + sidecarIp + ":3500/v1.0/state/order?orderId=41") .respond(serializer.serialize(EXPECTED_RESULT)); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("GET", "v1.0/state/order".split("/"), urlParameters, headers, Context.empty()); DaprHttp.Response response = mono.block(); @@ -209,7 +212,7 @@ public class DaprHttpTest { mockInterceptor.addRule() .post("http://" + sidecarIp + ":3500/v1.0/state") .respond(500); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, null, Context.empty()); StepVerifier.create(mono).expectError(RuntimeException.class).verify(); @@ -221,7 +224,7 @@ public class DaprHttpTest { .post("http://" + sidecarIp + ":3500/v1.0/state") .respond(500, ResponseBody.create(MediaType.parse("text"), "{\"errorCode\":null,\"message\":null}")); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, null, Context.empty()); StepVerifier.create(mono).expectError(RuntimeException.class).verify(); } @@ -232,7 +235,7 @@ public class DaprHttpTest { .post("http://" + sidecarIp + ":3500/v1.0/state") .respond(500, ResponseBody.create(MediaType.parse("application/json"), "{\"errorCode\":\"null\",\"message\":\"null\"}")); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/state".split("/"), null, null, Context.empty()); StepVerifier.create(mono).expectError(RuntimeException.class).verify(); } @@ -253,7 +256,7 @@ public class DaprHttpTest { .post("http://127.0.0.1:3500/v1.0/pubsub/publish") .respond(500, ResponseBody.create(MediaType.parse("application/json"), payload)); - DaprHttp daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3500, daprTokenApi, okHttpClient); Mono mono = daprHttp.invokeApi("POST", "v1.0/pubsub/publish".split("/"), null, null, Context.empty()); StepVerifier.create(mono).expectErrorMatches(e -> { assertEquals(DaprException.class, e.getClass()); @@ -302,7 +305,7 @@ public class DaprHttpTest { .get("http://" + sidecarIp + ":3500/" + urlExistingState) .respond(200, ResponseBody.create(MediaType.parse("application/json"), serializer.serialize(existingState))); - DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, okHttpClient); + DaprHttp daprHttp = new DaprHttp(sidecarIp, 3500, daprTokenApi, okHttpClient); Mono response = daprHttp.invokeApi("GET", urlExistingState.split("/"), null, null, Context.empty()); assertEquals(existingState, serializer.deserialize(response.block().getBody(), String.class)); Mono responseDeleted = daprHttp.invokeApi("GET", urlDeleteState.split("/"), null, null, Context.empty()); diff --git a/sdk/src/test/java/io/dapr/utils/NetworkUtilsTest.java b/sdk/src/test/java/io/dapr/utils/NetworkUtilsTest.java index 040c152f9..878d249f6 100644 --- a/sdk/src/test/java/io/dapr/utils/NetworkUtilsTest.java +++ b/sdk/src/test/java/io/dapr/utils/NetworkUtilsTest.java @@ -14,6 +14,7 @@ public class NetworkUtilsTest { private final String defaultSidecarIP = "127.0.0.1"; private ManagedChannel channel; + private Properties properties = new Properties(); @BeforeEach public void setUp() { @@ -31,7 +32,7 @@ public class NetworkUtilsTest { @Test public void testBuildGrpcManagedChannel() { - channel = NetworkUtils.buildGrpcManagedChannel(); + channel = NetworkUtils.buildGrpcManagedChannel(properties); String expectedAuthority = String.format("%s:%s", defaultSidecarIP, defaultGrpcPort); Assertions.assertEquals(expectedAuthority, channel.authority()); @@ -40,7 +41,7 @@ public class NetworkUtilsTest { @Test public void testBuildGrpcManagedChannel_httpEndpointNoPort() { System.setProperty(Properties.GRPC_ENDPOINT.getName(), "http://example.com"); - channel = NetworkUtils.buildGrpcManagedChannel(); + channel = NetworkUtils.buildGrpcManagedChannel(properties); String expectedAuthority = "example.com:80"; Assertions.assertEquals(expectedAuthority, channel.authority()); @@ -49,7 +50,7 @@ public class NetworkUtilsTest { @Test public void testBuildGrpcManagedChannel_httpEndpointWithPort() { System.setProperty(Properties.GRPC_ENDPOINT.getName(), "http://example.com:3000"); - channel = NetworkUtils.buildGrpcManagedChannel(); + channel = NetworkUtils.buildGrpcManagedChannel(properties); String expectedAuthority = "example.com:3000"; Assertions.assertEquals(expectedAuthority, channel.authority()); @@ -58,7 +59,7 @@ public class NetworkUtilsTest { @Test public void testBuildGrpcManagedChannel_httpsEndpointNoPort() { System.setProperty(Properties.GRPC_ENDPOINT.getName(), "https://example.com"); - channel = NetworkUtils.buildGrpcManagedChannel(); + channel = NetworkUtils.buildGrpcManagedChannel(properties); String expectedAuthority = "example.com:443"; Assertions.assertEquals(expectedAuthority, channel.authority()); @@ -67,7 +68,7 @@ public class NetworkUtilsTest { @Test public void testBuildGrpcManagedChannel_httpsEndpointWithPort() { System.setProperty(Properties.GRPC_ENDPOINT.getName(), "https://example.com:3000"); - channel = NetworkUtils.buildGrpcManagedChannel(); + channel = NetworkUtils.buildGrpcManagedChannel(properties); String expectedAuthority = "example.com:3000"; Assertions.assertEquals(expectedAuthority, channel.authority()); @@ -138,7 +139,7 @@ public class NetworkUtilsTest { boolean expectSecure ) { System.setProperty(Properties.GRPC_ENDPOINT.getName(), grpcEndpointEnvValue); - var settings = NetworkUtils.GrpcEndpointSettings.parse(); + var settings = NetworkUtils.GrpcEndpointSettings.parse(new Properties()); Assertions.assertEquals(expectedEndpoint, settings.endpoint); Assertions.assertEquals(expectSecure, settings.secure); @@ -147,7 +148,7 @@ public class NetworkUtilsTest { private static void testGrpcEndpointParsingErrorScenario(String grpcEndpointEnvValue) { try { System.setProperty(Properties.GRPC_ENDPOINT.getName(), grpcEndpointEnvValue); - NetworkUtils.GrpcEndpointSettings.parse(); + NetworkUtils.GrpcEndpointSettings.parse(new Properties()); Assert.fail(); } catch (IllegalArgumentException e) { // Expected