[Gradle, K/N] Move build cache tests into appropriate class

This commit is contained in:
Alexander.Likhachev
2020-10-16 01:20:57 +03:00
parent a0f4898009
commit f4da283ffb
7 changed files with 45 additions and 124 deletions
@@ -25,11 +25,13 @@ import org.junit.runners.Parameterized
import java.io.File
import kotlin.test.assertEquals
private val DEFAULT_GRADLE_VERSION = GradleVersionRequired.AtLeast("5.6.4")
@RunWith(Parameterized::class)
class BuildCacheRelocationIT : BaseGradleIT() {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("5.6.4")
get() = DEFAULT_GRADLE_VERSION
override fun defaultBuildOptions(): BuildOptions =
super.defaultBuildOptions().copy(
@@ -51,7 +53,7 @@ class BuildCacheRelocationIT : BaseGradleIT() {
val (firstProject, secondProject) = (0..1).map { id ->
workingDir = workingDirs[id]
Project(projectName, directoryPrefix = projectDirectoryPrefix).apply {
Project(projectName, directoryPrefix = projectDirectoryPrefix, gradleVersionRequirement = gradleVersionRequired).apply {
setupWorkingDir()
initProject()
prepareLocalBuildCache(localBuildCacheDirectory)
@@ -69,7 +71,13 @@ class BuildCacheRelocationIT : BaseGradleIT() {
}
workingDir = workingDirs[1]
secondProject.build(*testCase.taskToExecute) {
val alternateBuildEnvOptions = if (withAnotherGradleHome) {
val alternateGradleHome = File(firstProject.projectDir.parentFile, "gradleUserHome")
defaultBuildOptions().copy(gradleUserHome = alternateGradleHome)
} else {
defaultBuildOptions()
}
secondProject.build(*testCase.taskToExecute, options = alternateBuildEnvOptions) {
assertSuccessful()
val secondOutputHashes = hashOutputFiles(outputRoots)
assertEquals(firstOutputHashes, secondOutputHashes)
@@ -86,8 +94,10 @@ class BuildCacheRelocationIT : BaseGradleIT() {
val cacheableTaskNames: List<String>,
val projectDirectoryPrefix: String? = null,
val outputRootPaths: List<String> = listOf("build"),
val initProject: Project.() -> Unit = { },
val taskToExecute: Array<String>
val initProject: Project.() -> Unit = {},
val taskToExecute: Array<String>,
val withAnotherGradleHome: Boolean = false,
val gradleVersionRequired: GradleVersionRequired = DEFAULT_GRADLE_VERSION
) {
override fun toString(): String = (projectDirectoryPrefix?.plus("/") ?: "") + projectName
@@ -158,7 +168,24 @@ class BuildCacheRelocationIT : BaseGradleIT() {
},
outputRootPaths = listOf("app/build"),
initProject = { File(projectDir, "app/build.gradle").appendText("\nkapt.useBuildCache = true") }
)
),
TestCase("native-build-cache",
taskToExecute = arrayOf("build-cache-lib:publish", "build-cache-app:assemble"),
cacheableTaskNames = listOf("build-cache-lib:compileKotlinHost", "build-cache-app:compileKotlinHost",
"build-cache-app:lib-module:compileKotlinHost",
"build-cache-app:linkDebugStaticHost", "build-cache-app:linkDebugSharedHost"),
outputRootPaths = listOf("build-cache-app/build", "build-cache-lib/build", "build-cache-app/lib-module/build"),
initProject = {
val localRepoUri = projectDir.resolve("repo").toURI()
val buildKtsApp = projectDir.resolve("build-cache-app").resolve("build.gradle.kts")
val buildKtsLib = projectDir.resolve("build-cache-lib").resolve("build.gradle.kts")
buildKtsApp.appendText("\nrepositories { maven { setUrl(\"$localRepoUri\") } }")
buildKtsApp.modify(::transformBuildScriptWithPluginsDsl)
buildKtsLib.modify(::transformBuildScriptWithPluginsDsl)
},
withAnotherGradleHome = true,
gradleVersionRequired = GradleVersionRequired.FOR_MPP_SUPPORT
),
).map { arrayOf(it) }
}
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WA
import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_PROPERTY_WARNING
import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_WARNING
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind
import org.jetbrains.kotlin.gradle.prepareLocalBuildCache
import org.jetbrains.kotlin.gradle.transformProjectWithPluginsDsl
import org.jetbrains.kotlin.gradle.util.isWindows
import org.jetbrains.kotlin.gradle.util.modify
@@ -26,7 +25,6 @@ import org.junit.Assume
import org.junit.Ignore
import org.junit.Test
import java.io.File
import java.nio.file.Files
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
@@ -88,8 +86,6 @@ class GeneralNativeIT : BaseGradleIT() {
val nativeHostTargetName = MPPNativeTargets.current
private val buildCacheEnabledOptions = super.defaultBuildOptions().copy(withBuildCache = true)
private fun Project.targetClassesDir(targetName: String, sourceSetName: String = "main") =
classesDir(sourceSet = "$targetName/$sourceSetName")
@@ -142,8 +138,6 @@ class GeneralNativeIT : BaseGradleIT() {
@Test
fun testCanProduceNativeLibraries() = with(transformNativeTestProjectWithPluginDsl("libraries", directoryPrefix = "native-binaries")) {
prepareLocalBuildCache()
val baseName = "native_library"
val sharedPrefix = CompilerOutputKind.DYNAMIC.prefix(HostManager.host)
@@ -180,16 +174,9 @@ class GeneralNativeIT : BaseGradleIT() {
val klibTask = ":compileKotlinHost"
// Building to local build cache
build("assemble", options = buildCacheEnabledOptions) {
build(":assemble") {
assertSuccessful()
assertTasksExecuted(linkTasks + klibTask)
}
// Retrieving from build cache
build(":clean", ":assemble", options = buildCacheEnabledOptions) {
assertSuccessful()
assertTasksRetrievedFromCache(linkTasks + klibTask)
sharedPaths.forEach { assertFileExists(it) }
staticPaths.forEach { assertFileExists(it) }
@@ -225,7 +212,6 @@ class GeneralNativeIT : BaseGradleIT() {
data class BinaryMeta(val name: String, val isStatic: Boolean = false)
val baseName = "main"
val frameworkPrefix = CompilerOutputKind.FRAMEWORK.prefix(HostManager.host)
val frameworkSuffix = CompilerOutputKind.FRAMEWORK.suffix(HostManager.host)
val targets = listOf("ios", "iosSim")
@@ -841,93 +827,4 @@ class GeneralNativeIT : BaseGradleIT() {
}
}
}
@Test
fun testNativeDependenciesBuildCache() {
val libProject = transformNativeTestProjectWithPluginDsl("build-cache-lib", directoryPrefix = "native-build-cache")
val appProject = transformNativeTestProjectWithPluginDsl("build-cache-app", directoryPrefix = "native-build-cache")
val appProjectAltPath = Project("build-cache-app2", directoryPrefix = "native-build-cache")
val libLocalRepoUri = libProject.projectDir.resolve("repo").toURI()
with(libProject) {
prepareLocalBuildCache()
val compileTask = ":compileKotlinHost"
build("assemble", options = buildCacheEnabledOptions) {
assertSuccessful()
assertTasksExecuted(compileTask)
}
build("clean", "publish", options = buildCacheEnabledOptions) {
assertSuccessful()
assertTasksRetrievedFromCache(compileTask)
}
}
val compileAppTasks = listOf(
":compileKotlinHost",
":lib-module:compileKotlinHost",
)
with(appProject) {
prepareLocalBuildCache()
val klibPrefix = CompilerOutputKind.LIBRARY.prefix(HostManager.host)
val klibSuffix = CompilerOutputKind.LIBRARY.suffix(HostManager.host)
val klibPaths = listOf(
"${targetClassesDir("host")}${klibPrefix}app$klibSuffix",
"lib-module/${targetClassesDir("host")}${klibPrefix}lib-module$klibSuffix",
)
gradleBuildScript().appendText("\nrepositories { maven { setUrl(\"$libLocalRepoUri\") } }")
build("assemble", options = buildCacheEnabledOptions) {
assertSuccessful()
assertTasksExecuted(compileAppTasks)
klibPaths.forEach { assertFileExists(it) }
}
build("clean", "assemble", options = buildCacheEnabledOptions) {
assertSuccessful()
assertTasksRetrievedFromCache(compileAppTasks)
klibPaths.forEach { assertFileExists(it) }
}
assertTrue(projectDir.resolve(klibPaths[0]).delete())
build("clean", ":lib-module:assemble") {
assertSuccessful()
assertTasksExecuted(compileAppTasks[1])
}
build("assemble", options = buildCacheEnabledOptions) {
assertSuccessful()
assertTasksRetrievedFromCache(compileAppTasks[0])
assertTasksUpToDate(compileAppTasks[1])
klibPaths.forEach { assertFileExists(it) }
}
build("clean") {
assertSuccessful()
}
}
Files.move(appProject.projectDir.toPath(), appProjectAltPath.projectDir.toPath())
// It's very time-consuming check so on Mac TC agent we test only source relocation
val alternateBuildEnvOptions = if (isTeamCityRun && HostManager.hostIsMac) {
buildCacheEnabledOptions
} else {
val alternateGradleHome = File(appProject.projectDir.parentFile, "gradleUserHome")
buildCacheEnabledOptions.copy(gradleUserHome = alternateGradleHome)
}
with(appProjectAltPath) {
build("assemble", options = alternateBuildEnvOptions) {
assertSuccessful()
assertTasksRetrievedFromCache(compileAppTasks)
}
}
}
}
@@ -8,13 +8,18 @@ repositories {
}
kotlin {
<SingleNativeTarget>("host")
linuxX64("host") {
binaries {
sharedLib(listOf(DEBUG))
staticLib(listOf(DEBUG))
}
}
sourceSets {
val hostMain by getting {
dependencies {
implementation("com.example:build-cache-lib:1.0")
api(project(":lib-module"))
api(project(":build-cache-app:lib-module"))
}
}
}
@@ -8,5 +8,5 @@ repositories {
}
kotlin {
<SingleNativeTarget>("host")
linuxX64("host")
}
@@ -12,11 +12,11 @@ repositories {
}
kotlin {
<SingleNativeTarget>("host")
linuxX64("host")
}
publishing {
repositories {
maven(url = "file://${projectDir.absolutePath.replace('\\', '/')}/repo")
maven(url = "file://${projectDir.absolutePath.replace('\\', '/')}/../repo")
}
}
@@ -1,7 +0,0 @@
pluginManagement {
repositories {
mavenLocal()
jcenter()
gradlePluginPortal()
}
}
@@ -6,5 +6,4 @@ pluginManagement {
}
}
include ":lib-module"
rootProject.name = "app"
include ':build-cache-app:lib-module', ':build-cache-app', ':build-cache-lib'