Skip to content

Commit

Permalink
Catch runtime exceptions from extension execution (#2474)
Browse files Browse the repository at this point in the history
* Catch runtime exception from extensions
  • Loading branch information
chanseokoh authored May 20, 2020
1 parent 27cde26 commit 2220c26
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -474,13 +474,18 @@ private <T> ContainerBuildPlan runPluginExtension(
}
}

return ((JibGradlePluginExtension<T>) extension)
.extendContainerBuildPlan(
buildPlan,
config.getProperties(),
Optional.ofNullable(extraConfig),
() -> project,
new PluginExtensionLogger(this::log));
try {
return ((JibGradlePluginExtension<T>) extension)
.extendContainerBuildPlan(
buildPlan,
config.getProperties(),
Optional.ofNullable(extraConfig),
() -> project,
new PluginExtensionLogger(this::log));
} catch (RuntimeException ex) {
throw new JibPluginExtensionException(
extension.getClass(), "extension crashed: " + ex.getMessage(), ex);
}
}

private JibGradlePluginExtension<?> findConfiguredExtension(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,4 +426,23 @@ public void testRunPluginExtensions_ignoreUnexpectedExtraConfig()
ex.getMessage());
}
}

@Test
public void testRunPluginExtensions_runtimeExceptionFromExtension() {
FooExtension extension =
new FooExtension(
(buildPlan, properties, extraConfig, mavenData, logger) -> {
throw new IndexOutOfBoundsException("buggy extension");
});
loadedExtensions = Arrays.asList(extension);

try {
gradleProjectProperties.runPluginExtensions(
Arrays.asList(new FooExtensionConfig()), containerBuilder);
Assert.fail();
} catch (JibPluginExtensionException ex) {
Assert.assertEquals(FooExtension.class, ex.getExtensionClass());
Assert.assertEquals("extension crashed: buggy extension", ex.getMessage());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -615,13 +615,18 @@ private <T> ContainerBuildPlan runPluginExtension(
}
}

return ((JibMavenPluginExtension<T>) extension)
.extendContainerBuildPlan(
buildPlan,
config.getProperties(),
extraConfig,
new MavenExtensionData(project, session),
new PluginExtensionLogger(this::log));
try {
return ((JibMavenPluginExtension<T>) extension)
.extendContainerBuildPlan(
buildPlan,
config.getProperties(),
extraConfig,
new MavenExtensionData(project, session),
new PluginExtensionLogger(this::log));
} catch (RuntimeException ex) {
throw new JibPluginExtensionException(
extension.getClass(), "extension crashed: " + ex.getMessage(), ex);
}
}

private JibMavenPluginExtension<?> findConfiguredExtension(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,4 +430,23 @@ public void testRunPluginExtensions_ignoreUnexpectedExtraConfig()
ex.getMessage());
}
}

@Test
public void testRunPluginExtensions_runtimeExceptionFromExtension() {
FooExtension extension =
new FooExtension(
(buildPlan, properties, extraConfig, mavenData, logger) -> {
throw new IndexOutOfBoundsException("buggy extension");
});
loadedExtensions = Arrays.asList(extension);

try {
mavenProjectProperties.runPluginExtensions(
Arrays.asList(new FooExtensionConfig()), containerBuilder);
Assert.fail();
} catch (JibPluginExtensionException ex) {
Assert.assertEquals(FooExtension.class, ex.getExtensionClass());
Assert.assertEquals("extension crashed: buggy extension", ex.getMessage());
}
}
}

0 comments on commit 2220c26

Please sign in to comment.