From 949621282424af78ebe55b1a200716508fe1c71e Mon Sep 17 00:00:00 2001 From: bbischoff Date: Fri, 3 Apr 2020 16:42:42 +0200 Subject: [PATCH] plugin resilience --- CHANGELOG.md | 8 ++++++++ example-project/pom.xml | 4 ++-- plugin-code/pom.xml | 2 +- .../com/trivago/files/FileSystemManager.java | 20 +++++++++++++------ .../trivago/properties/PropertyManager.java | 14 ++++++++----- .../properties/PropertyManagerTest.java | 4 ++-- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2717570..542025e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. Back to [Readme](README.md). +## [1.7.2] - 2020-04-03 + +### Fixed + +* Cucable does not fail on empty Cucumber feature list file. + ## [1.7.1] - 2020-04-03 ### Changed @@ -298,6 +304,8 @@ Back to [Readme](README.md). Initial project version on GitHub and Maven Central. +[1.7.2]: https://github.com/trivago/cucable-plugin/compare/1.7.1...1.7.2 +[1.7.1]: https://github.com/trivago/cucable-plugin/compare/1.7.0...1.7.1 [1.7.0]: https://github.com/trivago/cucable-plugin/compare/1.6.0...1.7.0 [1.6.0]: https://github.com/trivago/cucable-plugin/compare/1.5.3...1.6.0 [1.5.3]: https://github.com/trivago/cucable-plugin/compare/1.5.2...1.5.3 diff --git a/example-project/pom.xml b/example-project/pom.xml index fe41286..f157d70 100644 --- a/example-project/pom.xml +++ b/example-project/pom.xml @@ -7,7 +7,7 @@ com.trivago.rta cucable-test-project - 1.7.1 + 1.7.2 jar @@ -70,7 +70,7 @@ - + @src/test/resources/cucumber-feature-list.txt diff --git a/plugin-code/pom.xml b/plugin-code/pom.xml index 8f0a3bb..b5c4738 100644 --- a/plugin-code/pom.xml +++ b/plugin-code/pom.xml @@ -6,7 +6,7 @@ com.trivago.rta cucable-plugin - 1.7.1 + 1.7.2 https://github.com/trivago/cucable-plugin Cucable Maven Plugin diff --git a/plugin-code/src/main/java/com/trivago/files/FileSystemManager.java b/plugin-code/src/main/java/com/trivago/files/FileSystemManager.java index 34eee38..c059c9f 100644 --- a/plugin-code/src/main/java/com/trivago/files/FileSystemManager.java +++ b/plugin-code/src/main/java/com/trivago/files/FileSystemManager.java @@ -60,16 +60,23 @@ public List getPathsFromCucableFeature(final CucableFeature cucableFeature replace("file://", ""); File sourceFeaturesFile = new File(sourceFeatures); + + if (sourceFeatures.trim().isEmpty()) { + return Collections.emptyList(); + } + // Check if the property value is a single file or a directory if (sourceFeaturesFile.isFile() && sourceFeatures.endsWith(FEATURE_FILE_EXTENSION)) { return Collections.singletonList(Paths.get(sourceFeatures)); - } else if (sourceFeaturesFile.isDirectory()) { + } + + if (sourceFeaturesFile.isDirectory()) { return getFilesWithFeatureExtension(sourceFeatures); - } else { - throw new CucablePluginException( - sourceFeatures + " is not a feature file or a directory." - ); } + + throw new CucablePluginException( + sourceFeatures + " is not a feature file or a directory." + ); } /** @@ -79,7 +86,8 @@ public List getPathsFromCucableFeature(final CucableFeature cucableFeature * @return A list of feature files in the given directory. * @throws CucablePluginException see {@link CucablePluginException}. */ - private List getFilesWithFeatureExtension(final String sourceFeatureDirectory) throws CucablePluginException { + private List getFilesWithFeatureExtension(final String sourceFeatureDirectory) throws + CucablePluginException { try { return Files.walk(Paths.get(sourceFeatureDirectory)) .filter(Files::isRegularFile) diff --git a/plugin-code/src/main/java/com/trivago/properties/PropertyManager.java b/plugin-code/src/main/java/com/trivago/properties/PropertyManager.java index 2937132..c96ae25 100644 --- a/plugin-code/src/main/java/com/trivago/properties/PropertyManager.java +++ b/plugin-code/src/main/java/com/trivago/properties/PropertyManager.java @@ -56,7 +56,7 @@ public class PropertyManager { private int desiredNumberOfRunners; private int desiredNumberOfFeaturesPerRunner; private List scenarioNames = new ArrayList<>(); - private boolean isCucumberFeatureListFileSource; + private String cucumberFeatureListFile; @Inject public PropertyManager(final CucableLogger logger, final FileIO fileIO) { @@ -87,8 +87,8 @@ public List getSourceFeatures() { public void setSourceFeatures(final String sourceFeatures) throws MissingFileException { String featuresToProcess; if (sourceFeatures.startsWith("@")) { - isCucumberFeatureListFileSource = true; - featuresToProcess = fileIO.readContentFromFile(sourceFeatures.substring(1)) + cucumberFeatureListFile = sourceFeatures.substring(1); + featuresToProcess = fileIO.readContentFromFile(cucumberFeatureListFile) .replace(System.lineSeparator(), ","); } else { featuresToProcess = sourceFeatures; @@ -256,7 +256,11 @@ public void checkForDisallowedPropertyCombinations() throws CucablePluginExcepti public void logProperties() { CucableLogLevel[] logLevels = new CucableLogLevel[]{DEFAULT, COMPACT}; - logger.info("- sourceFeatures :", logLevels); + if (!isCucumberFeatureListFileSource()) { + logger.info("- sourceFeatures:", logLevels); + } else { + logger.info(String.format("- sourceFeatures from file %s:", cucumberFeatureListFile), logLevels); + } if (sourceFeatures != null) { for (CucableFeature sourceFeature : sourceFeatures) { String logLine = " - " + sourceFeature.getName(); @@ -319,7 +323,7 @@ private void saveMissingProperty( } public boolean isCucumberFeatureListFileSource() { - return isCucumberFeatureListFileSource; + return cucumberFeatureListFile != null && !cucumberFeatureListFile.isEmpty(); } public enum ParallelizationMode { diff --git a/plugin-code/src/test/java/com/trivago/properties/PropertyManagerTest.java b/plugin-code/src/test/java/com/trivago/properties/PropertyManagerTest.java index 6759584..640521a 100644 --- a/plugin-code/src/test/java/com/trivago/properties/PropertyManagerTest.java +++ b/plugin-code/src/test/java/com/trivago/properties/PropertyManagerTest.java @@ -221,7 +221,7 @@ public void logMandatoryPropertiesTest() throws CucablePluginException { propertyManager.logProperties(); verify(logger, times(6)).info(logCaptor.capture(), any(CucableLogger.CucableLogLevel.class), any(CucableLogger.CucableLogLevel.class)); List capturedLogs = logCaptor.getAllValues(); - assertThat(capturedLogs.get(0), is("- sourceFeatures :")); + assertThat(capturedLogs.get(0), is("- sourceFeatures:")); assertThat(capturedLogs.get(1), is("- sourceRunnerTemplateFile : null")); assertThat(capturedLogs.get(2), is("- generatedRunnerDirectory : null")); assertThat(capturedLogs.get(3), is("- generatedFeatureDirectory : null")); @@ -247,7 +247,7 @@ public void logExtendedPropertiesTest() throws CucablePluginException { verify(logger, times(12)).info(logCaptor.capture(), any(CucableLogger.CucableLogLevel.class), any(CucableLogger.CucableLogLevel.class)); List capturedLogs = logCaptor.getAllValues(); - assertThat(capturedLogs.get(0), is("- sourceFeatures :")); + assertThat(capturedLogs.get(0), is("- sourceFeatures:")); assertThat(capturedLogs.get(1), is(" - test.feature (line 3)")); assertThat(capturedLogs.get(2), is("- sourceRunnerTemplateFile : null")); assertThat(capturedLogs.get(3), is("- generatedRunnerDirectory : null"));