Add test for dependencies verification metadata

Every dependency used in project should have MD5 and SHA-256 hash
^KTI-943
This commit is contained in:
Bogdan Mukvich
2022-10-13 14:30:49 +02:00
committed by Space Team
parent e4e15f36ce
commit 67576b02c4
2 changed files with 73 additions and 0 deletions
+3
View File
@@ -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())
@@ -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<Component> = 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<Artifact>,
)
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<VerificationMetadata>(File("gradle/verification-metadata.xml"))
val fails = mutableListOf<String>()
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)
}
}