diff --git a/src/main/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternal.java b/src/main/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternal.java index c9c3ef81..c54c43d6 100644 --- a/src/main/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternal.java +++ b/src/main/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternal.java @@ -33,6 +33,7 @@ import com.uber.cadence.workflow.*; import com.uber.cadence.workflow.Functions.Func; import com.uber.cadence.workflow.Functions.Func1; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.lang.reflect.Type; @@ -51,969 +52,976 @@ import java.util.function.BiPredicate; import java.util.function.Consumer; import java.util.function.Supplier; + import org.apache.thrift.TException; import org.apache.thrift.async.AsyncMethodCallback; public final class TestActivityEnvironmentInternal implements TestActivityEnvironment { - private final POJOActivityTaskHandler activityTaskHandler; - private final TestEnvironmentOptions testEnvironmentOptions; - private final AtomicInteger idSequencer = new AtomicInteger(); - private ClassConsumerPair activityHeartbetListener; - private static final ScheduledExecutorService heartbeatExecutor = - Executors.newScheduledThreadPool(20); - private IWorkflowService workflowService; - - public TestActivityEnvironmentInternal(TestEnvironmentOptions options) { - if (options == null) { - this.testEnvironmentOptions = new TestEnvironmentOptions.Builder().build(); - } else { - this.testEnvironmentOptions = options; - } - activityTaskHandler = - new POJOActivityTaskHandler( - new WorkflowServiceWrapper(workflowService), - testEnvironmentOptions.getWorkflowClientOptions().getDomain(), - testEnvironmentOptions.getDataConverter(), - heartbeatExecutor); - } - - /** - * Register activity implementation objects with a worker. Overwrites previously registered - * objects. As activities are reentrant and stateless only one instance per activity type is - * registered. - * - *

Implementations that share a worker must implement different interfaces as an activity type - * is identified by the activity interface, not by the implementation. - * - *

- */ - @Override - public void registerActivitiesImplementations(Object... activityImplementations) { - activityTaskHandler.setActivitiesImplementation(activityImplementations); - } - - /** - * Creates client stub to activities that implement given interface. - * - * @param activityInterface interface type implemented by activities - */ - @Override - public T newActivityStub(Class activityInterface) { - ActivityOptions options = - new ActivityOptions.Builder().setScheduleToCloseTimeout(Duration.ofDays(1)).build(); - InvocationHandler invocationHandler = - ActivityInvocationHandler.newInstance( - options, new TestActivityExecutor(workflowService, null)); - invocationHandler = new DeterministicRunnerWrapper(invocationHandler); - return ActivityInvocationHandlerBase.newProxy(activityInterface, invocationHandler); - } - - @Override - public void setActivityHeartbeatListener(Class detailsClass, Consumer listener) { - setActivityHeartbeatListener(detailsClass, detailsClass, listener); - } - - @Override - @SuppressWarnings("unchecked") - public void setActivityHeartbeatListener( - Class detailsClass, Type detailsType, Consumer listener) { - activityHeartbetListener = new ClassConsumerPair(detailsClass, detailsType, listener); - } - - @Override - public void setWorkflowService(IWorkflowService workflowService) { - IWorkflowService service = new WorkflowServiceWrapper(workflowService); - this.workflowService = service; - this.activityTaskHandler.setWorkflowService(service); - } - - private class TestActivityExecutor extends WorkflowInterceptorBase { - - @SuppressWarnings("UnusedVariable") - private final IWorkflowService workflowService; - - TestActivityExecutor(IWorkflowService workflowService, WorkflowInterceptorBase next) { - super(next); - this.workflowService = workflowService; + private final POJOActivityTaskHandler activityTaskHandler; + private final TestEnvironmentOptions testEnvironmentOptions; + private final AtomicInteger idSequencer = new AtomicInteger(); + private ClassConsumerPair activityHeartbetListener; + private static final ScheduledExecutorService heartbeatExecutor = + Executors.newScheduledThreadPool(20); + private IWorkflowService workflowService; + + public TestActivityEnvironmentInternal(TestEnvironmentOptions options) { + if (options == null) { + this.testEnvironmentOptions = new TestEnvironmentOptions.Builder().build(); + } else { + this.testEnvironmentOptions = options; + } + activityTaskHandler = + new POJOActivityTaskHandler( + new WorkflowServiceWrapper(workflowService), + testEnvironmentOptions.getWorkflowClientOptions().getDomain(), + testEnvironmentOptions.getDataConverter(), + heartbeatExecutor); } + /** + * Register activity implementation objects with a worker. Overwrites previously registered + * objects. As activities are reentrant and stateless only one instance per activity type is + * registered. + * + *

Implementations that share a worker must implement different interfaces as an activity type + * is identified by the activity interface, not by the implementation. + * + *

+ */ @Override - public Promise executeActivity( - String activityType, - Class resultClass, - Type resultType, - Object[] args, - ActivityOptions options) { - PollForActivityTaskResponse task = new PollForActivityTaskResponse(); - task.setScheduleToCloseTimeoutSeconds((int) options.getScheduleToCloseTimeout().getSeconds()); - task.setHeartbeatTimeoutSeconds((int) options.getHeartbeatTimeout().getSeconds()); - task.setStartToCloseTimeoutSeconds((int) options.getStartToCloseTimeout().getSeconds()); - task.setScheduledTimestamp(Duration.ofMillis(System.currentTimeMillis()).toNanos()); - task.setStartedTimestamp(Duration.ofMillis(System.currentTimeMillis()).toNanos()); - task.setInput(testEnvironmentOptions.getDataConverter().toData(args)); - task.setTaskToken("test-task-token".getBytes(StandardCharsets.UTF_8)); - task.setActivityId(String.valueOf(idSequencer.incrementAndGet())); - task.setWorkflowExecution( - new WorkflowExecution() - .setWorkflowId("test-workflow-id") - .setRunId(UUID.randomUUID().toString())); - task.setWorkflowType(new WorkflowType().setName("test-workflow")); - task.setActivityType(new ActivityType().setName(activityType)); - Result taskResult = activityTaskHandler.handle(task, NoopScope.getInstance(), false); - return Workflow.newPromise(getReply(task, taskResult, resultClass, resultType)); + public void registerActivitiesImplementations(Object... activityImplementations) { + activityTaskHandler.setActivitiesImplementation(activityImplementations); } + /** + * Creates client stub to activities that implement given interface. + * + * @param activityInterface interface type implemented by activities + */ @Override - public Promise executeLocalActivity( - String activityName, - Class resultClass, - Type resultType, - Object[] args, - LocalActivityOptions options) { - throw new UnsupportedOperationException("not implemented"); + public T newActivityStub(Class activityInterface) { + ActivityOptions options = + new ActivityOptions.Builder().setScheduleToCloseTimeout(Duration.ofDays(1)).build(); + InvocationHandler invocationHandler = + ActivityInvocationHandler.newInstance( + options, new TestActivityExecutor(workflowService, null)); + invocationHandler = new DeterministicRunnerWrapper(invocationHandler); + return ActivityInvocationHandlerBase.newProxy(activityInterface, invocationHandler); } @Override - public WorkflowResult executeChildWorkflow( - String workflowType, - Class resultClass, - Type resultType, - Object[] args, - ChildWorkflowOptions options) { - throw new UnsupportedOperationException("not implemented"); + public void setActivityHeartbeatListener(Class detailsClass, Consumer listener) { + setActivityHeartbeatListener(detailsClass, detailsClass, listener); } @Override - public Random newRandom() { - throw new UnsupportedOperationException("not implemented"); + @SuppressWarnings("unchecked") + public void setActivityHeartbeatListener( + Class detailsClass, Type detailsType, Consumer listener) { + activityHeartbetListener = new ClassConsumerPair(detailsClass, detailsType, listener); } @Override - public Promise signalExternalWorkflow( - String domain, WorkflowExecution execution, String signalName, Object[] args) { - throw new UnsupportedOperationException("not implemented"); + public void setWorkflowService(IWorkflowService workflowService) { + IWorkflowService service = new WorkflowServiceWrapper(workflowService); + this.workflowService = service; + this.activityTaskHandler.setWorkflowService(service); } - @Override - public Promise signalExternalWorkflow( - WorkflowExecution execution, String signalName, Object[] args) { - throw new UnsupportedOperationException("not implemented"); - } + private class TestActivityExecutor extends WorkflowInterceptorBase { - @Override - public Promise cancelWorkflow(WorkflowExecution execution) { - throw new UnsupportedOperationException("not implemented"); - } + @SuppressWarnings("UnusedVariable") + private final IWorkflowService workflowService; - @Override - public void sleep(Duration duration) { - throw new UnsupportedOperationException("not implemented"); - } + TestActivityExecutor(IWorkflowService workflowService, WorkflowInterceptorBase next) { + super(next); + this.workflowService = workflowService; + } - @Override - public boolean await(Duration timeout, String reason, Supplier unblockCondition) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public Promise executeActivity( + String activityType, + Class resultClass, + Type resultType, + Object[] args, + ActivityOptions options) { + PollForActivityTaskResponse task = new PollForActivityTaskResponse(); + task.setScheduleToCloseTimeoutSeconds((int) options.getScheduleToCloseTimeout().getSeconds()); + task.setHeartbeatTimeoutSeconds((int) options.getHeartbeatTimeout().getSeconds()); + task.setStartToCloseTimeoutSeconds((int) options.getStartToCloseTimeout().getSeconds()); + task.setScheduledTimestamp(Duration.ofMillis(System.currentTimeMillis()).toNanos()); + task.setStartedTimestamp(Duration.ofMillis(System.currentTimeMillis()).toNanos()); + task.setInput(testEnvironmentOptions.getDataConverter().toData(args)); + task.setTaskToken("test-task-token".getBytes(StandardCharsets.UTF_8)); + task.setActivityId(String.valueOf(idSequencer.incrementAndGet())); + task.setWorkflowExecution( + new WorkflowExecution() + .setWorkflowId("test-workflow-id") + .setRunId(UUID.randomUUID().toString())); + task.setWorkflowType(new WorkflowType().setName("test-workflow")); + task.setActivityType(new ActivityType().setName(activityType)); + Result taskResult = activityTaskHandler.handle(task, NoopScope.getInstance(), false); + return Workflow.newPromise(getReply(task, taskResult, resultClass, resultType)); + } - @Override - public void await(String reason, Supplier unblockCondition) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public Promise executeLocalActivity( + String activityName, + Class resultClass, + Type resultType, + Object[] args, + LocalActivityOptions options) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public Promise newTimer(Duration duration) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public WorkflowResult executeChildWorkflow( + String workflowType, + Class resultClass, + Type resultType, + Object[] args, + ChildWorkflowOptions options) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public R sideEffect(Class resultClass, Type resultType, Func func) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public Random newRandom() { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public R mutableSideEffect( - String id, Class resultClass, Type resultType, BiPredicate updated, Func func) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public Promise signalExternalWorkflow( + String domain, WorkflowExecution execution, String signalName, Object[] args) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public int getVersion(String changeID, int minSupported, int maxSupported) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public Promise signalExternalWorkflow( + WorkflowExecution execution, String signalName, Object[] args) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public void continueAsNew( - Optional workflowType, Optional options, Object[] args) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public Promise cancelWorkflow(WorkflowExecution execution) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public void registerQuery(String queryType, Type[] argTypes, Func1 callback) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public void sleep(Duration duration) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public UUID randomUUID() { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public boolean await(Duration timeout, String reason, Supplier unblockCondition) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public void upsertSearchAttributes(Map searchAttributes) { - throw new UnsupportedOperationException("not implemented"); - } + @Override + public void await(String reason, Supplier unblockCondition) { + throw new UnsupportedOperationException("not implemented"); + } - private T getReply( - PollForActivityTaskResponse task, - ActivityTaskHandler.Result response, - Class resultClass, - Type resultType) { - RespondActivityTaskCompletedRequest taskCompleted = response.getTaskCompleted(); - if (taskCompleted != null) { - return testEnvironmentOptions - .getDataConverter() - .fromData(taskCompleted.getResult(), resultClass, resultType); - } else { - RespondActivityTaskFailedRequest taskFailed = - response.getTaskFailedResult().getTaskFailedRequest(); - if (taskFailed != null) { - String causeClassName = taskFailed.getReason(); - Class causeClass; - Exception cause; - try { - @SuppressWarnings("unchecked") // cc is just to have a place to put this annotation - Class cc = - (Class) Class.forName(causeClassName); - causeClass = cc; - cause = - testEnvironmentOptions - .getDataConverter() - .fromData(taskFailed.getDetails(), causeClass, causeClass); - } catch (Exception e) { - cause = e; - } - throw new ActivityFailureException( - 0, task.getActivityType(), task.getActivityId(), cause); + @Override + public Promise newTimer(Duration duration) { + throw new UnsupportedOperationException("not implemented"); + } - } else { - RespondActivityTaskCanceledRequest taskCancelled = response.getTaskCancelled(); - if (taskCancelled != null) { - throw new CancellationException( - new String(taskCancelled.getDetails(), StandardCharsets.UTF_8)); - } - } - } - return Defaults.defaultValue(resultClass); - } - } + @Override + public R sideEffect(Class resultClass, Type resultType, Func func) { + throw new UnsupportedOperationException("not implemented"); + } - private static class ClassConsumerPair { + @Override + public R mutableSideEffect( + String id, Class resultClass, Type resultType, BiPredicate updated, Func func) { + throw new UnsupportedOperationException("not implemented"); + } - final Consumer consumer; - final Class valueClass; - final Type valueType; + @Override + public int getVersion(String changeID, int minSupported, int maxSupported) { + throw new UnsupportedOperationException("not implemented"); + } - ClassConsumerPair(Class valueClass, Type valueType, Consumer consumer) { - this.valueClass = Objects.requireNonNull(valueClass); - this.valueType = Objects.requireNonNull(valueType); - this.consumer = Objects.requireNonNull(consumer); - } - } + @Override + public void continueAsNew( + Optional workflowType, Optional options, Object[] args) { + throw new UnsupportedOperationException("not implemented"); + } - private class WorkflowServiceWrapper implements IWorkflowService { + @Override + public void registerQuery(String queryType, Type[] argTypes, Func1 callback) { + throw new UnsupportedOperationException("not implemented"); + } - private final IWorkflowService impl; + @Override + public UUID randomUUID() { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public ClientOptions getOptions() { - return impl.getOptions(); - } + @Override + public void upsertSearchAttributes(Map searchAttributes) { + throw new UnsupportedOperationException("not implemented"); + } - @Override - public CompletableFuture isHealthy() { - return impl.isHealthy(); + private T getReply( + PollForActivityTaskResponse task, + ActivityTaskHandler.Result response, + Class resultClass, + Type resultType) { + RespondActivityTaskCompletedRequest taskCompleted = response.getTaskCompleted(); + if (taskCompleted != null) { + return testEnvironmentOptions + .getDataConverter() + .fromData(taskCompleted.getResult(), resultClass, resultType); + } else { + RespondActivityTaskFailedRequest taskFailed = + response.getTaskFailedResult().getTaskFailedRequest(); + if (taskFailed != null) { + String causeClassName = taskFailed.getReason(); + Class causeClass; + Exception cause; + try { + @SuppressWarnings("unchecked") // cc is just to have a place to put this annotation + Class cc = + (Class) Class.forName(causeClassName); + causeClass = cc; + cause = + testEnvironmentOptions + .getDataConverter() + .fromData(taskFailed.getDetails(), causeClass, causeClass); + } catch (Exception e) { + cause = e; + } + throw new ActivityFailureException( + 0, task.getActivityType(), task.getActivityId(), cause); + + } else { + RespondActivityTaskCanceledRequest taskCancelled = response.getTaskCancelled(); + if (taskCancelled != null) { + throw new CancellationException( + new String(taskCancelled.getDetails(), StandardCharsets.UTF_8)); + } + } + } + return Defaults.defaultValue(resultClass); + } } - private WorkflowServiceWrapper(IWorkflowService impl) { - if (impl == null) { - // Create empty implementation that just ignores all requests. - this.impl = - (IWorkflowService) - Proxy.newProxyInstance( - WorkflowServiceWrapper.class.getClassLoader(), - new Class[] {IWorkflowService.class}, - (proxy, method, args) -> { - // noop - return method.getReturnType().getDeclaredConstructor().newInstance(); - }); - } else { - this.impl = impl; - } - } + private static class ClassConsumerPair { - @Override - public RecordActivityTaskHeartbeatResponse RecordActivityTaskHeartbeat( - RecordActivityTaskHeartbeatRequest heartbeatRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - if (activityHeartbetListener != null) { - Object details = - testEnvironmentOptions - .getDataConverter() - .fromData( - heartbeatRequest.getDetails(), - activityHeartbetListener.valueClass, - activityHeartbetListener.valueType); - activityHeartbetListener.consumer.accept(details); - } - // TODO: Cancellation - return impl.RecordActivityTaskHeartbeat(heartbeatRequest); - } + final Consumer consumer; + final Class valueClass; + final Type valueType; - @Override - public RecordActivityTaskHeartbeatResponse RecordActivityTaskHeartbeatByID( - RecordActivityTaskHeartbeatByIDRequest heartbeatRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, DomainNotActiveError, LimitExceededError, - ServiceBusyError, TException { - return impl.RecordActivityTaskHeartbeatByID(heartbeatRequest); + ClassConsumerPair(Class valueClass, Type valueType, Consumer consumer) { + this.valueClass = Objects.requireNonNull(valueClass); + this.valueType = Objects.requireNonNull(valueType); + this.consumer = Objects.requireNonNull(consumer); + } } - @Override - public void RespondActivityTaskCompleted(RespondActivityTaskCompletedRequest completeRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondActivityTaskCompleted(completeRequest); - } + private class WorkflowServiceWrapper implements IWorkflowService { - @Override - public void RespondActivityTaskCompletedByID( - RespondActivityTaskCompletedByIDRequest completeRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondActivityTaskCompletedByID(completeRequest); - } + private final IWorkflowService impl; - @Override - public void RespondActivityTaskFailed(RespondActivityTaskFailedRequest failRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondActivityTaskFailed(failRequest); - } + @Override + public ClientOptions getOptions() { + return impl.getOptions(); + } - @Override - public void RespondActivityTaskFailedByID(RespondActivityTaskFailedByIDRequest failRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondActivityTaskFailedByID(failRequest); - } + @Override + public CompletableFuture isHealthy() { + return impl.isHealthy(); + } - @Override - public void RespondActivityTaskCanceled(RespondActivityTaskCanceledRequest canceledRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondActivityTaskCanceled(canceledRequest); - } + private WorkflowServiceWrapper(IWorkflowService impl) { + if (impl == null) { + // Create empty implementation that just ignores all requests. + this.impl = + (IWorkflowService) + Proxy.newProxyInstance( + WorkflowServiceWrapper.class.getClassLoader(), + new Class[]{IWorkflowService.class}, + (proxy, method, args) -> { + // noop + return method.getReturnType().getDeclaredConstructor().newInstance(); + }); + } else { + this.impl = impl; + } + } - @Override - public void RespondActivityTaskCanceledByID( - RespondActivityTaskCanceledByIDRequest canceledRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondActivityTaskCanceledByID(canceledRequest); - } + @Override + public RecordActivityTaskHeartbeatResponse RecordActivityTaskHeartbeat( + RecordActivityTaskHeartbeatRequest heartbeatRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + if (activityHeartbetListener != null) { + Object details = + testEnvironmentOptions + .getDataConverter() + .fromData( + heartbeatRequest.getDetails(), + activityHeartbetListener.valueClass, + activityHeartbetListener.valueType); + activityHeartbetListener.consumer.accept(details); + } + // TODO: Cancellation + return impl.RecordActivityTaskHeartbeat(heartbeatRequest); + } - @Override - public void RequestCancelWorkflowExecution(RequestCancelWorkflowExecutionRequest cancelRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - CancellationAlreadyRequestedError, ServiceBusyError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RequestCancelWorkflowExecution(cancelRequest); - } + @Override + public RecordActivityTaskHeartbeatResponse RecordActivityTaskHeartbeatByID( + RecordActivityTaskHeartbeatByIDRequest heartbeatRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, DomainNotActiveError, LimitExceededError, + ServiceBusyError, TException { + return impl.RecordActivityTaskHeartbeatByID(heartbeatRequest); + } - @Override - public void SignalWorkflowExecution(SignalWorkflowExecutionRequest signalRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, ServiceBusyError, TException { - impl.SignalWorkflowExecution(signalRequest); - } + @Override + public void RespondActivityTaskCompleted(RespondActivityTaskCompletedRequest completeRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondActivityTaskCompleted(completeRequest); + } - @Override - public StartWorkflowExecutionResponse SignalWithStartWorkflowExecution( - SignalWithStartWorkflowExecutionRequest signalWithStartRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - DomainNotActiveError, LimitExceededError, WorkflowExecutionAlreadyStartedError, - TException { - return impl.SignalWithStartWorkflowExecution(signalWithStartRequest); - } + @Override + public void RespondActivityTaskCompletedByID( + RespondActivityTaskCompletedByIDRequest completeRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondActivityTaskCompletedByID(completeRequest); + } - @Override - public SignalWithStartWorkflowExecutionAsyncResponse SignalWithStartWorkflowExecutionAsync( - SignalWithStartWorkflowExecutionAsyncRequest signalWithStartRequest) - throws BadRequestError, WorkflowExecutionAlreadyStartedError, ServiceBusyError, - DomainNotActiveError, LimitExceededError, EntityNotExistsError, - ClientVersionNotSupportedError, TException { - return impl.SignalWithStartWorkflowExecutionAsync(signalWithStartRequest); - } + @Override + public void RespondActivityTaskFailed(RespondActivityTaskFailedRequest failRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondActivityTaskFailed(failRequest); + } - @Override - public ResetWorkflowExecutionResponse ResetWorkflowExecution( - ResetWorkflowExecutionRequest resetRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - DomainNotActiveError, LimitExceededError, ClientVersionNotSupportedError, TException { - return impl.ResetWorkflowExecution(resetRequest); - } + @Override + public void RespondActivityTaskFailedByID(RespondActivityTaskFailedByIDRequest failRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondActivityTaskFailedByID(failRequest); + } - @Override - public void TerminateWorkflowExecution(TerminateWorkflowExecutionRequest terminateRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, ServiceBusyError, TException { - impl.TerminateWorkflowExecution(terminateRequest); - } + @Override + public void RespondActivityTaskCanceled(RespondActivityTaskCanceledRequest canceledRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondActivityTaskCanceled(canceledRequest); + } - @Override - public ListOpenWorkflowExecutionsResponse ListOpenWorkflowExecutions( - ListOpenWorkflowExecutionsRequest listRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - TException { - return impl.ListOpenWorkflowExecutions(listRequest); - } + @Override + public void RespondActivityTaskCanceledByID( + RespondActivityTaskCanceledByIDRequest canceledRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondActivityTaskCanceledByID(canceledRequest); + } - @Override - public ListClosedWorkflowExecutionsResponse ListClosedWorkflowExecutions( - ListClosedWorkflowExecutionsRequest listRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - TException { - return impl.ListClosedWorkflowExecutions(listRequest); - } + @Override + public void RequestCancelWorkflowExecution(RequestCancelWorkflowExecutionRequest cancelRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + CancellationAlreadyRequestedError, ServiceBusyError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RequestCancelWorkflowExecution(cancelRequest); + } - @Override - public ListWorkflowExecutionsResponse ListWorkflowExecutions( - ListWorkflowExecutionsRequest listRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - ClientVersionNotSupportedError, TException { - return impl.ListWorkflowExecutions(listRequest); - } + @Override + public void SignalWorkflowExecution(SignalWorkflowExecutionRequest signalRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, ServiceBusyError, TException { + impl.SignalWorkflowExecution(signalRequest); + } - @Override - public ListArchivedWorkflowExecutionsResponse ListArchivedWorkflowExecutions( - ListArchivedWorkflowExecutionsRequest listRequest) - throws BadRequestError, EntityNotExistsError, ServiceBusyError, - ClientVersionNotSupportedError, TException { - return impl.ListArchivedWorkflowExecutions(listRequest); - } + @Override + public StartWorkflowExecutionResponse SignalWithStartWorkflowExecution( + SignalWithStartWorkflowExecutionRequest signalWithStartRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + DomainNotActiveError, LimitExceededError, WorkflowExecutionAlreadyStartedError, + TException { + return impl.SignalWithStartWorkflowExecution(signalWithStartRequest); + } - @Override - public ListWorkflowExecutionsResponse ScanWorkflowExecutions( - ListWorkflowExecutionsRequest listRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - ClientVersionNotSupportedError, TException { - return impl.ScanWorkflowExecutions(listRequest); - } + @Override + public SignalWithStartWorkflowExecutionAsyncResponse SignalWithStartWorkflowExecutionAsync( + SignalWithStartWorkflowExecutionAsyncRequest signalWithStartRequest) + throws BadRequestError, WorkflowExecutionAlreadyStartedError, ServiceBusyError, + DomainNotActiveError, LimitExceededError, EntityNotExistsError, + ClientVersionNotSupportedError, TException { + return impl.SignalWithStartWorkflowExecutionAsync(signalWithStartRequest); + } - @Override - public CountWorkflowExecutionsResponse CountWorkflowExecutions( - CountWorkflowExecutionsRequest countRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - ClientVersionNotSupportedError, TException { - return impl.CountWorkflowExecutions(countRequest); - } + @Override + public ResetWorkflowExecutionResponse ResetWorkflowExecution( + ResetWorkflowExecutionRequest resetRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + DomainNotActiveError, LimitExceededError, ClientVersionNotSupportedError, TException { + return impl.ResetWorkflowExecution(resetRequest); + } - @Override - public GetSearchAttributesResponse GetSearchAttributes() - throws InternalServiceError, ServiceBusyError, ClientVersionNotSupportedError, TException { - return impl.GetSearchAttributes(); - } + @Override + public void TerminateWorkflowExecution(TerminateWorkflowExecutionRequest terminateRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, ServiceBusyError, TException { + impl.TerminateWorkflowExecution(terminateRequest); + } - @Override - public void RespondQueryTaskCompleted(RespondQueryTaskCompletedRequest completeRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondQueryTaskCompleted(completeRequest); - } + @Override + public ListOpenWorkflowExecutionsResponse ListOpenWorkflowExecutions( + ListOpenWorkflowExecutionsRequest listRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + TException { + return impl.ListOpenWorkflowExecutions(listRequest); + } - @Override - public ResetStickyTaskListResponse ResetStickyTaskList(ResetStickyTaskListRequest resetRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, LimitExceededError, - ServiceBusyError, DomainNotActiveError, TException { - return impl.ResetStickyTaskList(resetRequest); - } + @Override + public ListClosedWorkflowExecutionsResponse ListClosedWorkflowExecutions( + ListClosedWorkflowExecutionsRequest listRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + TException { + return impl.ListClosedWorkflowExecutions(listRequest); + } - @Override - public QueryWorkflowResponse QueryWorkflow(QueryWorkflowRequest queryRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, QueryFailedError, - TException { - return impl.QueryWorkflow(queryRequest); - } + @Override + public ListWorkflowExecutionsResponse ListWorkflowExecutions( + ListWorkflowExecutionsRequest listRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + ClientVersionNotSupportedError, TException { + return impl.ListWorkflowExecutions(listRequest); + } - @Override - public DescribeWorkflowExecutionResponse DescribeWorkflowExecution( - DescribeWorkflowExecutionRequest describeRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { - return impl.DescribeWorkflowExecution(describeRequest); - } + @Override + public ListArchivedWorkflowExecutionsResponse ListArchivedWorkflowExecutions( + ListArchivedWorkflowExecutionsRequest listRequest) + throws BadRequestError, EntityNotExistsError, ServiceBusyError, + ClientVersionNotSupportedError, TException { + return impl.ListArchivedWorkflowExecutions(listRequest); + } - @Override - public DescribeTaskListResponse DescribeTaskList(DescribeTaskListRequest request) - throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { - return impl.DescribeTaskList(request); - } + @Override + public ListWorkflowExecutionsResponse ScanWorkflowExecutions( + ListWorkflowExecutionsRequest listRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + ClientVersionNotSupportedError, TException { + return impl.ScanWorkflowExecutions(listRequest); + } - @Override - public ClusterInfo GetClusterInfo() throws InternalServiceError, ServiceBusyError, TException { - return impl.GetClusterInfo(); - } + @Override + public CountWorkflowExecutionsResponse CountWorkflowExecutions( + CountWorkflowExecutionsRequest countRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + ClientVersionNotSupportedError, TException { + return impl.CountWorkflowExecutions(countRequest); + } - @Override - public ListTaskListPartitionsResponse ListTaskListPartitions( - ListTaskListPartitionsRequest request) - throws BadRequestError, EntityNotExistsError, LimitExceededError, ServiceBusyError, - TException { - return impl.ListTaskListPartitions(request); - } + @Override + public GetSearchAttributesResponse GetSearchAttributes() + throws InternalServiceError, ServiceBusyError, ClientVersionNotSupportedError, TException { + return impl.GetSearchAttributes(); + } - @Override - public void RefreshWorkflowTasks(RefreshWorkflowTasksRequest request) - throws BadRequestError, DomainNotActiveError, ServiceBusyError, EntityNotExistsError, - TException { - impl.RefreshWorkflowTasks(request); - } + @Override + public void RespondQueryTaskCompleted(RespondQueryTaskCompletedRequest completeRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondQueryTaskCompleted(completeRequest); + } - @Override - public void RegisterDomain( - RegisterDomainRequest registerRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RegisterDomain(registerRequest, resultHandler); - } + @Override + public ResetStickyTaskListResponse ResetStickyTaskList(ResetStickyTaskListRequest resetRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, LimitExceededError, + ServiceBusyError, DomainNotActiveError, TException { + return impl.ResetStickyTaskList(resetRequest); + } - @Override - public void DescribeDomain( - DescribeDomainRequest describeRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.DescribeDomain(describeRequest, resultHandler); - } + @Override + public QueryWorkflowResponse QueryWorkflow(QueryWorkflowRequest queryRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, QueryFailedError, + TException { + return impl.QueryWorkflow(queryRequest); + } - @Override - public void ListDomains(ListDomainsRequest listRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ListDomains(listRequest, resultHandler); - } + @Override + public DescribeWorkflowExecutionResponse DescribeWorkflowExecution( + DescribeWorkflowExecutionRequest describeRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { + return impl.DescribeWorkflowExecution(describeRequest); + } - @Override - public void UpdateDomain(UpdateDomainRequest updateRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.UpdateDomain(updateRequest, resultHandler); - } + @Override + public DescribeTaskListResponse DescribeTaskList(DescribeTaskListRequest request) + throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { + return impl.DescribeTaskList(request); + } - @Override - public void DeprecateDomain( - DeprecateDomainRequest deprecateRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.DeprecateDomain(deprecateRequest, resultHandler); - } + @Override + public ClusterInfo GetClusterInfo() throws InternalServiceError, ServiceBusyError, TException { + return impl.GetClusterInfo(); + } - @Override - public void RestartWorkflowExecution( - RestartWorkflowExecutionRequest restartRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RestartWorkflowExecution(restartRequest, resultHandler); - } + @Override + public ListTaskListPartitionsResponse ListTaskListPartitions( + ListTaskListPartitionsRequest request) + throws BadRequestError, EntityNotExistsError, LimitExceededError, ServiceBusyError, + TException { + return impl.ListTaskListPartitions(request); + } - @Override - public void GetTaskListsByDomain( - GetTaskListsByDomainRequest request, AsyncMethodCallback resultHandler) - throws org.apache.thrift.TException { - impl.GetTaskListsByDomain(request, resultHandler); - } + @Override + public void RefreshWorkflowTasks(RefreshWorkflowTasksRequest request) + throws BadRequestError, DomainNotActiveError, ServiceBusyError, EntityNotExistsError, + TException { + impl.RefreshWorkflowTasks(request); + } - @Override - public void StartWorkflowExecution( - StartWorkflowExecutionRequest startRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.StartWorkflowExecution(startRequest, resultHandler); - } + @Override + public void RegisterDomain( + RegisterDomainRequest registerRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RegisterDomain(registerRequest, resultHandler); + } - @Override - public void StartWorkflowExecutionAsync( - StartWorkflowExecutionAsyncRequest startRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.StartWorkflowExecutionAsync(startRequest, resultHandler); - } + @Override + public void DescribeDomain( + DescribeDomainRequest describeRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.DescribeDomain(describeRequest, resultHandler); + } - @Override - public void StartWorkflowExecutionWithTimeout( - StartWorkflowExecutionRequest startRequest, - AsyncMethodCallback resultHandler, - Long timeoutInMillis) - throws TException { - impl.StartWorkflowExecutionWithTimeout(startRequest, resultHandler, timeoutInMillis); - } + @Override + public void ListDomains(ListDomainsRequest listRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ListDomains(listRequest, resultHandler); + } - @Override - public void StartWorkflowExecutionAsyncWithTimeout( - StartWorkflowExecutionAsyncRequest startAsyncRequest, - AsyncMethodCallback resultHandler, - Long timeoutInMillis) - throws TException { - impl.StartWorkflowExecutionAsyncWithTimeout( - startAsyncRequest, resultHandler, timeoutInMillis); - } + @Override + public void UpdateDomain(UpdateDomainRequest updateRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.UpdateDomain(updateRequest, resultHandler); + } - @Override - public void GetWorkflowExecutionHistory( - GetWorkflowExecutionHistoryRequest getRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.GetWorkflowExecutionHistory(getRequest, resultHandler); - } + @Override + public void DeprecateDomain( + DeprecateDomainRequest deprecateRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.DeprecateDomain(deprecateRequest, resultHandler); + } - @Override - public void GetWorkflowExecutionHistoryWithTimeout( - GetWorkflowExecutionHistoryRequest getRequest, - AsyncMethodCallback resultHandler, - Long timeoutInMillis) - throws TException { - impl.GetWorkflowExecutionHistoryWithTimeout(getRequest, resultHandler, timeoutInMillis); - } + @Override + public void RestartWorkflowExecution( + RestartWorkflowExecutionRequest restartRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RestartWorkflowExecution(restartRequest, resultHandler); + } - @Override - public void PollForDecisionTask( - PollForDecisionTaskRequest pollRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.PollForDecisionTask(pollRequest, resultHandler); - } + @Override + public void GetTaskListsByDomain( + GetTaskListsByDomainRequest request, AsyncMethodCallback resultHandler) + throws TException { + impl.GetTaskListsByDomain(request, resultHandler); + } - @Override - public void RespondDecisionTaskCompleted( - RespondDecisionTaskCompletedRequest completeRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondDecisionTaskCompleted(completeRequest, resultHandler); - } + @Override + public void StartWorkflowExecution( + StartWorkflowExecutionRequest startRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.StartWorkflowExecution(startRequest, resultHandler); + } - @Override - public void RespondDecisionTaskFailed( - RespondDecisionTaskFailedRequest failedRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondDecisionTaskFailed(failedRequest, resultHandler); - } + @Override + public void StartWorkflowExecutionAsync( + StartWorkflowExecutionAsyncRequest startRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.StartWorkflowExecutionAsync(startRequest, resultHandler); + } - @Override - public void PollForActivityTask( - PollForActivityTaskRequest pollRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.PollForActivityTask(pollRequest, resultHandler); - } + @Override + public void StartWorkflowExecutionWithTimeout( + StartWorkflowExecutionRequest startRequest, + AsyncMethodCallback resultHandler, + Long timeoutInMillis) + throws TException { + impl.StartWorkflowExecutionWithTimeout(startRequest, resultHandler, timeoutInMillis); + } - @Override - public void RecordActivityTaskHeartbeat( - RecordActivityTaskHeartbeatRequest heartbeatRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RecordActivityTaskHeartbeat(heartbeatRequest, resultHandler); - } + @Override + public void StartWorkflowExecutionAsyncWithTimeout( + StartWorkflowExecutionAsyncRequest startAsyncRequest, + AsyncMethodCallback resultHandler, + Long timeoutInMillis) + throws TException { + impl.StartWorkflowExecutionAsyncWithTimeout( + startAsyncRequest, resultHandler, timeoutInMillis); + } - @Override - public void RecordActivityTaskHeartbeatByID( - RecordActivityTaskHeartbeatByIDRequest heartbeatRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RecordActivityTaskHeartbeatByID(heartbeatRequest, resultHandler); - } + @Override + public void GetWorkflowExecutionHistory( + GetWorkflowExecutionHistoryRequest getRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.GetWorkflowExecutionHistory(getRequest, resultHandler); + } - @Override - public void RespondActivityTaskCompleted( - RespondActivityTaskCompletedRequest completeRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondActivityTaskCompleted(completeRequest, resultHandler); - } + @Override + public void GetWorkflowExecutionHistoryWithTimeout( + GetWorkflowExecutionHistoryRequest getRequest, + AsyncMethodCallback resultHandler, + Long timeoutInMillis) + throws TException { + impl.GetWorkflowExecutionHistoryWithTimeout(getRequest, resultHandler, timeoutInMillis); + } - @Override - public void RespondActivityTaskCompletedByID( - RespondActivityTaskCompletedByIDRequest completeRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondActivityTaskCompletedByID(completeRequest, resultHandler); - } + @Override + public void PollForDecisionTask( + PollForDecisionTaskRequest pollRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.PollForDecisionTask(pollRequest, resultHandler); + } - @Override - public void RespondActivityTaskFailed( - RespondActivityTaskFailedRequest failRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondActivityTaskFailed(failRequest, resultHandler); - } + @Override + public void RespondDecisionTaskCompleted( + RespondDecisionTaskCompletedRequest completeRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondDecisionTaskCompleted(completeRequest, resultHandler); + } - @Override - public void RespondActivityTaskFailedByID( - RespondActivityTaskFailedByIDRequest failRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondActivityTaskFailedByID(failRequest, resultHandler); - } + @Override + public void RespondDecisionTaskFailed( + RespondDecisionTaskFailedRequest failedRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondDecisionTaskFailed(failedRequest, resultHandler); + } - @Override - public void RespondActivityTaskCanceled( - RespondActivityTaskCanceledRequest canceledRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondActivityTaskCanceled(canceledRequest, resultHandler); - } + @Override + public void PollForActivityTask( + PollForActivityTaskRequest pollRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.PollForActivityTask(pollRequest, resultHandler); + } - @Override - public void RespondActivityTaskCanceledByID( - RespondActivityTaskCanceledByIDRequest canceledRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondActivityTaskCanceledByID(canceledRequest, resultHandler); - } + @Override + public void RecordActivityTaskHeartbeat( + RecordActivityTaskHeartbeatRequest heartbeatRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RecordActivityTaskHeartbeat(heartbeatRequest, resultHandler); + } - @Override - public void RequestCancelWorkflowExecution( - RequestCancelWorkflowExecutionRequest cancelRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RequestCancelWorkflowExecution(cancelRequest, resultHandler); - } + @Override + public void RecordActivityTaskHeartbeatByID( + RecordActivityTaskHeartbeatByIDRequest heartbeatRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RecordActivityTaskHeartbeatByID(heartbeatRequest, resultHandler); + } - @Override - public void SignalWorkflowExecution( - SignalWorkflowExecutionRequest signalRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.SignalWorkflowExecution(signalRequest, resultHandler); - } + @Override + public void RespondActivityTaskCompleted( + RespondActivityTaskCompletedRequest completeRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondActivityTaskCompleted(completeRequest, resultHandler); + } - @Override - public void SignalWorkflowExecutionWithTimeout( - SignalWorkflowExecutionRequest signalRequest, - AsyncMethodCallback resultHandler, - Long timeoutInMillis) - throws TException { - impl.SignalWorkflowExecutionWithTimeout(signalRequest, resultHandler, timeoutInMillis); - } + @Override + public void RespondActivityTaskCompletedByID( + RespondActivityTaskCompletedByIDRequest completeRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondActivityTaskCompletedByID(completeRequest, resultHandler); + } - @Override - public void SignalWithStartWorkflowExecution( - SignalWithStartWorkflowExecutionRequest signalWithStartRequest, - AsyncMethodCallback resultHandler) - throws TException { - impl.SignalWithStartWorkflowExecution(signalWithStartRequest, resultHandler); - } + @Override + public void RespondActivityTaskFailed( + RespondActivityTaskFailedRequest failRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondActivityTaskFailed(failRequest, resultHandler); + } - @Override - public void SignalWithStartWorkflowExecutionAsync( - SignalWithStartWorkflowExecutionAsyncRequest signalWithStartRequest, - AsyncMethodCallback resultHandler) - throws TException { - impl.SignalWithStartWorkflowExecutionAsync(signalWithStartRequest, resultHandler); - } + @Override + public void RespondActivityTaskFailedByID( + RespondActivityTaskFailedByIDRequest failRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondActivityTaskFailedByID(failRequest, resultHandler); + } - @Override - public void ResetWorkflowExecution( - ResetWorkflowExecutionRequest resetRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ResetWorkflowExecution(resetRequest, resultHandler); - } + @Override + public void RespondActivityTaskCanceled( + RespondActivityTaskCanceledRequest canceledRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondActivityTaskCanceled(canceledRequest, resultHandler); + } - @Override - public void TerminateWorkflowExecution( - TerminateWorkflowExecutionRequest terminateRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.TerminateWorkflowExecution(terminateRequest, resultHandler); - } + @Override + public void RespondActivityTaskCanceledByID( + RespondActivityTaskCanceledByIDRequest canceledRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondActivityTaskCanceledByID(canceledRequest, resultHandler); + } - @Override - public void ListOpenWorkflowExecutions( - ListOpenWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ListOpenWorkflowExecutions(listRequest, resultHandler); - } + @Override + public void RequestCancelWorkflowExecution( + RequestCancelWorkflowExecutionRequest cancelRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RequestCancelWorkflowExecution(cancelRequest, resultHandler); + } - @Override - public void ListClosedWorkflowExecutions( - ListClosedWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ListClosedWorkflowExecutions(listRequest, resultHandler); - } + @Override + public void SignalWorkflowExecution( + SignalWorkflowExecutionRequest signalRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.SignalWorkflowExecution(signalRequest, resultHandler); + } - @Override - public void ListWorkflowExecutions( - ListWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ListWorkflowExecutions(listRequest, resultHandler); - } + @Override + public void SignalWorkflowExecutionWithTimeout( + SignalWorkflowExecutionRequest signalRequest, + AsyncMethodCallback resultHandler, + Long timeoutInMillis) + throws TException { + impl.SignalWorkflowExecutionWithTimeout(signalRequest, resultHandler, timeoutInMillis); + } - @Override - public void ListArchivedWorkflowExecutions( - ListArchivedWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ListArchivedWorkflowExecutions(listRequest, resultHandler); - } + @Override + public void SignalWithStartWorkflowExecution( + SignalWithStartWorkflowExecutionRequest signalWithStartRequest, + AsyncMethodCallback resultHandler) + throws TException { + impl.SignalWithStartWorkflowExecution(signalWithStartRequest, resultHandler); + } - @Override - public void ScanWorkflowExecutions( - ListWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ScanWorkflowExecutions(listRequest, resultHandler); - } + @Override + public void SignalWithStartWorkflowExecutionAsync( + SignalWithStartWorkflowExecutionAsyncRequest signalWithStartRequest, + AsyncMethodCallback resultHandler) + throws TException { + impl.SignalWithStartWorkflowExecutionAsync(signalWithStartRequest, resultHandler); + } - @Override - public void CountWorkflowExecutions( - CountWorkflowExecutionsRequest countRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.CountWorkflowExecutions(countRequest, resultHandler); - } + @Override + public void ResetWorkflowExecution( + ResetWorkflowExecutionRequest resetRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ResetWorkflowExecution(resetRequest, resultHandler); + } - @Override - public void GetSearchAttributes(AsyncMethodCallback resultHandler) throws TException { - impl.GetSearchAttributes(resultHandler); - } + @Override + public void TerminateWorkflowExecution( + TerminateWorkflowExecutionRequest terminateRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.TerminateWorkflowExecution(terminateRequest, resultHandler); + } - @Override - public void RespondQueryTaskCompleted( - RespondQueryTaskCompletedRequest completeRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.RespondQueryTaskCompleted(completeRequest, resultHandler); - } + @Override + public void ListOpenWorkflowExecutions( + ListOpenWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ListOpenWorkflowExecutions(listRequest, resultHandler); + } - @Override - public void ResetStickyTaskList( - ResetStickyTaskListRequest resetRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.ResetStickyTaskList(resetRequest, resultHandler); - } + @Override + public void ListClosedWorkflowExecutions( + ListClosedWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ListClosedWorkflowExecutions(listRequest, resultHandler); + } - @Override - public void QueryWorkflow(QueryWorkflowRequest queryRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.QueryWorkflow(queryRequest, resultHandler); - } + @Override + public void ListWorkflowExecutions( + ListWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ListWorkflowExecutions(listRequest, resultHandler); + } - @Override - public void DescribeWorkflowExecution( - DescribeWorkflowExecutionRequest describeRequest, AsyncMethodCallback resultHandler) - throws TException { - impl.DescribeWorkflowExecution(describeRequest, resultHandler); - } + @Override + public void ListArchivedWorkflowExecutions( + ListArchivedWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ListArchivedWorkflowExecutions(listRequest, resultHandler); + } - @Override - public void DescribeTaskList(DescribeTaskListRequest request, AsyncMethodCallback resultHandler) - throws TException { - impl.DescribeTaskList(request, resultHandler); - } + @Override + public void ScanWorkflowExecutions( + ListWorkflowExecutionsRequest listRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ScanWorkflowExecutions(listRequest, resultHandler); + } - @Override - public void GetClusterInfo(AsyncMethodCallback resultHandler) throws TException {} + @Override + public void CountWorkflowExecutions( + CountWorkflowExecutionsRequest countRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.CountWorkflowExecutions(countRequest, resultHandler); + } - @Override - public void ListTaskListPartitions( - ListTaskListPartitionsRequest request, AsyncMethodCallback resultHandler) - throws TException {} + @Override + public void GetSearchAttributes(AsyncMethodCallback resultHandler) throws TException { + impl.GetSearchAttributes(resultHandler); + } - @Override - public void RefreshWorkflowTasks( - RefreshWorkflowTasksRequest request, AsyncMethodCallback resultHandler) throws TException {} + @Override + public void RespondQueryTaskCompleted( + RespondQueryTaskCompletedRequest completeRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.RespondQueryTaskCompleted(completeRequest, resultHandler); + } - @Override - public void RegisterDomain(RegisterDomainRequest registerRequest) - throws BadRequestError, InternalServiceError, DomainAlreadyExistsError, TException { - impl.RegisterDomain(registerRequest); - } + @Override + public void ResetStickyTaskList( + ResetStickyTaskListRequest resetRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.ResetStickyTaskList(resetRequest, resultHandler); + } - @Override - public DescribeDomainResponse DescribeDomain(DescribeDomainRequest describeRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { - return impl.DescribeDomain(describeRequest); - } + @Override + public void QueryWorkflow(QueryWorkflowRequest queryRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.QueryWorkflow(queryRequest, resultHandler); + } - @Override - public ListDomainsResponse ListDomains(ListDomainsRequest listRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - TException { - return impl.ListDomains(listRequest); - } + @Override + public void DescribeWorkflowExecution( + DescribeWorkflowExecutionRequest describeRequest, AsyncMethodCallback resultHandler) + throws TException { + impl.DescribeWorkflowExecution(describeRequest, resultHandler); + } - @Override - public UpdateDomainResponse UpdateDomain(UpdateDomainRequest updateRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { - return impl.UpdateDomain(updateRequest); - } + @Override + public void DescribeTaskList(DescribeTaskListRequest request, AsyncMethodCallback resultHandler) + throws TException { + impl.DescribeTaskList(request, resultHandler); + } - @Override - public void DeprecateDomain(DeprecateDomainRequest deprecateRequest) - throws BadRequestError, EntityNotExistsError, LimitExceededError, ServiceBusyError, - ClientVersionNotSupportedError, TException { - impl.DeprecateDomain(deprecateRequest); - } + @Override + public void GetClusterInfo(AsyncMethodCallback resultHandler) throws TException { + impl.GetClusterInfo(resultHandler); + } - @Override - public RestartWorkflowExecutionResponse RestartWorkflowExecution( - RestartWorkflowExecutionRequest restartRequest) - throws BadRequestError, ServiceBusyError, DomainNotActiveError, LimitExceededError, - EntityNotExistsError, ClientVersionNotSupportedError, TException { - return impl.RestartWorkflowExecution(restartRequest); - } + @Override + public void ListTaskListPartitions( + ListTaskListPartitionsRequest request, AsyncMethodCallback resultHandler) + throws TException { + impl.ListTaskListPartitions(request, resultHandler); + } - @Override - public GetTaskListsByDomainResponse GetTaskListsByDomain(GetTaskListsByDomainRequest request) - throws BadRequestError, EntityNotExistsError, LimitExceededError, ServiceBusyError, - ClientVersionNotSupportedError, TException { - return impl.GetTaskListsByDomain(request); - } + @Override + public void RefreshWorkflowTasks( + RefreshWorkflowTasksRequest request, AsyncMethodCallback resultHandler) throws TException { + impl.RefreshWorkflowTasks(request, resultHandler); + } - @Override - public StartWorkflowExecutionResponse StartWorkflowExecution( - StartWorkflowExecutionRequest startRequest) - throws BadRequestError, InternalServiceError, WorkflowExecutionAlreadyStartedError, - ServiceBusyError, TException { - return impl.StartWorkflowExecution(startRequest); - } + @Override + public void RegisterDomain(RegisterDomainRequest registerRequest) + throws BadRequestError, InternalServiceError, DomainAlreadyExistsError, TException { + impl.RegisterDomain(registerRequest); + } - @Override - public StartWorkflowExecutionAsyncResponse StartWorkflowExecutionAsync( - StartWorkflowExecutionAsyncRequest startRequest) - throws BadRequestError, WorkflowExecutionAlreadyStartedError, ServiceBusyError, - DomainNotActiveError, LimitExceededError, EntityNotExistsError, - ClientVersionNotSupportedError, TException { - return impl.StartWorkflowExecutionAsync(startRequest); - } + @Override + public DescribeDomainResponse DescribeDomain(DescribeDomainRequest describeRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { + return impl.DescribeDomain(describeRequest); + } - @Override - public GetWorkflowExecutionHistoryResponse GetWorkflowExecutionHistory( - GetWorkflowExecutionHistoryRequest getRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - TException { - return impl.GetWorkflowExecutionHistory(getRequest); - } + @Override + public ListDomainsResponse ListDomains(ListDomainsRequest listRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + TException { + return impl.ListDomains(listRequest); + } - @Override - public GetWorkflowExecutionHistoryResponse GetWorkflowExecutionHistoryWithTimeout( - GetWorkflowExecutionHistoryRequest getRequest, Long timeoutInMillis) - throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, - TException { - return impl.GetWorkflowExecutionHistoryWithTimeout(getRequest, timeoutInMillis); - } + @Override + public UpdateDomainResponse UpdateDomain(UpdateDomainRequest updateRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, TException { + return impl.UpdateDomain(updateRequest); + } - @Override - public PollForDecisionTaskResponse PollForDecisionTask(PollForDecisionTaskRequest pollRequest) - throws BadRequestError, InternalServiceError, ServiceBusyError, TException { - return impl.PollForDecisionTask(pollRequest); - } + @Override + public void DeprecateDomain(DeprecateDomainRequest deprecateRequest) + throws BadRequestError, EntityNotExistsError, LimitExceededError, ServiceBusyError, + ClientVersionNotSupportedError, TException { + impl.DeprecateDomain(deprecateRequest); + } - @Override - public RespondDecisionTaskCompletedResponse RespondDecisionTaskCompleted( - RespondDecisionTaskCompletedRequest completeRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - return impl.RespondDecisionTaskCompleted(completeRequest); - } + @Override + public RestartWorkflowExecutionResponse RestartWorkflowExecution( + RestartWorkflowExecutionRequest restartRequest) + throws BadRequestError, ServiceBusyError, DomainNotActiveError, LimitExceededError, + EntityNotExistsError, ClientVersionNotSupportedError, TException { + return impl.RestartWorkflowExecution(restartRequest); + } - @Override - public void RespondDecisionTaskFailed(RespondDecisionTaskFailedRequest failedRequest) - throws BadRequestError, InternalServiceError, EntityNotExistsError, - WorkflowExecutionAlreadyCompletedError, TException { - impl.RespondDecisionTaskFailed(failedRequest); - } + @Override + public GetTaskListsByDomainResponse GetTaskListsByDomain(GetTaskListsByDomainRequest request) + throws BadRequestError, EntityNotExistsError, LimitExceededError, ServiceBusyError, + ClientVersionNotSupportedError, TException { + return impl.GetTaskListsByDomain(request); + } - @Override - public PollForActivityTaskResponse PollForActivityTask(PollForActivityTaskRequest pollRequest) - throws BadRequestError, InternalServiceError, ServiceBusyError, TException { - return impl.PollForActivityTask(pollRequest); - } + @Override + public StartWorkflowExecutionResponse StartWorkflowExecution( + StartWorkflowExecutionRequest startRequest) + throws BadRequestError, InternalServiceError, WorkflowExecutionAlreadyStartedError, + ServiceBusyError, TException { + return impl.StartWorkflowExecution(startRequest); + } - @Override - public void close() { - impl.close(); + @Override + public StartWorkflowExecutionAsyncResponse StartWorkflowExecutionAsync( + StartWorkflowExecutionAsyncRequest startRequest) + throws BadRequestError, WorkflowExecutionAlreadyStartedError, ServiceBusyError, + DomainNotActiveError, LimitExceededError, EntityNotExistsError, + ClientVersionNotSupportedError, TException { + return impl.StartWorkflowExecutionAsync(startRequest); + } + + @Override + public GetWorkflowExecutionHistoryResponse GetWorkflowExecutionHistory( + GetWorkflowExecutionHistoryRequest getRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + TException { + return impl.GetWorkflowExecutionHistory(getRequest); + } + + @Override + public GetWorkflowExecutionHistoryResponse GetWorkflowExecutionHistoryWithTimeout( + GetWorkflowExecutionHistoryRequest getRequest, Long timeoutInMillis) + throws BadRequestError, InternalServiceError, EntityNotExistsError, ServiceBusyError, + TException { + return impl.GetWorkflowExecutionHistoryWithTimeout(getRequest, timeoutInMillis); + } + + @Override + public PollForDecisionTaskResponse PollForDecisionTask(PollForDecisionTaskRequest pollRequest) + throws BadRequestError, InternalServiceError, ServiceBusyError, TException { + return impl.PollForDecisionTask(pollRequest); + } + + @Override + public RespondDecisionTaskCompletedResponse RespondDecisionTaskCompleted( + RespondDecisionTaskCompletedRequest completeRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + return impl.RespondDecisionTaskCompleted(completeRequest); + } + + @Override + public void RespondDecisionTaskFailed(RespondDecisionTaskFailedRequest failedRequest) + throws BadRequestError, InternalServiceError, EntityNotExistsError, + WorkflowExecutionAlreadyCompletedError, TException { + impl.RespondDecisionTaskFailed(failedRequest); + } + + @Override + public PollForActivityTaskResponse PollForActivityTask(PollForActivityTaskRequest pollRequest) + throws BadRequestError, InternalServiceError, ServiceBusyError, TException { + return impl.PollForActivityTask(pollRequest); + } + + @Override + public void close() { + impl.close(); + } } - } } diff --git a/src/test/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternalTest.java b/src/test/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternalTest.java index 780fbc79..23c94f85 100644 --- a/src/test/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternalTest.java +++ b/src/test/java/com/uber/cadence/internal/sync/TestActivityEnvironmentInternalTest.java @@ -24,212 +24,352 @@ Modifications copyright (C) 2017 Uber Technologies, Inc. import com.uber.cadence.serviceclient.IWorkflowService; import com.uber.cadence.workflow.Functions; import com.uber.cadence.workflow.WorkflowInterceptorBase; + import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.time.Duration; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.function.BiPredicate; import java.util.function.Supplier; + import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import static org.mockito.Mockito.*; + public class TestActivityEnvironmentInternalTest { - @Mock private IWorkflowService mockWorkflowService; + @Mock + private IWorkflowService mockWorkflowService; - @Mock private WorkflowInterceptorBase mockNext; + @Mock + private WorkflowInterceptorBase mockNext; - private Object testActivityExecutor; + private Object testActivityExecutor; - // Helper method to find the inner class - private Class findTestActivityExecutorClass() { - for (Class declaredClass : TestActivityEnvironmentInternal.class.getDeclaredClasses()) { - if (declaredClass.getSimpleName().equals("TestActivityExecutor")) { - return declaredClass; - } + private Object testWorkflowServiceWrapper; + + // Helper method to find the inner class + private Class findTestActivityExecutorClass() { + for (Class declaredClass : TestActivityEnvironmentInternal.class.getDeclaredClasses()) { + if (declaredClass.getSimpleName().equals("TestActivityExecutor")) { + return declaredClass; + } + } + throw new RuntimeException("Could not find TestActivityExecutor inner class"); } - throw new RuntimeException("Could not find TestActivityExecutor inner class"); - } - - // Helper method to print all methods - private void printMethods(Class clazz) { - System.out.println("Methods for " + clazz.getName() + ":"); - for (Method method : clazz.getDeclaredMethods()) { - System.out.println(" " + method); + + // Helper method to find the inner class + private Class findWorkflowServiceWrapperClass() { + for (Class declaredClass : TestActivityEnvironmentInternal.class.getDeclaredClasses()) { + if (declaredClass.getSimpleName().equals("WorkflowServiceWrapper")) { + return declaredClass; + } + } + throw new RuntimeException("Could not find WorkflowServiceWrapper inner class"); } - } - - @Before - public void setUp() { - MockitoAnnotations.openMocks(this); - - try { - // Find the inner class first - Class innerClass = findTestActivityExecutorClass(); - - // Get the constructor with the specific parameter types - Constructor constructor = - innerClass.getDeclaredConstructor( - TestActivityEnvironmentInternal.class, - IWorkflowService.class, - WorkflowInterceptorBase.class); - constructor.setAccessible(true); - - // Create an instance of the outer class - TestActivityEnvironmentInternal outerInstance = mock(TestActivityEnvironmentInternal.class); - - // Create the instance - testActivityExecutor = constructor.newInstance(outerInstance, mockWorkflowService, mockNext); - - // Debug print the class and methods - System.out.println("TestActivityExecutor class: " + innerClass); - printMethods(innerClass); - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException("Failed to set up test: " + e.getMessage(), e); + + @Before + public void setUp() { + MockitoAnnotations.openMocks(this); + + setupActivityExecutor(); + + setupWorkflowServiceWrapper(); } - } - - @Test - public void testAllMethodsThrowUnsupportedOperationException() throws Exception { - // Define test cases for different methods - MethodTestCase[] methodCases = { - // Signature: newRandom() - new MethodTestCase("newRandom", new Class[0], new Object[0]), - - // Signature: signalExternalWorkflow(String, WorkflowExecution, String, Object[]) - new MethodTestCase( - "signalExternalWorkflow", - new Class[] {String.class, WorkflowExecution.class, String.class, Object[].class}, - new Object[] { - "testSignal", mock(WorkflowExecution.class), "signalName", new Object[] {} - }), - - // Signature: signalExternalWorkflow(WorkflowExecution, String, Object[]) - new MethodTestCase( - "signalExternalWorkflow", - new Class[] {WorkflowExecution.class, String.class, Object[].class}, - new Object[] {mock(WorkflowExecution.class), "signalName", new Object[] {}}), - - // Signature: cancelWorkflow(WorkflowExecution) - new MethodTestCase( - "cancelWorkflow", - new Class[] {WorkflowExecution.class}, - new Object[] {mock(WorkflowExecution.class)}), - - // Signature: sleep(Duration) - new MethodTestCase( - "sleep", new Class[] {Duration.class}, new Object[] {Duration.ofSeconds(1)}), - - // Signature: await(Duration, String, Supplier) - new MethodTestCase( - "await", - new Class[] {Duration.class, String.class, Supplier.class}, - new Object[] {Duration.ofSeconds(1), "testReason", (Supplier) () -> true}), - - // Signature: await(String, Supplier) - new MethodTestCase( - "await", - new Class[] {String.class, Supplier.class}, - new Object[] {"testReason", (Supplier) () -> true}), - - // Signature: newTimer(Duration) - new MethodTestCase( - "newTimer", new Class[] {Duration.class}, new Object[] {Duration.ofSeconds(1)}), - - // Signature: sideEffect(Class, Type, Functions.Func) - new MethodTestCase( - "sideEffect", - new Class[] {Class.class, Type.class, Functions.Func.class}, - new Object[] {String.class, String.class, (Functions.Func) () -> "test"}), - - // Signature: mutableSideEffect(String, Class, Type, BiPredicate, Functions.Func) - new MethodTestCase( - "mutableSideEffect", - new Class[] { - String.class, Class.class, Type.class, BiPredicate.class, Functions.Func.class - }, - new Object[] { - "testId", - String.class, - String.class, - (BiPredicate) (a, b) -> false, - (Functions.Func) () -> "test" - }), - - // Signature: getVersion(String, int, int) - new MethodTestCase( - "getVersion", - new Class[] {String.class, int.class, int.class}, - new Object[] {"changeId", 0, 1}), - - // Signature: continueAsNew(Optional, Optional, Object[]) - new MethodTestCase( - "continueAsNew", - new Class[] {Optional.class, Optional.class, Object[].class}, - new Object[] {Optional.empty(), Optional.empty(), new Object[] {}}), - - // Signature: registerQuery(String, Type[], Func1) - new MethodTestCase( - "registerQuery", - new Class[] {String.class, Type[].class, Functions.Func1.class}, - new Object[] { - "queryType", - new Type[] {String.class}, - (Functions.Func1) args -> "result" - }), - - // Signature: randomUUID() - new MethodTestCase("randomUUID", new Class[0], new Object[0]), - - // Signature: upsertSearchAttributes(Map) - new MethodTestCase( - "upsertSearchAttributes", - new Class[] {Map.class}, - new Object[] {java.util.Collections.emptyMap()}) - }; - - // Test each method - for (MethodTestCase testCase : methodCases) { - try { - // Find the method - Method method = - testActivityExecutor - .getClass() - .getDeclaredMethod(testCase.methodName, testCase.parameterTypes); - method.setAccessible(true); - - // Invoke the method - Object result = method.invoke(testActivityExecutor, testCase.arguments); - - // If we get here, the method did not throw UnsupportedOperationException - fail("Expected UnsupportedOperationException for method " + testCase.methodName); - - } catch (Exception e) { - // Check if the cause is UnsupportedOperationException - if (!(e.getCause() instanceof UnsupportedOperationException)) { - // If it's not the expected exception, rethrow - throw new RuntimeException("Unexpected exception for method " + testCase.methodName, e); + + private void setupActivityExecutor() { + try { + // Find the inner class first + Class innerClass = findTestActivityExecutorClass(); + + // Get the constructor with the specific parameter types + Constructor constructor = + innerClass.getDeclaredConstructor( + TestActivityEnvironmentInternal.class, + IWorkflowService.class, + WorkflowInterceptorBase.class); + constructor.setAccessible(true); + + // Create an instance of the outer class + TestActivityEnvironmentInternal outerInstance = mock(TestActivityEnvironmentInternal.class); + + // Create the instance + testActivityExecutor = constructor.newInstance(outerInstance, mockWorkflowService, mockNext); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Failed to set up test: " + e.getMessage(), e); } - // Expected behavior - UnsupportedOperationException was thrown - // Continue to next method - } } - } - - // Helper class to encapsulate method test cases - private static class MethodTestCase { - String methodName; - Class[] parameterTypes; - Object[] arguments; - - MethodTestCase(String methodName, Class[] parameterTypes, Object[] arguments) { - this.methodName = methodName; - this.parameterTypes = parameterTypes; - this.arguments = arguments; + + private void setupWorkflowServiceWrapper() { + try { + // Find the inner class first + Class innerClass = findWorkflowServiceWrapperClass(); + + // Get the constructor with the specific parameter types + Constructor constructor = + innerClass.getDeclaredConstructor( + TestActivityEnvironmentInternal.class, + IWorkflowService.class); + constructor.setAccessible(true); + + // Create an instance of the outer class + TestActivityEnvironmentInternal outerInstance = mock(TestActivityEnvironmentInternal.class); + + // Create the instance + testWorkflowServiceWrapper = constructor.newInstance(outerInstance, mockWorkflowService); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Failed to set up test: " + e.getMessage(), e); + } + } + + @Test + public void testWorkflowServiceWrapperMethodDelegation() throws Exception { + // Prepare test cases + List testCases = prepareMethodTestCases(); + + System.out.println(testCases); + + // Test each method + for (MethodTestCase testCase : testCases) { + try { + // Find the method on the wrapper + Method wrapperMethod = testWorkflowServiceWrapper.getClass().getMethod( + testCase.methodName, + testCase.parameterTypes + ); + + // Invoke the method on the wrapper + wrapperMethod.invoke(testWorkflowServiceWrapper, testCase.arguments); + + // Generic verification using reflection + verifyMethodInvocation(mockWorkflowService, testCase); + + } catch (Exception e) { + // Rethrow to fail the test if any unexpected exception occurs + throw new AssertionError("Failed to test method: " + testCase.methodName, e); + } + } + } + + @Test + public void testAllMethodsThrowUnsupportedOperationException() throws Exception { + // Define test cases for different methods + MethodTestCase[] methodCases = { + // Signature: newRandom() + new MethodTestCase("newRandom", new Class[0], new Object[0]), + + // Signature: signalExternalWorkflow(String, WorkflowExecution, String, Object[]) + new MethodTestCase( + "signalExternalWorkflow", + new Class[]{String.class, WorkflowExecution.class, String.class, Object[].class}, + new Object[]{ + "testSignal", mock(WorkflowExecution.class), "signalName", new Object[]{} + }), + + // Signature: signalExternalWorkflow(WorkflowExecution, String, Object[]) + new MethodTestCase( + "signalExternalWorkflow", + new Class[]{WorkflowExecution.class, String.class, Object[].class}, + new Object[]{mock(WorkflowExecution.class), "signalName", new Object[]{}}), + + // Signature: cancelWorkflow(WorkflowExecution) + new MethodTestCase( + "cancelWorkflow", + new Class[]{WorkflowExecution.class}, + new Object[]{mock(WorkflowExecution.class)}), + + // Signature: sleep(Duration) + new MethodTestCase( + "sleep", new Class[]{Duration.class}, new Object[]{Duration.ofSeconds(1)}), + + // Signature: await(Duration, String, Supplier) + new MethodTestCase( + "await", + new Class[]{Duration.class, String.class, Supplier.class}, + new Object[]{Duration.ofSeconds(1), "testReason", (Supplier) () -> true}), + + // Signature: await(String, Supplier) + new MethodTestCase( + "await", + new Class[]{String.class, Supplier.class}, + new Object[]{"testReason", (Supplier) () -> true}), + + // Signature: newTimer(Duration) + new MethodTestCase( + "newTimer", new Class[]{Duration.class}, new Object[]{Duration.ofSeconds(1)}), + + // Signature: sideEffect(Class, Type, Functions.Func) + new MethodTestCase( + "sideEffect", + new Class[]{Class.class, Type.class, Functions.Func.class}, + new Object[]{String.class, String.class, (Functions.Func) () -> "test"}), + + // Signature: mutableSideEffect(String, Class, Type, BiPredicate, Functions.Func) + new MethodTestCase( + "mutableSideEffect", + new Class[]{ + String.class, Class.class, Type.class, BiPredicate.class, Functions.Func.class + }, + new Object[]{ + "testId", + String.class, + String.class, + (BiPredicate) (a, b) -> false, + (Functions.Func) () -> "test" + }), + + // Signature: getVersion(String, int, int) + new MethodTestCase( + "getVersion", + new Class[]{String.class, int.class, int.class}, + new Object[]{"changeId", 0, 1}), + + // Signature: continueAsNew(Optional, Optional, Object[]) + new MethodTestCase( + "continueAsNew", + new Class[]{Optional.class, Optional.class, Object[].class}, + new Object[]{Optional.empty(), Optional.empty(), new Object[]{}}), + + // Signature: registerQuery(String, Type[], Func1) + new MethodTestCase( + "registerQuery", + new Class[]{String.class, Type[].class, Functions.Func1.class}, + new Object[]{ + "queryType", + new Type[]{String.class}, + (Functions.Func1) args -> "result" + }), + + // Signature: randomUUID() + new MethodTestCase("randomUUID", new Class[0], new Object[0]), + + // Signature: upsertSearchAttributes(Map) + new MethodTestCase( + "upsertSearchAttributes", + new Class[]{Map.class}, + new Object[]{java.util.Collections.emptyMap()}) + }; + + // Test each method + for (MethodTestCase testCase : methodCases) { + try { + // Find the method + Method method = + testActivityExecutor + .getClass() + .getDeclaredMethod(testCase.methodName, testCase.parameterTypes); + method.setAccessible(true); + + // Invoke the method + Object result = method.invoke(testActivityExecutor, testCase.arguments); + + // If we get here, the method did not throw UnsupportedOperationException + fail("Expected UnsupportedOperationException for method " + testCase.methodName); + + } catch (Exception e) { + // Check if the cause is UnsupportedOperationException + if (!(e.getCause() instanceof UnsupportedOperationException)) { + // If it's not the expected exception, rethrow + throw new RuntimeException("Unexpected exception for method " + testCase.methodName, e); + } + // Expected behavior - UnsupportedOperationException was thrown + // Continue to next method + } + } + } + + // Helper class to encapsulate method test cases + private static class MethodTestCase { + String methodName; + Class[] parameterTypes; + Object[] arguments; + + MethodTestCase(String methodName, Class[] parameterTypes, Object[] arguments) { + this.methodName = methodName; + this.parameterTypes = parameterTypes; + this.arguments = arguments; + } + } + + /** + * Generic method to verify method invocation on mock + */ + private void verifyMethodInvocation(Object mockObject, MethodTestCase testCase) throws Exception { + // Use Mockito's verify with reflection + if (testCase.arguments.length == 0) { + // For methods with no arguments + verify(mockObject).getClass().getMethod(testCase.methodName).invoke(mockObject); + } else { + // For methods with arguments + Method verifyMethod = org.mockito.Mockito.class.getMethod("verify", Object.class); + Object verifiedMock = verifyMethod.invoke(null, mockObject); + + // Invoke the method on the verified mock + verifiedMock.getClass().getMethod(testCase.methodName, testCase.parameterTypes) + .invoke(verifiedMock, testCase.arguments); + } + } + + /** + * Prepares test cases for all methods in IWorkflowService + */ + private List prepareMethodTestCases() throws Exception { + List testCases = new ArrayList<>(); + + // You can add more methods here as needed + // Dynamically discover and add more methods from IWorkflowService if required + Method[] allMethods = IWorkflowService.class.getMethods(); + for (Method method : allMethods) { + // Skip methods already added + // if (testCases.stream().noneMatch(tc -> tc.methodName.equals(method.getName()))) { + testCases.add(createDefaultMethodTestCase(method)); + //} + } + return testCases; + } + + /** + * Creates a default MethodTestCase for a given method + */ + private MethodTestCase createDefaultMethodTestCase(Method method) throws Exception { + Class[] parameterTypes = method.getParameterTypes(); + Object[] arguments = new Object[parameterTypes.length]; + + for (int i = 0; i < parameterTypes.length; i++) { + arguments[i] = createDefaultArgument(parameterTypes[i]); + } + + return new MethodTestCase(method.getName(), parameterTypes, arguments); + } + + /** + * Creates a default argument for different parameter types + */ + private Object createDefaultArgument(Class type) throws Exception { + if (type.isPrimitive()) { + if (type == boolean.class) return false; + if (type == char.class) return '\u0000'; + if (type == byte.class) return (byte) 0; + if (type == short.class) return (short) 0; + if (type == int.class) return 0; + if (type == long.class) return 0L; + if (type == float.class) return 0.0f; + if (type == double.class) return 0.0d; + } + + // For non-primitive types, try to create an empty instance + if (type.getConstructors().length > 0 && + Arrays.stream(type.getConstructors()) + .anyMatch(constructor -> constructor.getParameterCount() == 0)) { + return type.getDeclaredConstructor().newInstance(); + } + + // Fallback for complex types + return null; } - } }