diff --git a/src/test/java/org/spdx/tools/SpdxConverterTestV3.java b/src/test/java/org/spdx/tools/SpdxConverterTestV3.java index dadc29f..473ea49 100644 --- a/src/test/java/org/spdx/tools/SpdxConverterTestV3.java +++ b/src/test/java/org/spdx/tools/SpdxConverterTestV3.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import org.junit.After; import org.junit.Before; @@ -21,11 +22,15 @@ import org.spdx.core.InvalidSPDXAnalysisException; import org.spdx.library.ModelCopyManager; import org.spdx.library.SpdxModelFactory; +import org.spdx.library.model.v3_0_1.SpdxConstantsV3; import org.spdx.library.model.v3_0_1.core.Element; +import org.spdx.library.model.v3_0_1.core.Hash; +import org.spdx.library.model.v3_0_1.core.HashAlgorithm; import org.spdx.library.model.v3_0_1.core.NamespaceMap; import org.spdx.library.model.v3_0_1.core.SpdxDocument; import org.spdx.library.model.v3_0_1.software.SpdxFile; import org.spdx.library.model.v3_0_1.software.SpdxPackage; +import org.spdx.library.model.v3_0_1.software.Snippet; import org.spdx.storage.simple.InMemSpdxStore; import org.spdx.tools.SpdxToolsHelper.SerFileType; import org.spdx.utility.compare.SpdxCompareException; @@ -116,7 +121,48 @@ public void testV2JsonToV3JsonLD() throws SpdxConverterException, InvalidSPDXAna assertTrue(map.isPresent()); assertEquals("http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301#", map.get().getNamespace()); assertEquals("DocumentRef-spdx-tool-1.2", map.get().getPrefix()); - // TODO: create a more extensive set of checks + + // Snippet fidelity. Expected values are SPDXRef-Snippet's fields in SPDXJSONExample-v2.3.spdx.json. + List resultSnippets = SpdxModelFactory.getSpdxObjects(resultDoc.getModelStore(), null, + SpdxConstantsV3.SOFTWARE_SNIPPET, null, null) + .map(o -> (Snippet)o).collect(Collectors.toList()); + assertEquals(1, resultSnippets.size()); + Snippet resultSnippet = resultSnippets.get(0); + assertEquals("from linux kernel", resultSnippet.getName().get()); + assertEquals("Copyright 2008-2010 John Smith", resultSnippet.getCopyrightText().get()); + // byte offset range (ranges[0]) and line number range (ranges[1]) from the source snippet + assertEquals(Integer.valueOf(310), resultSnippet.getByteRange().get().getBeginIntegerRange()); + assertEquals(Integer.valueOf(420), resultSnippet.getByteRange().get().getEndIntegerRange()); + assertEquals(Integer.valueOf(5), resultSnippet.getLineRange().get().getBeginIntegerRange()); + assertEquals(Integer.valueOf(23), resultSnippet.getLineRange().get().getEndIntegerRange()); + assertNotNull(resultSnippet.getSnippetFromFile()); + + // File checksum fidelity. + // TODO: package checksums don't carry over as Hash verifiedUsings on the v3 Package + // (only PackageVerificationCode does) - fix in SpdxConverter/Spdx2to3Converter, then assert here too. + List resultFileHashes = resultFile.getVerifiedUsings().stream() + .filter(im -> im instanceof Hash).map(im -> (Hash)im).collect(Collectors.toList()); + Optional resultSha1 = resultFileHashes.stream() + .filter(h -> { + try { + return HashAlgorithm.SHA1.equals(h.getAlgorithm()); + } catch (InvalidSPDXAnalysisException e) { + throw new RuntimeException(e); + } + }).findFirst(); + assertTrue(resultSha1.isPresent()); + assertEquals("d6a770ba38583ed4bb4525bd96e50461655d2758", resultSha1.get().getHashValue()); + assertEquals("Copyright 2008-2010 John Smith", resultPackage.getCopyrightText().get()); + + // Annotation count survives conversion (3 doc-level + 1 package + 1 file). + long resultAnnotationCount = SpdxModelFactory.getSpdxObjects(resultDoc.getModelStore(), null, + SpdxConstantsV3.CORE_ANNOTATION, null, null).count(); + assertEquals(5, resultAnnotationCount); + + // Relationship count: converter also synthesizes license/distribution relationships, so assert a floor. + long resultRelationshipCount = SpdxModelFactory.getSpdxObjects(resultDoc.getModelStore(), null, + SpdxConstantsV3.CORE_RELATIONSHIP, null, null).count(); + assertTrue(resultRelationshipCount >= 7); } }