diff --git a/build.gradle b/build.gradle index 9416d4563d..b6e275e451 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ import com.synopsys.integration.log.PrintStreamIntLogger buildscript { ext { springBootVersion = '2.1.5.RELEASE' - blackDuckCommonVersion = '44.4.5' + blackDuckCommonVersion = '44.5.0' polarisCommonVersion = '0.13.2' junitPlatformDefaultTestTags = "integration, performance, battery" } diff --git a/detect-configuration/src/main/java/com/synopsys/integration/detect/configuration/DetectProperty.java b/detect-configuration/src/main/java/com/synopsys/integration/detect/configuration/DetectProperty.java index a790009329..0f7a54bb53 100644 --- a/detect-configuration/src/main/java/com/synopsys/integration/detect/configuration/DetectProperty.java +++ b/detect-configuration/src/main/java/com/synopsys/integration/detect/configuration/DetectProperty.java @@ -167,6 +167,11 @@ public enum DetectProperty { @HelpDetailed("If not set, the BDIO files are placed in a 'BDIO' subdirectory of the output directory.") DETECT_BDIO_OUTPUT_PATH("detect.bdio.output.path", "BDIO Output Directory", "3.0.0", PropertyType.STRING, PropertyAuthority.DIRECTORY_MANAGER), + @HelpGroup(primary = GROUP_PATHS, additional = { SEARCH_GROUP_GLOBAL }) + @HelpDescription("The version of BDIO files to generate.") + @HelpDetailed("If set to false, BDIO version 1 will be generated an uploaded. If set to true, BDIO version 2 will be generated but NOT uploaded. The flag can only be set to true if Detect is in offline mode.") + DETECT_BDIO2_ENABLED("detect.bdio2.enabled", "BDIO 2 Enabled", "6.1.0", PropertyType.BOOLEAN, PropertyAuthority.NONE, "false"), + @HelpGroup(primary = GROUP_SIGNATURE_SCANNER, additional = { GROUP_SOURCE_PATH }) @HelpDescription("If specified, this file and this file only will be uploaded for binary scan analysis. This property takes precedence over detect.binary.scan.file.name.patterns.") DETECT_BINARY_SCAN_FILE("detect.binary.scan.file.path", "Binary Scan Target", "4.2.0", PropertyType.STRING, PropertyAuthority.NONE), diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/bitbake/parse/BitbakeGraphTransformer.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/bitbake/parse/BitbakeGraphTransformer.java index 7602223800..93325e87d3 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/bitbake/parse/BitbakeGraphTransformer.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/bitbake/parse/BitbakeGraphTransformer.java @@ -106,8 +106,8 @@ private Optional generateExternalId(final String dependencyName, fin } } - if (externalId != null && externalId.version.contains("AUTOINC")) { - externalId.version = externalId.version.replaceFirst("AUTOINC\\+[\\w|\\d]*", "X"); + if (externalId != null && externalId.getVersion().contains("AUTOINC")) { + externalId.setVersion(externalId.getVersion().replaceFirst("AUTOINC\\+[\\w|\\d]*", "X")); } return Optional.ofNullable(externalId); diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/clang/dependencyfile/ClangPackageDetailsTransformer.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/clang/dependencyfile/ClangPackageDetailsTransformer.java index f243321fdb..63eab67d73 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/clang/dependencyfile/ClangPackageDetailsTransformer.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/clang/dependencyfile/ClangPackageDetailsTransformer.java @@ -68,7 +68,7 @@ private List toDependency(final List forges, final PackageDet for (final Forge forge : forges) { final ExternalId extId = externalIdFactory.createArchitectureExternalId(forge, name, version, arch); final Dependency dep = new Dependency(name, version, extId); - logger.debug(String.format("forge: %s: adding %s version %s as child to dependency node tree; externalId: %s", forge.getName(), dep.name, dep.version, dep.externalId.createBdioId())); + logger.debug(String.format("forge: %s: adding %s version %s as child to dependency node tree; externalId: %s", forge.getName(), dep.getName(), dep.getVersion(), dep.getExternalId().createBdioId())); dependencies.add(dep); } return dependencies; diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/PodlockExtractor.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/PodlockExtractor.java index c7b5e9a39b..eb613164d5 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/PodlockExtractor.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/PodlockExtractor.java @@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory; import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.detectable.Extraction; import com.synopsys.integration.detectable.detectable.codelocation.CodeLocation; import com.synopsys.integration.detectable.detectables.cocoapods.parser.PodlockParser; @@ -59,7 +60,7 @@ public Extraction extract(final File podlock) { logger.trace("Attempting to create the dependency graph from the pod lock file."); dependencyGraph = podlockParser.extractDependencyGraph(podLockText); logger.trace("Finished creating the dependency graph from the pod lock file."); - } catch (final IOException e) { + } catch (final IOException | MissingExternalIdException e) { return new Extraction.Builder().exception(e).build(); } diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/parser/PodlockParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/parser/PodlockParser.java index 2fffee749f..61bfc2153d 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/parser/PodlockParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cocoapods/parser/PodlockParser.java @@ -37,6 +37,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.graph.builder.LazyExternalIdDependencyGraphBuilder; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.dependencyid.DependencyId; import com.synopsys.integration.bdio.model.dependencyid.NameDependencyId; @@ -57,7 +58,7 @@ public PodlockParser(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; } - public DependencyGraph extractDependencyGraph(final String podLockText) throws IOException { + public DependencyGraph extractDependencyGraph(final String podLockText) throws IOException, MissingExternalIdException { final LazyExternalIdDependencyGraphBuilder lazyBuilder = new LazyExternalIdDependencyGraphBuilder(); final YAMLMapper mapper = new YAMLMapper(); final PodfileLock podfileLock = mapper.readValue(podLockText, PodfileLock.class); diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cran/parse/PackratLockFileParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cran/parse/PackratLockFileParser.java index d337a74e19..a79d4a3f90 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cran/parse/PackratLockFileParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/cran/parse/PackratLockFileParser.java @@ -30,6 +30,7 @@ import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.graph.builder.LazyExternalIdDependencyGraphBuilder; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.dependencyid.DependencyId; import com.synopsys.integration.bdio.model.dependencyid.NameDependencyId; @@ -49,7 +50,7 @@ public PackratLockFileParser(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; } - public DependencyGraph parseProjectDependencies(final List packratLockContents) { + public DependencyGraph parseProjectDependencies(final List packratLockContents) throws MissingExternalIdException { final LazyExternalIdDependencyGraphBuilder graphBuilder = new LazyExternalIdDependencyGraphBuilder(); DependencyId currentParent = null; diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/docker/DockerExtractor.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/docker/DockerExtractor.java index 274348e292..8e9e24ab8e 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/docker/DockerExtractor.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/docker/DockerExtractor.java @@ -174,14 +174,14 @@ private Extraction.Builder findCodeLocations(final File directoryToSearch, final } if (simpleBdioDocument != null) { - final DependencyGraph dependencyGraph = bdioTransformer.transformToDependencyGraph(simpleBdioDocument.project, simpleBdioDocument.components); + final DependencyGraph dependencyGraph = bdioTransformer.transformToDependencyGraph(simpleBdioDocument.getProject(), simpleBdioDocument.getComponents()); - final String projectName = simpleBdioDocument.project.name; - final String projectVersionName = simpleBdioDocument.project.version; + final String projectName = simpleBdioDocument.getProject().name; + final String projectVersionName = simpleBdioDocument.getProject().version; // TODO ejk - update this when project external id is not req'd anymore - final Forge dockerForge = new Forge(BdioId.BDIO_ID_SEPARATOR, simpleBdioDocument.project.bdioExternalIdentifier.forge); - final String externalIdPath = simpleBdioDocument.project.bdioExternalIdentifier.externalId; + final Forge dockerForge = new Forge(BdioId.BDIO_ID_SEPARATOR, simpleBdioDocument.getProject().bdioExternalIdentifier.forge); + final String externalIdPath = simpleBdioDocument.getProject().bdioExternalIdentifier.externalId; final ExternalId projectExternalId = externalIdFactory.createPathExternalId(dockerForge, externalIdPath); final CodeLocation detectCodeLocation = new CodeLocation(dependencyGraph, projectExternalId); diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/go/vendor/parse/GoVendorJsonParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/go/vendor/parse/GoVendorJsonParser.java index 52293c4902..c8f950e7f8 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/go/vendor/parse/GoVendorJsonParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/go/vendor/parse/GoVendorJsonParser.java @@ -39,7 +39,7 @@ public class GoVendorJsonParser { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private ExternalIdFactory externalIdFactory; + private final ExternalIdFactory externalIdFactory; public GoVendorJsonParser(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; @@ -47,13 +47,13 @@ public GoVendorJsonParser(final ExternalIdFactory externalIdFactory) { public DependencyGraph parseVendorJson(final Gson gson, final String vendorJsonContents) { final MutableDependencyGraph graph = new MutableMapDependencyGraph(); - VendorJson vendorJsonData = gson.fromJson(vendorJsonContents, VendorJson.class); + final VendorJson vendorJsonData = gson.fromJson(vendorJsonContents, VendorJson.class); logger.trace(String.format("vendorJsonData: %s", vendorJsonData)); - for (PackageData pkg : vendorJsonData.getPackages()) { + for (final PackageData pkg : vendorJsonData.getPackages()) { if (StringUtils.isNotBlank(pkg.getPath()) && StringUtils.isNotBlank(pkg.getRevision())) { final ExternalId dependencyExternalId = externalIdFactory.createNameVersionExternalId(Forge.GOLANG, pkg.getPath(), pkg.getRevision()); final Dependency dependency = new Dependency(pkg.getPath(), pkg.getRevision(), dependencyExternalId); - logger.trace(String.format("dependency: %s", dependency.externalId.toString())); + logger.trace(String.format("dependency: %s", dependency.getExternalId().toString())); graph.addChildToRoot(dependency); } else { logger.debug(String.format("Omitting package path:'%s', revision:'%s' (one or both of path, revision is/are missing)", pkg.getPath(), pkg.getRevision())); diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/hex/parse/Rebar3TreeParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/hex/parse/Rebar3TreeParser.java index ff79f55cd9..66ebb22c0d 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/hex/parse/Rebar3TreeParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/hex/parse/Rebar3TreeParser.java @@ -91,8 +91,8 @@ public RebarParseResult parseRebarTreeOutput(final List dependencyTreeOu final CodeLocation codeLocation = new CodeLocation(graph); return new RebarParseResult(codeLocation); } else { - final CodeLocation codeLocation = new CodeLocation(graph, project.externalId); - return new RebarParseResult(new NameVersion(project.name, project.version), codeLocation); + final CodeLocation codeLocation = new CodeLocation(graph, project.getExternalId()); + return new RebarParseResult(new NameVersion(project.getName(), project.getVersion()), codeLocation); } } diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/MavenCodeLocationPackager.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/MavenCodeLocationPackager.java index a81c735e88..ad8621fa08 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/MavenCodeLocationPackager.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/MavenCodeLocationPackager.java @@ -137,11 +137,14 @@ public List extractCodeLocations(final String sourcePath, fina if (level == 1) { // a direct dependency, clear the stack and add this as a potential parent for the next line if (scopeFilter.shouldInclude(dependency.scope)) { - logger.trace(String.format("Level 1 component %s:%s:%s:%s is in scope; adding it to hierarchy root", dependency.externalId.group, dependency.externalId.name, dependency.externalId.version, dependency.scope)); + logger.trace(String + .format("Level 1 component %s:%s:%s:%s is in scope; adding it to hierarchy root", dependency.getExternalId().getGroup(), dependency.getExternalId().getName(), dependency.getExternalId().getVersion(), + dependency.scope)); currentGraph.addChildToRoot(dependency); inOutOfScopeTree = false; } else { - logger.trace(String.format("Level 1 component %s:%s:%s:%s is a top-level out-of-scope component; entering non-scoped tree", dependency.externalId.group, dependency.externalId.name, dependency.externalId.version, + logger.trace(String.format("Level 1 component %s:%s:%s:%s is a top-level out-of-scope component; entering non-scoped tree", dependency.getExternalId().getGroup(), dependency.getExternalId().getName(), + dependency.getExternalId().getVersion(), dependency.scope)); inOutOfScopeTree = true; } @@ -178,10 +181,10 @@ private void addOrphansToGraph(final MutableDependencyGraph graph, final List 0) { final Dependency orphanListParent = createOrphanListParentDependency(); - logger.trace(String.format("adding orphan list parent dependency: %s", orphanListParent.externalId.toString())); + logger.trace(String.format("adding orphan list parent dependency: %s", orphanListParent.getExternalId().toString())); graph.addChildToRoot(orphanListParent); for (final Dependency dependency : orphans) { - logger.trace(String.format("adding orphan: %s", dependency.externalId.toString())); + logger.trace(String.format("adding orphan: %s", dependency.getExternalId().toString())); graph.addParentWithChild(orphanListParent, dependency); } } @@ -192,10 +195,12 @@ private void addDependencyIfInScope(final MutableDependencyGraph currentGraph, f if (scopeFilter.shouldInclude(dependency.scope)) { if (inOutOfScopeTree) { logger.trace( - String.format("component %s:%s:%s:%s is in scope but in a nonScope tree; adding it to orphans", dependency.externalId.group, dependency.externalId.name, dependency.externalId.version, dependency.scope)); + String.format("component %s:%s:%s:%s is in scope but in a nonScope tree; adding it to orphans", dependency.getExternalId().getGroup(), dependency.getExternalId().getName(), dependency.getExternalId().getVersion(), + dependency.scope)); orphans.add(dependency); } else { - logger.trace(String.format("component %s:%s:%s:%s is in scope and in an in-scope tree; adding it to hierarchy", dependency.externalId.group, dependency.externalId.name, dependency.externalId.version, dependency.scope)); + logger.trace(String.format("component %s:%s:%s:%s is in scope and in an in-scope tree; adding it to hierarchy", dependency.getExternalId().getGroup(), dependency.getExternalId().getName(), + dependency.getExternalId().getVersion(), dependency.scope)); currentGraph.addParentWithChild(parent, dependency); } } @@ -205,11 +210,11 @@ private MavenParseResult createMavenParseResult(final String sourcePath, final S final Dependency dependency = textToProject(line); if (null != dependency) { String codeLocationSourcePath = sourcePath; - if (!sourcePath.endsWith(dependency.name)) { - codeLocationSourcePath += "/" + dependency.name; + if (!sourcePath.endsWith(dependency.getName())) { + codeLocationSourcePath += "/" + dependency.getName(); } - final CodeLocation codeLocation = new CodeLocation(graph, dependency.externalId, new File(codeLocationSourcePath)); - return new MavenParseResult(dependency.name, dependency.version, codeLocation); + final CodeLocation codeLocation = new CodeLocation(graph, dependency.getExternalId(), new File(codeLocationSourcePath)); + return new MavenParseResult(dependency.getName(), dependency.getVersion(), codeLocation); } return null; } diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/ScopedDependency.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/ScopedDependency.java index e7df00a400..278de874e7 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/ScopedDependency.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/maven/cli/ScopedDependency.java @@ -35,7 +35,7 @@ public class ScopedDependency extends Dependency { public ScopedDependency(final String name, final String version, final ExternalId externalId, final String scope) { super(name, version, externalId); if (scope == null) { - logger.warn(String.format("The scope for component %s:%s:%s is missing, which might produce inaccurate results", externalId.group, externalId.name, externalId.version)); + logger.warn(String.format("The scope for component %s:%s:%s is missing, which might produce inaccurate results", externalId.getGroup(), externalId.getName(), externalId.getVersion())); this.scope = ""; } else { this.scope = scope; diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/packagist/parse/PackagistParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/packagist/parse/PackagistParser.java index c1dbd63b03..8c550bf922 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/packagist/parse/PackagistParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/packagist/parse/PackagistParser.java @@ -34,6 +34,7 @@ import com.google.gson.JsonParser; import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.graph.builder.LazyExternalIdDependencyGraphBuilder; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.dependencyid.NameDependencyId; import com.synopsys.integration.bdio.model.externalid.ExternalId; @@ -55,7 +56,7 @@ public PackagistParser(final ExternalIdFactory externalIdFactory, final Composer this.composerLockDetectableOptions = composerLockDetectableOptions; } - public PackagistParseResult getDependencyGraphFromProject(final String composerJsonText, final String composerLockText) { + public PackagistParseResult getDependencyGraphFromProject(final String composerJsonText, final String composerLockText) throws MissingExternalIdException { final LazyExternalIdDependencyGraphBuilder builder = new LazyExternalIdDependencyGraphBuilder(); final JsonObject composerJsonObject = new JsonParser().parse(composerJsonText).getAsJsonObject(); diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipInspectorTreeParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipInspectorTreeParser.java index 855e82e9e5..d273baf8a7 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipInspectorTreeParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipInspectorTreeParser.java @@ -56,7 +56,6 @@ public PipInspectorTreeParser(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; } - public Optional parse(final List pipInspectorOutputAsList, final String sourcePath) { PipenvResult parseResult = null; @@ -94,8 +93,8 @@ public Optional parse(final List pipInspectorOutputAsList, } if (project != null) { - final CodeLocation codeLocation = new CodeLocation(graph, project.externalId); - parseResult = new PipenvResult(project.name, project.version, codeLocation); + final CodeLocation codeLocation = new CodeLocation(graph, project.getExternalId()); + parseResult = new PipenvResult(project.getName(), project.getVersion(), codeLocation); } return Optional.ofNullable(parseResult); @@ -122,7 +121,8 @@ private Dependency parseDependencyFromLine(final String line, final String sourc String version = segments[1].trim(); ExternalId externalId = externalIdFactory.createNameVersionExternalId(Forge.PYPI, name, version); - if (name.equals(UNKNOWN_PROJECT_NAME) || version.equals(UNKNOWN_PROJECT_VERSION)) { //TODO: Pip needs some love. It shouldn't have to do this here but the change seems non-trivial. A code location with no external id should be created as such. + if (name.equals(UNKNOWN_PROJECT_NAME) || version.equals( + UNKNOWN_PROJECT_VERSION)) { //TODO: Pip needs some love. It shouldn't have to do this here but the change seems non-trivial. A code location with no external id should be created as such. externalId = externalIdFactory.createPathExternalId(Forge.PYPI, sourcePath); } diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipenvTransformer.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipenvTransformer.java index 6f234b512e..0e29ca623a 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipenvTransformer.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/pip/parser/PipenvTransformer.java @@ -33,10 +33,10 @@ import com.synopsys.integration.detectable.detectable.codelocation.CodeLocation; import com.synopsys.integration.detectable.detectables.pip.model.PipFreeze; import com.synopsys.integration.detectable.detectables.pip.model.PipFreezeEntry; -import com.synopsys.integration.detectable.detectables.pip.model.PipenvResult; import com.synopsys.integration.detectable.detectables.pip.model.PipenvGraph; import com.synopsys.integration.detectable.detectables.pip.model.PipenvGraphDependency; import com.synopsys.integration.detectable.detectables.pip.model.PipenvGraphEntry; +import com.synopsys.integration.detectable.detectables.pip.model.PipenvResult; public class PipenvTransformer { private final ExternalIdFactory externalIdFactory; @@ -45,12 +45,12 @@ public PipenvTransformer(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; } - public PipenvResult transform(final String projectName, final String projectVersionName, final PipFreeze pipFreeze, final PipenvGraph pipenvGraph, boolean includeOnlyProjectTree) { + public PipenvResult transform(final String projectName, final String projectVersionName, final PipFreeze pipFreeze, final PipenvGraph pipenvGraph, final boolean includeOnlyProjectTree) { final MutableMapDependencyGraph dependencyGraph = new MutableMapDependencyGraph(); - for (PipenvGraphEntry entry : pipenvGraph.getEntries()){ - Dependency entryDependency = nameVersionToDependency(entry.getName(), entry.getVersion(), pipFreeze); - List children = addDependenciesToGraph(entry.getChildren(), dependencyGraph, pipFreeze); + for (final PipenvGraphEntry entry : pipenvGraph.getEntries()) { + final Dependency entryDependency = nameVersionToDependency(entry.getName(), entry.getVersion(), pipFreeze); + final List children = addDependenciesToGraph(entry.getChildren(), dependencyGraph, pipFreeze); if (matchesProject(entryDependency, projectName, projectVersionName)) { //the project appears as an entry, we don't want the project to be a dependency of itself dependencyGraph.addChildrenToRoot(children); } else if (!includeOnlyProjectTree) { //only add non-project matches if we are not project tree only @@ -64,11 +64,11 @@ public PipenvResult transform(final String projectName, final String projectVers return new PipenvResult(projectName, projectVersionName, codeLocation); } - private List addDependenciesToGraph(List graphDependencies, MutableMapDependencyGraph graph, PipFreeze pipFreeze) { - List dependencies = new ArrayList<>(); - for (PipenvGraphDependency graphDependency : graphDependencies) { - Dependency dependency = nameVersionToDependency(graphDependency.getName(), graphDependency.getInstalledVersion(), pipFreeze); - List children = addDependenciesToGraph(graphDependency.getChildren(), graph, pipFreeze); + private List addDependenciesToGraph(final List graphDependencies, final MutableMapDependencyGraph graph, final PipFreeze pipFreeze) { + final List dependencies = new ArrayList<>(); + for (final PipenvGraphDependency graphDependency : graphDependencies) { + final Dependency dependency = nameVersionToDependency(graphDependency.getName(), graphDependency.getInstalledVersion(), pipFreeze); + final List children = addDependenciesToGraph(graphDependency.getChildren(), graph, pipFreeze); graph.addParentWithChildren(dependency, children); dependencies.add(dependency); } @@ -76,10 +76,10 @@ private List addDependenciesToGraph(List grap } private boolean matchesProject(final Dependency dependency, final String projectName, final String projectVersion) { - return dependency.name != null && dependency.version != null && dependency.name.equals(projectName) && dependency.version.equals(projectVersion); + return dependency.getName() != null && dependency.getVersion() != null && dependency.getName().equals(projectName) && dependency.getVersion().equals(projectVersion); } - private String findFrozenName(String name, PipFreeze pipFreeze) { + private String findFrozenName(final String name, final PipFreeze pipFreeze) { return pipFreeze.getEntries().stream() .filter(it -> it.getName().toLowerCase().equals(name.toLowerCase())) .map(PipFreezeEntry::getName) @@ -87,7 +87,7 @@ private String findFrozenName(String name, PipFreeze pipFreeze) { .orElse(name); } - private String findFrozenVersion(String name, String unfrozenVersion, PipFreeze pipFreeze) { + private String findFrozenVersion(final String name, final String unfrozenVersion, final PipFreeze pipFreeze) { return pipFreeze.getEntries().stream() .filter(it -> it.getName().toLowerCase().equals(name.toLowerCase())) .map(PipFreezeEntry::getVersion) @@ -95,9 +95,9 @@ private String findFrozenVersion(String name, String unfrozenVersion, PipFreeze .orElse(unfrozenVersion); } - private Dependency nameVersionToDependency(String givenName, String givenVersion, PipFreeze pipFreeze){ - String version = findFrozenVersion(givenName, givenVersion, pipFreeze); - String name = findFrozenName(givenName, pipFreeze); + private Dependency nameVersionToDependency(final String givenName, final String givenVersion, final PipFreeze pipFreeze) { + final String version = findFrozenVersion(givenName, givenVersion, pipFreeze); + final String name = findFrozenName(givenName, pipFreeze); return new Dependency(name, version, externalIdFactory.createNameVersionExternalId(Forge.PYPI, name, version)); } } diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/parse/GemlockParser.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/parse/GemlockParser.java index a5c78c2ca1..da6cb6bf82 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/parse/GemlockParser.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/parse/GemlockParser.java @@ -38,6 +38,7 @@ import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.graph.builder.LazyExternalIdDependencyGraphBuilder; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.dependencyid.DependencyId; import com.synopsys.integration.bdio.model.dependencyid.NameDependencyId; @@ -74,7 +75,7 @@ public GemlockParser(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; } - public DependencyGraph parseProjectDependencies(final List gemfileLockLines) { + public DependencyGraph parseProjectDependencies(final List gemfileLockLines) throws MissingExternalIdException { encounteredDependencies = new ArrayList<>(); resolvedDependencies = new ArrayList<>(); lazyBuilder = new LazyExternalIdDependencyGraphBuilder(); @@ -112,15 +113,15 @@ public DependencyGraph parseProjectDependencies(final List gemfileLockLi } private void discoveredDependencyInfo(final NameVersionDependencyId id) { - final NameDependencyId nameOnlyId = new NameDependencyId(id.name); + final NameDependencyId nameOnlyId = new NameDependencyId(id.getName()); //regardless we found the external id for this specific dependency. - final ExternalId externalId = externalIdFactory.createNameVersionExternalId(Forge.RUBYGEMS, id.name, id.version); - lazyBuilder.setDependencyInfo(id, id.name, id.version, externalId); + final ExternalId externalId = externalIdFactory.createNameVersionExternalId(Forge.RUBYGEMS, id.getName(), id.getVersion()); + lazyBuilder.setDependencyInfo(id, id.getName(), id.getVersion(), externalId); - if (!resolvedDependencies.contains(id.name)) { //if this is our first time encountering a dependency of this name, we become the 'version-less' - resolvedDependencies.add(id.name); - lazyBuilder.setDependencyInfo(nameOnlyId, id.name, id.version, externalId); + if (!resolvedDependencies.contains(id.getName())) { //if this is our first time encountering a dependency of this name, we become the 'version-less' + resolvedDependencies.add(id.getName()); + lazyBuilder.setDependencyInfo(nameOnlyId, id.getName(), id.getVersion(), externalId); } else {//otherwise, add us as a child to the version-less lazyBuilder.addChildWithParent(id, nameOnlyId); } diff --git a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/yarn/parse/YarnTransformer.java b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/yarn/parse/YarnTransformer.java index ab5e159bdf..82f276607c 100644 --- a/detectable/src/main/java/com/synopsys/integration/detectable/detectables/yarn/parse/YarnTransformer.java +++ b/detectable/src/main/java/com/synopsys/integration/detectable/detectables/yarn/parse/YarnTransformer.java @@ -29,6 +29,7 @@ import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.graph.builder.LazyExternalIdDependencyGraphBuilder; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.dependencyid.StringDependencyId; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; @@ -43,7 +44,7 @@ public YarnTransformer(final ExternalIdFactory externalIdFactory) { this.externalIdFactory = externalIdFactory; } - public DependencyGraph transform(final PackageJson packageJson, final YarnLock yarnLock, final YarnLockOptions yarnLockOptions) { + public DependencyGraph transform(final PackageJson packageJson, final YarnLock yarnLock, final YarnLockOptions yarnLockOptions) throws MissingExternalIdException { final LazyExternalIdDependencyGraphBuilder graphBuilder = new LazyExternalIdDependencyGraphBuilder(); for (final Map.Entry packageDependency : packageJson.dependencies.entrySet()) { @@ -65,7 +66,7 @@ public DependencyGraph transform(final PackageJson packageJson, final YarnLock y if ((yarnLockOptions.useProductionOnly() && !dependency.isOptional()) || (!yarnLockOptions.useProductionOnly())) { graphBuilder.addChildWithParent(stringDependencyId, id); } else { - logger.debug(String.format("Eluding optional dependency: %s", stringDependencyId.value)); + logger.debug(String.format("Eluding optional dependency: %s", stringDependencyId.getValue())); } } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelDependencyParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelDependencyParserTest.java index ee796262dd..9efd775f13 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelDependencyParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelDependencyParserTest.java @@ -19,13 +19,13 @@ public void test() { final BazelDependencyParser bazelDependencyParser = new BazelDependencyParser(externalIdFactory); // externalIdFactory.createMavenExternalId(group, artifact, version); final ExternalId testExternalId = new ExternalId(Forge.MAVEN); - testExternalId.group = "testgroup"; - testExternalId.name = "testartifact"; - testExternalId.version = "testversion"; + testExternalId.setGroup("testgroup"); + testExternalId.setName("testartifact"); + testExternalId.setVersion("testversion"); Mockito.when(externalIdFactory.createMavenExternalId("testgroup", "testartifact", "testversion")).thenReturn(testExternalId); final Dependency dependency = bazelDependencyParser.gavStringToDependency("testgroup:testartifact:testversion", ":"); - assertEquals("testartifact", dependency.externalId.name); + assertEquals("testartifact", dependency.getExternalId().getName()); } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelExtractorTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelExtractorTest.java index eecf5b72dd..3ff3b0a2a5 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelExtractorTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/bazel/functional/bazel/BazelExtractorTest.java @@ -22,8 +22,8 @@ import com.synopsys.integration.detectable.detectables.bazel.BazelProjectNameGenerator; import com.synopsys.integration.detectable.detectables.bazel.BazelWorkspace; import com.synopsys.integration.detectable.detectables.bazel.WorkspaceRule; -import com.synopsys.integration.detectable.detectables.bazel.pipeline.WorkspaceRuleChooser; import com.synopsys.integration.detectable.detectables.bazel.pipeline.Pipelines; +import com.synopsys.integration.detectable.detectables.bazel.pipeline.WorkspaceRuleChooser; import com.synopsys.integration.detectable.detectables.bazel.pipeline.stepexecutor.BazelCommandExecutor; import com.synopsys.integration.detectable.detectables.bazel.pipeline.stepexecutor.BazelVariableSubstitutor; import com.synopsys.integration.detectable.detectables.bazel.pipeline.stepexecutor.StepExecutor; @@ -103,11 +103,11 @@ public void testMavenJar() throws ExecutableRunnerException, IntegrationExceptio boolean foundCommonsIo = false; boolean foundGuava = false; for (final Dependency dep : dependencies) { - System.out.printf("externalId: %s\n", dep.externalId); - if ("commons-io".equals(dep.externalId.name)) { + System.out.printf("externalId: %s\n", dep.getExternalId()); + if ("commons-io".equals(dep.getExternalId().getName())) { foundCommonsIo = true; } - if ("guava".equals(dep.externalId.name)) { + if ("guava".equals(dep.getExternalId().getName())) { foundGuava = true; } } @@ -115,7 +115,6 @@ public void testMavenJar() throws ExecutableRunnerException, IntegrationExceptio assertTrue(foundGuava); } - @Test public void testMavenInstall() throws ExecutableRunnerException, IntegrationException { final BazelCommandExecutor bazelCommandExecutor = Mockito.mock(BazelCommandExecutor.class); @@ -155,11 +154,11 @@ public void testMavenInstall() throws ExecutableRunnerException, IntegrationExce boolean foundFailureAccess = false; boolean foundErrorProneAnnotations = false; for (final Dependency dep : dependencies) { - System.out.printf("externalId: %s\n", dep.externalId); - if ("failureaccess".equals(dep.externalId.name)) { + System.out.printf("externalId: %s\n", dep.getExternalId()); + if ("failureaccess".equals(dep.getExternalId().getName())) { foundFailureAccess = true; } - if ("error_prone_annotations".equals(dep.externalId.name)) { + if ("error_prone_annotations".equals(dep.getExternalId().getName())) { foundErrorProneAnnotations = true; } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/ClangPackageDetailsTransformerTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/ClangPackageDetailsTransformerTest.java index b5369d6a8b..12cb286bcb 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/ClangPackageDetailsTransformerTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/ClangPackageDetailsTransformerTest.java @@ -49,9 +49,9 @@ private void doTest(final Forge forge) { packages.add(pkg); final ExternalId externalId = new ExternalId(forge); - externalId.name = packageName; - externalId.version = packageVersion; - externalId.architecture = packageArch; + externalId.setName(packageName); + externalId.setVersion(packageVersion); + externalId.setArchitecture(packageArch); // The real test is: Does this get called: (if not, test will fail) Mockito.when(externalIdFactory.createArchitectureExternalId(forge, packageName, packageVersion, packageArch)).thenReturn(externalId); @@ -59,11 +59,11 @@ private void doTest(final Forge forge) { assertEquals(1, codeLocation.getDependencyGraph().getRootDependencies().size()); final Dependency generatedDependency = codeLocation.getDependencyGraph().getRootDependencies().iterator().next(); - assertEquals(packageName, generatedDependency.name); - assertEquals(packageVersion, generatedDependency.version); - assertEquals(forge, generatedDependency.externalId.forge); + assertEquals(packageName, generatedDependency.getName()); + assertEquals(packageVersion, generatedDependency.getVersion()); + assertEquals(forge, generatedDependency.getExternalId().getForge()); final String expectedExternalId = String.format("%s/%s/%s", packageName, packageVersion, packageArch); - assertEquals(expectedExternalId, generatedDependency.externalId.createExternalId()); + assertEquals(expectedExternalId, generatedDependency.getExternalId().createExternalId()); } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/DependencyFileDetailGeneratorTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/DependencyFileDetailGeneratorTest.java index 477c99dea9..abed0171a4 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/DependencyFileDetailGeneratorTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/clang/unit/DependencyFileDetailGeneratorTest.java @@ -54,22 +54,22 @@ public void testDependencyCreatedWithEachForge() throws ExecutableRunnerExceptio final Set dependencies = codeLocation.getDependencyGraph().getRootDependencies(); assertEquals(6, dependencies.size()); for (final Dependency dependency : dependencies) { - System.out.printf("Checking dependency: %s:%s / %s\n", dependency.name, dependency.version, dependency.externalId.forge.getName()); - final char indexChar = dependency.name.charAt(15); + System.out.printf("Checking dependency: %s:%s / %s\n", dependency.getName(), dependency.getVersion(), dependency.getExternalId().getForge().getName()); + final char indexChar = dependency.getName().charAt(15); assertTrue(indexChar == '1' || indexChar == '2' || indexChar == '3'); - final String forge = dependency.externalId.forge.getName(); + final String forge = dependency.getExternalId().getForge().getName(); assertTrue("centos".equals(forge) || "fedora".equals(forge) || "redhat".equals(forge)); - assertEquals(String.format("testPackageName%c", indexChar), dependency.name); - assertEquals(String.format("testPackageVersion%c", indexChar), dependency.version); - assertEquals(String.format("testPackageArch%c", indexChar), dependency.externalId.architecture); + assertEquals(String.format("testPackageName%c", indexChar), dependency.getName()); + assertEquals(String.format("testPackageVersion%c", indexChar), dependency.getVersion()); + assertEquals(String.format("testPackageArch%c", indexChar), dependency.getExternalId().getArchitecture()); - assertEquals(forge, dependency.externalId.forge.getName()); - assertEquals(null, dependency.externalId.group); - assertEquals(String.format("testPackageName%c", indexChar), dependency.externalId.name); - assertEquals(null, dependency.externalId.path); - assertEquals(String.format("testPackageVersion%c", indexChar), dependency.externalId.version); + assertEquals(forge, dependency.getExternalId().getForge().getName()); + assertEquals(null, dependency.getExternalId().getGroup()); + assertEquals(String.format("testPackageName%c", indexChar), dependency.getExternalId().getName()); + assertEquals(null, dependency.getExternalId().getPath()); + assertEquals(String.format("testPackageVersion%c", indexChar), dependency.getExternalId().getVersion()); } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cocoapods/functional/CocoapodsPackagerTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cocoapods/functional/CocoapodsPackagerTest.java index 4179bca0b5..5b5048773a 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cocoapods/functional/CocoapodsPackagerTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cocoapods/functional/CocoapodsPackagerTest.java @@ -16,6 +16,7 @@ import org.junit.jupiter.api.Test; import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; import com.synopsys.integration.detectable.annotations.FunctionalTest; import com.synopsys.integration.detectable.detectables.cocoapods.parser.PodlockParser; @@ -27,14 +28,14 @@ public class CocoapodsPackagerTest { private final PodlockParser podlockParser = new PodlockParser(new ExternalIdFactory()); @Test - public void simpleTest() throws IOException { + public void simpleTest() throws IOException, MissingExternalIdException { final String podlockText = FunctionalTestFiles.asString("/cocoapods/simplePodfile.lock"); final DependencyGraph projectDependencies = podlockParser.extractDependencyGraph(podlockText); GraphCompare.assertEqualsResource("/cocoapods/simpleExpected_graph.json", projectDependencies); } @Test - public void complexTest() throws IOException { + public void complexTest() throws IOException, MissingExternalIdException { final String podlockText = FunctionalTestFiles.asString("/cocoapods/complexPodfile.lock"); final DependencyGraph projectDependencies = podlockParser.extractDependencyGraph(podlockText); GraphCompare.assertEqualsResource("/cocoapods/complexExpected_graph.json", projectDependencies); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/conda/unit/CondaListParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/conda/unit/CondaListParserTest.java index ab9fbbb5a1..22cb903c90 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/conda/unit/CondaListParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/conda/unit/CondaListParserTest.java @@ -41,8 +41,8 @@ public void condaListElementToDependencyNodeTransformerTest() { element.buildString = "py36_0"; final Dependency dependency = condaListParser.condaListElementToDependency(platform, element); - assertEquals("sampleName", dependency.name); - assertEquals("sampleVersion-py36_0-linux", dependency.version); - assertEquals("sampleName/sampleVersion-py36_0-linux", dependency.externalId.createExternalId()); + assertEquals("sampleName", dependency.getName()); + assertEquals("sampleVersion-py36_0-linux", dependency.getVersion()); + assertEquals("sampleName/sampleVersion-py36_0-linux", dependency.getExternalId().createExternalId()); } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/functional/PackratLockFileParserFunctionalTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/functional/PackratLockFileParserFunctionalTest.java index a14e7e4af5..2549ec4f77 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/functional/PackratLockFileParserFunctionalTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/functional/PackratLockFileParserFunctionalTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; import com.synopsys.integration.detectable.detectables.cran.parse.PackratLockFileParser; import com.synopsys.integration.detectable.util.FunctionalTestFiles; @@ -12,7 +13,7 @@ class PackratLockFileParserFunctionalTest { @Test - void parseProjectDependencies() { + void parseProjectDependencies() throws MissingExternalIdException { final ExternalIdFactory externalIdFactory = new ExternalIdFactory(); final PackratLockFileParser packRatLockFileParser = new PackratLockFileParser(externalIdFactory); final List packratFileLines = FunctionalTestFiles.asListOfStrings("/cran/packrat.lock"); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/unit/PackratLockFileParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/unit/PackratLockFileParserTest.java index 88e4d2ff43..bf40d774ac 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/unit/PackratLockFileParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/cran/unit/PackratLockFileParserTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test; import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.externalid.ExternalId; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; @@ -49,7 +50,7 @@ void setUp() { } @Test - void parseProjectDependencies() { + void parseProjectDependencies() throws MissingExternalIdException { final DependencyGraph dependencyGraph = packratLockFileParser.parseProjectDependencies(packratFileLines); final GraphAssert graphAssert = new GraphAssert(Forge.CRAN, dependencyGraph); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/docker/unit/DockerExtractorTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/docker/unit/DockerExtractorTest.java index 8f3b33277c..a7f955db5b 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/docker/unit/DockerExtractorTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/docker/unit/DockerExtractorTest.java @@ -150,10 +150,9 @@ public void testExtractTarReturningOriginalTar() throws ExecutableRunnerExceptio assertTrue(command.get(4).endsWith("testDockerTarfile.tar")); } - private Extraction extract(final String image, final String tar, - File returnedContainerFileSystemFile, - File returnedSquashedImageFile, + final File returnedContainerFileSystemFile, + final File returnedSquashedImageFile, final ExecutableRunner executableRunner) { final FileFinder fileFinder = Mockito.mock(FileFinder.class); final DockerProperties dockerProperties = Mockito.mock(DockerProperties.class); @@ -177,5 +176,4 @@ private Extraction extract(final String image, final String tar, return dockerExtractor.extract(directory, outputDirectory, bashExe, javaExe, image, tar, dockerInspectorInfo); } - } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/go/functional/GoVendorJsonParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/go/functional/GoVendorJsonParserTest.java index 2a219eadb2..6f07c97508 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/go/functional/GoVendorJsonParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/go/functional/GoVendorJsonParserTest.java @@ -3,11 +3,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import java.io.File; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import org.apache.commons.io.FileUtils; import org.junit.Test; import com.google.gson.Gson; @@ -21,22 +18,22 @@ public class GoVendorJsonParserTest { @Test public void test() throws IOException { - ExternalIdFactory externalIdFactory = new ExternalIdFactory(); - GoVendorJsonParser parser = new GoVendorJsonParser(externalIdFactory); - DependencyGraph graph = parser.parseVendorJson(new Gson(), FunctionalTestFiles.asString("/go/vendor/vendor.json")); + final ExternalIdFactory externalIdFactory = new ExternalIdFactory(); + final GoVendorJsonParser parser = new GoVendorJsonParser(externalIdFactory); + final DependencyGraph graph = parser.parseVendorJson(new Gson(), FunctionalTestFiles.asString("/go/vendor/vendor.json")); assertEquals(2, graph.getRootDependencies().size()); boolean foundErrorsPkg = false; boolean foundMathPkg = false; - for (Dependency dep : graph.getRootDependencies()) { - if ("github.com/pkg/errors".equals(dep.name)) { + for (final Dependency dep : graph.getRootDependencies()) { + if ("github.com/pkg/errors".equals(dep.getName())) { foundErrorsPkg = true; - assertEquals("github.com/pkg/errors", dep.externalId.name); - assertEquals("059132a15dd08d6704c67711dae0cf35ab991756", dep.externalId.version); + assertEquals("github.com/pkg/errors", dep.getExternalId().getName()); + assertEquals("059132a15dd08d6704c67711dae0cf35ab991756", dep.getExternalId().getVersion()); } - if ("github.com/pkg/math".equals(dep.name)) { + if ("github.com/pkg/math".equals(dep.getName())) { foundMathPkg = true; - assertEquals("github.com/pkg/math", dep.externalId.name); - assertEquals("f2ed9e40e245cdeec72c4b642d27ed4553f90667", dep.externalId.version); + assertEquals("github.com/pkg/math", dep.getExternalId().getName()); + assertEquals("f2ed9e40e245cdeec72c4b642d27ed4553f90667", dep.getExternalId().getVersion()); } } assertTrue(foundErrorsPkg); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/gradle/unit/GradleReportLineTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/gradle/unit/GradleReportLineTest.java index 0ae5462929..d9ca591c2c 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/gradle/unit/GradleReportLineTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/gradle/unit/GradleReportLineTest.java @@ -93,8 +93,8 @@ private void assertDependency(final String line, final String[] expectedResults) final ExternalId externalId = externalIdFactory.createMavenExternalId(gav.getName(), gav.getArtifact(), gav.getVersion()); final Dependency dependency = new Dependency(gav.getArtifact(), gav.getVersion(), externalId); - Assert.assertEquals(expectedResults[0], dependency.name); - Assert.assertEquals(expectedResults[1], dependency.version); - Assert.assertEquals(expectedResults[2], dependency.externalId.createExternalId()); + Assert.assertEquals(expectedResults[0], dependency.getName()); + Assert.assertEquals(expectedResults[1], dependency.getVersion()); + Assert.assertEquals(expectedResults[2], dependency.getExternalId().createExternalId()); } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/hex/unit/RebarParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/hex/unit/RebarParserTest.java index 1b4a0a3400..c8f25826ea 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/hex/unit/RebarParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/hex/unit/RebarParserTest.java @@ -33,10 +33,10 @@ void testCreateDependencyFromLine() { final Dependency actualDependency = rebar3TreeParser.createDependencyFromLine(" \u2502 \u2502 \u2514\u2500 cf\u25000.2.2 (hex package)"); - assertEquals(expectedName, actualDependency.name); - assertEquals(expectedVersion, actualDependency.version); - assertEquals(expectedExternalId.name, actualDependency.externalId.name); - assertEquals(expectedExternalId.version, actualDependency.externalId.version); + assertEquals(expectedName, actualDependency.getName()); + assertEquals(expectedVersion, actualDependency.getVersion()); + assertEquals(expectedExternalId.getName(), actualDependency.getExternalId().getName()); + assertEquals(expectedExternalId.getVersion(), actualDependency.getExternalId().getVersion()); } @Test diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenCodeLocationPackagerFunctionalTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenCodeLocationPackagerFunctionalTest.java index 8b5992db14..51150673c8 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenCodeLocationPackagerFunctionalTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenCodeLocationPackagerFunctionalTest.java @@ -93,7 +93,7 @@ public void extractCodeLocationsTestCompileScope2() { if (rootDependency instanceof ScopedDependency) { walkGraphExcludingScope(dependencyGraph, (ScopedDependency) rootDependency, "test"); } else { - System.out.println(String.format("Dependency is not a scoped dependency. Validation cannot occur. %s", rootDependency.externalId.createExternalId())); + System.out.println(String.format("Dependency is not a scoped dependency. Validation cannot occur. %s", rootDependency.getExternalId().createExternalId())); } } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenParseExtractorTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenParseExtractorTest.java index c847ec2a33..007fedd3a8 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenParseExtractorTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/functional/MavenParseExtractorTest.java @@ -1,26 +1,28 @@ package com.synopsys.integration.detectable.detectables.maven.functional; -import com.synopsys.integration.bdio.graph.DependencyGraph; -import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; -import com.synopsys.integration.detectable.Extraction; -import com.synopsys.integration.detectable.detectables.maven.parsing.MavenParseExtractor; -import com.synopsys.integration.detectable.detectables.maven.parsing.MavenParseOptions; -import com.synopsys.integration.detectable.util.FunctionalTestFiles; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; -import javax.xml.parsers.SAXParserFactory; import java.io.File; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import javax.xml.parsers.SAXParserFactory; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; +import com.synopsys.integration.detectable.Extraction; +import com.synopsys.integration.detectable.detectables.maven.parsing.MavenParseExtractor; +import com.synopsys.integration.detectable.detectables.maven.parsing.MavenParseOptions; +import com.synopsys.integration.detectable.util.FunctionalTestFiles; public class MavenParseExtractorTest { - private Set expectedDependencies = new HashSet<>(); - private Set pluginDependencies = new HashSet<>(); + private final Set expectedDependencies = new HashSet<>(); + private final Set pluginDependencies = new HashSet<>(); @BeforeEach public void setup() { @@ -46,9 +48,9 @@ public void testParsingPomFile() throws Exception { final File pomInputStream = FunctionalTestFiles.asFile("/maven/hub-teamcity-pom.xml"); final MavenParseExtractor pomXmlParser = new MavenParseExtractor(new ExternalIdFactory(), SAXParserFactory.newInstance().newSAXParser(), new MavenParseOptions(false)); final Extraction extraction = pomXmlParser.extract(pomInputStream); - DependencyGraph dependencyGraph = extraction.getCodeLocations().get(0).getDependencyGraph(); + final DependencyGraph dependencyGraph = extraction.getCodeLocations().get(0).getDependencyGraph(); - Set externalIds = dependencyGraph.getRootDependencies().stream().map(dependency -> dependency.externalId.createExternalId()).collect(Collectors.toSet()); + final Set externalIds = dependencyGraph.getRootDependencies().stream().map(dependency -> dependency.getExternalId().createExternalId()).collect(Collectors.toSet()); assertEquals(expectedDependencies, externalIds); } @@ -57,9 +59,9 @@ public void testIncludingPluginDependencies() throws Exception { final File pomInputStream = FunctionalTestFiles.asFile("/maven/hub-teamcity-pom.xml"); final MavenParseExtractor pomXmlParser = new MavenParseExtractor(new ExternalIdFactory(), SAXParserFactory.newInstance().newSAXParser(), new MavenParseOptions(true)); final Extraction extraction = pomXmlParser.extract(pomInputStream); - DependencyGraph dependencyGraph = extraction.getCodeLocations().get(0).getDependencyGraph(); + final DependencyGraph dependencyGraph = extraction.getCodeLocations().get(0).getDependencyGraph(); - Set externalIds = dependencyGraph.getRootDependencies().stream().map(dependency -> dependency.externalId.createExternalId()).collect(Collectors.toSet()); + final Set externalIds = dependencyGraph.getRootDependencies().stream().map(dependency -> dependency.getExternalId().createExternalId()).collect(Collectors.toSet()); assertTrue(externalIds.containsAll(expectedDependencies)); assertTrue(externalIds.containsAll(pluginDependencies)); assertEquals(expectedDependencies.size() + pluginDependencies.size(), externalIds.size()); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/unit/MavenCodeLocationPackagerTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/unit/MavenCodeLocationPackagerTest.java index 95dd194e8f..5042d47e89 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/unit/MavenCodeLocationPackagerTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/maven/unit/MavenCodeLocationPackagerTest.java @@ -230,7 +230,7 @@ public void testLineWithExtraTextAfterScope() { line = mavenCodeLocationPackager.trimLogLevel(line); final String cleanedLine = mavenCodeLocationPackager.calculateCurrentLevelAndCleanLine(line); final Dependency dependency = mavenCodeLocationPackager.textToDependency(cleanedLine); - assertEquals("org.eclipse.scout.sdk.deps:org.eclipse.core.jobs:3.8.0.v20160509-0411", dependency.externalId.createExternalId()); + assertEquals("org.eclipse.scout.sdk.deps:org.eclipse.core.jobs:3.8.0.v20160509-0411", dependency.getExternalId().createExternalId()); } @Test @@ -241,7 +241,7 @@ public void testLineWithUnknownScope() { line = mavenCodeLocationPackager.trimLogLevel(line); final String cleanedLine = mavenCodeLocationPackager.calculateCurrentLevelAndCleanLine(line); final ScopedDependency scopedDependency = mavenCodeLocationPackager.textToDependency(cleanedLine); - assertEquals("org.eclipse.scout.sdk.deps:org.eclipse.core.jobs:3.8.0.v20160509-0411", scopedDependency.externalId.createExternalId()); + assertEquals("org.eclipse.scout.sdk.deps:org.eclipse.core.jobs:3.8.0.v20160509-0411", scopedDependency.getExternalId().createExternalId()); } @Test @@ -252,6 +252,6 @@ public void testLineWithBadColonPlacement() { line = mavenCodeLocationPackager.trimLogLevel(line); final String cleanedLine = mavenCodeLocationPackager.calculateCurrentLevelAndCleanLine(line); final Dependency dependency = mavenCodeLocationPackager.textToDependency(cleanedLine); - assertEquals("org.eclipse.scout.sdk.deps:org.eclipse.core.jobs:pants (version selected from", dependency.externalId.createExternalId()); + assertEquals("org.eclipse.scout.sdk.deps:org.eclipse.core.jobs:pants (version selected from", dependency.getExternalId().createExternalId()); } } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/npm/packagejson/unit/PackageJsonExtractorTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/npm/packagejson/unit/PackageJsonExtractorTest.java index 826de1e1a9..f8cdbe038c 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/npm/packagejson/unit/PackageJsonExtractorTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/npm/packagejson/unit/PackageJsonExtractorTest.java @@ -81,10 +81,10 @@ private PackageJson createPackageJson() { packageJson.dependencies = new HashMap<>(); packageJson.devDependencies = new HashMap<>(); - packageJson.dependencies.put(testDep1.name, testDep1.version); - packageJson.dependencies.put(testDep2.name, testDep2.version); - packageJson.devDependencies.put(testDevDep1.name, testDevDep1.version); - packageJson.devDependencies.put(testDevDep2.name, testDevDep2.version); + packageJson.dependencies.put(testDep1.getName(), testDep1.getVersion()); + packageJson.dependencies.put(testDep2.getName(), testDep2.getVersion()); + packageJson.devDependencies.put(testDevDep1.getName(), testDevDep1.getVersion()); + packageJson.devDependencies.put(testDevDep2.getName(), testDevDep2.getVersion()); return packageJson; } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/packagist/functional/PackagistParserFunctionalTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/packagist/functional/PackagistParserFunctionalTest.java index 1bfada0011..5fe1a1e0b5 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/packagist/functional/PackagistParserFunctionalTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/packagist/functional/PackagistParserFunctionalTest.java @@ -3,6 +3,7 @@ import org.junit.Assert; import org.junit.Test; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; import com.synopsys.integration.detectable.detectables.packagist.ComposerLockDetectableOptions; import com.synopsys.integration.detectable.detectables.packagist.model.PackagistParseResult; @@ -13,7 +14,7 @@ public class PackagistParserFunctionalTest { @Test - public void packagistParserTest() { + public void packagistParserTest() throws MissingExternalIdException { final ComposerLockDetectableOptions composerLockDetectableOptions = new ComposerLockDetectableOptions(true); final PackagistParser packagistParser = new PackagistParser(new ExternalIdFactory(), composerLockDetectableOptions); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/GemlockNodeParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/GemlockNodeParserTest.java index a0ffd440a4..1d6d05b719 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/GemlockNodeParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/GemlockNodeParserTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test; import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.dependency.Dependency; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; @@ -19,7 +20,7 @@ @FunctionalTest public class GemlockNodeParserTest { @Test - public void testParsingSmallGemfileLock() { + public void testParsingSmallGemfileLock() throws MissingExternalIdException { final String text = FunctionalTestFiles.asString("/rubygems/small_gemfile_lock"); final List gemfileLockContents = Arrays.asList(text.split("\n")); final GemlockParser gemlockNodeParser = new GemlockParser(new ExternalIdFactory()); @@ -29,7 +30,7 @@ public void testParsingSmallGemfileLock() { } @Test - public void testParsingGemfileLock() { + public void testParsingGemfileLock() throws MissingExternalIdException { final String text = FunctionalTestFiles.asString("/rubygems/Gemfile.lock"); final List gemfileLockContents = Arrays.asList(text.split("\n")); final GemlockParser gemlockNodeParser = new GemlockParser(new ExternalIdFactory()); @@ -39,7 +40,7 @@ public void testParsingGemfileLock() { } @Test - public void testParsingEqualsGemfileLock() { + public void testParsingEqualsGemfileLock() throws MissingExternalIdException { final String text = FunctionalTestFiles.asString("/rubygems/Gemfile_equals_version.lock"); final List gemfileLockContents = Arrays.asList(text.split("\n")); final GemlockParser gemlockNodeParser = new GemlockParser(new ExternalIdFactory()); @@ -50,7 +51,7 @@ public void testParsingEqualsGemfileLock() { } @Test - public void testMissingVersionsGemfileLock() { + public void testMissingVersionsGemfileLock() throws MissingExternalIdException { final String text = FunctionalTestFiles.asString("/rubygems/Gemfile_missing_versions.lock"); final List gemfileLockContents = Arrays.asList(text.split("\n")); final GemlockParser gemlockNodeParser = new GemlockParser(new ExternalIdFactory()); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/RubygemsNodePackagerTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/RubygemsNodePackagerTest.java index 88bf770c3a..21afcd8628 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/RubygemsNodePackagerTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemlock/functional/RubygemsNodePackagerTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import com.synopsys.integration.bdio.graph.DependencyGraph; +import com.synopsys.integration.bdio.graph.builder.MissingExternalIdException; import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.externalid.ExternalId; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; @@ -31,7 +32,7 @@ public class RubygemsNodePackagerTest { private final ExternalIdFactory externalIdFactory = new ExternalIdFactory(); @Test - void packagerTest() { + void packagerTest() throws MissingExternalIdException { final List actualText = FunctionalTestFiles.asListOfStrings("/rubygems/Gemfile.lock"); final GemlockParser rubygemsNodePackager = new GemlockParser(new ExternalIdFactory()); final DependencyGraph projects = rubygemsNodePackager.parseProjectDependencies(actualText); @@ -41,7 +42,7 @@ void packagerTest() { } @Test - void findsAllVersions() { + void findsAllVersions() throws MissingExternalIdException { //Finds all versions of the package not just the first matching architecture. final List actualText = FunctionalTestFiles.asListOfStrings("/rubygems/Gemfile-rails.lock"); final GemlockParser rubygemsNodePackager = new GemlockParser(new ExternalIdFactory()); diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemspec/unit/GemspecParserTest.java b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemspec/unit/GemspecParserTest.java index e7aa0e9c99..8271581d3a 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemspec/unit/GemspecParserTest.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/detectables/rubygems/gemspec/unit/GemspecParserTest.java @@ -73,9 +73,9 @@ void parseWithAllDependencies() throws IOException { private InputStream createGemspecInputStream() { final String gemspec = "Some garbage line" + System.lineSeparator() - + "s.add_dependency \"" + externalId1.name + "\", \"" + externalId1.version + "\"" + System.lineSeparator() - + "s.add_runtime_dependency \"" + externalId2.name + "\", \"" + externalId2.version + "\"" + System.lineSeparator() - + "s.add_development_dependency \"" + externalId3.name + "\", \"" + externalId3.version + "\"" + System.lineSeparator(); + + "s.add_dependency \"" + externalId1.getName() + "\", \"" + externalId1.getVersion() + "\"" + System.lineSeparator() + + "s.add_runtime_dependency \"" + externalId2.getName() + "\", \"" + externalId2.getVersion() + "\"" + System.lineSeparator() + + "s.add_development_dependency \"" + externalId3.getName() + "\", \"" + externalId3.getVersion() + "\"" + System.lineSeparator(); return IOUtils.toInputStream(gemspec, StandardCharsets.UTF_8); } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/util/DependencyGraphSummarizer.java b/detectable/src/test/java/com/synopsys/integration/detectable/util/DependencyGraphSummarizer.java index 9b793e3310..121354c64c 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/util/DependencyGraphSummarizer.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/util/DependencyGraphSummarizer.java @@ -64,11 +64,11 @@ public GraphSummary fromGraph(final DependencyGraph graph) { final Dependency nextDependency = unprocessed.remove(); processed.add(nextDependency); - final BdioId nextId = nextDependency.externalId.createBdioId(); + final BdioId nextId = nextDependency.getExternalId().createBdioId(); if (!graphSummary.dependencySummaries.containsKey(nextId)) { final NameVersion nameVersion = new NameVersion(); - nameVersion.setName(nextDependency.name); - nameVersion.setVersion(nextDependency.version); + nameVersion.setName(nextDependency.getName()); + nameVersion.setVersion(nextDependency.getVersion()); graphSummary.dependencySummaries.put(nextId, nameVersion); } @@ -76,7 +76,7 @@ public GraphSummary fromGraph(final DependencyGraph graph) { if (!graphSummary.externalDataIdRelationships.containsKey(nextId)) { graphSummary.externalDataIdRelationships.put(nextId, new HashSet<>()); } - graphSummary.externalDataIdRelationships.get(nextId).add(dep.externalId.createBdioId()); + graphSummary.externalDataIdRelationships.get(nextId).add(dep.getExternalId().createBdioId()); if (!processed.contains(dep)) { unprocessed.add(dep); } diff --git a/detectable/src/test/java/com/synopsys/integration/detectable/util/GraphSerializer.java b/detectable/src/test/java/com/synopsys/integration/detectable/util/GraphSerializer.java index ca4b8d14da..90c92de7bc 100644 --- a/detectable/src/test/java/com/synopsys/integration/detectable/util/GraphSerializer.java +++ b/detectable/src/test/java/com/synopsys/integration/detectable/util/GraphSerializer.java @@ -16,28 +16,28 @@ public class GraphSerializer { private static final Logger logger = LoggerFactory.getLogger(GraphSerializer.class); - public static String serialize(DependencyGraph graph) { + public static String serialize(final DependencyGraph graph) { - StringBuilder rootText = new StringBuilder(); - for (Dependency dependency : graph.getRootDependencies()) { + final StringBuilder rootText = new StringBuilder(); + for (final Dependency dependency : graph.getRootDependencies()) { rootText.append("\t" + dependencyToString(dependency) + "\n"); } - StringBuilder relationshipText = new StringBuilder(); - Set processed = new HashSet<>(); - Stack unprocessed = new Stack<>(); + final StringBuilder relationshipText = new StringBuilder(); + final Set processed = new HashSet<>(); + final Stack unprocessed = new Stack<>(); unprocessed.addAll(graph.getRootDependencies()); while (unprocessed.size() > 0) { - Dependency dependency = unprocessed.pop(); + final Dependency dependency = unprocessed.pop(); if (processed.contains(dependency)) { continue; } else { processed.add(dependency); } - StringBuilder childText = new StringBuilder(); + final StringBuilder childText = new StringBuilder(); int cnt = 0; - for (Dependency childDependency : graph.getChildrenForParent(dependency)) { + for (final Dependency childDependency : graph.getChildrenForParent(dependency)) { cnt++; unprocessed.add(childDependency); childText.append("\t\t" + dependencyToString(childDependency) + "\n"); @@ -48,7 +48,7 @@ public static String serialize(DependencyGraph graph) { } } - StringBuilder graphText = new StringBuilder(); + final StringBuilder graphText = new StringBuilder(); graphText.append("Detect Graph v0.0.0" + "\n"); graphText.append("\tRoot Dependencies (" + graph.getRootDependencies().size() + ")" + "\n"); graphText.append("\tTotal Dependencies (" + graph.getRootDependencies().size() + ")" + "\n"); @@ -62,17 +62,17 @@ public static String serialize(DependencyGraph graph) { return graphText.toString(); } - private static String dependencyToString(Dependency dependency) { - return dependency.name + "," + dependency.version + "," + externalIdToString(dependency.externalId); + private static String dependencyToString(final Dependency dependency) { + return dependency.getName() + "," + dependency.getVersion() + "," + externalIdToString(dependency.getExternalId()); } - private static String escape(String target) { + private static String escape(final String target) { return target.replaceAll(",", "%comma%"); } - private static String externalIdToString(ExternalId externalId) { - String forge = externalId.forge.getName().toString(); - String pieces = Arrays.stream(externalId.getExternalIdPieces()).map(it -> escape(it)).collect(Collectors.joining(",")); + private static String externalIdToString(final ExternalId externalId) { + final String forge = externalId.getForge().getName().toString(); + final String pieces = Arrays.stream(externalId.getExternalIdPieces()).map(it -> escape(it)).collect(Collectors.joining(",")); return forge + "," + pieces; } } diff --git a/src/main/java/com/synopsys/integration/detect/DetectableBeanConfiguration.java b/src/main/java/com/synopsys/integration/detect/DetectableBeanConfiguration.java index 8afc7bd3e1..d7019213cb 100644 --- a/src/main/java/com/synopsys/integration/detect/DetectableBeanConfiguration.java +++ b/src/main/java/com/synopsys/integration/detect/DetectableBeanConfiguration.java @@ -509,10 +509,12 @@ public PearCliExtractor pearCliExtractor() { public PipenvGraphParser pipenvGraphParser() { return new PipenvGraphParser(); } + @Bean public PipenvFreezeParser pipenvFreezeParser() { return new PipenvFreezeParser(); } + @Bean public PipenvTransformer pipenvTransformer() { return new PipenvTransformer(externalIdFactory); diff --git a/src/main/java/com/synopsys/integration/detect/configuration/DetectConfigurationFactory.java b/src/main/java/com/synopsys/integration/detect/configuration/DetectConfigurationFactory.java index 6daf722845..e5baa7bd6b 100644 --- a/src/main/java/com/synopsys/integration/detect/configuration/DetectConfigurationFactory.java +++ b/src/main/java/com/synopsys/integration/detect/configuration/DetectConfigurationFactory.java @@ -78,7 +78,9 @@ public RunOptions createRunOptions() { final boolean unmapCodeLocations = detectConfiguration.getBooleanProperty(DetectProperty.DETECT_PROJECT_CODELOCATION_UNMAP, PropertyAuthority.NONE); final String aggregateName = detectConfiguration.getProperty(DetectProperty.DETECT_BOM_AGGREGATE_NAME, PropertyAuthority.NONE); final String preferredTools = detectConfiguration.getProperty(DetectProperty.DETECT_PROJECT_TOOL, PropertyAuthority.NONE); - return new RunOptions(unmapCodeLocations, aggregateName, preferredTools, detectToolFilter); + final boolean useBdio2 = detectConfiguration.getBooleanProperty(DetectProperty.DETECT_BDIO2_ENABLED, PropertyAuthority.NONE); + + return new RunOptions(unmapCodeLocations, aggregateName, preferredTools, detectToolFilter, useBdio2); } public DirectoryOptions createDirectoryOptions() { diff --git a/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunManager.java b/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunManager.java index fa0ca6cf43..ddb7080f8a 100644 --- a/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunManager.java +++ b/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunManager.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import com.synopsys.integration.bdio.SimpleBdioFactory; +import com.synopsys.integration.bdio.bdio2.Bdio2Factory; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; import com.synopsys.integration.blackduck.api.generated.view.ProjectVersionView; import com.synopsys.integration.blackduck.codelocation.CodeLocationCreationData; @@ -93,9 +94,7 @@ import com.synopsys.integration.detect.workflow.status.DetectResult; import com.synopsys.integration.detect.workflow.status.Status; import com.synopsys.integration.detect.workflow.status.StatusType; -import com.synopsys.integration.detectable.Detectable; import com.synopsys.integration.detectable.detectable.executable.ExecutableRunner; -import com.synopsys.integration.detectable.detectable.executable.impl.SimpleExecutableRunner; import com.synopsys.integration.detectable.detectable.file.impl.SimpleFileFinder; import com.synopsys.integration.detectable.detectables.bazel.BazelDetectable; import com.synopsys.integration.detectable.detectables.docker.DockerDetectable; @@ -144,6 +143,10 @@ public RunResult run(final ProductRunData productRunData) throws DetectUserFrien final UniversalToolsResult universalToolsResult = runUniversalProjectTools(detectConfiguration, detectConfigurationFactory, directoryManager, eventSystem, runResult, runOptions, detectToolFilter); if (productRunData.shouldUseBlackDuckProduct()) { + if (runOptions.shouldUseBdio2() && productRunData.getBlackDuckRunData().isOnline()) { + throw new DetectUserFriendlyException("Detect cannot be run in online mode when generating BDIO 2. Please set Detect to run offline or disable BDIO 2 generation.", ExitCodeType.FAILURE_CONFIGURATION); + } + final AggregateOptions aggregateOptions = determineAggregationStrategy(runOptions.getAggregateName(), universalToolsResult); runBlackDuckProduct(productRunData, detectConfiguration, detectConfigurationFactory, directoryManager, eventSystem, codeLocationNameManager, bdioCodeLocationCreator, detectInfo, runResult, runOptions, detectToolFilter, universalToolsResult.getNameVersion(), aggregateOptions); @@ -180,7 +183,8 @@ private UniversalToolsResult runUniversalProjectTools(final DetectConfiguration logger.info(ReportConstants.RUN_SEPARATOR); if (detectToolFilter.shouldInclude(DetectTool.DOCKER)) { logger.info("Will include the Docker tool."); - final DetectableTool detectableTool = new DetectableTool(environment -> detectableFactory.createDetectable(DockerDetectable.class, environment), extractionEnvironmentProvider, codeLocationConverter, "DOCKER", DetectTool.DOCKER, eventSystem); + final DetectableTool detectableTool = new DetectableTool(environment -> detectableFactory.createDetectable(DockerDetectable.class, environment), extractionEnvironmentProvider, codeLocationConverter, "DOCKER", DetectTool.DOCKER, + eventSystem); final DetectableToolResult detectableToolResult = detectableTool.execute(directoryManager.getSourceDirectory()); runResult.addDetectableToolResult(detectableToolResult); anythingFailed = anythingFailed || detectableToolResult.isFailure(); @@ -192,7 +196,8 @@ private UniversalToolsResult runUniversalProjectTools(final DetectConfiguration logger.info(ReportConstants.RUN_SEPARATOR); if (detectToolFilter.shouldInclude(DetectTool.BAZEL)) { logger.info("Will include the Bazel tool."); - final DetectableTool detectableTool = new DetectableTool(environment -> detectableFactory.createDetectable(BazelDetectable.class, environment), extractionEnvironmentProvider, codeLocationConverter, "BAZEL", DetectTool.BAZEL, eventSystem); + final DetectableTool detectableTool = new DetectableTool(environment -> detectableFactory.createDetectable(BazelDetectable.class, environment), extractionEnvironmentProvider, codeLocationConverter, "BAZEL", DetectTool.BAZEL, + eventSystem); final DetectableToolResult detectableToolResult = detectableTool.execute(directoryManager.getSourceDirectory()); runResult.addDetectableToolResult(detectableToolResult); anythingFailed = anythingFailed || detectableToolResult.isFailure(); @@ -265,8 +270,7 @@ private void runPolarisProduct(final ProductRunData productRunData, final Detect } private void runBlackDuckProduct(final ProductRunData productRunData, final DetectConfiguration detectConfiguration, final DetectConfigurationFactory detectConfigurationFactory, final DirectoryManager directoryManager, - final EventSystem eventSystem, - final CodeLocationNameManager codeLocationNameManager, final BdioCodeLocationCreator bdioCodeLocationCreator, final DetectInfo detectInfo, final RunResult runResult, final RunOptions runOptions, + final EventSystem eventSystem, final CodeLocationNameManager codeLocationNameManager, final BdioCodeLocationCreator bdioCodeLocationCreator, final DetectInfo detectInfo, final RunResult runResult, final RunOptions runOptions, final DetectToolFilter detectToolFilter, final NameVersion projectNameVersion, final AggregateOptions aggregateOptions) throws IntegrationException, DetectUserFriendlyException { logger.debug("Black Duck tools will run."); @@ -300,17 +304,21 @@ private void runBlackDuckProduct(final ProductRunData productRunData, final Dete logger.debug("Completed project and version actions."); logger.debug("Processing Detect Code Locations."); - final BdioManager bdioManager = new BdioManager(detectInfo, new SimpleBdioFactory(), new IntegrationEscapeUtil(), codeLocationNameManager, bdioCodeLocationCreator, directoryManager, eventSystem); - final BdioResult bdioResult = bdioManager.createBdioFiles(aggregateOptions, projectNameVersion, runResult.getDetectCodeLocations()); + final BdioManager bdioManager = new BdioManager(detectInfo, new SimpleBdioFactory(), new Bdio2Factory(), new IntegrationEscapeUtil(), codeLocationNameManager, bdioCodeLocationCreator, directoryManager, eventSystem); + final BdioResult bdioResult = bdioManager.createBdioFiles(aggregateOptions, projectNameVersion, runResult.getDetectCodeLocations(), runOptions.shouldUseBdio2()); final CodeLocationWaitData codeLocationWaitData = new CodeLocationWaitData(); if (bdioResult.getUploadTargets().size() > 0) { logger.info("Created " + bdioResult.getUploadTargets().size() + " BDIO files."); if (null != blackDuckServicesFactory) { - logger.debug("Uploading BDIO files."); - final DetectBdioUploadService detectBdioUploadService = new DetectBdioUploadService(detectConfiguration, blackDuckServicesFactory.createBdioUploadService()); - final CodeLocationCreationData uploadBatchOutputCodeLocationCreationData = detectBdioUploadService.uploadBdioFiles(bdioResult.getUploadTargets()); - codeLocationWaitData.addWaitForCreationData(uploadBatchOutputCodeLocationCreationData); + if (bdioResult.isBdio2()) { + logger.warn("Not uploading BDIO files because the upload of BDIO 2 documents is currently not supported."); + } else { + logger.debug("Uploading BDIO files."); + final DetectBdioUploadService detectBdioUploadService = new DetectBdioUploadService(detectConfiguration, blackDuckServicesFactory.createBdioUploadService()); + final CodeLocationCreationData uploadBatchOutputCodeLocationCreationData = detectBdioUploadService.uploadBdioFiles(bdioResult.getUploadTargets()); + codeLocationWaitData.addWaitForCreationData(uploadBatchOutputCodeLocationCreationData); + } } } else { logger.debug("Did not create any BDIO files."); diff --git a/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunOptions.java b/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunOptions.java index 89339f368a..43f096bd1b 100644 --- a/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunOptions.java +++ b/src/main/java/com/synopsys/integration/detect/lifecycle/run/RunOptions.java @@ -29,13 +29,14 @@ public class RunOptions { private final String aggregateName; private final String preferredTools; private final DetectToolFilter detectToolFilter; + private final boolean useBdio2; - public RunOptions(final boolean unmapCodeLocations, final String aggregateName, - final String preferredTools, final DetectToolFilter detectToolFilter) { + public RunOptions(final boolean unmapCodeLocations, final String aggregateName, final String preferredTools, final DetectToolFilter detectToolFilter, final boolean useBdio2) { this.unmapCodeLocations = unmapCodeLocations; this.aggregateName = aggregateName; this.preferredTools = preferredTools; this.detectToolFilter = detectToolFilter; + this.useBdio2 = useBdio2; } public boolean shouldUnmapCodeLocations() { @@ -53,4 +54,8 @@ public String getPreferredTools() { public DetectToolFilter getDetectToolFilter() { return detectToolFilter; } + + public boolean shouldUseBdio2() { + return useBdio2; + } } diff --git a/src/main/java/com/synopsys/integration/detect/workflow/bdio/AggregateBdioCreator.java b/src/main/java/com/synopsys/integration/detect/workflow/bdio/AggregateBdioCreator.java index 6899e0d969..c2fff7ae8a 100644 --- a/src/main/java/com/synopsys/integration/detect/workflow/bdio/AggregateBdioCreator.java +++ b/src/main/java/com/synopsys/integration/detect/workflow/bdio/AggregateBdioCreator.java @@ -23,6 +23,10 @@ package com.synopsys.integration.detect.workflow.bdio; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -32,7 +36,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.blackducksoftware.bdio2.BdioMetadata; +import com.blackducksoftware.bdio2.model.Project; +import com.blackducksoftware.common.value.ProductList; import com.synopsys.integration.bdio.SimpleBdioFactory; +import com.synopsys.integration.bdio.bdio2.Bdio2Document; +import com.synopsys.integration.bdio.bdio2.Bdio2Factory; +import com.synopsys.integration.bdio.bdio2.Bdio2Writer; import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.graph.MutableDependencyGraph; import com.synopsys.integration.bdio.model.Forge; @@ -42,6 +52,7 @@ import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; import com.synopsys.integration.blackduck.codelocation.bdioupload.UploadTarget; import com.synopsys.integration.detect.exception.DetectUserFriendlyException; +import com.synopsys.integration.detect.exitcode.ExitCodeType; import com.synopsys.integration.detect.workflow.codelocation.CodeLocationNameManager; import com.synopsys.integration.detect.workflow.codelocation.DetectCodeLocation; import com.synopsys.integration.detect.workflow.codelocation.FileNameUtils; @@ -51,25 +62,28 @@ public class AggregateBdioCreator { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final Bdio2Factory bdio2Factory; private final SimpleBdioFactory simpleBdioFactory; private final IntegrationEscapeUtil integrationEscapeUtil; private final CodeLocationNameManager codeLocationNameManager; private final DetectBdioWriter detectBdioWriter; - public AggregateBdioCreator(final SimpleBdioFactory simpleBdioFactory, final IntegrationEscapeUtil integrationEscapeUtil, final CodeLocationNameManager codeLocationNameManager, final DetectBdioWriter detectBdioWriter) { + public AggregateBdioCreator(final Bdio2Factory bdio2Factory, final SimpleBdioFactory simpleBdioFactory, final IntegrationEscapeUtil integrationEscapeUtil, + final CodeLocationNameManager codeLocationNameManager, final DetectBdioWriter detectBdioWriter) { + this.bdio2Factory = bdio2Factory; this.simpleBdioFactory = simpleBdioFactory; this.integrationEscapeUtil = integrationEscapeUtil; this.codeLocationNameManager = codeLocationNameManager; this.detectBdioWriter = detectBdioWriter; } - public Optional createAggregateBdioFile(final String aggregateName, final boolean uploadEmptyAggregate, final File sourcePath, final File bdioDirectory, final List codeLocations, - final NameVersion projectNameVersion) - throws DetectUserFriendlyException { - final DependencyGraph aggregateDependencyGraph = createAggregateDependencyGraph(sourcePath, codeLocations); + public Optional createAggregateBdio1File(final String aggregateName, final boolean uploadEmptyAggregate, final File sourcePath, final File bdioDirectory, final List codeLocations, + final NameVersion projectNameVersion) throws DetectUserFriendlyException { + final DependencyGraph aggregateDependencyGraph = createAggregateDependencyGraph(sourcePath, codeLocations); final ExternalId projectExternalId = simpleBdioFactory.createNameVersionExternalId(new Forge("/", "DETECT"), projectNameVersion.getName(), projectNameVersion.getVersion()); final String codeLocationName = codeLocationNameManager.createAggregateCodeLocationName(projectNameVersion); + final SimpleBdioDocument aggregateBdioDocument = simpleBdioFactory.createSimpleBdioDocument(codeLocationName, projectNameVersion.getName(), projectNameVersion.getVersion(), projectExternalId, aggregateDependencyGraph); final String filename = String.format("%s.jsonld", integrationEscapeUtil.escapeForUri(aggregateName)); @@ -77,7 +91,36 @@ public Optional createAggregateBdioFile(final String aggregateName detectBdioWriter.writeBdioFile(aggregateBdioFile, aggregateBdioDocument); - final boolean aggregateHasDependencies = aggregateDependencyGraph.getRootDependencies().size() > 0; + return createUploadTarget(codeLocationName, aggregateBdioFile, aggregateDependencyGraph, uploadEmptyAggregate); + } + + public Optional createAggregateBdio2File(final String aggregateName, final boolean uploadEmptyAggregate, final File sourcePath, final File bdioDirectory, final List codeLocations, + final NameVersion projectNameVersion) throws DetectUserFriendlyException { + + final DependencyGraph aggregateDependencyGraph = createAggregateDependencyGraph(sourcePath, codeLocations); + final ExternalId projectExternalId = simpleBdioFactory.createNameVersionExternalId(new Forge("/", "DETECT"), projectNameVersion.getName(), projectNameVersion.getVersion()); + final String codeLocationName = codeLocationNameManager.createAggregateCodeLocationName(projectNameVersion); + + final BdioMetadata bdioMetadata = bdio2Factory.createBdioMetadata(codeLocationName, ZonedDateTime.now(), new ProductList.Builder()); + final Project project = bdio2Factory.createProject(projectExternalId, projectNameVersion.getName(), projectNameVersion.getVersion()); + final Bdio2Document bdio2Document = bdio2Factory.createBdio2Document(bdioMetadata, project, aggregateDependencyGraph); + + final String bdio2Filename = String.format("%s.bdio", integrationEscapeUtil.escapeForUri(aggregateName)); + final File aggregateBdioFile = new File(bdioDirectory, bdio2Filename); + + final Bdio2Writer bdio2Writer = new Bdio2Writer(); + try { + final OutputStream outputStream = new FileOutputStream(aggregateBdioFile); + bdio2Writer.writeBdioDocument(outputStream, bdio2Document); + } catch (final IOException e) { + throw new DetectUserFriendlyException(e.getMessage(), e, ExitCodeType.FAILURE_GENERAL_ERROR); + } + + return createUploadTarget(codeLocationName, aggregateBdioFile, aggregateDependencyGraph, uploadEmptyAggregate); + } + + private Optional createUploadTarget(final String codeLocationName, final File aggregateBdioFile, final DependencyGraph dependencyGraph, final boolean uploadEmptyAggregate) { + final boolean aggregateHasDependencies = !dependencyGraph.getRootDependencies().isEmpty(); if (aggregateHasDependencies || uploadEmptyAggregate) { return Optional.of(UploadTarget.createDefault(codeLocationName, aggregateBdioFile)); } else { @@ -102,8 +145,8 @@ private Dependency createAggregateDependency(final File sourcePath, final Detect String name = null; String version = null; try { - name = codeLocation.getExternalId().name; - version = codeLocation.getExternalId().version; + name = codeLocation.getExternalId().getName(); + version = codeLocation.getExternalId().getVersion(); } catch (final Exception e) { logger.warn("Failed to get name or version to use in the wrapper for a code location.", e); } @@ -126,6 +169,6 @@ private Dependency createAggregateDependency(final File sourcePath, final Detect } externalIdPieces.add(bomToolType); final String[] pieces = externalIdPieces.toArray(new String[externalIdPieces.size()]); - return new Dependency(name, version, new ExternalIdFactory().createModuleNamesExternalId(original.forge, pieces)); + return new Dependency(name, version, new ExternalIdFactory().createModuleNamesExternalId(original.getForge(), pieces)); } } diff --git a/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioManager.java b/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioManager.java index e5b3b0b90d..047df1adba 100644 --- a/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioManager.java +++ b/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioManager.java @@ -29,9 +29,11 @@ import org.slf4j.LoggerFactory; import com.synopsys.integration.bdio.SimpleBdioFactory; +import com.synopsys.integration.bdio.bdio2.Bdio2Factory; import com.synopsys.integration.blackduck.codelocation.bdioupload.UploadTarget; import com.synopsys.integration.detect.DetectInfo; import com.synopsys.integration.detect.exception.DetectUserFriendlyException; +import com.synopsys.integration.detect.workflow.codelocation.BdioCodeLocation; import com.synopsys.integration.detect.workflow.codelocation.BdioCodeLocationCreator; import com.synopsys.integration.detect.workflow.codelocation.BdioCodeLocationResult; import com.synopsys.integration.detect.workflow.codelocation.CodeLocationNameManager; @@ -49,16 +51,18 @@ public class BdioManager { private final DetectInfo detectInfo; private final SimpleBdioFactory simpleBdioFactory; + private final Bdio2Factory bdio2Factory; private final BdioCodeLocationCreator bdioCodeLocationCreator; private final DirectoryManager directoryManager; private final IntegrationEscapeUtil integrationEscapeUtil; private final CodeLocationNameManager codeLocationNameManager; private final EventSystem eventSystem; - public BdioManager(final DetectInfo detectInfo, final SimpleBdioFactory simpleBdioFactory, final IntegrationEscapeUtil integrationEscapeUtil, final CodeLocationNameManager codeLocationNameManager, + public BdioManager(final DetectInfo detectInfo, final SimpleBdioFactory simpleBdioFactory, final Bdio2Factory bdio2Factory, final IntegrationEscapeUtil integrationEscapeUtil, final CodeLocationNameManager codeLocationNameManager, final BdioCodeLocationCreator codeLocationManager, final DirectoryManager directoryManager, final EventSystem eventSystem) { this.detectInfo = detectInfo; this.simpleBdioFactory = simpleBdioFactory; + this.bdio2Factory = bdio2Factory; this.integrationEscapeUtil = integrationEscapeUtil; this.codeLocationNameManager = codeLocationNameManager; this.bdioCodeLocationCreator = codeLocationManager; @@ -66,26 +70,47 @@ public BdioManager(final DetectInfo detectInfo, final SimpleBdioFactory simpleBd this.eventSystem = eventSystem; } - public BdioResult createBdioFiles(final AggregateOptions aggregateOptions, final NameVersion projectNameVersion, final List codeLocations) throws DetectUserFriendlyException { + public BdioResult createBdioFiles(final AggregateOptions aggregateOptions, final NameVersion projectNameVersion, final List codeLocations, final boolean useBdio2) throws DetectUserFriendlyException { final DetectBdioWriter detectBdioWriter = new DetectBdioWriter(simpleBdioFactory, detectInfo); + final Optional aggregateName = aggregateOptions.getAggregateName(); - if (aggregateOptions.shouldAggregate() && aggregateOptions.getAggregateName().isPresent()) { + if (aggregateOptions.shouldAggregate() && aggregateName.isPresent()) { logger.debug("Creating aggregate BDIO file."); - final AggregateBdioCreator aggregateBdioCreator = new AggregateBdioCreator(simpleBdioFactory, integrationEscapeUtil, codeLocationNameManager, detectBdioWriter); - final Optional uploadTarget = aggregateBdioCreator.createAggregateBdioFile(aggregateOptions.getAggregateName().get(), aggregateOptions.shouldUploadEmptyAggregate(), directoryManager.getSourceDirectory(), - directoryManager.getBdioOutputDirectory(), codeLocations, projectNameVersion); - return new BdioResult(uploadTarget); + final AggregateBdioCreator aggregateBdioCreator = new AggregateBdioCreator(bdio2Factory, simpleBdioFactory, integrationEscapeUtil, codeLocationNameManager, detectBdioWriter); + final Optional uploadTarget = createAggregatedBdioUploadTarget(aggregateBdioCreator, codeLocations, projectNameVersion, useBdio2, aggregateName.get(), aggregateOptions.shouldUploadEmptyAggregate()); + + return new BdioResult(uploadTarget, useBdio2); } else { logger.debug("Creating BDIO code locations."); final BdioCodeLocationResult codeLocationResult = bdioCodeLocationCreator.createFromDetectCodeLocations(codeLocations, projectNameVersion); codeLocationResult.getFailedBomToolGroupTypes().forEach(it -> eventSystem.publishEvent(Event.StatusSummary, new DetectorStatus(it, StatusType.FAILURE))); logger.debug("Creating BDIO files from code locations."); - final CodeLocationBdioCreator codeLocationBdioCreator = new CodeLocationBdioCreator(detectBdioWriter, simpleBdioFactory); - final List uploadTargets = codeLocationBdioCreator.createBdioFiles(directoryManager.getBdioOutputDirectory(), codeLocationResult.getBdioCodeLocations(), projectNameVersion); + final CodeLocationBdioCreator codeLocationBdioCreator = new CodeLocationBdioCreator(detectBdioWriter, simpleBdioFactory, bdio2Factory, detectInfo); + final List uploadTargets = createBdioUploadTargets(codeLocationBdioCreator, codeLocationResult.getBdioCodeLocations(), projectNameVersion, useBdio2); + + return new BdioResult(uploadTargets, useBdio2); + } + } + + private List createBdioUploadTargets(final CodeLocationBdioCreator codeLocationBdioCreator, final List bdioCodeLocations, final NameVersion projectNameVersion, final boolean useBdio2) + throws DetectUserFriendlyException { - return new BdioResult(uploadTargets); + if (useBdio2) { + return codeLocationBdioCreator.createBdio2Files(directoryManager.getBdioOutputDirectory(), bdioCodeLocations, projectNameVersion); } + + return codeLocationBdioCreator.createBdio1Files(directoryManager.getBdioOutputDirectory(), bdioCodeLocations, projectNameVersion); } + private Optional createAggregatedBdioUploadTarget(final AggregateBdioCreator aggregateBdioCreator, final List detectCodeLocations, final NameVersion projectNameVersion, final boolean useBdio2, + final String aggregateName, final boolean shouldUploadEmptyAggregate) + throws DetectUserFriendlyException { + + if (useBdio2) { + return aggregateBdioCreator.createAggregateBdio2File(aggregateName, shouldUploadEmptyAggregate, directoryManager.getSourceDirectory(), directoryManager.getBdioOutputDirectory(), detectCodeLocations, projectNameVersion); + } + + return aggregateBdioCreator.createAggregateBdio1File(aggregateName, shouldUploadEmptyAggregate, directoryManager.getSourceDirectory(), directoryManager.getBdioOutputDirectory(), detectCodeLocations, projectNameVersion); + } } diff --git a/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioResult.java b/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioResult.java index d61a656072..af568b82dd 100644 --- a/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioResult.java +++ b/src/main/java/com/synopsys/integration/detect/workflow/bdio/BdioResult.java @@ -30,18 +30,24 @@ public class BdioResult { private final List uploadTargets; + private final boolean isBdio2; - public BdioResult(final Optional uploadTarget) { + public BdioResult(final Optional uploadTarget, final boolean isBdio2) { + this.isBdio2 = isBdio2; this.uploadTargets = new ArrayList<>(); uploadTarget.ifPresent(uploadTargets::add); } - public BdioResult(final List uploadTargets) { + public BdioResult(final List uploadTargets, final boolean isBdio2) { this.uploadTargets = uploadTargets; + this.isBdio2 = isBdio2; } public List getUploadTargets() { return uploadTargets; } + public boolean isBdio2() { + return isBdio2; + } } diff --git a/src/main/java/com/synopsys/integration/detect/workflow/bdio/CodeLocationBdioCreator.java b/src/main/java/com/synopsys/integration/detect/workflow/bdio/CodeLocationBdioCreator.java index fea1b4bc3f..7a127eea98 100644 --- a/src/main/java/com/synopsys/integration/detect/workflow/bdio/CodeLocationBdioCreator.java +++ b/src/main/java/com/synopsys/integration/detect/workflow/bdio/CodeLocationBdioCreator.java @@ -23,39 +23,91 @@ package com.synopsys.integration.detect.workflow.bdio; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; +import com.blackducksoftware.bdio2.BdioMetadata; +import com.blackducksoftware.bdio2.model.Project; +import com.blackducksoftware.common.value.Product; +import com.blackducksoftware.common.value.ProductList; import com.synopsys.integration.bdio.SimpleBdioFactory; +import com.synopsys.integration.bdio.bdio2.Bdio2Document; +import com.synopsys.integration.bdio.bdio2.Bdio2Factory; +import com.synopsys.integration.bdio.bdio2.Bdio2Writer; import com.synopsys.integration.bdio.graph.DependencyGraph; import com.synopsys.integration.bdio.model.SimpleBdioDocument; +import com.synopsys.integration.bdio.model.SpdxCreator; import com.synopsys.integration.bdio.model.externalid.ExternalId; import com.synopsys.integration.blackduck.codelocation.bdioupload.UploadTarget; +import com.synopsys.integration.detect.DetectInfo; import com.synopsys.integration.detect.exception.DetectUserFriendlyException; +import com.synopsys.integration.detect.exitcode.ExitCodeType; import com.synopsys.integration.detect.workflow.codelocation.BdioCodeLocation; import com.synopsys.integration.util.NameVersion; public class CodeLocationBdioCreator { private final DetectBdioWriter detectBdioWriter; private final SimpleBdioFactory simpleBdioFactory; + private final Bdio2Factory bdio2Factory; + private final DetectInfo detectInfo; - public CodeLocationBdioCreator(final DetectBdioWriter detectBdioWriter, final SimpleBdioFactory simpleBdioFactory) { + public CodeLocationBdioCreator(final DetectBdioWriter detectBdioWriter, final SimpleBdioFactory simpleBdioFactory, final Bdio2Factory bdio2Factory, final DetectInfo detectInfo) { this.detectBdioWriter = detectBdioWriter; this.simpleBdioFactory = simpleBdioFactory; + this.bdio2Factory = bdio2Factory; + this.detectInfo = detectInfo; } - public List createBdioFiles(final File bdioOutput, final List bdioCodeLocations, final NameVersion projectNameVersion) throws DetectUserFriendlyException { + public List createBdio1Files(final File bdioOutput, final List bdioCodeLocations, final NameVersion projectNameVersion) throws DetectUserFriendlyException { final List uploadTargets = new ArrayList<>(); for (final BdioCodeLocation bdioCodeLocation : bdioCodeLocations) { final String codeLocationName = bdioCodeLocation.getCodeLocationName(); final ExternalId externalId = bdioCodeLocation.getDetectCodeLocation().getExternalId(); final DependencyGraph dependencyGraph = bdioCodeLocation.getDetectCodeLocation().getDependencyGraph(); + final File bdioOutputFile = new File(bdioOutput, bdioCodeLocation.getBdioName() + ".jsonld"); final SimpleBdioDocument simpleBdioDocument = simpleBdioFactory.createSimpleBdioDocument(codeLocationName, projectNameVersion.getName(), projectNameVersion.getVersion(), externalId, dependencyGraph); - final File outputFile = new File(bdioOutput, bdioCodeLocation.getBdioName()); - detectBdioWriter.writeBdioFile(outputFile, simpleBdioDocument); - uploadTargets.add(UploadTarget.createDefault(codeLocationName, outputFile)); + detectBdioWriter.writeBdioFile(bdioOutputFile, simpleBdioDocument); + uploadTargets.add(UploadTarget.createDefault(codeLocationName, bdioOutputFile)); + } + + return uploadTargets; + } + + public List createBdio2Files(final File bdioOutput, final List bdioCodeLocations, final NameVersion projectNameVersion) throws DetectUserFriendlyException { + final List uploadTargets = new ArrayList<>(); + for (final BdioCodeLocation bdioCodeLocation : bdioCodeLocations) { + final String codeLocationName = bdioCodeLocation.getCodeLocationName(); + final ExternalId externalId = bdioCodeLocation.getDetectCodeLocation().getExternalId(); + final DependencyGraph dependencyGraph = bdioCodeLocation.getDetectCodeLocation().getDependencyGraph(); + + // Bdio 2 + final ProductList.Builder productListBuilder = new ProductList.Builder(); + final String detectVersion = detectInfo.getDetectVersion(); + final SpdxCreator detectCreator = SpdxCreator.createToolSpdxCreator("Detect", detectVersion); + final Product product = new Product.Builder().name(detectCreator.getIdentifier()).build(); + productListBuilder.addProduct(product); + + final BdioMetadata bdioMetadata = bdio2Factory.createBdioMetadata(codeLocationName, ZonedDateTime.now(), productListBuilder); + final Project bdio2Project = bdio2Factory.createProject(externalId, projectNameVersion.getName(), projectNameVersion.getVersion()); + final Bdio2Document bdio2Document = bdio2Factory.createBdio2Document(bdioMetadata, bdio2Project, dependencyGraph); + + final Bdio2Writer bdio2Writer = new Bdio2Writer(); + final File bdio2OutputFile = new File(bdioOutput, bdioCodeLocation.getBdioName() + ".bdio"); + + try { + final OutputStream outputStream = new FileOutputStream(bdio2OutputFile); + bdio2Writer.writeBdioDocument(outputStream, bdio2Document); + + uploadTargets.add(UploadTarget.createDefault(codeLocationName, bdio2OutputFile)); + } catch (final IOException e) { + throw new DetectUserFriendlyException(e.getMessage(), e, ExitCodeType.FAILURE_GENERAL_ERROR); + } } return uploadTargets; diff --git a/src/main/java/com/synopsys/integration/detect/workflow/bdio/DetectBdioWriter.java b/src/main/java/com/synopsys/integration/detect/workflow/bdio/DetectBdioWriter.java index a02c22eb52..f80288ef75 100644 --- a/src/main/java/com/synopsys/integration/detect/workflow/bdio/DetectBdioWriter.java +++ b/src/main/java/com/synopsys/integration/detect/workflow/bdio/DetectBdioWriter.java @@ -28,17 +28,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.synopsys.integration.detect.DetectInfo; -import com.synopsys.integration.detect.exception.DetectUserFriendlyException; -import com.synopsys.integration.detect.exitcode.ExitCodeType; import com.synopsys.integration.bdio.SimpleBdioFactory; import com.synopsys.integration.bdio.model.SimpleBdioDocument; import com.synopsys.integration.bdio.model.SpdxCreator; +import com.synopsys.integration.detect.DetectInfo; +import com.synopsys.integration.detect.exception.DetectUserFriendlyException; +import com.synopsys.integration.detect.exitcode.ExitCodeType; public class DetectBdioWriter { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private SimpleBdioFactory simpleBdioFactory; - private DetectInfo detectInfo; + private final SimpleBdioFactory simpleBdioFactory; + private final DetectInfo detectInfo; public DetectBdioWriter(final SimpleBdioFactory simpleBdioFactory, final DetectInfo detectInfo) { this.simpleBdioFactory = simpleBdioFactory; @@ -54,7 +54,7 @@ public void writeBdioFile(final File outputFile, final SimpleBdioDocument simple try { final String detectVersion = detectInfo.getDetectVersion(); final SpdxCreator detectCreator = SpdxCreator.createToolSpdxCreator("Detect", detectVersion); - simpleBdioDocument.billOfMaterials.creationInfo.setPrimarySpdxCreator(detectCreator); + simpleBdioDocument.getBillOfMaterials().creationInfo.setPrimarySpdxCreator(detectCreator); simpleBdioFactory.writeSimpleBdioDocumentToFile(outputFile, simpleBdioDocument); logger.debug(String.format("BDIO Generated: %s", outputFile.getAbsolutePath())); } catch (final IOException e) { diff --git a/src/main/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreator.java b/src/main/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreator.java index d9674875d2..5a64030b24 100644 --- a/src/main/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreator.java +++ b/src/main/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreator.java @@ -23,7 +23,6 @@ package com.synopsys.integration.detect.workflow.codelocation; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -40,7 +39,6 @@ import com.synopsys.integration.detect.configuration.DetectProperty; import com.synopsys.integration.detect.configuration.PropertyAuthority; import com.synopsys.integration.detect.exception.DetectUserFriendlyException; -import com.synopsys.integration.detect.exitcode.ExitCodeType; import com.synopsys.integration.detect.workflow.event.Event; import com.synopsys.integration.detect.workflow.event.EventSystem; import com.synopsys.integration.detect.workflow.file.DirectoryManager; @@ -158,7 +156,6 @@ private List transformDetectCodeLocationsIntoBdioCodeLocations private String createBdioName(final String codeLocationName, final IntegrationEscapeUtil integrationEscapeUtil) { final String filenameRaw = StringUtils.replaceEach(codeLocationName, new String[] { "/", "\\", " " }, new String[] { "_", "_", "_" }); - final String filename = integrationEscapeUtil.escapeForUri(filenameRaw); - return filename + ".jsonld"; + return integrationEscapeUtil.escapeForUri(filenameRaw); } } diff --git a/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphAssertions.java b/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphAssertions.java index f33d0a5e1b..a574c1e544 100644 --- a/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphAssertions.java +++ b/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphAssertions.java @@ -64,12 +64,12 @@ private static void assertDoesNotHave(final DependencyGraph dependencyGraph, fin if (current == null) { for (final Dependency dep : dependencyGraph.getRootDependencies()) { assertDoesNotHave(dep, target); - assertDoesNotHave(dependencyGraph, target, dep.externalId); + assertDoesNotHave(dependencyGraph, target, dep.getExternalId()); } } else { for (final Dependency dep : dependencyGraph.getChildrenForParent(current)) { assertDoesNotHave(dep, target); - assertDoesNotHave(dependencyGraph, target, dep.externalId); + assertDoesNotHave(dependencyGraph, target, dep.getExternalId()); } } } @@ -77,7 +77,7 @@ private static void assertDoesNotHave(final DependencyGraph dependencyGraph, fin public static void assertDoesNotHave(final Dependency dep, final String target) { assertDoesNotHaveName(dep, target); assertDoesNotHaveVersion(dep, target); - assertDoesNotHave(dep.externalId, target); + assertDoesNotHave(dep.getExternalId(), target); } public static void assertDoesNotHave(final ExternalId externalId, final String target) { @@ -87,32 +87,32 @@ public static void assertDoesNotHave(final ExternalId externalId, final String t } public static void assertDoesNotHaveName(final Dependency dep, final String name) { - if (dep.name != null) { - assertFalse("Dependency name contains '" + name + "'", dep.name.contains(name)); + if (dep.getName() != null) { + assertFalse("Dependency name contains '" + name + "'", dep.getName().contains(name)); } } public static void assertDoesNotHaveVersion(final Dependency dep, final String name) { - if (dep.version != null) { - assertFalse("Dependency version contains '" + name + "'", dep.version.contains(name)); + if (dep.getVersion() != null) { + assertFalse("Dependency version contains '" + name + "'", dep.getVersion().contains(name)); } } public static void assertDoesNotHaveVersion(final ExternalId externalId, final String name) { - if (externalId.version != null) { - assertFalse("External id version contains '" + name + "'", externalId.version.contains(name)); + if (externalId.getVersion() != null) { + assertFalse("External id version contains '" + name + "'", externalId.getVersion().contains(name)); } } public static void assertDoesNotHaveGroup(final ExternalId externalId, final String name) { - if (externalId.group != null) { - assertFalse("External id group contains '" + name + "'", externalId.group.contains(name)); + if (externalId.getGroup() != null) { + assertFalse("External id group contains '" + name + "'", externalId.getGroup().contains(name)); } } public static void assertDoesNotHaveName(final ExternalId externalId, final String name) { - if (externalId.name != null) { - assertFalse("External id name contains '" + name + "'", externalId.name.contains(name)); + if (externalId.getName() != null) { + assertFalse("External id name contains '" + name + "'", externalId.getName().contains(name)); } } diff --git a/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphSummarizer.java b/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphSummarizer.java index 3ea48c08ba..3a7215bd13 100644 --- a/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphSummarizer.java +++ b/src/test/java/com/synopsys/integration/detect/testutils/DependencyGraphSummarizer.java @@ -64,11 +64,11 @@ public GraphSummary fromGraph(final DependencyGraph graph) { final Dependency nextDependency = unprocessed.remove(); processed.add(nextDependency); - final BdioId nextId = nextDependency.externalId.createBdioId(); + final BdioId nextId = nextDependency.getExternalId().createBdioId(); if (!graphSummary.dependencySummaries.containsKey(nextId)) { final NameVersion nameVersion = new NameVersion(); - nameVersion.setName(nextDependency.name); - nameVersion.setVersion(nextDependency.version); + nameVersion.setName(nextDependency.getName()); + nameVersion.setVersion(nextDependency.getVersion()); graphSummary.dependencySummaries.put(nextId, nameVersion); } @@ -76,7 +76,7 @@ public GraphSummary fromGraph(final DependencyGraph graph) { if (!graphSummary.externalDataIdRelationships.containsKey(nextId)) { graphSummary.externalDataIdRelationships.put(nextId, new HashSet<>()); } - graphSummary.externalDataIdRelationships.get(nextId).add(dep.externalId.createBdioId()); + graphSummary.externalDataIdRelationships.get(nextId).add(dep.getExternalId().createBdioId()); if (!processed.contains(dep)) { unprocessed.add(dep); } diff --git a/src/test/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreatorTest.java b/src/test/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreatorTest.java index a60ec0c1a1..f8230f12d5 100644 --- a/src/test/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreatorTest.java +++ b/src/test/java/com/synopsys/integration/detect/workflow/codelocation/BdioCodeLocationCreatorTest.java @@ -2,7 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; import java.io.File; import java.io.IOException; @@ -45,9 +44,9 @@ public void testCreateFromDetectCodeLocations() throws IOException, DetectUserFr Mockito.when(dependencyGraph.getRootDependencies()).thenReturn(dependencies); final ExternalId externalId = new ExternalId(Forge.MAVEN); - externalId.name = "testExternalIdName"; - externalId.version = "testExternalIdVersion"; - externalId.architecture = "testExternalIdArch"; + externalId.setName("testExternalIdName"); + externalId.setVersion("testExternalIdVersion"); + externalId.setArchitecture("testExternalIdArch"); final DetectCodeLocation detectCodeLocation = DetectCodeLocation.forCreator(dependencyGraph, sourceDir, externalId, "testCreator"); final List detectCodeLocations = new ArrayList<>(); detectCodeLocations.add(detectCodeLocation); diff --git a/src/test/java/com/synopsys/integration/detect/workflow/codelocation/CodeLocationNameGeneratorTest.java b/src/test/java/com/synopsys/integration/detect/workflow/codelocation/CodeLocationNameGeneratorTest.java index a1bccf798d..adcd4a905c 100644 --- a/src/test/java/com/synopsys/integration/detect/workflow/codelocation/CodeLocationNameGeneratorTest.java +++ b/src/test/java/com/synopsys/integration/detect/workflow/codelocation/CodeLocationNameGeneratorTest.java @@ -24,9 +24,6 @@ import com.synopsys.integration.bdio.model.Forge; import com.synopsys.integration.bdio.model.externalid.ExternalId; import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory; -import com.synopsys.integration.detect.configuration.DetectConfiguration; -import com.synopsys.integration.detect.configuration.DetectProperty; -import com.synopsys.integration.detect.configuration.PropertyAuthority; public class CodeLocationNameGeneratorTest { @Test @@ -45,8 +42,8 @@ public void testScanCodeLocationName() throws IOException { assertEquals(expected, actual); } - private File mockCanonical(String mock) throws IOException { - File mockFile = Mockito.mock(File.class); + private File mockCanonical(final String mock) throws IOException { + final File mockFile = Mockito.mock(File.class); Mockito.when(mockFile.getCanonicalPath()).thenReturn(mock); return mockFile; } @@ -101,7 +98,8 @@ public void testLongCodeLocationNames() { Mockito.when(detectCodeLocation.getCreatorName()).thenReturn(Optional.of("NPM")); final File sourcePath = new File("/Users/ekerwin/Documents/source/functional/common-rest"); - final File codeLocationPath = new File("/Users/ekerwin/Documents/source/functional/common-rest/common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest"); + final File codeLocationPath = new File( + "/Users/ekerwin/Documents/source/functional/common-rest/common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest-common-rest"); final String prefix = ""; final String suffix = ""; final String actual = codeLocationNameGenerator.createBomCodeLocationName(sourcePath, codeLocationPath, "projectName", "projectVersion", detectCodeLocation, prefix, suffix); @@ -112,17 +110,17 @@ public void testLongCodeLocationNames() { @Test public void testExternalId() { final CodeLocationNameGenerator codeLocationNameGenerator = new CodeLocationNameGenerator(null); - DetectCodeLocation detectCodeLocation = Mockito.mock(DetectCodeLocation.class); + final DetectCodeLocation detectCodeLocation = Mockito.mock(DetectCodeLocation.class); final ExternalId externalId = new ExternalId(Forge.MAVEN); - externalId.name = "externalIdName"; - externalId.version = "externalIdVersion"; - externalId.group = "externalIdGroup"; - externalId.architecture = "externalIdArch"; - externalId.path = "externalIdPath"; + externalId.setName("externalIdName"); + externalId.setVersion("externalIdVersion"); + externalId.setGroup("externalIdGroup"); + externalId.setArchitecture("externalIdArch"); + externalId.setPath("externalIdPath"); Mockito.when(detectCodeLocation.getExternalId()).thenReturn(externalId); - String actual = codeLocationNameGenerator.createBomCodeLocationName(new File("/tmp/aaa"), new File("/tmp/aaa/bbb"), "projectName", "projectVersion", detectCodeLocation, "testPrefix", "testSuffix"); + final String actual = codeLocationNameGenerator.createBomCodeLocationName(new File("/tmp/aaa"), new File("/tmp/aaa/bbb"), "projectName", "projectVersion", detectCodeLocation, "testPrefix", "testSuffix"); assertEquals("testPrefix/projectName/projectVersion/bbb/externalIdPath/testSuffix detect/bom", actual); } @@ -132,7 +130,7 @@ public void testGivenNameCounters() { assertTrue(codeLocationNameGenerator.useCodeLocationOverride()); - DetectCodeLocation detectCodeLocation = Mockito.mock(DetectCodeLocation.class); + final DetectCodeLocation detectCodeLocation = Mockito.mock(DetectCodeLocation.class); Mockito.when(detectCodeLocation.getCreatorName()).thenReturn(Optional.of("testCreator")); assertEquals("testCreator", codeLocationNameGenerator.deriveCreator(detectCodeLocation));