From b5b5e9e78dc6e2051524d313a60eabd1f41b278c Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sat, 30 Aug 2025 14:58:23 -0700 Subject: [PATCH 1/7] Adding logger to WorkflowActivityContext Signed-off-by: Artur Ciocanu --- .../workflows/WorkflowActivityContext.java | 4 +++ .../DefaultWorkflowActivityContext.java | 29 +++++++++++++++++++ .../runtime/DefaultWorkflowContext.java | 1 + 3 files changed, 34 insertions(+) diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivityContext.java b/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivityContext.java index dedde8901b..2391b8f635 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivityContext.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/WorkflowActivityContext.java @@ -13,8 +13,12 @@ package io.dapr.workflows; +import org.slf4j.Logger; + public interface WorkflowActivityContext { + Logger getLogger(); + String getName(); String getTaskExecutionId(); diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java index 8de4f7e747..a893acdee8 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java @@ -15,12 +15,15 @@ import io.dapr.durabletask.TaskActivityContext; import io.dapr.workflows.WorkflowActivityContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Wrapper for Durable Task Framework {@link TaskActivityContext}. */ class DefaultWorkflowActivityContext implements WorkflowActivityContext { private final TaskActivityContext innerContext; + private final Logger logger; /** * Constructor for WorkflowActivityContext. @@ -29,10 +32,36 @@ class DefaultWorkflowActivityContext implements WorkflowActivityContext { * @throws IllegalArgumentException if context is null */ public DefaultWorkflowActivityContext(TaskActivityContext context) throws IllegalArgumentException { + this(context, LoggerFactory.getLogger(WorkflowActivityContext .class)); + } + + /** + * Constructor for WorkflowActivityContext. + * + * @param context TaskActivityContext + * @throws IllegalArgumentException if context is null + */ + public DefaultWorkflowActivityContext(TaskActivityContext context, Logger logger) throws IllegalArgumentException { if (context == null) { throw new IllegalArgumentException("Context cannot be null"); } + + if (logger == null) { + throw new IllegalArgumentException("Logger cannot be null"); + } + this.innerContext = context; + this.logger = logger; + } + + /** + * Gets the logger for the current activity. + * + * @return the logger for the current activity + */ + @Override + public Logger getLogger() { + return this.logger; } /** diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java index d12346ca0f..f76eb00445 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java @@ -63,6 +63,7 @@ public DefaultWorkflowContext(TaskOrchestrationContext context, Logger logger) if (context == null) { throw new IllegalArgumentException("Context cannot be null"); } + if (logger == null) { throw new IllegalArgumentException("Logger cannot be null"); } From bbb175c7bfbfe426bd891073aa52be9078f4b4d9 Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sat, 30 Aug 2025 16:57:35 -0700 Subject: [PATCH 2/7] Fixing a styling issue Signed-off-by: Artur Ciocanu --- .../dapr/workflows/runtime/DefaultWorkflowActivityContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java index a893acdee8..dd30dd8053 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContext.java @@ -32,7 +32,7 @@ class DefaultWorkflowActivityContext implements WorkflowActivityContext { * @throws IllegalArgumentException if context is null */ public DefaultWorkflowActivityContext(TaskActivityContext context) throws IllegalArgumentException { - this(context, LoggerFactory.getLogger(WorkflowActivityContext .class)); + this(context, LoggerFactory.getLogger(WorkflowActivityContext.class)); } /** From 2f3af6dabd7679540fc7e0468fde855ad863e706 Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sat, 30 Aug 2025 22:27:42 -0700 Subject: [PATCH 3/7] Add unit tests for workflow activity context Signed-off-by: Artur Ciocanu --- .../DefaultWorkflowActivityContextTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java diff --git a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java new file mode 100644 index 0000000000..2183c017eb --- /dev/null +++ b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java @@ -0,0 +1,46 @@ +package io.dapr.workflows.runtime; + +import io.dapr.durabletask.TaskActivityContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class DefaultWorkflowActivityContextTest { + + private DefaultWorkflowActivityContext context; + + @BeforeEach + void setUp() { + TaskActivityContext mockInnerContext = mock(TaskActivityContext.class); + context = new DefaultWorkflowActivityContext(mockInnerContext); + + when(mockInnerContext.getName()).thenReturn("TestActivity"); + when(mockInnerContext.getInput(any())).thenReturn("TestInput"); + when(mockInnerContext.getTaskExecutionId()).thenReturn("TestExecutionId"); + } + + @Test + void getLogger() { + assertNotNull(context.getLogger()); + } + + @Test + void getName() { + assertEquals("TestActivity", context.getName()); + } + + @Test + void getInput() { + String input = context.getInput(String.class); + assertEquals("TestInput", input); + } + + @Test + void getTaskExecutionId() { + assertEquals("TestExecutionId", context.getTaskExecutionId()); + } +} From 9763be4f516b154b4433a88157ef6331a274ee9b Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sat, 30 Aug 2025 22:38:43 -0700 Subject: [PATCH 4/7] Add more unit tests to make Codecov happy Signed-off-by: Artur Ciocanu --- .../client/DaprClientAutoConfigurationTest.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java index f7b3a999ad..ceea94760f 100644 --- a/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java @@ -25,8 +25,6 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import java.util.Map; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -159,6 +157,18 @@ void shouldOverrideGrpcPortPropertiesIfExists() { assertThat(result.getValue(Properties.GRPC_PORT)).isEqualTo(grpcPort); } + @Test + @DisplayName("Should override API token in properties if it exists") + void shouldOverrideApiTokenPropertiesIfExists() { + String apiToken = "token"; + + when(connectionDetails.getApiToken()).thenReturn(apiToken); + + Properties result = configuration.createPropertiesFromConnectionDetails(connectionDetails); + + assertThat(result.getValue(Properties.API_TOKEN)).isEqualTo(apiToken); + } + private static class TestDaprClientAutoConfiguration extends DaprClientAutoConfiguration { private final DaprClientBuilder daprClientBuilder; From e7ab81812e360e30825d4c208351268cc9e274cd Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sun, 31 Aug 2025 08:50:55 -0700 Subject: [PATCH 5/7] Add more unit tests Signed-off-by: Artur Ciocanu --- .../client/DaprClientAutoConfigurationTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java index ceea94760f..139dfc0828 100644 --- a/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTest.java @@ -109,6 +109,18 @@ void shouldOverrideGrpcPortIfExists() { verify(builder).withPropertyOverride(Properties.GRPC_PORT, String.valueOf(grpcPort)); } + @Test + @DisplayName("Should override API token if it exists") + void shouldOverrideApiTokenIfExists() { + String apiToken = "token"; + + when(connectionDetails.getApiToken()).thenReturn(apiToken); + + configuration.daprClientBuilder(connectionDetails); + + verify(builder).withPropertyOverride(Properties.API_TOKEN, apiToken); + } + @Test @DisplayName("Should override HTTP endpoint in properties if it exists") void shouldOverrideHttpEndpointInPropertiesIfExists() { From eefffc01eb5a90861dadf618a422d02495f9fb75 Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sun, 31 Aug 2025 16:26:53 -0700 Subject: [PATCH 6/7] Improve code coverage Signed-off-by: Artur Ciocanu --- .../DefaultWorkflowActivityContextTest.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java index 2183c017eb..056bbc06d7 100644 --- a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java +++ b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java @@ -1,7 +1,6 @@ package io.dapr.workflows.runtime; import io.dapr.durabletask.TaskActivityContext; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -11,36 +10,39 @@ class DefaultWorkflowActivityContextTest { - private DefaultWorkflowActivityContext context; - - @BeforeEach - void setUp() { + @Test + void testDefaultWorkflowActivityContext() { TaskActivityContext mockInnerContext = mock(TaskActivityContext.class); - context = new DefaultWorkflowActivityContext(mockInnerContext); + DefaultWorkflowActivityContext context = new DefaultWorkflowActivityContext(mockInnerContext); when(mockInnerContext.getName()).thenReturn("TestActivity"); when(mockInnerContext.getInput(any())).thenReturn("TestInput"); when(mockInnerContext.getTaskExecutionId()).thenReturn("TestExecutionId"); - } - @Test - void getLogger() { assertNotNull(context.getLogger()); - } - - @Test - void getName() { assertEquals("TestActivity", context.getName()); - } - @Test - void getInput() { String input = context.getInput(String.class); + assertEquals("TestInput", input); + assertEquals("TestExecutionId", context.getTaskExecutionId()); } @Test - void getTaskExecutionId() { - assertEquals("TestExecutionId", context.getTaskExecutionId()); + void testDefaultWorkflowActivityContextWithNullContext() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { + new DefaultWorkflowActivityContext(null); + }); + assertEquals("Context cannot be null", exception.getMessage()); + } + + @Test + void testDefaultWorkflowActivityContextWithNullLogger() { + TaskActivityContext mockInnerContext = mock(TaskActivityContext.class); + + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { + new DefaultWorkflowActivityContext(mockInnerContext, null); + }); + assertEquals("Logger cannot be null", exception.getMessage()); } } From c63d318ecbf4752e4a2d86fc460f54f00e258692 Mon Sep 17 00:00:00 2001 From: Artur Ciocanu Date: Sun, 31 Aug 2025 16:30:59 -0700 Subject: [PATCH 7/7] Improve test names Signed-off-by: Artur Ciocanu --- .../runtime/DefaultWorkflowActivityContextTest.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java index 056bbc06d7..90dfa565ca 100644 --- a/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java +++ b/sdk-workflows/src/test/java/io/dapr/workflows/runtime/DefaultWorkflowActivityContextTest.java @@ -1,6 +1,7 @@ package io.dapr.workflows.runtime; import io.dapr.durabletask.TaskActivityContext; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -11,7 +12,8 @@ class DefaultWorkflowActivityContextTest { @Test - void testDefaultWorkflowActivityContext() { + @DisplayName("Should successfully create context and return correct values for all methods") + void shouldSuccessfullyCreateContextAndReturnCorrectValuesForAllMethods() { TaskActivityContext mockInnerContext = mock(TaskActivityContext.class); DefaultWorkflowActivityContext context = new DefaultWorkflowActivityContext(mockInnerContext); @@ -29,7 +31,8 @@ void testDefaultWorkflowActivityContext() { } @Test - void testDefaultWorkflowActivityContextWithNullContext() { + @DisplayName("Should throw IllegalArgumentException when context parameter is null") + void shouldThrowIllegalArgumentExceptionWhenContextParameterIsNull() { IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { new DefaultWorkflowActivityContext(null); }); @@ -37,7 +40,8 @@ void testDefaultWorkflowActivityContextWithNullContext() { } @Test - void testDefaultWorkflowActivityContextWithNullLogger() { + @DisplayName("Should throw IllegalArgumentException when logger parameter is null") + void shouldThrowIllegalArgumentExceptionWhenLoggerParameterIsNull() { TaskActivityContext mockInnerContext = mock(TaskActivityContext.class); IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> {