diff --git a/OpenSSL/test/test_crypto.py b/OpenSSL/test/test_crypto.py
index c9fc12b..32644a5 100644
--- a/OpenSSL/test/test_crypto.py
+++ b/OpenSSL/test/test_crypto.py
@@ -1025,6 +1025,28 @@
         self.assertEqual(cert.get_notAfter(), "20170611123658Z")
 
 
+    def test_gmtime_adj_notBefore(self):
+        """
+        L{X509Type.gmtime_adj_notBefore} changes the not-before timestamp to be
+        the current time plus the number of seconds passed in.
+        """
+        cert = load_certificate(FILETYPE_PEM, self.pemData)
+        now = datetime.utcnow() + timedelta(seconds=100)
+        cert.gmtime_adj_notBefore(100)
+        self.assertEqual(cert.get_notBefore(), now.strftime("%Y%m%d%H%M%SZ"))
+
+
+    def test_gmtime_adj_notAfter(self):
+        """
+        L{X509Type.gmtime_adj_notAfter} changes the not-after timestamp to be
+        the current time plus the number of seconds passed in.
+        """
+        cert = load_certificate(FILETYPE_PEM, self.pemData)
+        now = datetime.utcnow() + timedelta(seconds=100)
+        cert.gmtime_adj_notAfter(100)
+        self.assertEqual(cert.get_notAfter(), now.strftime("%Y%m%d%H%M%SZ"))
+
+
     def test_digest(self):
         """
         L{X509.digest} returns a string giving ":"-separated hex-encoded words
@@ -1036,6 +1058,109 @@
             "A8:EB:07:F8:53:25:0A:F2:56:05:C5:A5:C4:C4:C7:15")
 
 
+    def test_get_subject_wrong_args(self):
+        """
+        L{X509.get_subject} raises L{TypeError} if called with any arguments.
+        """
+        cert = X509()
+        self.assertRaises(TypeError, cert.get_subject, None)
+
+
+    def test_get_subject(self):
+        """
+        L{X509.get_subject} returns an L{X509Name} instance.
+        """
+        cert = load_certificate(FILETYPE_PEM, self.pemData)
+        subj = cert.get_subject()
+        self.assertTrue(isinstance(subj, X509Name))
+        self.assertEquals(
+            subj.get_components(),
+            [('C', 'US'), ('ST', 'IL'), ('L', 'Chicago'),
+             ('O', 'Testing'), ('CN', 'Testing Root CA')])
+
+
+    def test_set_subject_wrong_args(self):
+        """
+        L{X509.set_subject} raises a L{TypeError} if called with the wrong
+        number of arguments or an argument not of type L{X509Name}.
+        """
+        cert = X509()
+        self.assertRaises(TypeError, cert.set_subject)
+        self.assertRaises(TypeError, cert.set_subject, None)
+        self.assertRaises(TypeError, cert.set_subject, cert.get_subject(), None)
+
+
+    def test_set_subject(self):
+        """
+        L{X509.set_subject} changes the subject of the certificate to the one
+        passed in.
+        """
+        cert = X509()
+        name = cert.get_subject()
+        name.C = 'AU'
+        name.O = 'Unit Tests'
+        cert.set_subject(name)
+        self.assertEquals(
+            cert.get_subject().get_components(),
+            [('C', 'AU'), ('O', 'Unit Tests')])
+
+
+    def test_get_issuer_wrong_args(self):
+        """
+        L{X509.get_issuer} raises L{TypeError} if called with any arguments.
+        """
+        cert = X509()
+        self.assertRaises(TypeError, cert.get_issuer, None)
+
+
+    def test_get_issuer(self):
+        """
+        L{X509.get_issuer} returns an L{X509Name} instance.
+        """
+        cert = load_certificate(FILETYPE_PEM, self.pemData)
+        subj = cert.get_issuer()
+        self.assertTrue(isinstance(subj, X509Name))
+        self.assertEquals(
+            subj.get_components(),
+            [('C', 'US'), ('ST', 'IL'), ('L', 'Chicago'),
+             ('O', 'Testing'), ('CN', 'Testing Root CA')])
+
+
+    def test_set_issuer_wrong_args(self):
+        """
+        L{X509.set_issuer} raises a L{TypeError} if called with the wrong
+        number of arguments or an argument not of type L{X509Name}.
+        """
+        cert = X509()
+        self.assertRaises(TypeError, cert.set_issuer)
+        self.assertRaises(TypeError, cert.set_issuer, None)
+        self.assertRaises(TypeError, cert.set_issuer, cert.get_issuer(), None)
+
+
+    def test_set_issuer(self):
+        """
+        L{X509.set_issuer} changes the issuer of the certificate to the one
+        passed in.
+        """
+        cert = X509()
+        name = cert.get_issuer()
+        name.C = 'AU'
+        name.O = 'Unit Tests'
+        cert.set_issuer(name)
+        self.assertEquals(
+            cert.get_issuer().get_components(),
+            [('C', 'AU'), ('O', 'Unit Tests')])
+
+
+    def test_get_pubkey_uninitialized(self):
+        """
+        When called on a certificate with no public key, L{X509.get_pubkey}
+        raises L{OpenSSL.crypto.Error}.
+        """
+        cert = X509()
+        self.assertRaises(Error, cert.get_pubkey)
+
+
 
 class PKCS12Tests(TestCase):
     """
