From dcb782508ee3b305194baf002f708b78e8367923 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 2 Feb 2018 02:08:19 +0100 Subject: [PATCH] Added more explicit exception msg; fixes gh-72 --- .../cloud/release/internal/spring/Task.java | 20 ++++--- .../release/internal/spring/TaskTests.java | 52 +++++++++++++++++++ 2 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/TaskTests.java diff --git a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Task.java b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Task.java index c64f05bd..7eb28036 100644 --- a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Task.java +++ b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Task.java @@ -29,15 +29,21 @@ class Task { } void execute(Args args) { - boolean interactive = args.interactive; - printLog(interactive); - if (interactive) { - boolean skipStep = skipStep(); - if (!skipStep) { + try { + boolean interactive = args.interactive; + printLog(interactive); + if (interactive) { + boolean skipStep = skipStep(); + if (!skipStep) { + consumer.accept(args); + } + } else { consumer.accept(args); } - } else { - consumer.accept(args); + } catch (Exception e) { + log.error("\n\n\nBUILD FAILED!!!\n\nException occurred for task <" + + this.name + "> \n\nwith description <" + this.description + ">\n\n", e); + throw e; } } diff --git a/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/TaskTests.java b/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/TaskTests.java new file mode 100644 index 00000000..cf3bbe33 --- /dev/null +++ b/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/TaskTests.java @@ -0,0 +1,52 @@ +package org.springframework.cloud.release.internal.spring; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; + +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mockito; +import org.springframework.boot.test.rule.OutputCapture; + +import static org.assertj.core.api.BDDAssertions.then; +import static org.assertj.core.api.BDDAssertions.thenThrownBy; +import static org.junit.Assert.*; + +/** + * @author Marcin Grzejszczak + */ +public class TaskTests { + + @Rule public OutputCapture capture = new OutputCapture(); + + @Test public void should_successfully_execute_task() { + final AtomicBoolean someBool = new AtomicBoolean(); + Task task = new Task("foo", "bar", "baz", "descr", new Consumer() { + @Override public void accept(Args args) { + someBool.set(true); + } + }); + + task.execute(Mockito.mock(Args.class)); + + then(someBool.get()).isTrue(); + } + + @Test public void should_fail_with_nice_text_on_exception() { + final AtomicBoolean someBool = new AtomicBoolean(); + Task task = new Task("foo", "bar", "baz", "descr", new Consumer() { + @Override public void accept(Args args) { + someBool.set(true); + throw new RuntimeException("foooooooo"); + } + }); + + thenThrownBy(() -> task.execute(Mockito.mock(Args.class))) + .isInstanceOf(RuntimeException.class); + then(someBool.get()).isTrue(); + then(this.capture.toString()) + .contains("BUILD FAILED!!!") + .contains("Exception occurred for task ") + .contains("with description "); + } +} \ No newline at end of file