[m2crypto] Let the kernel allocate free ports for use by the test suite
Miloslav Trmac
mitr at fedoraproject.org
Mon Jan 6 22:56:17 UTC 2014
commit 940eeaadc18cf012f865c2f4cc1a9d63823e1c97
Author: Miloslav Trmač <mitr at redhat.com>
Date: Mon Jan 6 23:51:02 2014 +0100
Let the kernel allocate free ports for use by the test suite
m2crypto-0.21.1-tests-random-ports.patch | 216 ++++++++++++++++++++++++++++++
m2crypto.spec | 5 +
2 files changed, 221 insertions(+), 0 deletions(-)
---
diff --git a/m2crypto-0.21.1-tests-random-ports.patch b/m2crypto-0.21.1-tests-random-ports.patch
new file mode 100644
index 0000000..ecca9fa
--- /dev/null
+++ b/m2crypto-0.21.1-tests-random-ports.patch
@@ -0,0 +1,216 @@
+Pouze v M2Crypto-0.21.1: randpool.dat
+diff -ur M2Crypto/tests/test_bio_ssl.py M2Crypto-0.21.1/tests/test_bio_ssl.py
+--- M2Crypto/tests/test_bio_ssl.py 2011-01-15 20:10:05.000000000 +0100
++++ M2Crypto-0.21.1/tests/test_bio_ssl.py 2014-01-06 23:31:47.709383892 +0100
+@@ -11,7 +11,7 @@
+ from M2Crypto import Rand
+ from M2Crypto import threading as m2threading
+
+-from test_ssl import srv_host, srv_port
++from test_ssl import srv_host, allocate_srv_port
+
+ class HandshakeClient(threading.Thread):
+
+@@ -113,6 +113,7 @@
+ conn.set_bio(readbio, writebio)
+ conn.set_accept_state()
+ handshake_complete = False
++ srv_port = allocate_srv_port()
+ sock = socket.socket()
+ sock.bind((srv_host, srv_port))
+ sock.listen(5)
+diff -ur M2Crypto/tests/test_ssl.py M2Crypto-0.21.1/tests/test_ssl.py
+--- M2Crypto/tests/test_ssl.py 2014-01-06 22:49:57.961307007 +0100
++++ M2Crypto-0.21.1/tests/test_ssl.py 2014-01-06 23:30:13.856457390 +0100
+@@ -26,7 +26,16 @@
+ from fips import fips_mode
+
+ srv_host = 'localhost'
+-srv_port = 64000
++
++def allocate_srv_port():
++ s = socket.socket()
++ try:
++ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
++ s.bind((srv_host, 0))
++ (host, port) = s.getsockname()
++ finally:
++ s.close()
++ return port
+
+ def verify_cb_new_function(ok, store):
+ try:
+@@ -113,17 +122,13 @@
+
+ def setUp(self):
+ self.srv_host = srv_host
+- self.srv_port = srv_port
+- self.srv_addr = (srv_host, srv_port)
+- self.srv_url = 'https://%s:%s/' % (srv_host, srv_port)
++ self.srv_port = allocate_srv_port()
++ self.srv_addr = (srv_host, self.srv_port)
++ self.srv_url = 'https://%s:%s/' % (srv_host, self.srv_port)
+ self.args = ['s_server', '-quiet', '-www',
+ #'-cert', 'server.pem', Implicitly using this
+ '-accept', str(self.srv_port)]
+
+- def tearDown(self):
+- global srv_port
+- srv_port = srv_port - 1
+-
+
+ class PassSSLClientTestCase(BaseSSLClientTestCase):
+
+@@ -136,7 +141,7 @@
+ pid = self.start_server(self.args)
+ try:
+ from M2Crypto import httpslib
+- c = httpslib.HTTPSConnection(srv_host, srv_port)
++ c = httpslib.HTTPSConnection(srv_host, self.srv_port)
+ c.request('GET', '/')
+ data = c.getresponse().read()
+ c.close()
+@@ -153,7 +158,7 @@
+ ctx.load_cert('tests/x509.pem')
+ ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 1)
+ ctx.set_session_cache_mode(m2.SSL_SESS_CACHE_CLIENT)
+- c = httpslib.HTTPSConnection(srv_host, srv_port, ssl_context=ctx)
++ c = httpslib.HTTPSConnection(srv_host, self.srv_port, ssl_context=ctx)
+ c.request('GET', '/')
+ ses = c.get_session()
+ t = ses.as_text()
+@@ -166,7 +171,7 @@
+ ctx2.load_cert('tests/x509.pem')
+ ctx2.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 1)
+ ctx2.set_session_cache_mode(m2.SSL_SESS_CACHE_CLIENT)
+- c2 = httpslib.HTTPSConnection(srv_host, srv_port, ssl_context=ctx2)
++ c2 = httpslib.HTTPSConnection(srv_host, self.srv_port, ssl_context=ctx2)
+ c2.set_session(ses)
+ c2.request('GET', '/')
+ ses2 = c2.get_session()
+@@ -186,7 +191,7 @@
+ ctx = SSL.Context()
+ ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9)
+ ctx.load_verify_locations('tests/ca.pem')
+- c = httpslib.HTTPSConnection(srv_host, srv_port, ssl_context=ctx)
++ c = httpslib.HTTPSConnection(srv_host, self.srv_port, ssl_context=ctx)
+ c.request('GET', '/')
+ data = c.getresponse().read()
+ c.close()
+@@ -201,7 +206,7 @@
+ ctx = SSL.Context()
+ ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9)
+ ctx.load_verify_locations('tests/server.pem')
+- c = httpslib.HTTPSConnection(srv_host, srv_port, ssl_context=ctx)
++ c = httpslib.HTTPSConnection(srv_host, self.srv_port, ssl_context=ctx)
+ self.assertRaises(SSL.SSLError, c.request, 'GET', '/')
+ c.close()
+ finally:
+@@ -211,7 +216,7 @@
+ pid = self.start_server(self.args)
+ try:
+ from M2Crypto import httpslib
+- c = httpslib.HTTPS(srv_host, srv_port)
++ c = httpslib.HTTPS(srv_host, self.srv_port)
+ c.putrequest('GET', '/')
+ c.putheader('Accept', 'text/html')
+ c.putheader('Accept', 'text/plain')
+@@ -232,7 +237,7 @@
+ ctx = SSL.Context()
+ ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9)
+ ctx.load_verify_locations('tests/ca.pem')
+- c = httpslib.HTTPS(srv_host, srv_port, ssl_context=ctx)
++ c = httpslib.HTTPS(srv_host, self.srv_port, ssl_context=ctx)
+ c.putrequest('GET', '/')
+ c.putheader('Accept', 'text/html')
+ c.putheader('Accept', 'text/plain')
+@@ -253,7 +258,7 @@
+ ctx = SSL.Context()
+ ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9)
+ ctx.load_verify_locations('tests/server.pem')
+- c = httpslib.HTTPS(srv_host, srv_port, ssl_context=ctx)
++ c = httpslib.HTTPS(srv_host, self.srv_port, ssl_context=ctx)
+ c.putrequest('GET', '/')
+ c.putheader('Accept', 'text/html')
+ c.putheader('Accept', 'text/plain')
+@@ -871,7 +876,7 @@
+ from M2Crypto import m2urllib
+ url = m2urllib.FancyURLopener()
+ url.addheader('Connection', 'close')
+- u = url.open('https://%s:%s/' % (srv_host, srv_port))
++ u = url.open('https://%s:%s/' % (srv_host, self.srv_port))
+ data = u.read()
+ u.close()
+ finally:
+@@ -896,7 +901,7 @@
+ from M2Crypto import m2urllib2
+ opener = m2urllib2.build_opener()
+ opener.addheaders = [('Connection', 'close')]
+- u = opener.open('https://%s:%s/' % (srv_host, srv_port))
++ u = opener.open('https://%s:%s/' % (srv_host, self.srv_port))
+ data = u.read()
+ u.close()
+ finally:
+@@ -913,7 +918,7 @@
+ from M2Crypto import m2urllib2
+ opener = m2urllib2.build_opener(ctx)
+ opener.addheaders = [('Connection', 'close')]
+- u = opener.open('https://%s:%s/' % (srv_host, srv_port))
++ u = opener.open('https://%s:%s/' % (srv_host, self.srv_port))
+ data = u.read()
+ u.close()
+ finally:
+@@ -930,7 +935,7 @@
+ from M2Crypto import m2urllib2
+ opener = m2urllib2.build_opener(ctx)
+ opener.addheaders = [('Connection', 'close')]
+- self.assertRaises(SSL.SSLError, opener.open, 'https://%s:%s/' % (srv_host, srv_port))
++ self.assertRaises(SSL.SSLError, opener.open, 'https://%s:%s/' % (srv_host, self.srv_port))
+ finally:
+ self.stop_server(pid)
+
+@@ -942,7 +947,7 @@
+ from M2Crypto import m2urllib2
+ opener = m2urllib2.build_opener(ctx, m2urllib2.HTTPBasicAuthHandler())
+ m2urllib2.install_opener(opener)
+- req = m2urllib2.Request('https://%s:%s/' % (srv_host, srv_port))
++ req = m2urllib2.Request('https://%s:%s/' % (srv_host, self.srv_port))
+ u = m2urllib2.urlopen(req)
+ data = u.read()
+ u.close()
+@@ -963,7 +968,7 @@
+ import gc
+ from M2Crypto import m2urllib2
+ o = m2urllib2.build_opener()
+- r = o.open('https://%s:%s/' % (srv_host, srv_port))
++ r = o.open('https://%s:%s/' % (srv_host, self.srv_port))
+ s = [r.fp._sock.fp]
+ r.close()
+ self.assertEqual(len(gc.get_referrers(s[0])), 1)
+@@ -990,7 +995,7 @@
+ pid = self.start_server(self.args)
+ try:
+ from M2Crypto import httpslib
+- c = httpslib.HTTPS(srv_host, srv_port)
++ c = httpslib.HTTPS(srv_host, self.srv_port)
+ c.putrequest('GET', '/')
+ c.putheader('Accept', 'text/html')
+ c.putheader('Accept', 'text/plain')
+@@ -1029,7 +1034,7 @@
+ pid = self.start_server(self.args)
+ try:
+ from M2Crypto import httpslib
+- c = httpslib.HTTPS(srv_host, srv_port)
++ c = httpslib.HTTPS(srv_host, self.srv_port)
+ c.putrequest('GET', '/' + FIFO_NAME)
+ c.putheader('Accept', 'text/html')
+ c.putheader('Accept', 'text/plain')
+@@ -1086,7 +1091,7 @@
+
+ contextFactory = ContextFactory()
+ factory = EchoClientFactory()
+- wrapper.connectSSL(srv_host, srv_port, factory, contextFactory)
++ wrapper.connectSSL(srv_host, self.srv_port, factory, contextFactory)
+ reactor.run() # This will block until reactor.stop() is called
+ finally:
+ self.stop_server(pid)
diff --git a/m2crypto.spec b/m2crypto.spec
index 7c61bb8..7a3123a 100644
--- a/m2crypto.spec
+++ b/m2crypto.spec
@@ -40,6 +40,8 @@ Patch13: m2crypto-0.21.1-supported-ec.patch
Patch14: m2crypto-0.21.1-tests-no-SIGHUP.patch
# https://bugzilla.osafoundation.org/show_bug.cgi?id=13103
Patch15: m2crypto-0.21.1-tests-no-export-ciphers.patch
+# https://bugzilla.osafoundation.org/show_bug.cgi?id=13104
+Patch16: m2crypto-0.21.1-tests-random-ports.patch
License: MIT
Group: System Environment/Libraries
URL: http://wiki.osafoundation.org/bin/view/Projects/MeTooCrypto
@@ -71,6 +73,7 @@ openssl x509 -in tests/x509.pem -out tests/x509.der -outform DER
%patch13 -p1 -b .supported-ec
%patch14 -p1 -b .tests-no-SIGHUP
%patch15 -p1 -b .tests-no-export-ciphers
+%patch16 -p1 -b .tests-random-ports
# Red Hat opensslconf.h #includes an architecture-specific file, but SWIG
# doesn't follow the #include.
@@ -138,6 +141,8 @@ rm tests/*.{pem,py}.* # Patch backup files
* Mon Jan 6 2014 Miloslav Trmač <mitr at redhat.com> - 0.21.1-14
- Don't assume that export ciphers are enabled in the test suite
Resolves: #1048887
+- Let the kernel allocate free ports for use by the test suite
+ Resolves: #1048887
* Wed Dec 18 2013 Miloslav Trmač <mitr at redhat.com> - 0.21.1-13
- Use only ECC curves available in Fedora in the test suite
More information about the scm-commits
mailing list