Append by default heap dump options.
^KT-45744 In Progress
This commit is contained in:
committed by
TeamCityServer
parent
ffa11eacca
commit
9ae47004d0
+54
@@ -9,11 +9,17 @@ import org.gradle.testkit.runner.BuildResult
|
|||||||
import org.gradle.testkit.runner.GradleRunner
|
import org.gradle.testkit.runner.GradleRunner
|
||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
import java.io.File
|
||||||
import java.nio.file.*
|
import java.nio.file.*
|
||||||
import java.nio.file.Files.copy
|
import java.nio.file.Files.copy
|
||||||
import java.nio.file.Files.createDirectories
|
import java.nio.file.Files.createDirectories
|
||||||
|
|
||||||
import java.nio.file.attribute.BasicFileAttributes
|
import java.nio.file.attribute.BasicFileAttributes
|
||||||
|
import kotlin.io.path.ExperimentalPathApi
|
||||||
|
import kotlin.io.path.createFile
|
||||||
|
import kotlin.io.path.exists
|
||||||
|
import kotlin.io.path.readText
|
||||||
|
import kotlin.io.path.writeText
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new test project.
|
* Create new test project.
|
||||||
@@ -26,6 +32,7 @@ fun KGPBaseTest.project(
|
|||||||
gradleVersion: GradleVersion,
|
gradleVersion: GradleVersion,
|
||||||
buildOptions: KGPBaseTest.BuildOptions = defaultBuildOptions,
|
buildOptions: KGPBaseTest.BuildOptions = defaultBuildOptions,
|
||||||
forceOutput: Boolean = false,
|
forceOutput: Boolean = false,
|
||||||
|
addHeapDumpOptions: Boolean = true,
|
||||||
test: TestProject.() -> Unit
|
test: TestProject.() -> Unit
|
||||||
): TestProject {
|
): TestProject {
|
||||||
val projectPath = setupProjectFromTestResources(
|
val projectPath = setupProjectFromTestResources(
|
||||||
@@ -34,6 +41,7 @@ fun KGPBaseTest.project(
|
|||||||
workingDir
|
workingDir
|
||||||
)
|
)
|
||||||
projectPath.addDefaultBuildFiles()
|
projectPath.addDefaultBuildFiles()
|
||||||
|
if (addHeapDumpOptions) projectPath.addHeapDumpOptions()
|
||||||
|
|
||||||
val gradleRunner = GradleRunner
|
val gradleRunner = GradleRunner
|
||||||
.create()
|
.create()
|
||||||
@@ -151,6 +159,52 @@ private fun Path.addDefaultBuildFiles() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalPathApi::class)
|
||||||
|
private fun Path.addHeapDumpOptions() {
|
||||||
|
val propertiesFile = resolve("gradle.properties")
|
||||||
|
if (!propertiesFile.exists()) propertiesFile.createFile()
|
||||||
|
|
||||||
|
val propertiesContent = propertiesFile.readText()
|
||||||
|
val (existingJvmArgsLine, otherLines) = propertiesContent
|
||||||
|
.lines()
|
||||||
|
.partition {
|
||||||
|
it.trim().startsWith("org.gradle.jvmargs")
|
||||||
|
}
|
||||||
|
|
||||||
|
val heapDumpOutOfErrorStr = "-XX:+HeapDumpOnOutOfMemoryError"
|
||||||
|
val heapDumpPathStr = "-XX:HeapDumpPath=\"${System.getProperty("user.dir")}${File.separatorChar}build\""
|
||||||
|
|
||||||
|
if (existingJvmArgsLine.isEmpty()) {
|
||||||
|
propertiesFile.writeText(
|
||||||
|
"""
|
||||||
|
# modified in addHeapDumpOptions
|
||||||
|
org.gradle.jvmargs=$heapDumpOutOfErrorStr $heapDumpPathStr
|
||||||
|
|
||||||
|
$propertiesContent
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
val argsLine = existingJvmArgsLine.first()
|
||||||
|
val appendedOptions = buildString {
|
||||||
|
if (!argsLine.contains("HeapDumpOnOutOfMemoryError")) append(" $heapDumpOutOfErrorStr")
|
||||||
|
if (!argsLine.contains("HeapDumpPath")) append(" $heapDumpPathStr")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (appendedOptions.isNotEmpty()) {
|
||||||
|
propertiesFile.writeText(
|
||||||
|
"""
|
||||||
|
# modified in addHeapDumpOptions
|
||||||
|
$argsLine$appendedOptions
|
||||||
|
|
||||||
|
${otherLines.joinToString(separator = "\n")}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
println("<=== Heap dump options are already exists! ===>")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun Path.copyRecursively(dest: Path) {
|
private fun Path.copyRecursively(dest: Path) {
|
||||||
Files.walkFileTree(this, object : SimpleFileVisitor<Path>() {
|
Files.walkFileTree(this, object : SimpleFileVisitor<Path>() {
|
||||||
override fun preVisitDirectory(
|
override fun preVisitDirectory(
|
||||||
|
|||||||
Reference in New Issue
Block a user