Refactor openssl launching code
diff --git a/test/test_crypto.py b/test/test_crypto.py
index 71fa08e..b4ae964 100644
--- a/test/test_crypto.py
+++ b/test/test_crypto.py
@@ -5,14 +5,14 @@
 """
 
 from unittest import TestCase, main
-from subprocess import Popen, PIPE 
+from subprocess import Popen, PIPE
 
 from OpenSSL.crypto import TYPE_RSA, TYPE_DSA, Error, PKey, PKeyType
 from OpenSSL.crypto import X509, X509Type, X509Name, X509NameType
 from OpenSSL.crypto import X509Req, X509ReqType
 from OpenSSL.crypto import X509Extension, X509ExtensionType
 from OpenSSL.crypto import load_certificate, load_privatekey
-from OpenSSL.crypto import FILETYPE_PEM, FILETYPE_ASN1, FILETYPE_TEXT 
+from OpenSSL.crypto import FILETYPE_PEM, FILETYPE_ASN1, FILETYPE_TEXT
 from OpenSSL.crypto import dump_certificate, load_certificate_request
 from OpenSSL.crypto import dump_certificate_request, dump_privatekey
 
@@ -726,24 +726,34 @@
         self.assertEqual(loadedKey.type(), key.type())
         self.assertEqual(loadedKey.bits(), key.bits())
 
+
+    def _runopenssl(self, pem, *args):
+        """
+        Run the command line openssl tool with the given arguments and write
+        the given PEM to its stdin.
+        """
+        process = Popen(
+            ("openssl",) + args,
+            stdin=PIPE, stdout=PIPE)
+        return process.communicate(input=str(pem))[0]
+
+
     def test_dump_certificate(self):
         """
         L{dump_certificate} writes PEM, DER, and text.
         """
-        pemData = cleartextCertificatePEM + cleartextPrivateKeyPEM  
+        pemData = cleartextCertificatePEM + cleartextPrivateKeyPEM
         cert = load_certificate(FILETYPE_PEM, pemData)
         dumped_pem = dump_certificate(FILETYPE_PEM, cert)
         self.assertEqual(dumped_pem, cleartextCertificatePEM)
         dumped_der = dump_certificate(FILETYPE_ASN1, cert)
-        good_der = Popen(["openssl", "x509", "-outform", "DER"], \
-           stdin=PIPE, stdout=PIPE).communicate(input=str(dumped_pem))[0]
+        good_der = self._runopenssl(dumped_pem, "x509", "-outform", "DER")
         self.assertEqual(dumped_der, good_der)
         cert2 = load_certificate(FILETYPE_ASN1, dumped_der)
         dumped_pem2 = dump_certificate(FILETYPE_PEM, cert2)
         self.assertEqual(dumped_pem2, cleartextCertificatePEM)
         dumped_text = dump_certificate(FILETYPE_TEXT, cert)
-        good_text = Popen(["openssl", "x509", "-noout", "-text"], \
-           stdin=PIPE, stdout=PIPE).communicate(input=str(dumped_pem))[0]
+        good_text = self._runopenssl(dumped_pem, "x509", "-noout", "-text")
         self.assertEqual(dumped_text, good_text)
 
 
@@ -755,17 +765,17 @@
         dumped_pem = dump_privatekey(FILETYPE_PEM, key)
         self.assertEqual(dumped_pem, cleartextPrivateKeyPEM)
         dumped_der = dump_privatekey(FILETYPE_ASN1, key)
-        good_der = Popen(["openssl", "rsa", "-outform", "DER"], \
-           stdin=PIPE, stdout=PIPE).communicate(input=str(dumped_pem))[0]
+        # XXX This OpenSSL call writes "writing RSA key" to standard out.  Sad.
+        good_der = self._runopenssl(dumped_pem, "rsa", "-outform", "DER")
         self.assertEqual(dumped_der, good_der)
         key2 = load_privatekey(FILETYPE_ASN1, dumped_der)
         dumped_pem2 = dump_privatekey(FILETYPE_PEM, key2)
         self.assertEqual(dumped_pem2, cleartextPrivateKeyPEM)
         dumped_text = dump_privatekey(FILETYPE_TEXT, key)
-        good_text = Popen(["openssl", "rsa", "-noout", "-text"], \
-           stdin=PIPE, stdout=PIPE).communicate(input=str(dumped_pem))[0]
+        good_text = self._runopenssl(dumped_pem, "rsa", "-noout", "-text")
         self.assertEqual(dumped_text, good_text)
 
+
     def test_dump_certificate_request(self):
         """
         L{dump_certificate_request} writes a PEM, DER, and text.
@@ -774,15 +784,13 @@
         dumped_pem = dump_certificate_request(FILETYPE_PEM, req)
         self.assertEqual(dumped_pem, cleartextCertificateRequestPEM)
         dumped_der = dump_certificate_request(FILETYPE_ASN1, req)
-        good_der = Popen(["openssl", "req", "-outform", "DER"], \
-           stdin=PIPE, stdout=PIPE).communicate(input=str(dumped_pem))[0]
+        good_der = self._runopenssl(dumped_pem, "req", "-outform", "DER")
         self.assertEqual(dumped_der, good_der)
         req2 = load_certificate_request(FILETYPE_ASN1, dumped_der)
         dumped_pem2 = dump_certificate_request(FILETYPE_PEM, req2)
         self.assertEqual(dumped_pem2, cleartextCertificateRequestPEM)
         dumped_text = dump_certificate_request(FILETYPE_TEXT, req)
-        good_text = Popen(["openssl", "req", "-noout", "-text"], \
-           stdin=PIPE, stdout=PIPE).communicate(input=str(dumped_pem))[0]
+        good_text = self._runopenssl(dumped_pem, "req", "-noout", "-text")
         self.assertEqual(dumped_text, good_text)
 
 
@@ -808,4 +816,3 @@
 
 if __name__ == '__main__':
     main()
-