@Test public void shouldUnsetTaskExecutionContextFromJobConsoleLoggerWhenTaskExecutionThrowsException() throws CruiseControlException { final PluggableTaskBuilder builder = spy(new PluggableTaskBuilder(runIfConfigs, cancelBuilder, pluggableTask, "", "")); taskExtension = mock(TaskExtension.class); when(taskExtension.execute(eq(TEST_PLUGIN_ID), any(ActionWithReturn.class))).thenThrow(new RuntimeException("something")); try { builder.build(goPublisher, variableContext, taskExtension, null, null, "utf-8"); fail("should throw exception"); } catch (Exception e) { assertThat(ReflectionUtil.getStaticField(JobConsoleLogger.class, "context"), is(nullValue())); } } }
@Test public void shouldRegisterTaskConfigDuringExecutionAndUnregisterOnSuccessfulCompletion() throws CruiseControlException { final PluggableTaskBuilder builder = spy(new PluggableTaskBuilder(runIfConfigs, cancelBuilder, pluggableTask, "", "")); taskExtension = mock(TaskExtension.class); when(taskExtension.execute(eq(TEST_PLUGIN_ID), any(ActionWithReturn.class))).thenReturn(ExecutionResult.success("yay")); builder.build(goPublisher, variableContext, taskExtension, null, null, "utf-8"); assertThat(ReflectionUtil.getStaticField(JobConsoleLogger.class, "context"), is(nullValue())); }
@Test public void shouldUnsetTaskExecutionContextFromJobConsoleLoggerWhenTaskExecutionFails() throws CruiseControlException { final PluggableTaskBuilder builder = spy(new PluggableTaskBuilder(runIfConfigs, cancelBuilder, pluggableTask, "", "")); taskExtension = mock(TaskExtension.class); when(taskExtension.execute(eq(TEST_PLUGIN_ID), any(ActionWithReturn.class))).thenReturn(ExecutionResult.failure("oh no")); try { builder.build(goPublisher, variableContext, taskExtension, null, null, "utf-8"); fail("should throw exception"); } catch (Exception e) { assertThat(ReflectionUtil.getStaticField(JobConsoleLogger.class, "context"), is(nullValue())); } }
@Test public void shouldExecuteTheTask() { ActionWithReturn actionWithReturn = mock(ActionWithReturn.class); when(actionWithReturn.execute(any(JsonBasedPluggableTask.class), nullable(GoPluginDescriptor.class))).thenReturn(ExecutionResult.success("yay")); ExecutionResult executionResult = extension.execute(pluginId, actionWithReturn); verify(actionWithReturn).execute(any(JsonBasedPluggableTask.class), nullable(GoPluginDescriptor.class)); assertThat(executionResult.getMessagesForDisplay(), is("yay")); assertTrue(executionResult.isSuccessful()); }
@Override public void build(final DefaultGoPublisher publisher, final EnvironmentVariableContext environmentVariableContext, TaskExtension taskExtension, ArtifactExtension artifactExtension, PluginRequestProcessorRegistry pluginRequestProcessorRegistry, String consoleLogCharset) throws CruiseControlException { ExecutionResult executionResult = null; try { executionResult = taskExtension.execute(pluginId, (task, pluginDescriptor) -> executeTask(task, publisher, environmentVariableContext, consoleLogCharset)); } catch (Exception e) { logException(publisher, e); } finally { JobConsoleLoggerInternal.unsetContext(); } if (executionResult == null) { logError(publisher, "ExecutionResult cannot be null. Please return a success or a failure response."); } if (!executionResult.isSuccessful()) { logError(publisher, executionResult.getMessagesForDisplay()); } }