From 2d593e2d1fbc76ec3491e7fa948a1671a2c64bbd Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 20 Jun 2025 15:53:12 +0800 Subject: [PATCH 1/2] chore: code cleanup, remove redundant and obsolete codes and simplify some method calls. --- src/main/java/com/redhat/exhort/Api.java | 2 +- .../java/com/redhat/exhort/image/Image.java | 6 +- .../com/redhat/exhort/image/ImageRef.java | 6 +- .../com/redhat/exhort/impl/ExhortApi.java | 6 +- .../redhat/exhort/impl/RequestManager.java | 8 +- .../exhort/providers/BaseJavaProvider.java | 10 +- .../exhort/providers/GoModulesProvider.java | 102 +++++++++--------- .../exhort/providers/GradleProvider.java | 5 +- .../exhort/providers/JavaMavenProvider.java | 10 +- .../providers/JavaScriptNpmProvider.java | 2 +- .../providers/JavaScriptPnpmProvider.java | 6 +- .../exhort/providers/JavaScriptProvider.java | 8 +- .../providers/JavaScriptProviderFactory.java | 6 +- .../providers/JavaScriptYarnProvider.java | 12 +-- .../exhort/providers/PythonPipProvider.java | 39 ++++--- .../exhort/providers/YarnBerryProcessor.java | 31 +++--- .../providers/YarnClassicProcessor.java | 5 +- .../com/redhat/exhort/sbom/CycloneDXSbom.java | 20 ++-- .../com/redhat/exhort/tools/Ecosystem.java | 2 +- .../com/redhat/exhort/tools/Operations.java | 6 +- .../com/redhat/exhort/utils/Environment.java | 6 +- .../exhort/utils/PythonControllerBase.java | 10 +- .../exhort/utils/PythonControllerTestEnv.java | 8 +- .../utils/PythonControllerVirtualEnv.java | 3 +- .../redhat/exhort/utils/PythonDependency.java | 4 +- .../vcs/GitVersionControlSystemImpl.java | 8 +- .../java/com/redhat/exhort/ExhortTest.java | 2 +- .../com/redhat/exhort/image/ImageRefTest.java | 3 +- .../com/redhat/exhort/image/ImageTest.java | 69 +++--------- .../redhat/exhort/image/ImageUtilsTest.java | 6 +- .../com/redhat/exhort/image/PlatformTest.java | 44 ++------ .../com/redhat/exhort/impl/ExhortApiIT.java | 15 +-- .../redhat/exhort/impl/Exhort_Api_Test.java | 3 +- .../GoModulesMainModuleVersionTest.java | 7 +- .../Golang_Modules_Provider_Test.java | 35 +++--- .../providers/Gradle_Provider_Test.java | 4 +- .../exhort/providers/HelperExtension.java | 8 +- .../providers/Java_Maven_Provider_Test.java | 29 ++--- .../providers/Javascript_Provider_Test.java | 21 ++-- .../providers/PythonEnvironmentExtension.java | 22 ++-- .../providers/Python_Provider_Test.java | 24 ++--- .../utils/PythonControllerBaseTest.java | 4 +- .../utils/PythonControllerRealEnvTest.java | 11 +- .../utils/PythonControllerVirtualEnvTest.java | 14 ++- 44 files changed, 273 insertions(+), 379 deletions(-) diff --git a/src/main/java/com/redhat/exhort/Api.java b/src/main/java/com/redhat/exhort/Api.java index 711d2923..feece8d6 100644 --- a/src/main/java/com/redhat/exhort/Api.java +++ b/src/main/java/com/redhat/exhort/Api.java @@ -27,7 +27,7 @@ /** The Api interface is used for contracting API implementations. * */ public interface Api { - public static final String CYCLONEDX_MEDIA_TYPE = "application/vnd.cyclonedx+json"; + String CYCLONEDX_MEDIA_TYPE = "application/vnd.cyclonedx+json"; enum MediaType { APPLICATION_JSON, diff --git a/src/main/java/com/redhat/exhort/image/Image.java b/src/main/java/com/redhat/exhort/image/Image.java index a3ba9297..bebe5237 100644 --- a/src/main/java/com/redhat/exhort/image/Image.java +++ b/src/main/java/com/redhat/exhort/image/Image.java @@ -89,7 +89,7 @@ public Image(String fullName) { /** * Create an image name with a tag. If a tag is provided (i.e. is not null) then this tag is used. - * Otherwise the tag of the provided name is used (if any). + * Otherwise, the tag of the provided name is used (if any). * * @param fullName The fullname of the image in Docker format. I * @param givenTag tag to use. Can be null in which case the tag specified in fullName is used. @@ -190,7 +190,7 @@ public String toString() { } public boolean hasRegistry() { - return registry != null && registry.length() > 0; + return registry != null && !registry.isEmpty(); } private String joinTail(String[] parts) { @@ -329,7 +329,7 @@ private void doValidate() { checks[i], value, checkPattern.pattern())); } } - if (errors.size() > 0) { + if (!errors.isEmpty()) { StringBuilder buf = new StringBuilder(); buf.append(String.format("Given Docker name '%s' is invalid:\n", getFullName())); for (String error : errors) { diff --git a/src/main/java/com/redhat/exhort/image/ImageRef.java b/src/main/java/com/redhat/exhort/image/ImageRef.java index 265ce9b1..9fa9b72d 100644 --- a/src/main/java/com/redhat/exhort/image/ImageRef.java +++ b/src/main/java/com/redhat/exhort/image/ImageRef.java @@ -34,7 +34,7 @@ public class ImageRef { public static final String OS_QUALIFIER = "os"; public static final String VARIANT_QUALIFIER = "variant"; - private Image image; + private final Image image; private Platform platform; public ImageRef(String image, String platform) { @@ -48,8 +48,8 @@ public ImageRef(String image, String platform) { } public ImageRef(PackageURL packageURL) { - String name = null; - String version = null; + String name; + String version; String tag = null; String repositoryRrl = null; String arch = null; diff --git a/src/main/java/com/redhat/exhort/impl/ExhortApi.java b/src/main/java/com/redhat/exhort/impl/ExhortApi.java index 5d2e6fa0..94b428d6 100644 --- a/src/main/java/com/redhat/exhort/impl/ExhortApi.java +++ b/src/main/java/com/redhat/exhort/impl/ExhortApi.java @@ -427,7 +427,7 @@ private void commonHookAfterProviderCreatedSbomAndBeforeExhort() { "Time took to create sbom file to be sent to exhort backend, in ms : %s, in seconds:" + " %s", this.startTime.until(this.providerEndTime, ChronoUnit.MILLIS), - (float) (this.startTime.until(this.providerEndTime, ChronoUnit.MILLIS) / 1000F))); + this.startTime.until(this.providerEndTime, ChronoUnit.MILLIS) / 1000F)); } } @@ -673,13 +673,13 @@ private HttpRequest buildRequest( // set rhda-token // Environment variable/property name = RHDA_TOKEN String rhdaToken = calculateHeaderValue(RHDA_TOKEN_HEADER); - if (rhdaToken != null && Optional.of(rhdaToken).isPresent()) { + if (rhdaToken != null) { request.setHeader(RHDA_TOKEN_HEADER, rhdaToken); } // set rhda-source ( extension/plugin id/name) // Environment variable/property name = RHDA_SOURCE String rhdaSource = calculateHeaderValue(RHDA_SOURCE_HEADER); - if (rhdaSource != null && Optional.of(rhdaSource).isPresent()) { + if (rhdaSource != null) { request.setHeader(RHDA_SOURCE_HEADER, rhdaSource); } request.setHeader(RHDA_OPERATION_TYPE_HEADER, analysisType); diff --git a/src/main/java/com/redhat/exhort/impl/RequestManager.java b/src/main/java/com/redhat/exhort/impl/RequestManager.java index 973c012d..ace83db0 100644 --- a/src/main/java/com/redhat/exhort/impl/RequestManager.java +++ b/src/main/java/com/redhat/exhort/impl/RequestManager.java @@ -23,7 +23,7 @@ public class RequestManager { private static RequestManager requestManager; - private Map requests; + private final Map requests; public static RequestManager getInstance() { if (Objects.isNull(requestManager)) { @@ -47,11 +47,9 @@ public synchronized void removeClientTraceIdFromRequest() { Optional keyOfParent = requests.entrySet().stream() .filter(pair -> pair.getValue().equals(removedClientTraceId)) - .map(pair -> pair.getKey()) + .map(Map.Entry::getKey) .findFirst(); - if (keyOfParent.isPresent()) { - requests.remove(keyOfParent.get()); - } + keyOfParent.ifPresent(requests::remove); } } diff --git a/src/main/java/com/redhat/exhort/providers/BaseJavaProvider.java b/src/main/java/com/redhat/exhort/providers/BaseJavaProvider.java index 7be5b292..97e52519 100644 --- a/src/main/java/com/redhat/exhort/providers/BaseJavaProvider.java +++ b/src/main/java/com/redhat/exhort/providers/BaseJavaProvider.java @@ -36,7 +36,7 @@ void parseDependencyTree(String src, int srcDepth, String[] lines, Sbom sbom, St if (lines.length == 0) { return; } - if (lines.length == 1 && lines[0].trim().equals("")) { + if (lines.length == 1 && lines[0].trim().isEmpty()) { return; } int index = 0; @@ -90,7 +90,7 @@ PackageURL parseDep(String dep) { dependency = dependency.replace(":runtime", ":compile").replace(":provided", ":compile"); int endIndex = Math.max(dependency.indexOf(":compile"), dependency.indexOf(":test")); int scopeLength; - if (dependency.indexOf(":compile") > -1) { + if (dependency.contains(":compile")) { scopeLength = ":compile".length(); } else { scopeLength = ":test".length(); @@ -140,7 +140,7 @@ else if (parts.length == 6) { } int getDepth(String line) { - if (line == null || line.trim().equals("")) { + if (line == null || line.trim().isEmpty()) { return -1; } @@ -165,7 +165,7 @@ static final class DependencyAggregator { /** * Get the string representation of the dependency to use as excludes * - * @return an exclude string for the dependency:tree plugin, ie. group-id:artifact-id:*:version + * @return an exclude string for the dependency:tree plugin, i.e. group-id:artifact-id:*:version */ @Override public String toString() { @@ -188,7 +188,7 @@ PackageURL toPurl() { groupId, artifactId, version, - this.scope == "*" ? null : new TreeMap<>(Map.of("scope", this.scope)), + this.scope.equals("*") ? null : new TreeMap<>(Map.of("scope", this.scope)), null); } catch (MalformedPackageURLException e) { throw new IllegalArgumentException("Unable to parse PackageURL", e); diff --git a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java index f1350601..3904345a 100644 --- a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java +++ b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java @@ -17,8 +17,6 @@ import static com.redhat.exhort.impl.ExhortApi.debugLoggingIsNeeded; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.github.packageurl.MalformedPackageURLException; import com.github.packageurl.PackageURL; import com.redhat.exhort.Api; @@ -36,7 +34,13 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.TreeMap; import java.util.logging.Logger; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -152,39 +156,37 @@ private void performManifestVersionsCheck(String[] goModGraphLines, Path manifes List comparisonLines = Arrays.stream(goModGraphLines) .filter((line) -> line.startsWith(root)) - .map((line) -> getChildVertex(line)) + .map(GoModulesProvider::getChildVertex) .collect(Collectors.toList()); List goModDependencies = collectAllDepsFromManifest(lines, goModLines); - comparisonLines.stream() - .forEach( - (dependency) -> { - String[] parts = dependency.split("@"); - String version = parts[1]; - String depName = parts[0]; - goModDependencies.stream() - .forEach( - (dep) -> { - String[] artifactParts = dep.trim().split(" "); - String currentDepName = artifactParts[0]; - String currentVersion = artifactParts[1]; - if (currentDepName.trim().equals(depName.trim())) { - if (!currentVersion.trim().equals(version.trim())) { - throw new RuntimeException( - String.format( - "Can't continue with analysis - versions mismatch for" - + " dependency name=%s, manifest version=%s, installed" - + " Version=%s, if you want to allow version mismatch for" - + " analysis between installed and requested packages," - + " set environment variable/setting -" - + " %s=false", - depName, - currentVersion, - version, - Provider.PROP_MATCH_MANIFEST_VERSIONS)); - } - } - }); - }); + comparisonLines.forEach( + (dependency) -> { + String[] parts = dependency.split("@"); + String version = parts[1]; + String depName = parts[0]; + goModDependencies.forEach( + (dep) -> { + String[] artifactParts = dep.trim().split(" "); + String currentDepName = artifactParts[0]; + String currentVersion = artifactParts[1]; + if (currentDepName.trim().equals(depName.trim())) { + if (!currentVersion.trim().equals(version.trim())) { + throw new RuntimeException( + String.format( + "Can't continue with analysis - versions mismatch for" + + " dependency name=%s, manifest version=%s, installed" + + " Version=%s, if you want to allow version mismatch for" + + " analysis between installed and requested packages," + + " set environment variable/setting -" + + " %s=false", + depName, + currentVersion, + version, + Provider.PROP_MATCH_MANIFEST_VERSIONS)); + } + } + }); + }); } catch (IOException e) { throw new RuntimeException( "Failed to open go.mod file for manifest versions check validation!"); @@ -192,7 +194,7 @@ private void performManifestVersionsCheck(String[] goModGraphLines, Path manifes } private List collectAllDepsFromManifest(String[] lines, String goModLines) { - List result = new ArrayList<>(); + List result; // collect all deps that starts with require keyword result = Arrays.stream(lines) @@ -245,7 +247,7 @@ public void determineMainModuleVersion(Path directory) { VersionControlSystem vcs = new GitVersionControlSystemImpl(); if (vcs.isDirectoryRepo(directory)) { TagInfo latestTagInfo = vcs.getLatestTag(directory); - if (!latestTagInfo.getTagName().trim().equals("")) { + if (!latestTagInfo.getTagName().trim().isEmpty()) { if (!latestTagInfo.isCurrentCommitPointedByTag()) { String nextTagVersion = vcs.getNextTagVersion(latestTagInfo); this.mainModuleVersion = vcs.getPseudoVersion(latestTagInfo, nextTagVersion); @@ -253,7 +255,7 @@ public void determineMainModuleVersion(Path directory) { this.mainModuleVersion = latestTagInfo.getTagName(); } } else { - if (!latestTagInfo.getCurrentCommitDigest().trim().equals("")) { + if (!latestTagInfo.getCurrentCommitDigest().trim().isEmpty()) { this.mainModuleVersion = vcs.getPseudoVersion(latestTagInfo, getDefaultMainModuleVersion()); } @@ -262,7 +264,7 @@ public void determineMainModuleVersion(Path directory) { } private Sbom buildSbomFromGraph( - String goModulesResult, List ignoredDeps, Path manifestPath) throws IOException { + String goModulesResult, List ignoredDeps, Path manifestPath) { // Each entry contains a key of the module, and the list represents the module direct // dependencies , so // pairing of the key with each of the dependencies in a list is basically an edge in the graph. @@ -272,7 +274,7 @@ private Sbom buildSbomFromGraph( // value of list of that module' dependencies. List linesList = Arrays.asList(goModulesResult.split(System.lineSeparator())); - Integer startingIndex = 0; + int startingIndex = 0; for (String line : linesList) { if (!edges.containsKey(getParentVertex(line))) { // Collect all direct dependencies of the current module into a list. @@ -298,8 +300,7 @@ private Sbom buildSbomFromGraph( PackageURL source = toPurl(key, "@", this.goEnvironmentVariableForPurl); value.forEach( dep -> { - PackageURL targetPurl = - toPurl((String) dep, "@", this.goEnvironmentVariableForPurl); + PackageURL targetPurl = toPurl(dep, "@", this.goEnvironmentVariableForPurl); sbom.addDependency(source, targetPurl, null); }); }); @@ -348,12 +349,11 @@ private Map> getFinalPackagesVersionsForModule( private List getListOfPackagesWithFinalVersions( Map finalModulesVersions, Map.Entry> entry) { - return (List) - entry.getValue().stream() - .map( - (packageWithVersion) -> - getPackageWithFinalVersion(finalModulesVersions, (String) packageWithVersion)) - .collect(Collectors.toList()); + return entry.getValue().stream() + .map( + (packageWithVersion) -> + getPackageWithFinalVersion(finalModulesVersions, packageWithVersion)) + .collect(Collectors.toList()); } public static String getPackageWithFinalVersion( @@ -387,11 +387,10 @@ private TreeMap getQualifiers(boolean includeOsAndArch) { getEnvironmentVariable(goEnvironmentVariables, GO_HOST_ARCHITECTURE_ENV_NAME); String hostOS = getEnvironmentVariable(goEnvironmentVariables, GO_HOST_OPERATION_SYSTEM_ENV_NAME); - return new TreeMap( - Map.of("type", "module", "goos", hostOS, "goarch", hostArch)); + return new TreeMap<>(Map.of("type", "module", "goos", hostOS, "goarch", hostArch)); } - return new TreeMap(Map.of("type", "module")); + return new TreeMap<>(Map.of("type", "module")); } private static String getEnvironmentVariable(String goEnvironmentVariables, String envName) { @@ -403,8 +402,7 @@ private static String getEnvironmentVariable(String goEnvironmentVariables, Stri return envValue.replaceAll("\"", ""); } - private String buildGoModulesDependencies(Path manifestPath) - throws JsonMappingException, JsonProcessingException { + private String buildGoModulesDependencies(Path manifestPath) { String[] goModulesDeps; goModulesDeps = new String[] {goExecutable, "mod", "graph"}; diff --git a/src/main/java/com/redhat/exhort/providers/GradleProvider.java b/src/main/java/com/redhat/exhort/providers/GradleProvider.java index b126ba37..4cc3888c 100644 --- a/src/main/java/com/redhat/exhort/providers/GradleProvider.java +++ b/src/main/java/com/redhat/exhort/providers/GradleProvider.java @@ -233,7 +233,7 @@ private Path getDependencies(Path manifestPath) throws IOException { return tempFile; } - protected Path getProperties(Path manifestPath) throws IOException { + private Path getProperties(Path manifestPath) throws IOException { Path propsTempFile = Files.createTempFile("propsfile", ".txt"); String propCmd = gradleExecutable + " properties"; String[] propCmdList = propCmd.split("\\s+"); @@ -504,8 +504,7 @@ private String getRoot(Path textFormatFile, Map propertiesMap) String group = propertiesMap.get("group"); String version = propertiesMap.get("version"); String rootName = extractRootProjectValue(textFormatFile); - String root = group + ':' + rootName + ':' + "jar" + ':' + version; - return root; + return group + ':' + rootName + ':' + "jar" + ':' + version; } private String extractRootProjectValue(Path inputFilePath) throws IOException { diff --git a/src/main/java/com/redhat/exhort/providers/JavaMavenProvider.java b/src/main/java/com/redhat/exhort/providers/JavaMavenProvider.java index 4fb8bd4d..860dc9ee 100644 --- a/src/main/java/com/redhat/exhort/providers/JavaMavenProvider.java +++ b/src/main/java/com/redhat/exhort/providers/JavaMavenProvider.java @@ -162,13 +162,7 @@ private Content generateSbomFromEffectivePom() throws IOException { deps.stream() .filter(dep -> !testsDeps.contains(dep)) .map(DependencyAggregator::toPurl) - .filter( - dep -> - ignored.stream() - .filter(artifact -> artifact.isCoordinatesEquals(dep)) - .collect(Collectors.toList()) - .size() - == 0) + .filter(dep -> ignored.stream().noneMatch(artifact -> artifact.isCoordinatesEquals(dep))) .forEach(d -> sbom.addDependency(sbom.getRoot(), d, null)); // build and return content for constructing request to the backend @@ -206,7 +200,7 @@ private PackageURL getRoot(final Path manifestPath) throws IOException { break; } } - if (isRoot && dependencyAggregator.isValid()) { + if (dependencyAggregator.isValid()) { return dependencyAggregator.toPurl(); } } diff --git a/src/main/java/com/redhat/exhort/providers/JavaScriptNpmProvider.java b/src/main/java/com/redhat/exhort/providers/JavaScriptNpmProvider.java index 6ff015e2..133b47a9 100644 --- a/src/main/java/com/redhat/exhort/providers/JavaScriptNpmProvider.java +++ b/src/main/java/com/redhat/exhort/providers/JavaScriptNpmProvider.java @@ -32,7 +32,7 @@ public JavaScriptNpmProvider(Path manifest) { } @Override - protected final String lockFileName() { + protected String lockFileName() { return LOCK_FILE; } diff --git a/src/main/java/com/redhat/exhort/providers/JavaScriptPnpmProvider.java b/src/main/java/com/redhat/exhort/providers/JavaScriptPnpmProvider.java index e52b945f..86f167ff 100644 --- a/src/main/java/com/redhat/exhort/providers/JavaScriptPnpmProvider.java +++ b/src/main/java/com/redhat/exhort/providers/JavaScriptPnpmProvider.java @@ -16,7 +16,6 @@ package com.redhat.exhort.providers; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.redhat.exhort.tools.Ecosystem; import java.nio.file.Path; @@ -35,7 +34,7 @@ public JavaScriptPnpmProvider(Path manifest) { } @Override - protected final String lockFileName() { + protected String lockFileName() { return LOCK_FILE; } @@ -65,8 +64,7 @@ protected String[] listDepsCmd(boolean includeTransitive, Path manifestDir) { } @Override - protected JsonNode buildDependencyTree(boolean includeTransitive) - throws JsonMappingException, JsonProcessingException { + protected JsonNode buildDependencyTree(boolean includeTransitive) throws JsonProcessingException { var depTree = super.buildDependencyTree(includeTransitive); return depTree.get(0); } diff --git a/src/main/java/com/redhat/exhort/providers/JavaScriptProvider.java b/src/main/java/com/redhat/exhort/providers/JavaScriptProvider.java index fa64b70a..beb43a65 100644 --- a/src/main/java/com/redhat/exhort/providers/JavaScriptProvider.java +++ b/src/main/java/com/redhat/exhort/providers/JavaScriptProvider.java @@ -18,7 +18,6 @@ import static com.redhat.exhort.impl.ExhortApi.debugLoggingIsNeeded; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.github.packageurl.MalformedPackageURLException; import com.github.packageurl.PackageURL; @@ -187,7 +186,7 @@ private Sbom getDirectDependencySbom() throws IOException { return sbom; } - // Returns the dependencies a the base level of the dependency tree in a name -> purl format. + // Returns the dependencies a base level of the dependency tree in a name -> purl format. // axios -> pkg:npm/axios@0.19.2 protected Map getRootDependencies(JsonNode depTree) { Map direct = new TreeMap<>(); @@ -207,8 +206,7 @@ protected Map getRootDependencies(JsonNode depTree) { return direct; } - protected JsonNode buildDependencyTree(boolean includeTransitive) - throws JsonMappingException, JsonProcessingException { + protected JsonNode buildDependencyTree(boolean includeTransitive) throws JsonProcessingException { // clean command used to clean build target Path manifestDir; try { @@ -248,7 +246,7 @@ protected String parseDepTreeOutput(String output) { return output; } - protected List getIgnoredDeps(JsonNode manifest) throws IOException { + protected List getIgnoredDeps(JsonNode manifest) { var ignored = new ArrayList(); var ignoredNode = manifest.withArray("exhortignore"); if (ignoredNode == null) { diff --git a/src/main/java/com/redhat/exhort/providers/JavaScriptProviderFactory.java b/src/main/java/com/redhat/exhort/providers/JavaScriptProviderFactory.java index b9ba99c9..f3bf4372 100644 --- a/src/main/java/com/redhat/exhort/providers/JavaScriptProviderFactory.java +++ b/src/main/java/com/redhat/exhort/providers/JavaScriptProviderFactory.java @@ -25,9 +25,9 @@ public final class JavaScriptProviderFactory { private static final Map> JS_PROVIDERS = Map.of( - JavaScriptNpmProvider.LOCK_FILE, (manifest) -> new JavaScriptNpmProvider(manifest), - JavaScriptYarnProvider.LOCK_FILE, (manifest) -> new JavaScriptYarnProvider(manifest), - JavaScriptPnpmProvider.LOCK_FILE, (manifest) -> new JavaScriptPnpmProvider(manifest)); + JavaScriptNpmProvider.LOCK_FILE, JavaScriptNpmProvider::new, + JavaScriptYarnProvider.LOCK_FILE, JavaScriptYarnProvider::new, + JavaScriptPnpmProvider.LOCK_FILE, JavaScriptPnpmProvider::new); public static Provider create(final Path manifestPath) { var manifestDir = manifestPath.getParent(); diff --git a/src/main/java/com/redhat/exhort/providers/JavaScriptYarnProvider.java b/src/main/java/com/redhat/exhort/providers/JavaScriptYarnProvider.java index 9e55237e..9ef55bcf 100644 --- a/src/main/java/com/redhat/exhort/providers/JavaScriptYarnProvider.java +++ b/src/main/java/com/redhat/exhort/providers/JavaScriptYarnProvider.java @@ -37,7 +37,7 @@ public final class JavaScriptYarnProvider extends JavaScriptProvider { private static final Pattern versionPattern = Pattern.compile("^([0-9]+)\\."); - private YarnProcessor processor; + private final YarnProcessor processor; public JavaScriptYarnProvider(Path manifest) { super(manifest, Ecosystem.Type.YARN, CMD_NAME); @@ -45,7 +45,7 @@ public JavaScriptYarnProvider(Path manifest) { } @Override - protected final String lockFileName() { + protected String lockFileName() { return LOCK_FILE; } @@ -82,12 +82,10 @@ private YarnProcessor resolveVersion(Path manifestPath) { var matcher = versionPattern.matcher(output); if (matcher.find()) { var majorVersion = Integer.parseInt(matcher.group(1)); - switch (majorVersion) { - case 1: - return new YarnClassicProcessor(packageManager(), manifest); - default: - return new YarnBerryProcessor(packageManager(), manifest); + if (majorVersion == 1) { + return new YarnClassicProcessor(packageManager(), manifest); } + return new YarnBerryProcessor(packageManager(), manifest); } throw new IllegalStateException("Unable to resolve current Yarn version: " + output); } diff --git a/src/main/java/com/redhat/exhort/providers/PythonPipProvider.java b/src/main/java/com/redhat/exhort/providers/PythonPipProvider.java index 990aac23..e1920024 100644 --- a/src/main/java/com/redhat/exhort/providers/PythonPipProvider.java +++ b/src/main/java/com/redhat/exhort/providers/PythonPipProvider.java @@ -98,14 +98,12 @@ public Content provideComponent() throws IOException { printDependenciesTree(dependencies); Sbom sbom = SbomFactory.newInstance(); sbom.addRoot(toPurl(DEFAULT_PIP_ROOT_COMPONENT_NAME, DEFAULT_PIP_ROOT_COMPONENT_VERSION)); - dependencies.stream() - .forEach( - (component) -> { - sbom.addDependency( - sbom.getRoot(), - toPurl((String) component.get("name"), (String) component.get("version")), - null); - }); + dependencies.forEach( + (component) -> + sbom.addDependency( + sbom.getRoot(), + toPurl((String) component.get("name"), (String) component.get("version")), + null)); var manifestContent = Files.readString(manifest); handleIgnoredDependencies(manifestContent, sbom); @@ -154,17 +152,16 @@ private void handleIgnoredDependencies(String manifestContent, Sbom sbom) { // name of package // from the purl, and remove the package name from sbom according to name only Set deps = - (Set) - ignoredDepsVersions.stream() - .map( - purlString -> { - try { - return new PackageURL((String) purlString).getName(); - } catch (MalformedPackageURLException e) { - throw new RuntimeException(e); - } - }) - .collect(Collectors.toSet()); + ignoredDepsVersions.stream() + .map( + purlString -> { + try { + return new PackageURL(purlString).getName(); + } catch (MalformedPackageURLException e) { + throw new RuntimeException(e); + } + }) + .collect(Collectors.toSet()); sbom.setBelongingCriteriaBinaryAlgorithm(Sbom.BelongingCondition.NAME); sbom.filterIgnoredDeps(deps); } @@ -210,7 +207,7 @@ private PackageURL toPurl(String name, String version) { } } - private PythonControllerBase getPythonController() throws IOException { + private PythonControllerBase getPythonController() { String pythonPipBinaries; boolean useVirtualPythonEnv; if (!Environment.get(PythonControllerBase.PROP_EXHORT_PIP_SHOW, "").trim().isEmpty() @@ -239,7 +236,7 @@ private PythonControllerBase getPythonController() throws IOException { return pythonController; } - protected String getExecutable(String command, String args) { + private String getExecutable(String command, String args) { String python = Operations.getCustomPathOrElse("python3"); String pip = Operations.getCustomPathOrElse("pip3"); try { diff --git a/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java b/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java index 490a253a..e4fbf4c4 100644 --- a/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java +++ b/src/main/java/com/redhat/exhort/providers/YarnBerryProcessor.java @@ -102,22 +102,21 @@ void addDependenciesToSbom(Sbom sbom, JsonNode depTree) { if (depTree == null) { return; } - ((ArrayNode) depTree) - .forEach( - n -> { - var depName = n.get("value").asText(); - var from = isRoot(depName) ? sbom.getRoot() : purlFromNode(depName, n); - var deps = (ArrayNode) n.get("children").get("Dependencies"); - if (deps != null && !deps.isEmpty()) { - deps.forEach( - d -> { - var target = purlFromlocator(d.get("locator").asText()); - if (target != null) { - sbom.addDependency(from, target, null); - } - }); - } - }); + depTree.forEach( + n -> { + var depName = n.get("value").asText(); + var from = isRoot(depName) ? sbom.getRoot() : purlFromNode(depName, n); + var deps = (ArrayNode) n.get("children").get("Dependencies"); + if (deps != null && !deps.isEmpty()) { + deps.forEach( + d -> { + var target = purlFromlocator(d.get("locator").asText()); + if (target != null) { + sbom.addDependency(from, target, null); + } + }); + } + }); } private PackageURL purlFromlocator(String locator) { diff --git a/src/main/java/com/redhat/exhort/providers/YarnClassicProcessor.java b/src/main/java/com/redhat/exhort/providers/YarnClassicProcessor.java index 8b9e582c..43817106 100644 --- a/src/main/java/com/redhat/exhort/providers/YarnClassicProcessor.java +++ b/src/main/java/com/redhat/exhort/providers/YarnClassicProcessor.java @@ -107,10 +107,7 @@ void addDependenciesToSbom(Sbom sbom, JsonNode depTree) { } }); - trees.forEach( - n -> { - addChildrenToSbom(sbom, n, purls); - }); + trees.forEach(n -> addChildrenToSbom(sbom, n, purls)); } void addChildrenToSbom(Sbom sbom, JsonNode node, Map purls) { diff --git a/src/main/java/com/redhat/exhort/sbom/CycloneDXSbom.java b/src/main/java/com/redhat/exhort/sbom/CycloneDXSbom.java index a7e45ac5..e1cad4f4 100644 --- a/src/main/java/com/redhat/exhort/sbom/CycloneDXSbom.java +++ b/src/main/java/com/redhat/exhort/sbom/CycloneDXSbom.java @@ -21,7 +21,12 @@ import com.github.packageurl.PackageURL; import com.redhat.exhort.logging.LoggersFactory; import com.redhat.exhort.utils.Environment; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Optional; import java.util.function.BiPredicate; import java.util.function.Predicate; import java.util.logging.Logger; @@ -30,6 +35,7 @@ import org.cyclonedx.exception.GeneratorException; import org.cyclonedx.generators.BomGeneratorFactory; import org.cyclonedx.model.Bom; +import org.cyclonedx.model.BomReference; import org.cyclonedx.model.Component; import org.cyclonedx.model.Component.Type; import org.cyclonedx.model.Dependency; @@ -38,10 +44,10 @@ public class CycloneDXSbom implements Sbom { private static final String EXHORT_IGNORE_METHOD = "EXHORT_IGNORE_METHOD"; - private Logger log = LoggersFactory.getLogger(this.getClass().getName()); + private final Logger log = LoggersFactory.getLogger(this.getClass().getName()); private static final Version VERSION = Version.VERSION_14; private String exhortIgnoreMethod; - private Bom bom; + private final Bom bom; private PackageURL root; private BiPredicate, Component> belongingCriteriaBinaryAlgorithm; @@ -175,7 +181,7 @@ private Sbom removeIgnoredDepsFromSbom(List refsToIgnore) { .filter(d -> !refsToIgnore.contains(d.getRef())) .collect(Collectors.toList()); bom.setDependencies(newDeps); - bom.getDependencies().stream() + bom.getDependencies() .forEach( d -> { if (d.getDependencies() != null) { @@ -205,9 +211,9 @@ private List createIgnoreFilter(List deps, Collection collected = - dep.getDependencies().stream().map(p -> p.getRef()).collect(Collectors.toList()); + dep.getDependencies().stream().map(BomReference::getRef).collect(Collectors.toList()); result.addAll(collected); - if (dep.getDependencies().stream().filter(p -> p != null).count() > 0) { + if (dep.getDependencies().stream().anyMatch(Objects::nonNull)) { result = createIgnoreFilter(dep.getDependencies(), result); } } @@ -294,7 +300,7 @@ public boolean checkIfPackageInsideDependsOnList(PackageURL component, String na }) .collect(Collectors.toList()); - result = allDirectDeps.stream().filter(dep -> dep.getName().equals(name)).count() > 0; + result = allDirectDeps.stream().anyMatch(dep -> dep.getName().equals(name)); } return result; } diff --git a/src/main/java/com/redhat/exhort/tools/Ecosystem.java b/src/main/java/com/redhat/exhort/tools/Ecosystem.java index 0d588b4a..75b95db1 100644 --- a/src/main/java/com/redhat/exhort/tools/Ecosystem.java +++ b/src/main/java/com/redhat/exhort/tools/Ecosystem.java @@ -35,7 +35,7 @@ public enum Type { PYTHON("pypi"), GRADLE("gradle"); - String type; + final String type; public String getType() { return type; diff --git a/src/main/java/com/redhat/exhort/tools/Operations.java b/src/main/java/com/redhat/exhort/tools/Operations.java index f1584ef2..f92d3735 100644 --- a/src/main/java/com/redhat/exhort/tools/Operations.java +++ b/src/main/java/com/redhat/exhort/tools/Operations.java @@ -204,9 +204,9 @@ public static ProcessExecOutput runProcessGetFullOutput( } public static class ProcessExecOutput { - private String output; - private String error; - private int exitCode; + private final String output; + private final String error; + private final int exitCode; public ProcessExecOutput(String output, String error, int exitCode) { this.output = output; diff --git a/src/main/java/com/redhat/exhort/utils/Environment.java b/src/main/java/com/redhat/exhort/utils/Environment.java index 70aa6d2e..02c5540d 100644 --- a/src/main/java/com/redhat/exhort/utils/Environment.java +++ b/src/main/java/com/redhat/exhort/utils/Environment.java @@ -21,17 +21,17 @@ public final class Environment { private Environment() {} - public static final String get(String name, String defaultValue) { + public static String get(String name, String defaultValue) { return Optional.ofNullable(System.getProperty(name)) .or(() -> Optional.ofNullable(System.getenv(name))) .orElse(defaultValue); } - public static final String get(String name) { + public static String get(String name) { return get(name, null); } - public static final boolean getBoolean(String key, boolean defaultValue) { + public static boolean getBoolean(String key, boolean defaultValue) { var val = get(key); if (val != null) { return Boolean.parseBoolean(val.trim().toLowerCase()); diff --git a/src/main/java/com/redhat/exhort/utils/PythonControllerBase.java b/src/main/java/com/redhat/exhort/utils/PythonControllerBase.java index e3664935..39092859 100644 --- a/src/main/java/com/redhat/exhort/utils/PythonControllerBase.java +++ b/src/main/java/com/redhat/exhort/utils/PythonControllerBase.java @@ -47,7 +47,7 @@ public abstract class PythonControllerBase { public static final String PROP_EXHORT_PIP_SHOW = "EXHORT_PIP_SHOW"; public static final String PROP_EXHORT_PYTHON_VIRTUAL_ENV = "EXHORT_PYTHON_VIRTUAL_ENV"; - private Logger log = LoggersFactory.getLogger(this.getClass().getName()); + private final Logger log = LoggersFactory.getLogger(this.getClass().getName()); protected Path pythonEnvironmentDir; protected Path pipBinaryDir; @@ -114,7 +114,7 @@ private void installingRequirementsOneByOne(String pathToRequirements) { List requirementsRows = Files.readAllLines(Path.of(pathToRequirements)); requirementsRows.stream() .filter((line) -> !line.trim().startsWith("#")) - .filter((line) -> !line.trim().equals("")) + .filter((line) -> !line.trim().isEmpty()) .forEach( (dependency) -> { String dependencyName = getDependencyName(dependency); @@ -190,7 +190,7 @@ private List> getDependenciesImpl( if (pythonDependency != null) { installedVersion = pythonDependency.getVersion(); } - if (!installedVersion.trim().equals("")) { + if (!installedVersion.trim().isEmpty()) { if (!manifestVersion.trim().equals(installedVersion.trim())) { throw new RuntimeException( String.format( @@ -296,7 +296,7 @@ private void bringAllDependencies( boolean includeTransitive, List path) { - if (dependencyList == null || depName.trim().equals("")) return; + if (dependencyList == null || depName.trim().isEmpty()) return; PythonDependency pythonDependency = cachedTree.get(new StringInsensitive(depName)); if (pythonDependency == null) { @@ -352,7 +352,7 @@ protected List getDepsList(String pipShowOutput) { } return Arrays.stream(listOfDeps.split(",")) .map(String::trim) - .filter(dep -> !dep.equals("")) + .filter(dep -> !dep.isEmpty()) .collect(Collectors.toList()); } diff --git a/src/main/java/com/redhat/exhort/utils/PythonControllerTestEnv.java b/src/main/java/com/redhat/exhort/utils/PythonControllerTestEnv.java index 0a79506b..59b6086d 100644 --- a/src/main/java/com/redhat/exhort/utils/PythonControllerTestEnv.java +++ b/src/main/java/com/redhat/exhort/utils/PythonControllerTestEnv.java @@ -28,17 +28,11 @@ public PythonControllerTestEnv(String pathToPythonBin, String pathToPip) { public void prepareEnvironment(String pathToPythonBin) { super.prepareEnvironment(pathToPythonBin); Operations.runProcessGetOutput( - Path.of("."), - new String[] {this.pathToPythonBin, "-m", "pip", "install", "--upgrade", "pip"}); + Path.of("."), this.pathToPythonBin, "-m", "pip", "install", "--upgrade", "pip"); } @Override public boolean automaticallyInstallPackageOnEnvironment() { return true; } - - @Override - public boolean isVirtualEnv() { - return false; - } } diff --git a/src/main/java/com/redhat/exhort/utils/PythonControllerVirtualEnv.java b/src/main/java/com/redhat/exhort/utils/PythonControllerVirtualEnv.java index b9c6946e..7296eb47 100644 --- a/src/main/java/com/redhat/exhort/utils/PythonControllerVirtualEnv.java +++ b/src/main/java/com/redhat/exhort/utils/PythonControllerVirtualEnv.java @@ -43,8 +43,7 @@ public void prepareEnvironment(String pathToPythonBin) { throw new RuntimeException(e); } Operations.runProcessGetOutput( - Path.of("."), - new String[] {pathToPythonBin, "-m", "venv", pythonEnvironmentDir.toString()}); + Path.of("."), pathToPythonBin, "-m", "venv", pythonEnvironmentDir.toString()); String envBinDir = pipBinaryDir.toString(); if (pathToPythonBin.contains("python3")) { this.pipBinaryLocation = Path.of(envBinDir, "pip3").toString(); diff --git a/src/main/java/com/redhat/exhort/utils/PythonDependency.java b/src/main/java/com/redhat/exhort/utils/PythonDependency.java index c77a77f3..469f2f12 100644 --- a/src/main/java/com/redhat/exhort/utils/PythonDependency.java +++ b/src/main/java/com/redhat/exhort/utils/PythonDependency.java @@ -18,8 +18,8 @@ import java.util.List; public class PythonDependency { - String name = ""; - String version = ""; + String name; + String version; List dependencies; public PythonDependency(String name, String version, List dependencies) { diff --git a/src/main/java/com/redhat/exhort/vcs/GitVersionControlSystemImpl.java b/src/main/java/com/redhat/exhort/vcs/GitVersionControlSystemImpl.java index 5f50c9dd..fa277766 100644 --- a/src/main/java/com/redhat/exhort/vcs/GitVersionControlSystemImpl.java +++ b/src/main/java/com/redhat/exhort/vcs/GitVersionControlSystemImpl.java @@ -24,7 +24,7 @@ public class GitVersionControlSystemImpl implements VersionControlSystem { - private String gitBinary; + private final String gitBinary; public GitVersionControlSystemImpl() { gitBinary = Operations.getCustomPathOrElse("git"); @@ -106,12 +106,10 @@ public String getNextTagVersion(TagInfo tagInfo) { String result = ""; // if tag version ends with a digit, then increment it by one, and append to the end -0. if (Pattern.matches(".*[0-9]$", tagInfo.getTagName())) { - int length = tagInfo.getTagName().toCharArray().length; + int length = tagInfo.getTagName().length(); Integer lastDigit = Integer.parseInt(tagInfo.getTagName().substring(length - 1, length)); lastDigit++; - result = - String.format( - "%s%s-0", tagInfo.getTagName().substring(0, length - 1), lastDigit.toString()); + result = String.format("%s%s-0", tagInfo.getTagName().substring(0, length - 1), lastDigit); } else { // if tag version ends with some suffix starting with '.' or '-', then just append to the end // -0. diff --git a/src/test/java/com/redhat/exhort/ExhortTest.java b/src/test/java/com/redhat/exhort/ExhortTest.java index 822bfab6..8ba0000b 100644 --- a/src/test/java/com/redhat/exhort/ExhortTest.java +++ b/src/test/java/com/redhat/exhort/ExhortTest.java @@ -29,7 +29,7 @@ public class ExhortTest { protected String getStringFromFile(String path) { - byte[] bytes = new byte[0]; + byte[] bytes; try { InputStream resourceAsStream = getResourceAsStreamDecision(this.getClass(), path); bytes = resourceAsStream.readAllBytes(); diff --git a/src/test/java/com/redhat/exhort/image/ImageRefTest.java b/src/test/java/com/redhat/exhort/image/ImageRefTest.java index 2374469e..c5f7ddc1 100644 --- a/src/test/java/com/redhat/exhort/image/ImageRefTest.java +++ b/src/test/java/com/redhat/exhort/image/ImageRefTest.java @@ -16,7 +16,6 @@ package com.redhat.exhort.image; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.AdditionalMatchers.aryEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -59,7 +58,7 @@ void test_imageRef() throws MalformedPackageURLException { var imageRefPurl = new ImageRef(purl); assertEquals(imageRef, imageRefPurl); - assertTrue(imageRef.equals(imageRefPurl)); + assertEquals(imageRef, imageRefPurl); assertEquals(imageRef.hashCode(), imageRefPurl.hashCode()); } diff --git a/src/test/java/com/redhat/exhort/image/ImageTest.java b/src/test/java/com/redhat/exhort/image/ImageTest.java index c4733feb..3fe51990 100644 --- a/src/test/java/com/redhat/exhort/image/ImageTest.java +++ b/src/test/java/com/redhat/exhort/image/ImageTest.java @@ -15,7 +15,9 @@ */ package com.redhat.exhort.image; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.stream.Stream; import org.junit.jupiter.api.Named; @@ -408,8 +410,8 @@ void test_equals() { var image2 = new Image("test-image:latest"); var image3 = new Image("test-image:old"); - assertTrue(image1.equals(image2)); - assertFalse(image2.equals(image3)); + assertEquals(image1, image2); + assertNotEquals(image2, image3); } @Test @@ -426,28 +428,13 @@ void test_hashCode() { void test_image_null() { var expectedMessage = "Image name must not be null"; - var exception1 = - assertThrows( - NullPointerException.class, - () -> { - new Image(null); - }); + var exception1 = assertThrows(NullPointerException.class, () -> new Image(null)); assertEquals(expectedMessage, exception1.getMessage()); - var exception2 = - assertThrows( - NullPointerException.class, - () -> { - new Image(null, "test"); - }); + var exception2 = assertThrows(NullPointerException.class, () -> new Image(null, "test")); assertEquals(expectedMessage, exception2.getMessage()); - var exception3 = - assertThrows( - NullPointerException.class, - () -> { - Image.validate(null); - }); + var exception3 = assertThrows(NullPointerException.class, () -> Image.validate(null)); assertEquals(expectedMessage, exception3.getMessage()); } @@ -456,28 +443,14 @@ void test_image_invalid() { var imageName = ""; var expectedMessage = imageName + " is not a proper image name ([registry/][repo][:port]"; - var exception1 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Image(imageName); - }); + var exception1 = assertThrows(IllegalArgumentException.class, () -> new Image(imageName)); assertEquals(expectedMessage, exception1.getMessage()); var exception2 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Image(imageName, "test"); - }); + assertThrows(IllegalArgumentException.class, () -> new Image(imageName, "test")); assertEquals(expectedMessage, exception2.getMessage()); - var exception3 = - assertThrows( - IllegalArgumentException.class, - () -> { - Image.validate(imageName); - }); + var exception3 = assertThrows(IllegalArgumentException.class, () -> Image.validate(imageName)); assertEquals(expectedMessage, exception3.getMessage()); } @@ -501,28 +474,14 @@ void test_all_invalid() { + " match allowed pattern '^sha256:[a-z0-9]{32,}$'\n" + "See http://bit.ly/docker_image_fmt for more details"; - var exception1 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Image(imageName); - }); + var exception1 = assertThrows(IllegalArgumentException.class, () -> new Image(imageName)); assertEquals(expectedMessage, exception1.getMessage()); var exception2 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Image(imageName, "&^*&"); - }); + assertThrows(IllegalArgumentException.class, () -> new Image(imageName, "&^*&")); assertEquals(expectedMessage, exception2.getMessage()); - var exception3 = - assertThrows( - IllegalArgumentException.class, - () -> { - Image.validate(imageName); - }); + var exception3 = assertThrows(IllegalArgumentException.class, () -> Image.validate(imageName)); assertEquals(expectedMessage, exception3.getMessage()); } } diff --git a/src/test/java/com/redhat/exhort/image/ImageUtilsTest.java b/src/test/java/com/redhat/exhort/image/ImageUtilsTest.java index 2454b44b..ffd7dedf 100644 --- a/src/test/java/com/redhat/exhort/image/ImageUtilsTest.java +++ b/src/test/java/com/redhat/exhort/image/ImageUtilsTest.java @@ -546,11 +546,7 @@ void test_host_info_no_docker_path() { .thenReturn(output); var exception = - assertThrows( - RuntimeException.class, - () -> { - ImageUtils.hostInfo("docker", "info"); - }); + assertThrows(RuntimeException.class, () -> ImageUtils.hostInfo("docker", "info")); assertEquals("test-error", exception.getMessage()); } } diff --git a/src/test/java/com/redhat/exhort/image/PlatformTest.java b/src/test/java/com/redhat/exhort/image/PlatformTest.java index 16803b3b..cf35cc5f 100644 --- a/src/test/java/com/redhat/exhort/image/PlatformTest.java +++ b/src/test/java/com/redhat/exhort/image/PlatformTest.java @@ -15,7 +15,8 @@ */ package com.redhat.exhort.image; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.stream.Stream; import org.junit.jupiter.api.Named; @@ -102,58 +103,31 @@ void test_platform( assertEquals(variantRequired, Platform.isVariantRequired(p.getOs(), p.getArchitecture())); var pf = new Platform(os, arch, variant); - assertTrue(p.equals(pf)); + assertEquals(p, pf); assertEquals(p.hashCode(), pf.hashCode()); } @Test void test_platform_invalid() { - var exception1 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Platform(null); - }); + var exception1 = assertThrows(IllegalArgumentException.class, () -> new Platform(null)); assertEquals("Invalid platform: null", exception1.getMessage()); var exception2 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Platform("linux/arm/v8/a"); - }); + assertThrows(IllegalArgumentException.class, () -> new Platform("linux/arm/v8/a")); assertEquals("Invalid platform: linux/arm/v8/a", exception2.getMessage()); - var exception3 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Platform("linux/abc"); - }); + var exception3 = assertThrows(IllegalArgumentException.class, () -> new Platform("linux/abc")); assertEquals("Image platform is not supported: linux/abc", exception3.getMessage()); - var exception4 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Platform("", null, ""); - }); + var exception4 = assertThrows(IllegalArgumentException.class, () -> new Platform("", null, "")); assertEquals("Invalid platform arch: null", exception4.getMessage()); var exception5 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Platform("linux", "arm", "v8"); - }); + assertThrows(IllegalArgumentException.class, () -> new Platform("linux", "arm", "v8")); assertEquals("Image platform is not supported: linux/arm/v8", exception5.getMessage()); var exception6 = - assertThrows( - IllegalArgumentException.class, - () -> { - new Platform(null, "arm", null); - }); + assertThrows(IllegalArgumentException.class, () -> new Platform(null, "arm", null)); assertEquals("Image platform is not supported: null/arm/null", exception6.getMessage()); } } diff --git a/src/test/java/com/redhat/exhort/impl/ExhortApiIT.java b/src/test/java/com/redhat/exhort/impl/ExhortApiIT.java index 9f7a0ff8..20de47d6 100644 --- a/src/test/java/com/redhat/exhort/impl/ExhortApiIT.java +++ b/src/test/java/com/redhat/exhort/impl/ExhortApiIT.java @@ -29,7 +29,6 @@ import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.mockStatic; -import com.fasterxml.jackson.core.JsonProcessingException; import com.redhat.exhort.Api; import com.redhat.exhort.ExhortTest; import com.redhat.exhort.api.v4.AnalysisReport; @@ -333,8 +332,7 @@ private static void handleJsonResponse( assertThat(provider.getValue().getStatus().getCode()) .isEqualTo(HttpURLConnection.HTTP_OK); }); - analysisReportResult.getProviders().entrySet().stream() - .map(Map.Entry::getValue) + analysisReportResult.getProviders().values().stream() .map(ProviderReport::getSources) .map(Map::entrySet) .flatMap(Collection::stream) @@ -348,12 +346,11 @@ private static void handleJsonResponse( } } - private void handleHtmlResponse(String analysisReportHtml) throws JsonProcessingException { + private void handleHtmlResponse(String analysisReportHtml) { assertThat(analysisReportHtml).contains("svg", "html"); } - private void handleHtmlResponseForImage(String analysisReportHtml) - throws JsonProcessingException { + private void handleHtmlResponseForImage(String analysisReportHtml) { assertThat(analysisReportHtml).contains("svg", "html"); } @@ -367,10 +364,8 @@ private void mockMavenDependencyTree(Ecosystem.Type packageManager) throws IOExc mockedOperations .when(() -> Operations.runProcess(any(), any())) .thenAnswer( - invocationOnMock -> { - return getOutputFileAndOverwriteItWithMock( - depTree, invocationOnMock, "-DoutputFile"); - }); + invocationOnMock -> + getOutputFileAndOverwriteItWithMock(depTree, invocationOnMock, "-DoutputFile")); mockedOperations .when(() -> Operations.getCustomPathOrElse(anyString())) .thenReturn(packageManager.getExecutableShortName()); diff --git a/src/test/java/com/redhat/exhort/impl/Exhort_Api_Test.java b/src/test/java/com/redhat/exhort/impl/Exhort_Api_Test.java index 745ae44e..b116b97b 100644 --- a/src/test/java/com/redhat/exhort/impl/Exhort_Api_Test.java +++ b/src/test/java/com/redhat/exhort/impl/Exhort_Api_Test.java @@ -560,8 +560,7 @@ void test_image_analysis() @SetSystemProperty(key = "RHDA_TOKEN", value = "rhda-token-from-env-var") @SetSystemProperty(key = "RHDA_SOURCE", value = "rhda-source-from-env-var") @SetSystemProperty(key = SKIP_VALIDATION_KEY, value = "true") - void imageAnalysisHtml() - throws IOException, ExecutionException, InterruptedException, MalformedPackageURLException { + void imageAnalysisHtml() throws IOException, ExecutionException, InterruptedException { try (MockedStatic mock = Mockito.mockStatic(Operations.class); var sbomIS = getResourceAsStreamDecision(this.getClass(), "msc/image/image_sbom.json"); var reportIS = diff --git a/src/test/java/com/redhat/exhort/providers/GoModulesMainModuleVersionTest.java b/src/test/java/com/redhat/exhort/providers/GoModulesMainModuleVersionTest.java index eef8cde6..8c23f71a 100644 --- a/src/test/java/com/redhat/exhort/providers/GoModulesMainModuleVersionTest.java +++ b/src/test/java/com/redhat/exhort/providers/GoModulesMainModuleVersionTest.java @@ -16,14 +16,17 @@ package com.redhat.exhort.providers; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import com.redhat.exhort.tools.Operations; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import org.apache.commons.io.FileUtils; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; @Tag("gitTest") class GoModulesMainModuleVersionTest { diff --git a/src/test/java/com/redhat/exhort/providers/Golang_Modules_Provider_Test.java b/src/test/java/com/redhat/exhort/providers/Golang_Modules_Provider_Test.java index 95fc21e1..6822bf74 100644 --- a/src/test/java/com/redhat/exhort/providers/Golang_Modules_Provider_Test.java +++ b/src/test/java/com/redhat/exhort/providers/Golang_Modules_Provider_Test.java @@ -16,8 +16,12 @@ package com.redhat.exhort.providers; import static com.redhat.exhort.Provider.PROP_MATCH_MANIFEST_VERSIONS; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import com.redhat.exhort.Api; import com.redhat.exhort.ExhortTest; @@ -50,7 +54,7 @@ static Stream testFolders() { @ParameterizedTest @MethodSource("testFolders") - void test_the_provideStack(String testFolder) throws IOException, InterruptedException { + void test_the_provideStack(String testFolder) throws IOException { // create temp file hosting our sut package.json var tmpGoModulesDir = Files.createTempDirectory("exhort_test_"); var tmpGolangFile = Files.createFile(tmpGoModulesDir.resolve("go.mod")); @@ -79,7 +83,7 @@ void test_the_provideStack(String testFolder) throws IOException, InterruptedExc @ParameterizedTest @MethodSource("testFolders") - void test_the_provideComponent(String testFolder) throws IOException, InterruptedException { + void test_the_provideComponent(String testFolder) throws IOException { // create temp file hosting our sut package.json var tmpGoModulesDir = Files.createTempDirectory("exhort_test_"); var tmpGolangFile = Files.createFile(tmpGoModulesDir.resolve("go.mod")); @@ -89,7 +93,7 @@ void test_the_provideComponent(String testFolder) throws IOException, Interrupte Files.write(tmpGolangFile, is.readAllBytes()); } // load expected SBOM - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( this.getClass(), @@ -110,11 +114,7 @@ void test_the_provideComponent(String testFolder) throws IOException, Interrupte void Test_The_ProvideComponent_Path_Should_Throw_Exception() { GoModulesProvider goModulesProvider = new GoModulesProvider(Path.of(".")); - assertThatIllegalArgumentException() - .isThrownBy( - () -> { - goModulesProvider.provideComponent(); - }); + assertThatIllegalArgumentException().isThrownBy(goModulesProvider::provideComponent); } @ParameterizedTest @@ -158,27 +158,28 @@ void Test_Golang_Modules_with_Match_Manifest_Version(boolean MatchManifestVersio void Test_Golang_MvS_Logic_Enabled() throws IOException { System.setProperty(GoModulesProvider.PROP_EXHORT_GO_MVS_LOGIC_ENABLED, "true"); String goModPath = getFileFromResource("go.mod", "msc/golang/mvs_logic/go.mod"); - GoModulesProvider goModulesProvider = new GoModulesProvider(Path.of(goModPath)); + Path manifest = Path.of(goModPath); + GoModulesProvider goModulesProvider = new GoModulesProvider(manifest); String resultSbom = dropIgnoredKeepFormat( - goModulesProvider.getDependenciesSbom(Path.of(goModPath), true).getAsJsonString()); + goModulesProvider.getDependenciesSbom(manifest, true).getAsJsonString()); String expectedSbom = getStringFromFile("msc/golang/mvs_logic/expected_sbom_stack_analysis.json").trim(); assertEquals(dropIgnored(expectedSbom), dropIgnored(resultSbom)); // check that only one version of package golang/go.opencensus.io is in sbom for // EXHORT_GO_MVS_LOGIC_ENABLED=true - assertTrue( + assertEquals( + 1, Arrays.stream(resultSbom.split(System.lineSeparator())) - .filter(str -> str.contains("\"ref\" : \"pkg:golang/go.opencensus.io@")) - .count() - == 1); + .filter(str -> str.contains("\"ref\" : \"pkg:golang/go.opencensus.io@")) + .count()); System.clearProperty(GoModulesProvider.PROP_EXHORT_GO_MVS_LOGIC_ENABLED); resultSbom = dropIgnoredKeepFormat( - goModulesProvider.getDependenciesSbom(Path.of(goModPath), true).getAsJsonString()); + goModulesProvider.getDependenciesSbom(manifest, true).getAsJsonString()); // check that there is more than one version of package golang/go.opencensus.io in sbom for // EXHORT_GO_MVS_LOGIC_ENABLED=false assertTrue( diff --git a/src/test/java/com/redhat/exhort/providers/Gradle_Provider_Test.java b/src/test/java/com/redhat/exhort/providers/Gradle_Provider_Test.java index d0435475..6a1120c2 100644 --- a/src/test/java/com/redhat/exhort/providers/Gradle_Provider_Test.java +++ b/src/test/java/com/redhat/exhort/providers/Gradle_Provider_Test.java @@ -57,7 +57,7 @@ static Stream testFolders() { @ParameterizedTest @MethodSource("testFolders") - void test_the_provideStack(String testFolder) throws IOException, InterruptedException { + void test_the_provideStack(String testFolder) throws IOException { // create temp file hosting our sut build.gradle var tmpGradleDir = Files.createTempDirectory("exhort_test_"); var tmpGradleFile = Files.createFile(tmpGradleDir.resolve(getManifestName())); @@ -160,7 +160,7 @@ void test_the_provideStack(String testFolder) throws IOException, InterruptedExc @ParameterizedTest @MethodSource("testFolders") - void test_the_provideComponent(String testFolder) throws IOException, InterruptedException { + void test_the_provideComponent(String testFolder) throws IOException { // create temp file hosting our sut build.gradle var tmpGradleDir = Files.createTempDirectory("exhort_test_"); var tmpGradleFile = Files.createFile(tmpGradleDir.resolve(getManifestName())); diff --git a/src/test/java/com/redhat/exhort/providers/HelperExtension.java b/src/test/java/com/redhat/exhort/providers/HelperExtension.java index 6632c9b3..c26f2416 100644 --- a/src/test/java/com/redhat/exhort/providers/HelperExtension.java +++ b/src/test/java/com/redhat/exhort/providers/HelperExtension.java @@ -30,12 +30,12 @@ public class HelperExtension private static final Logger LOG = LoggersFactory.getLogger(ExhortApi.class.getName()); @Override - public void afterAll(ExtensionContext extensionContext) throws Exception { + public void afterAll(ExtensionContext extensionContext) { LOG.info("Finished all tests!!"); } @Override - public void afterEach(ExtensionContext extensionContext) throws Exception { + public void afterEach(ExtensionContext extensionContext) { LOG.info( String.format( "Finished Test Method: %s_%s", @@ -43,13 +43,13 @@ public void afterEach(ExtensionContext extensionContext) throws Exception { } @Override - public void beforeAll(ExtensionContext extensionContext) throws Exception { + public void beforeAll(ExtensionContext extensionContext) { LOG.info("Before all tests"); } @Override - public void beforeEach(ExtensionContext extensionContext) throws Exception { + public void beforeEach(ExtensionContext extensionContext) { LOG.info( String.format( "Started Test Method: %s_%s", diff --git a/src/test/java/com/redhat/exhort/providers/Java_Maven_Provider_Test.java b/src/test/java/com/redhat/exhort/providers/Java_Maven_Provider_Test.java index 0c7cdbcf..27e6ce11 100644 --- a/src/test/java/com/redhat/exhort/providers/Java_Maven_Provider_Test.java +++ b/src/test/java/com/redhat/exhort/providers/Java_Maven_Provider_Test.java @@ -60,7 +60,7 @@ static Stream testFolders() { @ParameterizedTest @MethodSource("testFolders") - void test_the_provideStack(String testFolder) throws IOException, InterruptedException { + void test_the_provideStack(String testFolder) throws IOException { // create temp file hosting our sut pom.xml var tmpPomFile = Files.createTempFile("exhort_test_", ".xml"); try (var is = @@ -86,10 +86,8 @@ void test_the_provideStack(String testFolder) throws IOException, InterruptedExc mockedOperations .when(() -> Operations.runProcess(any(), any())) .thenAnswer( - invocationOnMock -> { - return getOutputFileAndOverwriteItWithMock( - depTree, invocationOnMock, "-DoutputFile"); - }); + invocationOnMock -> + getOutputFileAndOverwriteItWithMock(depTree, invocationOnMock, "-DoutputFile")); // Mock Operations.getCustomPathOrElse to return "mvn" mockedOperations.when(() -> Operations.getCustomPathOrElse(anyString())).thenReturn("mvn"); mockedOperations @@ -125,12 +123,12 @@ public static String getOutputFileAndOverwriteItWithMock( @ParameterizedTest @MethodSource("testFolders") - void test_the_provideComponent(String testFolder) throws IOException, InterruptedException { + void test_the_provideComponent(String testFolder) throws IOException { // load the pom target pom file var targetPom = resolveFile(String.format("tst_manifests/maven/%s/pom.xml", testFolder)); // load expected SBOM - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( getClass(), @@ -148,10 +146,8 @@ void test_the_provideComponent(String testFolder) throws IOException, Interrupte mockedOperations .when(() -> Operations.runProcess(any(), any())) .thenAnswer( - invocationOnMock -> { - return getOutputFileAndOverwriteItWithMock( - effectivePom, invocationOnMock, "-Doutput"); - }); + invocationOnMock -> + getOutputFileAndOverwriteItWithMock(effectivePom, invocationOnMock, "-Doutput")); // Mock Operations.getCustomPathOrElse to return "mvn" mockedOperations.when(() -> Operations.getCustomPathOrElse(anyString())).thenReturn("mvn"); mockedOperations @@ -168,8 +164,7 @@ void test_the_provideComponent(String testFolder) throws IOException, Interrupte @ParameterizedTest @MethodSource("testFolders") - void test_the_provideComponent_With_Path(String testFolder) - throws IOException, InterruptedException { + void test_the_provideComponent_With_Path(String testFolder) throws IOException { // load the pom target pom file // create temp file hosting our sut pom.xml var tmpPomFile = Files.createTempFile("exhort_test_", ".xml"); @@ -179,7 +174,7 @@ void test_the_provideComponent_With_Path(String testFolder) Files.write(tmpPomFile, is.readAllBytes()); } // load expected SBOM - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( getClass(), @@ -197,10 +192,8 @@ void test_the_provideComponent_With_Path(String testFolder) mockedOperations .when(() -> Operations.runProcess(any(), any())) .thenAnswer( - invocationOnMock -> { - return getOutputFileAndOverwriteItWithMock( - effectivePom, invocationOnMock, "-Doutput"); - }); + invocationOnMock -> + getOutputFileAndOverwriteItWithMock(effectivePom, invocationOnMock, "-Doutput")); // Mock Operations.getCustomPathOrElse to return "mvn" mockedOperations.when(() -> Operations.getCustomPathOrElse(anyString())).thenReturn("mvn"); mockedOperations diff --git a/src/test/java/com/redhat/exhort/providers/Javascript_Provider_Test.java b/src/test/java/com/redhat/exhort/providers/Javascript_Provider_Test.java index 4cddbee5..ef28036a 100644 --- a/src/test/java/com/redhat/exhort/providers/Javascript_Provider_Test.java +++ b/src/test/java/com/redhat/exhort/providers/Javascript_Provider_Test.java @@ -17,8 +17,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.fail; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.mockStatic; import com.redhat.exhort.Api; import com.redhat.exhort.ExhortTest; @@ -32,7 +35,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.*; +import org.mockito.MockedStatic; @ExtendWith(HelperExtension.class) class Javascript_Provider_Test extends ExhortTest { @@ -55,8 +58,7 @@ static Stream testCases() { @ParameterizedTest @MethodSource({"testCases"}) - void test_the_provideStack(String pkgManager, String testFolder) - throws IOException, InterruptedException { + void test_the_provideStack(String pkgManager, String testFolder) throws IOException { // create temp file hosting our sut package.json var tmpFolder = Files.createTempDirectory("exhort_test_"); var tmpFile = Files.createFile(tmpFolder.resolve("package.json")); @@ -109,14 +111,13 @@ void test_the_provideStack(String pkgManager, String testFolder) @ParameterizedTest @MethodSource({"testCases"}) - void test_the_provideComponent(String pkgManager, String testFolder) - throws IOException, InterruptedException { + void test_the_provideComponent(String pkgManager, String testFolder) throws IOException { // load the pom target pom file var targetPom = String.format( "src/test/resources/tst_manifests/%s/%s/package.json", pkgManager, testFolder); // load expected SBOM - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( this.getClass(), @@ -165,7 +166,7 @@ void test_the_provideComponent_with_Path(String pkgManager, String testFolder) t "tst_manifests/%s/%s/%s", pkgManager, testFolder, getLockFile(pkgManager)))) { Files.write(tmpFolder.resolve(getLockFile(pkgManager)), is.readAllBytes()); } - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( this.getClass(), @@ -197,7 +198,7 @@ private String dropIgnored(String s) { } private String getLockFile(String pkgManager) { - Ecosystem.Type mgr = null; + Ecosystem.Type mgr; if (pkgManager.startsWith(Ecosystem.Type.YARN.getType().toLowerCase())) { mgr = Ecosystem.Type.YARN; } else { diff --git a/src/test/java/com/redhat/exhort/providers/PythonEnvironmentExtension.java b/src/test/java/com/redhat/exhort/providers/PythonEnvironmentExtension.java index 6ed891ba..b8f003dd 100644 --- a/src/test/java/com/redhat/exhort/providers/PythonEnvironmentExtension.java +++ b/src/test/java/com/redhat/exhort/providers/PythonEnvironmentExtension.java @@ -18,7 +18,15 @@ import com.redhat.exhort.tools.Operations; import com.redhat.exhort.utils.PythonControllerBase; import com.redhat.exhort.utils.PythonControllerTestEnv; -import org.junit.jupiter.api.extension.*; +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; public class PythonEnvironmentExtension implements BeforeAllCallback, @@ -31,23 +39,23 @@ public class PythonEnvironmentExtension private PythonControllerBase pythonController = new PythonControllerTestEnv( Operations.getCustomPathOrElse("python3"), Operations.getCustomPathOrElse("pip3")); - private System.Logger log = System.getLogger(this.getClass().getName()); + private final System.Logger log = System.getLogger(this.getClass().getName()); @Override - public void afterAll(ExtensionContext extensionContext) throws Exception { + public void afterAll(ExtensionContext extensionContext) { log.log(System.Logger.Level.INFO, "Finished all python tests and about to clean environment"); pythonController.cleanEnvironment(true); } @Override - public void afterEach(ExtensionContext extensionContext) throws Exception { + public void afterEach(ExtensionContext extensionContext) { log.log( System.Logger.Level.INFO, String.format("Finished Test Method: %s", extensionContext.getRequiredTestMethod())); } @Override - public void beforeAll(ExtensionContext extensionContext) throws Exception { + public void beforeAll(ExtensionContext extensionContext) { log.log(System.Logger.Level.INFO, "Preparing python environment for tests"); String python3 = Operations.getCustomPathOrElse("python3"); String pip3 = Operations.getCustomPathOrElse("pip3"); @@ -73,7 +81,7 @@ public void beforeAll(ExtensionContext extensionContext) throws Exception { } @Override - public void beforeEach(ExtensionContext extensionContext) throws Exception { + public void beforeEach(ExtensionContext extensionContext) { log.log( System.Logger.Level.INFO, String.format("About to Start Test Method: %s", extensionContext.getRequiredTestMethod())); @@ -95,7 +103,7 @@ public Object resolveParameter( } @Override - public void beforeTestExecution(ExtensionContext extensionContext) throws Exception { + public void beforeTestExecution(ExtensionContext extensionContext) { // Method requiredTestMethod = extensionContext.getRequiredTestInstances(); } } diff --git a/src/test/java/com/redhat/exhort/providers/Python_Provider_Test.java b/src/test/java/com/redhat/exhort/providers/Python_Provider_Test.java index d736e80b..a4c5fcdd 100644 --- a/src/test/java/com/redhat/exhort/providers/Python_Provider_Test.java +++ b/src/test/java/com/redhat/exhort/providers/Python_Provider_Test.java @@ -49,12 +49,12 @@ public Python_Provider_Test(PythonControllerBase pythonController) { this.pythonController = pythonController; } - private PythonControllerBase pythonController; + private final PythonControllerBase pythonController; @EnabledIfEnvironmentVariable(named = "RUN_PYTHON_BIN", matches = "true") @ParameterizedTest @MethodSource("testFolders") - void test_the_provideStack(String testFolder) throws IOException, InterruptedException { + void test_the_provideStack(String testFolder) throws IOException { // create temp file hosting our sut package.json var tmpPythonModuleDir = Files.createTempDirectory("exhort_test_"); var tmpPythonFile = Files.createFile(tmpPythonModuleDir.resolve("requirements.txt")); @@ -86,14 +86,14 @@ void test_the_provideStack(String testFolder) throws IOException, InterruptedExc @EnabledIfEnvironmentVariable(named = "RUN_PYTHON_BIN", matches = "true") @ParameterizedTest @MethodSource("testFolders") - void test_the_provideComponent(String testFolder) throws IOException, InterruptedException { + void test_the_provideComponent(String testFolder) throws IOException { // load the pom target pom file var requirementsFile = Path.of( String.format("src/test/resources/tst_manifests/pip/%s/requirements.txt", testFolder)); // load expected SBOM - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( this.getClass(), @@ -111,8 +111,7 @@ void test_the_provideComponent(String testFolder) throws IOException, Interrupte @MethodSource("testFolders") @SetSystemProperty(key = PythonControllerBase.PROP_EXHORT_PYTHON_VIRTUAL_ENV, value = "true") @RestoreSystemProperties - void test_the_provideStack_with_properties(String testFolder) - throws IOException, InterruptedException { + void test_the_provideStack_with_properties(String testFolder) throws IOException { // create temp file hosting our sut package.json var tmpPythonModuleDir = Files.createTempDirectory("exhort_test_"); var tmpPythonFile = Files.createFile(tmpPythonModuleDir.resolve("requirements.txt")); @@ -150,8 +149,7 @@ void test_the_provideStack_with_properties(String testFolder) @SetSystemProperty(key = PythonControllerBase.PROP_EXHORT_PYTHON_VIRTUAL_ENV, value = "true") @SetSystemProperty(key = PROP_EXHORT_PIP_USE_DEP_TREE, value = "true") @RestoreSystemProperties - void test_the_provideStack_with_pipdeptree(String testFolder) - throws IOException, InterruptedException { + void test_the_provideStack_with_pipdeptree(String testFolder) throws IOException { // create temp file hosting our sut package.json var tmpPythonModuleDir = Files.createTempDirectory("exhort_test_"); var tmpPythonFile = Files.createFile(tmpPythonModuleDir.resolve("requirements.txt")); @@ -184,14 +182,13 @@ void test_the_provideStack_with_pipdeptree(String testFolder) @ParameterizedTest @MethodSource("testFolders") @RestoreSystemProperties - void test_the_provideComponent_with_properties(String testFolder) - throws IOException, InterruptedException { + void test_the_provideComponent_with_properties(String testFolder) throws IOException { // load the pom target pom file var targetRequirements = String.format("src/test/resources/tst_manifests/pip/%s/requirements.txt", testFolder); // load expected SBOM - String expectedSbom = ""; + String expectedSbom; try (var is = getResourceAsStreamDecision( this.getClass(), @@ -214,10 +211,7 @@ void test_the_provideComponent_with_properties(String testFolder) @Test void Test_The_ProvideComponent_Path_Should_Throw_Exception() { assertThatIllegalArgumentException() - .isThrownBy( - () -> { - new PythonPipProvider(Path.of(".")).provideComponent(); - }); + .isThrownBy(() -> new PythonPipProvider(Path.of(".")).provideComponent()); } private String dropIgnored(String s) { diff --git a/src/test/java/com/redhat/exhort/utils/PythonControllerBaseTest.java b/src/test/java/com/redhat/exhort/utils/PythonControllerBaseTest.java index a8ba8d73..4cb3a01e 100644 --- a/src/test/java/com/redhat/exhort/utils/PythonControllerBaseTest.java +++ b/src/test/java/com/redhat/exhort/utils/PythonControllerBaseTest.java @@ -27,7 +27,7 @@ class PythonControllerBaseTest extends ExhortTest { static ArgumentMatcher matchCommandPipFreeze = - new ArgumentMatcher() { + new ArgumentMatcher<>() { @Override public boolean matches(String[] command) { return Arrays.stream(command).anyMatch(word -> word.contains("freeze")); @@ -43,7 +43,7 @@ public Class type() { }; static ArgumentMatcher matchCommandPipShow = - new ArgumentMatcher() { + new ArgumentMatcher<>() { @Override public boolean matches(String[] command) { return Arrays.stream(command).anyMatch(word -> word.contains("show")); diff --git a/src/test/java/com/redhat/exhort/utils/PythonControllerRealEnvTest.java b/src/test/java/com/redhat/exhort/utils/PythonControllerRealEnvTest.java index bed8d604..441b2c85 100644 --- a/src/test/java/com/redhat/exhort/utils/PythonControllerRealEnvTest.java +++ b/src/test/java/com/redhat/exhort/utils/PythonControllerRealEnvTest.java @@ -231,10 +231,7 @@ void get_Dependencies_With_Match_Manifest_Versions(boolean MatchManifestVersions // collect all packages returned from getDependencies into Set. System.out.println(dependencies); Set actualSetOfPackages = new HashSet<>(); - dependencies.forEach( - entry -> { - accumulateAllPackages(entry, actualSetOfPackages); - }); + dependencies.forEach(entry -> accumulateAllPackages(entry, actualSetOfPackages)); // Check that all actual collected packages are exactly the ones that are expected Set expectedSetOfPackagesLC = @@ -258,11 +255,7 @@ private void accumulateAllPackages(Map entry, Set actualSetOfPac actualSetOfPackages.add(entry.get("name")); if (entry.get("dependencies") != null) { ((List>) entry.get("dependencies")) - .stream() - .forEach( - record -> { - accumulateAllPackages(record, actualSetOfPackages); - }); + .stream().forEach(record -> accumulateAllPackages(record, actualSetOfPackages)); } } diff --git a/src/test/java/com/redhat/exhort/utils/PythonControllerVirtualEnvTest.java b/src/test/java/com/redhat/exhort/utils/PythonControllerVirtualEnvTest.java index dbb71b35..e3ea11ff 100644 --- a/src/test/java/com/redhat/exhort/utils/PythonControllerVirtualEnvTest.java +++ b/src/test/java/com/redhat/exhort/utils/PythonControllerVirtualEnvTest.java @@ -17,8 +17,14 @@ import static com.redhat.exhort.Provider.PROP_MATCH_MANIFEST_VERSIONS; import static com.redhat.exhort.utils.PythonControllerBase.PROP_EXHORT_PYTHON_INSTALL_BEST_EFFORTS; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -39,7 +45,7 @@ class PythonControllerVirtualEnvTest extends ExhortTest { private static PythonControllerVirtualEnv pythonControllerVirtualEnv; private static PythonControllerVirtualEnv spiedPythonControllerVirtualEnv; - private ObjectMapper om = new ObjectMapper(); + private final ObjectMapper om = new ObjectMapper(); @BeforeAll static void setUp() { @@ -78,7 +84,7 @@ void test_Virtual_Environment_Install_Best_Efforts_Conflict_MMV_Should_Throw_Run void test_Virtual_Environment_Flow() throws IOException { // Mockito String requirementsTxt = "Jinja2==3.0.3"; - Path requirementsFilePath = Path.of(Environment.get("user.dir").toString(), "requirements.txt"); + Path requirementsFilePath = Path.of(Environment.get("user.dir"), "requirements.txt"); Files.write(requirementsFilePath, requirementsTxt.getBytes()); spiedPythonControllerVirtualEnv.getDependencies(requirementsFilePath.toString(), true); From 2b6966fbc4b628e0f4098e6ea5d1fd597478c851 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 20 Jun 2025 17:10:21 +0800 Subject: [PATCH 2/2] chore: code clean up Signed-off-by: Chao Wang --- .../java/com/redhat/exhort/providers/GoModulesProvider.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java index 3904345a..9e688f0f 100644 --- a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java +++ b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java @@ -194,16 +194,14 @@ private void performManifestVersionsCheck(String[] goModGraphLines, Path manifes } private List collectAllDepsFromManifest(String[] lines, String goModLines) { - List result; // collect all deps that starts with require keyword - result = + List result = Arrays.stream(lines) .filter((line) -> line.trim().startsWith("require") && !line.contains("(")) .map((dep) -> dep.substring("require".length()).trim()) .collect(Collectors.toList()); // collect all deps that are inside `require` blocks - String currentSegmentOfGoMod = goModLines; Map requirePosObject = decideRequireBlockIndex(currentSegmentOfGoMod); while (requirePosObject.get("index") > -1) {