Issue #730: Remove redundant method from Settings

Pull file loading from loadSuppressionData() to make it easier to read
Add test assertion to happy case Ant task test
This commit is contained in:
Phillip Whittlesea
2017-06-12 01:48:33 +01:00
parent 8021aaed4b
commit 0be494a211
4 changed files with 67 additions and 80 deletions

View File

@@ -127,6 +127,8 @@ public class DependencyCheckTaskTest {
buildFileRule.executeTarget(antTaskName); buildFileRule.executeTarget(antTaskName);
// THEN the ant task executed without error // THEN the ant task executed without error
final File report = new File("target/dependency-check-report.html");
assertTrue("Expected the DependencyCheck report to be generated", report.exists());
} }
/** /**

View File

@@ -99,13 +99,12 @@ public abstract class AbstractSuppressionAnalyzer extends AbstractAnalyzer {
} }
/** /**
* Loads the suppression rules file. * Loads all the suppression rules files configured in the {@link Settings} singleton.
* *
* @throws SuppressionParseException thrown if the XML cannot be parsed. * @throws SuppressionParseException thrown if the XML cannot be parsed.
*/ */
private void loadSuppressionData() throws SuppressionParseException { private void loadSuppressionData() throws SuppressionParseException {
final SuppressionParser parser = new SuppressionParser(); final SuppressionParser parser = new SuppressionParser();
File file = null;
try { try {
final InputStream in = this.getClass().getClassLoader().getResourceAsStream("dependencycheck-base-suppression.xml"); final InputStream in = this.getClass().getClassLoader().getResourceAsStream("dependencycheck-base-suppression.xml");
rules = parser.parseSuppressionRules(in); rules = parser.parseSuppressionRules(in);
@@ -117,67 +116,80 @@ public abstract class AbstractSuppressionAnalyzer extends AbstractAnalyzer {
return; return;
} }
// Load all the suppression file paths
for (final String suppressionFilePath : suppressionFilePaths) { for (final String suppressionFilePath : suppressionFilePaths) {
LOGGER.debug("Loading suppression rules from '{}'", suppressionFilePath); loadSuppressionFile(parser, suppressionFilePath);
}
LOGGER.debug("{} suppression rules were loaded.", rules.size());
}
boolean deleteTempFile = false; /**
try { * Load a single suppression rules file from the path provided using the parser provided.
final Pattern uriRx = Pattern.compile("^(https?|file)\\:.*", Pattern.CASE_INSENSITIVE); *
if (uriRx.matcher(suppressionFilePath).matches()) { * @param parser the parser to use for loading the file.
deleteTempFile = true; * @param suppressionFilePath the path to load.
file = FileUtils.getTempFile("suppression", "xml"); * @throws SuppressionParseException thrown if the suppression file cannot be loaded and parsed.
final URL url = new URL(suppressionFilePath); */
try { private void loadSuppressionFile(final SuppressionParser parser, final String suppressionFilePath) throws SuppressionParseException {
Downloader.fetchFile(url, file, false); LOGGER.debug("Loading suppression rules from '{}'", suppressionFilePath);
} catch (DownloadFailedException ex) {
Downloader.fetchFile(url, file, true);
}
} else {
file = new File(suppressionFilePath);
if (!file.exists()) { File file = null;
try (InputStream suppressionsFromClasspath = this.getClass().getClassLoader().getResourceAsStream(suppressionFilePath)) { boolean deleteTempFile = false;
if (suppressionsFromClasspath != null) { try {
deleteTempFile = true; final Pattern uriRx = Pattern.compile("^(https?|file)\\:.*", Pattern.CASE_INSENSITIVE);
file = FileUtils.getTempFile("suppression", "xml"); if (uriRx.matcher(suppressionFilePath).matches()) {
try { deleteTempFile = true;
org.apache.commons.io.FileUtils.copyInputStreamToFile(suppressionsFromClasspath, file); file = FileUtils.getTempFile("suppression", "xml");
} catch (IOException ex) { final URL url = new URL(suppressionFilePath);
throwSuppressionParseException("Unable to locate suppressions file in classpath", ex); try {
} Downloader.fetchFile(url, file, false);
} catch (DownloadFailedException ex) {
Downloader.fetchFile(url, file, true);
}
} else {
file = new File(suppressionFilePath);
if (!file.exists()) {
try (InputStream suppressionsFromClasspath = this.getClass().getClassLoader().getResourceAsStream(suppressionFilePath)) {
if (suppressionsFromClasspath != null) {
deleteTempFile = true;
file = FileUtils.getTempFile("suppression", "xml");
try {
org.apache.commons.io.FileUtils.copyInputStreamToFile(suppressionsFromClasspath, file);
} catch (IOException ex) {
throwSuppressionParseException("Unable to locate suppressions file in classpath", ex);
} }
} }
} }
} }
if (file != null) { }
if (!file.exists()) { if (file != null) {
final String msg = String.format("Suppression file '%s' does not exists", file.getPath()); if (!file.exists()) {
LOGGER.warn(msg); final String msg = String.format("Suppression file '%s' does not exists", file.getPath());
throw new SuppressionParseException(msg); LOGGER.warn(msg);
} throw new SuppressionParseException(msg);
try {
rules.addAll(parser.parseSuppressionRules(file));
} catch (SuppressionParseException ex) {
LOGGER.warn("Unable to parse suppression xml file '{}'", file.getPath());
LOGGER.warn(ex.getMessage());
throw ex;
}
} }
} catch (DownloadFailedException ex) { try {
throwSuppressionParseException("Unable to fetch the configured suppression file", ex); rules.addAll(parser.parseSuppressionRules(file));
} catch (MalformedURLException ex) { } catch (SuppressionParseException ex) {
throwSuppressionParseException("Configured suppression file has an invalid URL", ex); LOGGER.warn("Unable to parse suppression xml file '{}'", file.getPath());
} catch (SuppressionParseException ex) { LOGGER.warn(ex.getMessage());
throw ex; throw ex;
} catch (IOException ex) {
throwSuppressionParseException("Unable to create temp file for suppressions", ex);
} finally {
if (deleteTempFile && file != null) {
FileUtils.delete(file);
} }
} }
} catch (DownloadFailedException ex) {
throwSuppressionParseException("Unable to fetch the configured suppression file", ex);
} catch (MalformedURLException ex) {
throwSuppressionParseException("Configured suppression file has an invalid URL", ex);
} catch (SuppressionParseException ex) {
throw ex;
} catch (IOException ex) {
throwSuppressionParseException("Unable to create temp file for suppressions", ex);
} finally {
if (deleteTempFile && file != null) {
FileUtils.delete(file);
}
} }
LOGGER.debug("{} suppression rules were loaded.", rules.size());
} }
/** /**

View File

@@ -564,18 +564,6 @@ public final class Settings {
LOGGER.debug("Setting: {}='{}'", key, value); LOGGER.debug("Setting: {}='{}'", key, value);
} }
/**
* Sets a property value from an array.
* <p>
* Note: each value of the array will be joined by the delimiter {@link Settings#ARRAY_SEP}.
*
* @param key the key for the property
* @param value the value for the property
*/
static void setArray(String key, String[] value) {
setString(key, StringUtils.join(value, ARRAY_SEP));
}
/** /**
* Sets a property value only if the value is not null. * Sets a property value only if the value is not null.
* *
@@ -608,7 +596,7 @@ public final class Settings {
*/ */
public static void setArrayIfNotEmpty(String key, String[] value) { public static void setArrayIfNotEmpty(String key, String[] value) {
if (null != value && value.length > 0) { if (null != value && value.length > 0) {
setArray(key, value); setString(key, StringUtils.join(value, ARRAY_SEP));
} }
} }

View File

@@ -336,19 +336,4 @@ public class SettingsTest extends BaseTest {
assertThat("Expected the property to be set", Settings.getString("key"), is("value1")); assertThat("Expected the property to be set", Settings.getString("key"), is("value1"));
} }
/**
* Assert {@link Settings#setArray(String, String[])} with multiple values sets a delimited string.
*/
@Test
public void testSetArraySetsADelimitedString() {
// GIVEN an array with values
final String[] array = { "value1", "value2" };
// WHEN setting the array
Settings.setArray("key", array);
// THEN the property is set
assertThat("Expected the property to be set", Settings.getString("key"), is("value1,value2"));
}
} }