blob: 5d799ee02f88c51847cdb038f0b73b09ce266d82 [file] [log] [blame]
/*
* Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
import org.junit.Test
import java.io.*
import kotlin.test.*
/*
* This is intentionally put here instead of coreAgentTest to avoid accidental classpath replacing
* and ruining core agent test.
*/
class PrecompiledDebugProbesTest {
private val overwrite = java.lang.Boolean.getBoolean("overwrite.probes")
@Test
fun testClassFileContent() {
val clz = Class.forName("kotlin.coroutines.jvm.internal.DebugProbesKt")
val className: String = clz.getName()
val classFileResourcePath = className.replace(".", "/") + ".class"
val stream = clz.classLoader.getResourceAsStream(classFileResourcePath)!!
val array = stream.readBytes()
val binFile = clz.classLoader.getResourceAsStream("DebugProbesKt.bin")!!
val binContent = binFile.readBytes()
if (overwrite) {
val url = clz.classLoader.getResource("DebugProbesKt.bin")!!
val base = url.toExternalForm().toString().removePrefix("jar:file:").substringBefore("/build")
val probes = File(base, "jvm/resources/DebugProbesKt.bin")
FileOutputStream(probes).use { it.write(array) }
println("Content was successfully overwritten!")
} else {
assertTrue(
array.contentEquals(binContent),
"Compiled DebugProbesKt.class does not match the file shipped as a resource in kotlinx-coroutines-core. " +
"Typically it happens because of the Kotlin version update (-> binary metadata). In that case, run the same test with -Poverwrite.probes=true and " +
"ensure that classfile has major version equal to 50 (Java 6 compliance)")
}
}
}