summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@stuvel.eu>2016-01-22 11:01:39 +0100
committerSybren A. Stüvel <sybren@stuvel.eu>2016-01-22 11:01:39 +0100
commita26f518df5eb42d004c0fc19dfdb630aecb182f7 (patch)
treec3891b22cccfab224fa989f1a66656c04126318e
parent2e900cae53f69c660b782b6d49234b6ca7b2379e (diff)
downloadrsa-git-a26f518df5eb42d004c0fc19dfdb630aecb182f7.tar.gz
Fix #27: Close Pipes at parallel version of genprime.
Now closing pipes after reading result, and added a unittest.
-rw-r--r--rsa/parallel.py14
-rw-r--r--tests/test_parallel.py20
2 files changed, 29 insertions, 5 deletions
diff --git a/rsa/parallel.py b/rsa/parallel.py
index e5034ac..17a10ed 100644
--- a/rsa/parallel.py
+++ b/rsa/parallel.py
@@ -65,11 +65,15 @@ def getprime(nbits, poolsize):
(pipe_recv, pipe_send) = mp.Pipe(duplex=False)
# Create processes
- procs = [mp.Process(target=_find_prime, args=(nbits, pipe_send))
- for _ in range(poolsize)]
- [p.start() for p in procs]
-
- result = pipe_recv.recv()
+ try:
+ procs = [mp.Process(target=_find_prime, args=(nbits, pipe_send))
+ for _ in range(poolsize)]
+ [p.start() for p in procs]
+
+ result = pipe_recv.recv()
+ finally:
+ pipe_recv.close()
+ pipe_send.close()
[p.terminate() for p in procs]
diff --git a/tests/test_parallel.py b/tests/test_parallel.py
new file mode 100644
index 0000000..1a69e9e
--- /dev/null
+++ b/tests/test_parallel.py
@@ -0,0 +1,20 @@
+"""Test for multiprocess prime generation."""
+
+import unittest
+
+import rsa.prime
+import rsa.parallel
+import rsa.common
+
+
+class ParallelTest(unittest.TestCase):
+ """Tests for multiprocess prime generation."""
+
+ def test_parallel_primegen(self):
+ p = rsa.parallel.getprime(1024, 3)
+
+ self.assertFalse(rsa.prime.is_prime(p - 1))
+ self.assertTrue(rsa.prime.is_prime(p))
+ self.assertFalse(rsa.prime.is_prime(p + 1))
+
+ self.assertEqual(1024, rsa.common.bit_size(p))