diff --git a/OpenSSL/ssl/context.c b/OpenSSL/ssl/context.c
index c8100b4..ef59961 100644
--- a/OpenSSL/ssl/context.c
+++ b/OpenSSL/ssl/context.c
@@ -762,8 +762,10 @@
         return NULL;
 
     bio = BIO_new_file(dhfile, "r");
-    if (bio == NULL)
-        return PyErr_NoMemory();
+    if (bio == NULL) {
+        exception_from_error_queue(ssl_Error);
+        return NULL;
+    }
 
     dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
     SSL_CTX_set_tmp_dh(self->ctx, dh);
diff --git a/OpenSSL/test/test_ssl.py b/OpenSSL/test/test_ssl.py
index 6874c5a..288a7cb 100644
--- a/OpenSSL/test/test_ssl.py
+++ b/OpenSSL/test/test_ssl.py
@@ -42,6 +42,15 @@
     OP_NO_TICKET = None
 
 
+# openssl dhparam 128 -out dh-128.pem (note that 128 is a small number of bits
+# to use)
+dhparam = """\
+-----BEGIN DH PARAMETERS-----
+MBYCEQCobsg29c9WZP/54oAPcwiDAgEC
+-----END DH PARAMETERS-----
+"""
+
+
 def verify_cb(conn, cert, errnum, depth, ok):
     # print conn, cert, X509_verify_cert_error_string(errnum), depth, ok
     return ok
@@ -761,8 +770,50 @@
         self.assertEquals(
             context.get_verify_mode(), VERIFY_PEER | VERIFY_CLIENT_ONCE)
 
-    # XXX load_temp_dh
-    # XXX set_cipher_list
+
+    def test_load_tmp_dh_wrong_args(self):
+        """
+        L{Context.load_tmp_dh} raises L{TypeError} if called with the wrong
+        number of arguments or with a non-C{str} argument.
+        """
+        context = Context(TLSv1_METHOD)
+        self.assertRaises(TypeError, context.load_tmp_dh)
+        self.assertRaises(TypeError, context.load_tmp_dh, "foo", None)
+        self.assertRaises(TypeError, context.load_tmp_dh, object())
+
+
+    def test_load_tmp_dh_missing_file(self):
+        """
+        L{Context.load_tmp_dh} raises L{OpenSSL.SSL.Error} if the specified file
+        does not exist.
+        """
+        context = Context(TLSv1_METHOD)
+        self.assertRaises(Error, context.load_tmp_dh, "hello")
+
+
+    def test_load_tmp_dh(self):
+        """
+        L{Context.load_tmp_dh} loads Diffie-Hellman parameters from the
+        specified file.
+        """
+        context = Context(TLSv1_METHOD)
+        dhfilename = self.mktemp()
+        dhfile = open(dhfilename, "w")
+        dhfile.write(dhparam)
+        dhfile.close()
+        context.load_tmp_dh(dhfilename)
+        # XXX What should I assert here? -exarkun
+
+
+    def test_set_cipher_list(self):
+        """
+        L{Context.set_cipher_list} accepts a C{str} naming the ciphers which
+        connections created with the context object will be able to choose from.
+        """
+        context = Context(TLSv1_METHOD)
+        context.set_cipher_list("hello world:EXP-RC4-MD5")
+        conn = Connection(context, None)
+        self.assertEquals(conn.get_cipher_list(), ["EXP-RC4-MD5"])
 
 
 
