Skip to content

Commit 001a2ca

Browse files
authored
Ensure ConfiguratorException can be reported (#2730)
1 parent e419a20 commit 001a2ca

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

plugin/src/main/java/io/jenkins/plugins/casc/ConfiguratorException.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.jenkins.plugins.casc.model.CNode;
2626
import java.util.Collections;
2727
import java.util.List;
28+
import jenkins.model.Jenkins;
2829

2930
/**
3031
* Exception type for {@link Configurator} issues.
@@ -100,7 +101,10 @@ public String getErrorMessage() {
100101
@Override
101102
public String getMessage() {
102103
if (configurator != null) {
103-
return String.format("%s: %s", configurator.getName(), super.getMessage());
104+
return String.format(
105+
"%s: %s",
106+
Jenkins.getInstanceOrNull() == null ? configurator.getClass() : configurator.getName(),
107+
super.getMessage());
104108
}
105109
return super.getMessage();
106110
}

test-harness/src/test/java/io/jenkins/plugins/casc/impl/configurators/DataBoundConfiguratorTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@
2828
import io.jenkins.plugins.casc.model.Mapping;
2929
import io.jenkins.plugins.casc.model.Scalar;
3030
import io.jenkins.plugins.casc.model.Sequence;
31+
import java.io.PrintWriter;
32+
import java.io.StringWriter;
3133
import java.util.HashSet;
3234
import java.util.Set;
3335
import java.util.logging.Level;
3436
import java.util.logging.Logger;
3537
import javax.annotation.ParametersAreNonnullByDefault;
3638
import javax.annotation.PostConstruct;
39+
import org.junit.jupiter.api.AfterAll;
3740
import org.junit.jupiter.api.BeforeEach;
3841
import org.junit.jupiter.api.Test;
3942
import org.jvnet.hudson.test.Issue;
@@ -53,6 +56,9 @@ class DataBoundConfiguratorTest {
5356

5457
private final LogRecorder logging = new LogRecorder();
5558

59+
/** captured exception to be printed after Jenkins is shut down */
60+
private static Throwable savedConfiguratorException;
61+
5662
@BeforeEach
5763
void tearUp(JenkinsRule j) {
5864
this.j = j;
@@ -164,6 +170,8 @@ void packageParametersAreNonnullByDefault() {
164170
.configure(config, new ConfigurationContext(registry)));
165171

166172
assertThat(exception.getMessage(), is(expectedMessage));
173+
174+
savedConfiguratorException = exception;
167175
}
168176

169177
@Test
@@ -249,6 +257,19 @@ void shouldThrowConfiguratorException() {
249257
+ " Constructor: public io.jenkins.plugins.casc.impl.configurators.DataBoundConfiguratorTest$Foo(java.lang.String,boolean,int).\n"
250258
+ " Arguments: [java.lang.String, java.lang.Boolean, java.lang.Integer].\n"
251259
+ " Expected Parameters: foo java.lang.String, bar boolean, qix int"));
260+
261+
savedConfiguratorException = e;
262+
}
263+
264+
@AfterAll
265+
static void checkConfiguratorExceptionCanBeReportedWithoutJenkins() {
266+
if (savedConfiguratorException != null) {
267+
StringWriter sw = new StringWriter();
268+
try (PrintWriter pw = new PrintWriter(sw)) {
269+
savedConfiguratorException.printStackTrace(pw);
270+
}
271+
savedConfiguratorException = null;
272+
}
252273
}
253274

254275
@Test

0 commit comments

Comments
 (0)