[Native][tests] Gradle property: ThreadStateChecker
This commit is contained in:
@@ -50,6 +50,7 @@ enum class TestProperty(shortName: String) {
|
|||||||
TEST_MODE("mode"),
|
TEST_MODE("mode"),
|
||||||
OPTIMIZATION_MODE("optimizationMode"),
|
OPTIMIZATION_MODE("optimizationMode"),
|
||||||
MEMORY_MODEL("memoryModel"),
|
MEMORY_MODEL("memoryModel"),
|
||||||
|
USE_THREAD_STATE_CHECKER("useThreadStateChecker"),
|
||||||
USE_CACHE("useCache"),
|
USE_CACHE("useCache"),
|
||||||
EXECUTION_TIMEOUT("executionTimeout");
|
EXECUTION_TIMEOUT("executionTimeout");
|
||||||
|
|
||||||
|
|||||||
+25
-4
@@ -50,20 +50,35 @@ class NativeBlackBoxTestSupport : BeforeEachCallback {
|
|||||||
|
|
||||||
/*************** Test process settings ***************/
|
/*************** Test process settings ***************/
|
||||||
|
|
||||||
private fun ExtensionContext.getOrCreateTestProcessSettings(): TestProcessSettings =
|
private fun ExtensionContext.getOrCreateTestProcessSettings(): TestProcessSettings {
|
||||||
root.getStore(NAMESPACE).getOrComputeIfAbsent(TestProcessSettings::class.java.name) {
|
val optimizationMode = computeOptimizationMode()
|
||||||
|
val memoryModel = computeMemoryModel()
|
||||||
|
|
||||||
|
val threadStateChecker = computeThreadStateChecker()
|
||||||
|
if (threadStateChecker == ThreadStateChecker.ENABLED) {
|
||||||
|
assertEquals(MemoryModel.EXPERIMENTAL, memoryModel) {
|
||||||
|
"Thread state checker can be enabled only with experimental memory model"
|
||||||
|
}
|
||||||
|
assertEquals(OptimizationMode.DEBUG, optimizationMode) {
|
||||||
|
"Thread state checker can be enabled only with debug optimization mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return root.getStore(NAMESPACE).getOrComputeIfAbsent(TestProcessSettings::class.java.name) {
|
||||||
TestProcessSettings(
|
TestProcessSettings(
|
||||||
computeNativeTargets(),
|
computeNativeTargets(),
|
||||||
computeNativeHome(),
|
computeNativeHome(),
|
||||||
computeNativeClassLoader(),
|
computeNativeClassLoader(),
|
||||||
computeTestMode(),
|
computeTestMode(),
|
||||||
computeOptimizationMode(),
|
optimizationMode,
|
||||||
computeMemoryModel(),
|
memoryModel,
|
||||||
|
threadStateChecker,
|
||||||
CacheKind::class to computeCacheKind(),
|
CacheKind::class to computeCacheKind(),
|
||||||
computeBaseDirs(),
|
computeBaseDirs(),
|
||||||
computeTimeouts()
|
computeTimeouts()
|
||||||
)
|
)
|
||||||
}.cast()
|
}.cast()
|
||||||
|
}
|
||||||
|
|
||||||
private fun computeNativeTargets(): KotlinNativeTargets {
|
private fun computeNativeTargets(): KotlinNativeTargets {
|
||||||
val hostTarget = HostManager.host
|
val hostTarget = HostManager.host
|
||||||
@@ -91,6 +106,11 @@ class NativeBlackBoxTestSupport : BeforeEachCallback {
|
|||||||
private fun computeMemoryModel(): MemoryModel =
|
private fun computeMemoryModel(): MemoryModel =
|
||||||
enumSystemProperty(MEMORY_MODEL, MemoryModel.values(), default = MemoryModel.DEFAULT)
|
enumSystemProperty(MEMORY_MODEL, MemoryModel.values(), default = MemoryModel.DEFAULT)
|
||||||
|
|
||||||
|
private fun computeThreadStateChecker(): ThreadStateChecker {
|
||||||
|
val useThreadStateChecker = systemProperty(USE_THREAD_STATE_CHECKER, String::toBooleanStrictOrNull, default = false)
|
||||||
|
return if (useThreadStateChecker) ThreadStateChecker.ENABLED else ThreadStateChecker.DISABLED
|
||||||
|
}
|
||||||
|
|
||||||
private fun computeCacheKind(): CacheKind {
|
private fun computeCacheKind(): CacheKind {
|
||||||
val useCache = systemProperty(USE_CACHE, String::toBooleanStrictOrNull, default = true)
|
val useCache = systemProperty(USE_CACHE, String::toBooleanStrictOrNull, default = true)
|
||||||
return if (useCache) CacheKind.WithStaticCache else CacheKind.WithoutCache
|
return if (useCache) CacheKind.WithStaticCache else CacheKind.WithoutCache
|
||||||
@@ -138,6 +158,7 @@ class NativeBlackBoxTestSupport : BeforeEachCallback {
|
|||||||
private const val TEST_MODE = "kotlin.internal.native.test.mode"
|
private const val TEST_MODE = "kotlin.internal.native.test.mode"
|
||||||
private const val OPTIMIZATION_MODE = "kotlin.internal.native.test.optimizationMode"
|
private const val OPTIMIZATION_MODE = "kotlin.internal.native.test.optimizationMode"
|
||||||
private const val MEMORY_MODEL = "kotlin.internal.native.test.memoryModel"
|
private const val MEMORY_MODEL = "kotlin.internal.native.test.memoryModel"
|
||||||
|
private const val USE_THREAD_STATE_CHECKER = "kotlin.internal.native.test.useThreadStateChecker"
|
||||||
private const val USE_CACHE = "kotlin.internal.native.test.useCache"
|
private const val USE_CACHE = "kotlin.internal.native.test.useCache"
|
||||||
private const val EXECUTION_TIMEOUT = "kotlin.internal.native.test.executionTimeout"
|
private const val EXECUTION_TIMEOUT = "kotlin.internal.native.test.executionTimeout"
|
||||||
private const val PROJECT_BUILD_DIR = "PROJECT_BUILD_DIR"
|
private const val PROJECT_BUILD_DIR = "PROJECT_BUILD_DIR"
|
||||||
|
|||||||
+4
@@ -52,6 +52,7 @@ internal class TestCompilationFactory {
|
|||||||
classLoader = settings.get(),
|
classLoader = settings.get(),
|
||||||
optimizationMode = settings.get(),
|
optimizationMode = settings.get(),
|
||||||
memoryModel = settings.get(),
|
memoryModel = settings.get(),
|
||||||
|
threadStateChecker = settings.get(),
|
||||||
freeCompilerArgs = freeCompilerArgs,
|
freeCompilerArgs = freeCompilerArgs,
|
||||||
sourceModules = rootModules,
|
sourceModules = rootModules,
|
||||||
dependencies = TestCompilationDependencies(libraries = libraries, friends = friends),
|
dependencies = TestCompilationDependencies(libraries = libraries, friends = friends),
|
||||||
@@ -95,6 +96,7 @@ internal class TestCompilationFactory {
|
|||||||
classLoader = settings.get(),
|
classLoader = settings.get(),
|
||||||
optimizationMode = settings.get(),
|
optimizationMode = settings.get(),
|
||||||
memoryModel = settings.get(),
|
memoryModel = settings.get(),
|
||||||
|
threadStateChecker = settings.get(),
|
||||||
freeCompilerArgs = freeCompilerArgs,
|
freeCompilerArgs = freeCompilerArgs,
|
||||||
sourceModules = sourceModules,
|
sourceModules = sourceModules,
|
||||||
dependencies = TestCompilationDependencies(libraries = libraries, friends = friends),
|
dependencies = TestCompilationDependencies(libraries = libraries, friends = friends),
|
||||||
@@ -245,6 +247,7 @@ private class TestCompilationImpl(
|
|||||||
private val classLoader: KotlinNativeClassLoader,
|
private val classLoader: KotlinNativeClassLoader,
|
||||||
private val optimizationMode: OptimizationMode,
|
private val optimizationMode: OptimizationMode,
|
||||||
private val memoryModel: MemoryModel,
|
private val memoryModel: MemoryModel,
|
||||||
|
private val threadStateChecker: ThreadStateChecker,
|
||||||
private val freeCompilerArgs: TestCompilerArgs,
|
private val freeCompilerArgs: TestCompilerArgs,
|
||||||
private val sourceModules: Collection<TestModule>,
|
private val sourceModules: Collection<TestModule>,
|
||||||
private val dependencies: TestCompilationDependencies,
|
private val dependencies: TestCompilationDependencies,
|
||||||
@@ -272,6 +275,7 @@ private class TestCompilationImpl(
|
|||||||
)
|
)
|
||||||
optimizationMode.compilerFlag?.let { compilerFlag -> add(compilerFlag) }
|
optimizationMode.compilerFlag?.let { compilerFlag -> add(compilerFlag) }
|
||||||
memoryModel.compilerFlags?.let { compilerFlags -> add(compilerFlags) }
|
memoryModel.compilerFlags?.let { compilerFlags -> add(compilerFlags) }
|
||||||
|
threadStateChecker.compilerFlag?.let { compilerFlag -> add(compilerFlag) }
|
||||||
|
|
||||||
addFlattened(dependencies.libraries) { library -> listOf("-l", library.resultingArtifactPath) }
|
addFlattened(dependencies.libraries) { library -> listOf("-l", library.resultingArtifactPath) }
|
||||||
dependencies.friends.takeIf(Collection<*>::isNotEmpty)?.let { friends ->
|
dependencies.friends.takeIf(Collection<*>::isNotEmpty)?.let { friends ->
|
||||||
|
|||||||
+2
-1
@@ -119,7 +119,8 @@ internal class TestCompilerArgs(val compilerArgs: List<String>) {
|
|||||||
"-target",
|
"-target",
|
||||||
"-Xinclude",
|
"-Xinclude",
|
||||||
"-g", "-opt",
|
"-g", "-opt",
|
||||||
"-memory-model"
|
"-memory-model",
|
||||||
|
"-Xcheck-state-at-external-calls"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-1
@@ -50,7 +50,7 @@ internal enum class OptimizationMode(private val description: String, val compil
|
|||||||
OPT("Build with optimizations applied", "-opt"),
|
OPT("Build with optimizations applied", "-opt"),
|
||||||
NO("Don't use any specific optimizations", null);
|
NO("Don't use any specific optimizations", null);
|
||||||
|
|
||||||
override fun toString() = description + if (compilerFlag == null) "" else " ($compilerFlag)"
|
override fun toString() = description + compilerFlag?.let { " ($it)" }.orEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal enum class MemoryModel(val compilerFlags: List<String>?) {
|
internal enum class MemoryModel(val compilerFlags: List<String>?) {
|
||||||
@@ -60,6 +60,13 @@ internal enum class MemoryModel(val compilerFlags: List<String>?) {
|
|||||||
override fun toString() = compilerFlags?.joinToString(prefix = "(", separator = " ", postfix = ")").orEmpty()
|
override fun toString() = compilerFlags?.joinToString(prefix = "(", separator = " ", postfix = ")").orEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal enum class ThreadStateChecker(val compilerFlag: String?) {
|
||||||
|
DISABLED(null),
|
||||||
|
ENABLED("-Xcheck-state-at-external-calls");
|
||||||
|
|
||||||
|
override fun toString() = compilerFlag?.let { "($it)" }.orEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current project's directories.
|
* Current project's directories.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user