From 67576b02c4f7794348d7dacf2a026623eaa4e13c Mon Sep 17 00:00:00 2001 From: Bogdan Mukvich Date: Thu, 13 Oct 2022 14:30:49 +0200 Subject: [PATCH] Add test for dependencies verification metadata Every dependency used in project should have MD5 and SHA-256 hash ^KTI-943 --- compiler/build.gradle.kts | 3 + .../code/DepsVerificationMetadataTest.kt | 70 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 compiler/tests/org/jetbrains/kotlin/code/DepsVerificationMetadataTest.kt diff --git a/compiler/build.gradle.kts b/compiler/build.gradle.kts index f49dc6588bc..5340c07260b 100644 --- a/compiler/build.gradle.kts +++ b/compiler/build.gradle.kts @@ -35,6 +35,9 @@ dependencies { testImplementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } testImplementation(toolsJar()) + testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.7") + testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.12.7") + testImplementation("com.fasterxml.woodstox:woodstox-core:6.2.4") antLauncherJar(commonDependency("org.apache.ant", "ant")) antLauncherJar(toolsJar()) diff --git a/compiler/tests/org/jetbrains/kotlin/code/DepsVerificationMetadataTest.kt b/compiler/tests/org/jetbrains/kotlin/code/DepsVerificationMetadataTest.kt new file mode 100644 index 00000000000..ec27b6b20e0 --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/code/DepsVerificationMetadataTest.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.code + +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase +import org.junit.Test +import java.io.File + + +class DepsVerificationMetadataTest { + @JacksonXmlRootElement(localName = "verification-metadata") + private data class VerificationMetadata( + @field:JacksonXmlElementWrapper(localName = "components") + val components: List = listOf() + ) + + private data class Component( + @field:JacksonXmlProperty(isAttribute = true) + val group: String, + @field:JacksonXmlProperty(isAttribute = true) + val name: String, + @field:JacksonXmlProperty(isAttribute = true) + val version: String, + @field:JacksonXmlElementWrapper(useWrapping = false) + val artifact: List, + ) + + private data class Artifact( + @field:JacksonXmlProperty(isAttribute = true) + val name: String, + val md5: Hash?, + val sha256: Hash? + ) + + private data class Hash(@field:JacksonXmlProperty(isAttribute = true) val value: String) + + @Test + fun dependenciesHasValidHashes() { + val mapper = XmlMapper() + .apply { + configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + registerKotlinModule() + } + val verificationMetadata = mapper.readValue(File("gradle/verification-metadata.xml")) + val fails = mutableListOf() + + verificationMetadata.components.forEach { component -> + component.artifact.forEach { artifact -> + if (artifact.md5 == null) { + fails.add("${artifact.name} - md5 is missing") + } + if (artifact.sha256 == null) { + fails.add("${artifact.name} - sha256 is missing") + } + } + } + + KtUsefulTestCase.assertEmpty(fails) + } +} \ No newline at end of file