From 0c12b0e5fbef19212b27de3b640c3e241d11f704 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 5 Jun 2018 18:53:59 +0300 Subject: [PATCH] Test: refactor Gradle daemon memory test Currently the test makes more harm than use: * It is too slow: two executions (with different Gradle versions) take 5 minute on CI. * It is unreliable: the test fails on CI for months with insignificant violation of the memory growth limit. After this change: * the memory growth limit is increased; * the test run count is decreased; * changes the test to use separate project with minimal amount of classes (we're not interested in compiler's memory leaks; only Gradle plugin specific ones); --- .../kotlin/gradle/GradleDaemonMemoryIT.kt | 9 +++---- .../gradleDaemonMemory/build.gradle | 24 +++++++++++++++++++ .../gradleDaemonMemory/gradle.properties | 1 + .../src/main/kotlin/Dummy.kt | 6 +++++ .../testProject/kotlinProject/build.gradle | 4 ---- 5 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/src/main/kotlin/Dummy.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleDaemonMemoryIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleDaemonMemoryIT.kt index 4923f2325db..297f2877f01 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleDaemonMemoryIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleDaemonMemoryIT.kt @@ -14,11 +14,11 @@ class GradleDaemonMemoryIT : BaseGradleIT() { // In order to stop daemon process, special exit task is used ( System.exit(0) ). @Test fun testGradleDaemonMemory() { - val project = Project("kotlinProject") + val project = Project("gradleDaemonMemory") val VARIANT_CONSTANT = "ForTest" val userVariantArg = "-Duser.variant=$VARIANT_CONSTANT" - val MEMORY_MAX_GROWTH_LIMIT_KB = 500 - val BUILD_COUNT = 15 + val MEMORY_MAX_GROWTH_LIMIT_KB = 5000 + val BUILD_COUNT = 10 val reportMemoryUsage = "-Dkotlin.gradle.test.report.memory.usage=true" val options = BaseGradleIT.BuildOptions(withDaemon = true) @@ -32,10 +32,11 @@ class GradleDaemonMemoryIT : BaseGradleIT() { fun buildAndGetMemoryAfterBuild(): Int { var reportedMemory: Int? = null - project.build(userVariantArg, reportMemoryUsage, "clean", "build", options = options) { + project.build(userVariantArg, reportMemoryUsage, "clean", "assemble", options = options) { assertSuccessful() val matches = "\\[KOTLIN\\]\\[PERF\\] Used memory after build: (\\d+) kb \\(difference since build start: ([+-]?\\d+) kb\\)" .toRegex().find(output) + assertTasksExecuted(":compileKotlin") assert(matches != null && matches.groups.size == 3) { "Used memory after build is not reported by plugin" } reportedMemory = matches!!.groupValues[1].toInt() } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/build.gradle new file mode 100644 index 00000000000..18166d4531a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/build.gradle @@ -0,0 +1,24 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: "kotlin" + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-runtime:$kotlin_version" +} + +task exit << { + System.exit(0) +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/gradle.properties new file mode 100644 index 00000000000..93ce6a94e63 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/src/main/kotlin/Dummy.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/src/main/kotlin/Dummy.kt new file mode 100644 index 00000000000..d7525788d4a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/gradleDaemonMemory/src/main/kotlin/Dummy.kt @@ -0,0 +1,6 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +class Dummy diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle index 645bfeda307..2739c96398f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle @@ -24,7 +24,3 @@ dependencies { test { useTestNG() } - -task exit << { - System.exit(0) -}