diff --git a/python/testData/debug/test_multiprocess_2.py b/python/testData/debug/test_multiprocess_2.py new file mode 100644 index 000000000000..4a63493ee332 --- /dev/null +++ b/python/testData/debug/test_multiprocess_2.py @@ -0,0 +1,11 @@ +from __future__ import with_statement +import multiprocessing + + +def f(x): + return x*x # breakpoint + + +if __name__ == '__main__': + with multiprocessing.Pool() as p: + print(p.map(f, [1, 2, 3])) diff --git a/python/testSrc/com/jetbrains/env/debug/PythonDebuggerMultiprocessingTest.java b/python/testSrc/com/jetbrains/env/debug/PythonDebuggerMultiprocessingTest.java index dc3c38d27871..a78df528a841 100644 --- a/python/testSrc/com/jetbrains/env/debug/PythonDebuggerMultiprocessingTest.java +++ b/python/testSrc/com/jetbrains/env/debug/PythonDebuggerMultiprocessingTest.java @@ -13,9 +13,11 @@ import org.junit.Assume; import org.junit.Test; import java.util.Collections; +import java.util.HashSet; import java.util.Set; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class PythonDebuggerMultiprocessingTest extends PyEnvTestCase { @@ -300,4 +302,42 @@ public class PythonDebuggerMultiprocessingTest extends PyEnvTestCase { } }); } + + @Test + @TestFor(issues = "PY-65353") + public void testDebuggerStopsOnBreakpointInEveryProcess() { + runPythonTest(new PyDebuggerMultiprocessTask("/debug", "test_multiprocess_2.py") { + @Override + public void before() { + toggleBreakpoint(5); + } + + @Override + public void testing() throws Exception { + var expectedValues = new HashSet(); + for (int i = 0; i < 3; i++) { + expectedValues.add(Integer.toString(i)); + } + + waitForPause(); + var first = eval("x").getValue(); + assertTrue(expectedValues.contains(first)); + expectedValues.remove(first); + resume(); + + waitForPause(); + var second = eval("x").getValue(); + assertTrue(expectedValues.contains(second)); + expectedValues.remove(second); + resume(); + + waitForPause(); + var third = eval("x").getValue(); + assertTrue(expectedValues.contains(third)); + resume(); + + waitForTerminate(); + } + }); + } }