diff --git a/sdk/pom.xml b/sdk/pom.xml
index e036c01d0d..43259eae50 100644
--- a/sdk/pom.xml
+++ b/sdk/pom.xml
@@ -15,6 +15,16 @@
0.2.0
dapr-sdk
SDK for Dapr
+
+
+
+ false
+
+ central
+ libs-release
+ https://repo.spring.io/libs-release
+
+
@@ -52,7 +62,14 @@
mockito-core
test
+
+ com.github.gmazzo
+ okhttp-mock
+ 1.3.2
+ test
+
+
true
diff --git a/sdk/src/test/java/io/dapr/client/DaprHttpTest.java b/sdk/src/test/java/io/dapr/client/DaprHttpTest.java
new file mode 100644
index 0000000000..000fc01336
--- /dev/null
+++ b/sdk/src/test/java/io/dapr/client/DaprHttpTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) Microsoft Corporation.
+ * Licensed under the MIT License.
+ */
+package io.dapr.client;
+
+import okhttp3.*;
+import okhttp3.mock.Behavior;
+import okhttp3.mock.MockInterceptor;
+import org.junit.Before;
+import org.junit.Test;
+import reactor.core.publisher.Mono;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+
+public class DaprHttpTest {
+
+ private OkHttpClient okHttpClient;
+
+ private MockInterceptor mockInterceptor;
+
+ private final String EXPECTED_RESULT = "{\"data\":\"ewoJCSJwcm9wZXJ0eUEiOiAidmFsdWVBIiwKCQkicHJvcGVydHlCIjogInZhbHVlQiIKCX0=\"}";
+
+ @Before
+ public void setUp() throws Exception {
+ mockInterceptor = new MockInterceptor(Behavior.UNORDERED);
+ okHttpClient = new OkHttpClient.Builder().addInterceptor(mockInterceptor).build();
+ }
+
+ @Test
+ public void invokePostMethod() throws IOException {
+
+ mockInterceptor.addRule()
+ .post("http://localhost:3500/v1.0/state")
+ .respond(EXPECTED_RESULT);
+
+ DaprHttp daprHttp = new DaprHttp("http://localhost",3500,okHttpClient);
+
+ Mono mono = daprHttp.invokeAPI("POST","v1.0/state",null);
+ assertEquals(EXPECTED_RESULT,mono.block());
+
+ }
+
+ @Test
+ public void invokeDeleteMethod() throws IOException {
+
+ mockInterceptor.addRule()
+ .delete("http://localhost:3500/v1.0/state")
+ .respond(EXPECTED_RESULT);
+
+ DaprHttp daprHttp = new DaprHttp("http://localhost",3500,okHttpClient);
+
+ Mono mono = daprHttp.invokeAPI("DELETE","v1.0/state",null);
+ assertEquals(EXPECTED_RESULT,mono.block());
+
+ }
+
+ @Test
+ public void invokeGetMethod() throws IOException {
+
+ mockInterceptor.addRule()
+ .get("http://localhost:3500/v1.0/get")
+ .respond(EXPECTED_RESULT);
+
+ DaprHttp daprHttp = new DaprHttp("http://localhost",3500,okHttpClient);
+
+ Mono mono = daprHttp.invokeAPI("GET","v1.0/get",null);
+
+ assertEquals(EXPECTED_RESULT,mono.block());
+
+ }
+
+ @Test
+ public void invokeMethodWithHeaders() {
+
+ Map headers = new HashMap<>();
+ headers.put("header","value");
+ headers.put("header1","value1");
+
+ mockInterceptor.addRule()
+ .get("http://localhost:3500/v1.0/get")
+ .respond(EXPECTED_RESULT);
+ DaprHttp daprHttp = new DaprHttp("http://localhost",3500,okHttpClient);
+
+ Mono mono = daprHttp.invokeAPI("GET","v1.0/get",headers);
+
+ assertEquals(EXPECTED_RESULT,mono.block());
+
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void invokeMethodRuntimeException(){
+
+ Map headers = new HashMap<>();
+ headers.put("header","value");
+ headers.put("header1","value1");
+
+ mockInterceptor.addRule()
+ .get("http://localhost:3500/v1.0/get")
+ .respond(500, ResponseBody.create(MediaType.parse("application/json"),
+ "{\"errorCode\":\"500\",\"message\":\"Error\"}"));
+
+ DaprHttp daprHttp = new DaprHttp("http://localhost",3500,okHttpClient);
+
+ Mono mono = daprHttp.invokeAPI("GET","v1.0/get",headers);
+
+ assertEquals(EXPECTED_RESULT,mono.block());
+ }
+
+}
\ No newline at end of file