diff --git a/tests/mollom.test b/tests/mollom.test
index 72d6382..2ee765c 100644
--- a/tests/mollom.test
+++ b/tests/mollom.test
@@ -870,6 +870,8 @@ class MollomInstallationTestCase extends MollomWebTestCase {
  * Tests low-level XML-RPC communication with Mollom servers.
  */
 class MollomResponseTestCase extends MollomWebTestCase {
+  protected $profile = 'testing';
+
   public static function getInfo() {
     return array(
       'name' => 'Server responses',
@@ -1001,6 +1003,13 @@ class MollomResponseTestCase extends MollomWebTestCase {
     $this->assertMollomWatchdogMessages();
     $this->assertIdentical($result, TRUE, t('CAPTCHA response was correct.'));
 
+    // @todo Local fake server is currently unable to take a potential CAPTCHA
+    //   result into account. It technically should be able, since it logs all
+    //   calls, but checkContent is always invoked before checkCaptcha, so the
+    //   logged call cannot exist in the first place. That, in turn, however,
+    //   bears the quite major question how this is able to work with production
+    //   servers, since the logical code execution order of form validation
+    //   handlers is the same...?
     $data['post_body'] = 'spam';
     $result = mollom('mollom.checkContent', $data);
     $this->assertMollomWatchdogMessages();
@@ -1054,6 +1063,26 @@ class MollomResponseTestCase extends MollomWebTestCase {
   }
 }
 
+/**
+ * Tests low-level communication with local fake Mollom server.
+ */
+class MollomResponseLocalTestCase extends MollomResponseTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Server responses (local)',
+      'description' => 'Tests that local fake Mollom server responses match expectations.',
+      'group' => 'Mollom',
+    );
+  }
+
+  function setUp() {
+    // Enable testing server implementation.
+    parent::setUp(array('mollom_test'));
+    // Re-route Mollom communication to this testing site.
+    variable_set('mollom_servers', array($GLOBALS['base_url'] . '/xmlrpc.php?version='));
+  }
+}
+
 class MollomAccessTestCase extends MollomWebTestCase {
   public static function getInfo() {
     return array(
diff --git a/tests/mollom_test.module b/tests/mollom_test.module
index 842e167..9fde0a0 100644
--- a/tests/mollom_test.module
+++ b/tests/mollom_test.module
@@ -97,9 +97,13 @@ function mollom_test_check_content($data) {
       $quality = 1;
     }
     else {
-      $response['spam'] = MOLLOM_ANALYSIS_UNKNOWN;
+      $response['spam'] = MOLLOM_ANALYSIS_UNSURE;
       $quality = NULL;
     }
+    // In case a previous spam check was unsure and a CAPTCHA was solved, the
+    // result is supposed to be ham.
+    $captchas = variable_get('mollom_test_check_captcha', array());
+    debug($captchas);
   }
 
   // Quality filter.
@@ -145,9 +149,16 @@ function mollom_test_get_captcha($data) {
   variable_set(__FUNCTION__, $storage);
 
   drupal_session_start();
+
+  // Return a HTTPS URL if 'ssl' parameter was passed.
+  $base_url = $GLOBALS['base_url'];
+  if (!empty($data['ssl'])) {
+    $base_url = str_replace('http', 'https', $base_url);
+  }
+
   return array(
     'session_id' => !empty($data['session_id']) ? $data['session_id'] : session_id(),
-    'url' => $GLOBALS['base_url'] . '/' . drupal_get_path('module', 'mollom') . '/images/powered-by-mollom-2.gif',
+    'url' => $base_url . '/' . drupal_get_path('module', 'mollom') . '/images/powered-by-mollom-2.gif',
   );
 }
 
