Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Defaults;
import com.google.common.base.Preconditions;
import com.google.common.reflect.TypeToken;
import io.temporal.api.common.v1.Payload;
import io.temporal.api.common.v1.Payloads;
import io.temporal.api.failure.v1.Failure;
Expand Down Expand Up @@ -132,7 +133,7 @@ default Object[] fromPayloads(
if (!content.isPresent()) {
// Return defaults for all the parameters
for (int i = 0; i < parameterTypes.length; i++) {
result[i] = Defaults.defaultValue((Class<?>) genericParameterTypes[i]);
result[i] = Defaults.defaultValue(TypeToken.of(genericParameterTypes[i]).getRawType());
}
return result;
}
Expand All @@ -142,7 +143,7 @@ default Object[] fromPayloads(
Class<?> pt = parameterTypes[i];
Type gt = genericParameterTypes[i];
if (i >= count) {
result[i] = Defaults.defaultValue((Class<?>) gt);
result[i] = Defaults.defaultValue(TypeToken.of(gt).getRawType());
} else {
result[i] = this.fromPayload(payloads.getPayloads(i), pt, gt);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package io.temporal.common.converter;

import io.temporal.api.common.v1.Payloads;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Optional;
import org.junit.Assert;
import org.junit.Test;

public class DataConverterTest {
// Test methods for reflection
public String testMethodNormalParameter(String input, String names) {
return "";
}

public String testMethodGenericParameter(String input, List<String> names) {
return "";
}

public String testMethodGenericArrayParameter(String input, List<Integer>[] names) {
return "";
}

@Test
public void noContent() throws NoSuchMethodException {
DataConverter dc = GlobalDataConverter.get();
Method m = this.getClass().getMethod("testMethodGenericParameter", String.class, List.class);
Object[] result =
dc.fromPayloads(Optional.empty(), m.getParameterTypes(), m.getGenericParameterTypes());
Assert.assertNull(result[0]);
Assert.assertNull(result[1]);
}

@Test
public void addParameter() throws NoSuchMethodException {
DataConverter dc = GlobalDataConverter.get();
Optional<Payloads> p = dc.toPayloads("test");
Method m = this.getClass().getMethod("testMethodNormalParameter", String.class, String.class);
Object[] result = dc.fromPayloads(p, m.getParameterTypes(), m.getGenericParameterTypes());
Assert.assertEquals("test", result[0]);
Assert.assertNull(result[1]);
}

@Test
public void addGenericParameter() throws NoSuchMethodException {
DataConverter dc = GlobalDataConverter.get();
Optional<Payloads> p = dc.toPayloads("test");
Method m = this.getClass().getMethod("testMethodGenericParameter", String.class, List.class);
Object[] result = dc.fromPayloads(p, m.getParameterTypes(), m.getGenericParameterTypes());
Assert.assertEquals("test", result[0]);
Assert.assertNull(result[1]);
}

@Test
public void addGenericArrayParameter() throws NoSuchMethodException {
DataConverter dc = GlobalDataConverter.get();
Optional<Payloads> p = dc.toPayloads("test");
Method m =
this.getClass().getMethod("testMethodGenericArrayParameter", String.class, List[].class);
Object[] result = dc.fromPayloads(p, m.getParameterTypes(), m.getGenericParameterTypes());
Assert.assertEquals("test", result[0]);
Assert.assertNull(result[1]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import io.temporal.activity.ActivityInterface;
import io.temporal.client.WorkflowClient;
import io.temporal.client.WorkflowStub;
import io.temporal.failure.ApplicationFailure;
import io.temporal.testing.internal.SDKTestOptions;
import io.temporal.testing.internal.SDKTestWorkflowRule;
import java.time.Duration;
Expand All @@ -19,7 +21,8 @@ public class GenericParametersWorkflowTest {
@Rule
public SDKTestWorkflowRule testWorkflowRule =
SDKTestWorkflowRule.newBuilder()
.setWorkflowTypes(GenericParametersWorkflowImpl.class)
.setWorkflowTypes(
GenericParametersWorkflowImpl.class, MissingGenericParametersWorkflowImpl.class)
.setActivityImplementations(activitiesImpl)
.build();

Expand Down Expand Up @@ -119,4 +122,31 @@ public List<UUID> query(List<UUID> arg) {
return result;
}
}

@Test
public void testMissingGenericParameter() {
WorkflowStub untypedStub =
testWorkflowRule.newUntypedWorkflowStub("MissingGenericParametersWorkflow");
untypedStub.start(testWorkflowRule.getTaskQueue());
String result = untypedStub.getResult(String.class);
Assert.assertEquals(testWorkflowRule.getTaskQueue(), result);
}

@WorkflowInterface
public interface MissingGenericParametersWorkflow {
@WorkflowMethod
String execute(String name, List<String> names);
}

public static class MissingGenericParametersWorkflowImpl
implements MissingGenericParametersWorkflow {
@Override
public String execute(String name, List<String> names) {
if (names != null) {
throw ApplicationFailure.newFailure(
"Generic parameter should not be present", "GenericParameterError");
}
return name;
}
}
}
Loading