From aa18059b84ba5380bd688da8f4153471c588538c Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Fri, 18 Sep 2026 14:07:31 +0100 Subject: [PATCH 1/3] Add more tests for V2 to V3 converter Signed-off-by: Arthit Suriyawongkul --- pom.xml | 28 +++++++++++ .../org/spdx/tools/SpdxConverterTestV3.java | 48 ++++++++++++++++++- 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 06e74e6..f904097 100644 --- a/pom.xml +++ b/pom.xml @@ -92,7 +92,35 @@ + + jacoco + + + + org.jacoco + jacoco-maven-plugin + 0.8.15 + + + prepare-agent + + prepare-agent + + + + report + test + + report + + + + + + + + commons-io 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); } } From 01ca6bd4367f692fa749f1f8c091edf6ca02e8f1 Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Fri, 18 Sep 2026 14:12:38 +0100 Subject: [PATCH 2/3] Remove jacoco profile - split into separate PR Signed-off-by: Arthit Suriyawongkul --- pom.xml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/pom.xml b/pom.xml index f904097..358890d 100644 --- a/pom.xml +++ b/pom.xml @@ -92,33 +92,6 @@ - - jacoco - - - - org.jacoco - jacoco-maven-plugin - 0.8.15 - - - prepare-agent - - prepare-agent - - - - report - test - - report - - - - - - - From 3e6479f3a0d04e5d4bcd1b10c97506d4823312eb Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Fri, 18 Sep 2026 14:17:05 +0100 Subject: [PATCH 3/3] Revert file change Signed-off-by: Arthit Suriyawongkul --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 358890d..06e74e6 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,6 @@ - commons-io