Index: modules/simpletest/tests/xmlrpc_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/xmlrpc_test.module,v
retrieving revision 1.1
diff -u -r1.1 xmlrpc_test.module
--- modules/simpletest/tests/xmlrpc_test.module	9 Aug 2008 12:41:22 -0000	1.1
+++ modules/simpletest/tests/xmlrpc_test.module	12 Sep 2008 18:40:35 -0000
@@ -18,7 +18,7 @@
     'ctAmpersands' => substr_count($string, '&'),
     'ctApostrophes' => substr_count($string, "'"),
     'ctQuotes' => substr_count($string, '"'),
-    );
+  );
 }
 
 function xmlrpc_test_easyStructTest($array) {
@@ -58,5 +58,28 @@
     'validator1.manyTypesTest' => 'xmlrpc_test_manyTypesTest',
     'validator1.moderateSizeArrayCheck' => 'xmlrpc_test_moderateSizeArrayCheck',
     'validator1.nestedStructTest' => 'xmlrpc_test_nestedStructTest',
-    'validator1.simpleStructReturnTest' => 'xmlrpc_test_simpleStructReturnTest');
+    'validator1.simpleStructReturnTest' => 'xmlrpc_test_simpleStructReturnTest',
+    'messages.messageSizedInKB' => 'xmlrpc_test_message_sized_in_kb',
+  );
+}
+
+/**
+ * Created a message of the desired size.
+ *
+ * @param $size Message size in kilobytes.
+ * @return string Generated message.
+ */
+function xmlrpc_test_message_sized_in_kb($size) {
+  $message = array();
+
+  $word = 'abcdefg';
+  for($i = 0 ; $i < 128; $i++) {
+    $line['word_'. $i] = $word; // > 1K block.
+  }
+
+  for($i = 0; $i < $size; $i++) {
+    $message['line_'. $i] = $line;
+  }
+
+  return $message;
 }
Index: modules/simpletest/tests/xmlrpc.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/xmlrpc.test,v
retrieving revision 1.2
diff -u -r1.2 xmlrpc.test
--- modules/simpletest/tests/xmlrpc.test	6 Sep 2008 08:36:21 -0000	1.2
+++ modules/simpletest/tests/xmlrpc.test	12 Sep 2008 18:40:35 -0000
@@ -126,3 +126,51 @@
     $this->assertEqual($a_l_res, $a_r_res, 'multicall equals result');
   }
 }
+
+class XMLRPCMessagesTestCase extends DrupalWebTestCase {
+  /**
+   * Implementation of getInfo().
+   */
+  function getInfo() {
+    return array(
+      'name'  => t('XML-RPC message'),
+      'description' => t('Test large messages.'),
+      'group' => t('XML-RPC'),
+    );
+  }
+
+  /**
+   * Implementation of setUp().
+   */
+  function setUp() {
+    parent::setUp('xmlrpc_test');
+  }
+
+  /**
+   * Make sure that xmlrpc can transfer large messages.
+   */
+  function testSizedMessages() {
+    $this->sizedMessage(8);
+
+    $this->sizedMessage(80);
+
+    $this->sizedMessage(160);
+  }
+
+  /**
+   * Make a request through xmlrpc and receive a message of the specified size,
+   * generate the same message "locally", and compare the result.
+   *
+   * @param $message_size Size of message to generate and compare.
+   */
+  function sizedMessage($message_size) {
+    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+
+    // Make sure xmlrpc_message is included by calling xmlrpc first.
+    $xml_message_r = xmlrpc($xml_url, 'messages.messageSizedInKB', $message_size);
+    $xml_message_l = xmlrpc_test_message_sized_in_kb($message_size);
+    $message = print_r($xml_message_l, TRUE);
+
+    $this->assertEqual($xml_message_l, $xml_message_r, t('%s K size rpc message created.' . substr($message,0,300), array('%s'=> $message_size)));
+  }
+}
