From 6d49aa0428c00a5a1f63e0cae7ce86d1e390a0d3 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Tue, 24 Jun 2025 18:38:41 +0200 Subject: [PATCH] Python: do not use `runTest` as it breaks timeouts GitOrigin-RevId: 464ee141a4adb8cf73258203305741eef15dc1a7 --- python/testSrc/com/jetbrains/env/PySdkFlavorTest.kt | 3 ++- .../env/python/PipPackageManagerTestBase.kt | 3 ++- .../env/python/conda/PyAddCondaPanelModelTest.kt | 11 ++++++----- .../com/jetbrains/env/python/conda/PyCondaSdkTest.kt | 10 ++++++---- .../com/jetbrains/env/python/conda/PyCondaTest.kt | 12 +++++++----- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/python/testSrc/com/jetbrains/env/PySdkFlavorTest.kt b/python/testSrc/com/jetbrains/env/PySdkFlavorTest.kt index e79434e396d2..f38c12e87d5a 100644 --- a/python/testSrc/com/jetbrains/env/PySdkFlavorTest.kt +++ b/python/testSrc/com/jetbrains/env/PySdkFlavorTest.kt @@ -2,6 +2,7 @@ package com.jetbrains.env import com.intellij.testFramework.ProjectRule +import com.intellij.testFramework.common.timeoutRunBlocking import com.jetbrains.env.python.PySDKRule import com.jetbrains.getPythonBinaryPath import com.jetbrains.python.sdk.sdkSeemsValid @@ -23,7 +24,7 @@ abstract class PySdkFlavorTestBase { @Test - fun testValid(): Unit = runTest(timeout = 2.minutes) { + fun testValid(): Unit = timeoutRunBlocking(2.minutes) { sdkRule.sdk.getPythonBinaryPath(projectRule.project).getOrThrow() repeat(1000) { Assert.assertTrue(sdkRule.sdk.sdkSeemsValid) diff --git a/python/testSrc/com/jetbrains/env/python/PipPackageManagerTestBase.kt b/python/testSrc/com/jetbrains/env/python/PipPackageManagerTestBase.kt index bd64f0273c34..6d75f1e3ac83 100644 --- a/python/testSrc/com/jetbrains/env/python/PipPackageManagerTestBase.kt +++ b/python/testSrc/com/jetbrains/env/python/PipPackageManagerTestBase.kt @@ -2,6 +2,7 @@ package com.jetbrains.env.python import com.intellij.testFramework.ProjectRule +import com.intellij.testFramework.common.timeoutRunBlocking import com.jetbrains.python.packaging.pip.PipPythonPackageManager import kotlinx.coroutines.test.runTest import org.hamcrest.MatcherAssert.assertThat @@ -22,7 +23,7 @@ abstract class PipPackageManagerTestBase { protected abstract val sdkRule: PySDKRule @Test - fun testList(): Unit = runTest(timeout = 5.minutes) { + fun testList(): Unit = timeoutRunBlocking(5.minutes) { PipPythonPackageManager(projectRule.project, sdkRule.sdk).apply { assertThat("No packages return", reloadPackages().successOrNull, not(empty())) assertThat("Installed packages shouldn't be empty", listInstalledPackages(), not(empty())) diff --git a/python/testSrc/com/jetbrains/env/python/conda/PyAddCondaPanelModelTest.kt b/python/testSrc/com/jetbrains/env/python/conda/PyAddCondaPanelModelTest.kt index a55974bd9c93..0033814d70a0 100644 --- a/python/testSrc/com/jetbrains/env/python/conda/PyAddCondaPanelModelTest.kt +++ b/python/testSrc/com/jetbrains/env/python/conda/PyAddCondaPanelModelTest.kt @@ -7,6 +7,7 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.util.registry.Registry import com.intellij.platform.util.progress.RawProgressReporter import com.intellij.testFramework.ProjectRule +import com.intellij.testFramework.common.timeoutRunBlocking import com.jetbrains.getPythonVersion import com.jetbrains.python.PyBundle import com.jetbrains.python.errorProcessing.asKotlinResult @@ -64,7 +65,7 @@ class PyAddCondaPanelModelTest { @Test - fun testCondaDetection(): Unit = runTest(timeout = timeout) { + fun testCondaDetection(): Unit = timeoutRunBlocking(timeout) { val model = PyAddCondaPanelModel(null, emptyList(), projectRule.project) model.detectConda(coroutineContext) val detectedPath = model.condaPathTextBoxRwProp.get() @@ -74,7 +75,7 @@ class PyAddCondaPanelModelTest { } @Test - fun testCondaCreateNewEnv(): Unit = runTest(timeout = timeout) { + fun testCondaCreateNewEnv(): Unit = timeoutRunBlocking(timeout) { val condaName = "someNewCondaEnv" val model = PyAddCondaPanelModel(null, emptyList(), projectRule.project) model.condaPathTextBoxRwProp.set(condaRule.condaPath.toString()) @@ -97,7 +98,7 @@ class PyAddCondaPanelModelTest { } @Test - fun testCondaCantUseNameUsedAlready(): Unit = runTest(timeout = timeout) { + fun testCondaCantUseNameUsedAlready(): Unit = timeoutRunBlocking(timeout) { val name = "cond_env_" + Math.random().toString().replace('.', '_') // Create env @@ -118,7 +119,7 @@ class PyAddCondaPanelModelTest { } @Test - fun testCondaUseExistingEnv(): Unit = runTest(timeout = timeout) { + fun testCondaUseExistingEnv(): Unit = timeoutRunBlocking(timeout) { val model = PyAddCondaPanelModel(null, emptyList(), projectRule.project) model.condaPathTextBoxRwProp.set(condaRule.condaPath.toString()) model.onLoadEnvsClicked(coroutineContext) @@ -131,7 +132,7 @@ class PyAddCondaPanelModelTest { } @Test - fun testCondaModelValidation(): Unit = runTest(timeout = timeout) { + fun testCondaModelValidation(): Unit = timeoutRunBlocking(timeout) { val model = PyAddCondaPanelModel(null, emptyList(), projectRule.project) Assert.assertNotNull("No validation error, even though path not set", model.getValidationError()) diff --git a/python/testSrc/com/jetbrains/env/python/conda/PyCondaSdkTest.kt b/python/testSrc/com/jetbrains/env/python/conda/PyCondaSdkTest.kt index 405d6cf6d021..a0c0e00aeeef 100644 --- a/python/testSrc/com/jetbrains/env/python/conda/PyCondaSdkTest.kt +++ b/python/testSrc/com/jetbrains/env/python/conda/PyCondaSdkTest.kt @@ -11,6 +11,7 @@ import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.util.SystemInfoRt import com.intellij.openapi.util.registry.Registry import com.intellij.testFramework.ProjectRule +import com.intellij.testFramework.common.timeoutRunBlocking import com.jetbrains.getPythonBinaryPath import com.jetbrains.getPythonVersion import com.jetbrains.python.getOrThrow @@ -32,6 +33,7 @@ import org.junit.runners.Parameterized import java.io.File import java.nio.file.Files import java.nio.file.Path +import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds /** @@ -76,7 +78,7 @@ internal class PyCondaSdkTest { * When we create fresh local SDK on Windows, it must be patched with env vars, see [fixCondaPathEnvIfNeeded] */ @Test - fun testLocalActivationFix(): Unit = runTest { + fun testLocalActivationFix(): Unit = timeoutRunBlocking(10.minutes) { val script = tempDirRule.newFile() script.writeText(""" @@ -115,7 +117,7 @@ internal class PyCondaSdkTest { } @Test - fun testExecuteCommandOnSdk(): Unit = runTest(timeout = 20.seconds) { + fun testExecuteCommandOnSdk(): Unit = timeoutRunBlocking(20.seconds) { val condaEnv = PyCondaEnv.getEnvs(condaRule.condaPathOnTarget).getOrThrow().first() val sdk = condaRule.condaCommand.createCondaSdkFromExistingEnv(condaEnv.envIdentity, emptyList(), projectRule.project) val request = LocalTargetEnvironmentRequest() @@ -127,7 +129,7 @@ internal class PyCondaSdkTest { } @Test - fun createSdkByFile() = runTest(timeout = 120.seconds) { + fun createSdkByFile() = timeoutRunBlocking(120.seconds) { val newCondaInfo = NewCondaEnvRequest.LocalEnvByLocalEnvironmentFile(yamlRule.yamlFilePath) val sdk = condaRule.condaCommand.createCondaSdkAlongWithNewEnv(newCondaInfo, coroutineContext, emptyList(), projectRule.project).getOrThrow() @@ -138,7 +140,7 @@ internal class PyCondaSdkTest { } @Test - fun testCreateFromExisting() = runTest { + fun testCreateFromExisting() = timeoutRunBlocking(10.minutes) { val env = PyCondaEnv.getEnvs(condaRule.condaPathOnTarget).getOrThrow().first() val sdk = condaRule.condaCommand.createCondaSdkFromExistingEnv(env.envIdentity, emptyList(), projectRule.project) Assert.assertEquals(sdk.getOrCreateAdditionalData().flavor, CondaEnvSdkFlavor.getInstance()) diff --git a/python/testSrc/com/jetbrains/env/python/conda/PyCondaTest.kt b/python/testSrc/com/jetbrains/env/python/conda/PyCondaTest.kt index 4cca1baa48a5..3fc7283c987c 100644 --- a/python/testSrc/com/jetbrains/env/python/conda/PyCondaTest.kt +++ b/python/testSrc/com/jetbrains/env/python/conda/PyCondaTest.kt @@ -10,6 +10,7 @@ import com.intellij.execution.target.local.LocalTargetEnvironmentRequest import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.util.registry.Registry import com.intellij.testFramework.ProjectRule +import com.intellij.testFramework.common.timeoutRunBlocking import com.jetbrains.getPythonVersion import com.jetbrains.python.errorProcessing.asKotlinResult import com.jetbrains.python.getOrThrow @@ -31,6 +32,7 @@ import org.junit.runners.Parameterized.Parameter import org.junit.runners.Parameterized.Parameters import java.nio.file.Path import kotlin.io.path.exists +import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds @RunWith(Parameterized::class) @@ -63,7 +65,7 @@ internal class PyCondaTest { } @Test - fun testBasePython(): Unit = runTest { + fun testBasePython(): Unit = timeoutRunBlocking(10.minutes) { val baseConda = PyCondaEnv.getEnvs(condaRule.condaPathOnTarget).getOrThrow() .first { (it.envIdentity as? PyCondaEnvIdentity.UnnamedEnv)?.isBase == true } val targetRequest = LocalTargetEnvironmentRequest() @@ -85,7 +87,7 @@ internal class PyCondaTest { } @Test - fun testCondaCreateByYaml() = runTest(timeout = 60.seconds) { + fun testCondaCreateByYaml() = timeoutRunBlocking(60.seconds) { PyCondaEnv.createEnv(condaRule.condaCommand, LocalEnvByLocalEnvironmentFile(yamlRule.yamlFilePath)).getOrThrow() val condaEnv = PyCondaEnv.getEnvs(condaRule.condaPathOnTarget) @@ -97,7 +99,7 @@ internal class PyCondaTest { } @Test - fun testCondaCreateEnv(): Unit = runTest(timeout = 20.seconds) { + fun testCondaCreateEnv(): Unit = timeoutRunBlocking(20.seconds) { val envName = "myNewEnvForTests" PyCondaEnv.createEnv(condaRule.condaCommand, EmptyNamedEnv(LanguageLevel.PYTHON39, envName)).getOrThrow() @@ -106,7 +108,7 @@ internal class PyCondaTest { } @Test - fun testCondaListEnvs(): Unit = runTest { + fun testCondaListEnvs(): Unit = timeoutRunBlocking(10.minutes) { val condaEnvs = PyCondaEnv.getEnvs(condaRule.condaPathOnTarget).getOrThrow() Assert.assertTrue("No environments returned", condaEnvs.isNotEmpty()) @@ -129,7 +131,7 @@ internal class PyCondaTest { } @Test - fun testCondaListUnnamedEnvs(): Unit = runTest(timeout = 90.seconds) { + fun testCondaListUnnamedEnvs(): Unit = timeoutRunBlocking(90.seconds) { val envsDirs = Path.of(PyCondaEnv.getEnvsDirs(condaRule.condaPathOnTarget).getOrThrow().first()) val childDir = envsDirs.resolve("child") val childEnvPrefix = childDir.resolve("childEnv").toString()