From 867304f3bcbd5bfe5c5fef8c2c10f490e75163e5 Mon Sep 17 00:00:00 2001
From: Angie Byron <webchick@24967.no-reply.drupal.org>
Date: Wed, 17 Sep 2008 16:49:41 +0000
Subject: [PATCH] #307477 by clemens.tolboom and boombatower: Test how XML-RPC
 responds to large messages.

---
 modules/simpletest/tests/xmlrpc.test        | 34 +++++++++++++++++++++
 modules/simpletest/tests/xmlrpc_test.module | 31 +++++++++++++++++--
 2 files changed, 63 insertions(+), 2 deletions(-)

diff --git a/modules/simpletest/tests/xmlrpc.test b/modules/simpletest/tests/xmlrpc.test
index a2a1eee060ab..db35c79ed765 100644
--- a/modules/simpletest/tests/xmlrpc.test
+++ b/modules/simpletest/tests/xmlrpc.test
@@ -126,3 +126,37 @@ class XMLRPCValidator1IncTestCase extends DrupalWebTestCase {
     $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 XML-RPC can transfer large messages.
+   */
+  function testSizedMessages() {
+    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+    $sizes = array(8, 80, 160);
+    foreach ($sizes as $size) {
+      $xml_message_l = xmlrpc_test_message_sized_in_kb($size);
+      $xml_message_r = xmlrpc($xml_url, 'messages.messageSizedInKB', $size);
+
+      $this->assertEqual($xml_message_l, $xml_message_r, t('XML-RPC messages.messageSizedInKB of %s Kb size received', array('%s' => $size)));
+    }
+  }
+}
diff --git a/modules/simpletest/tests/xmlrpc_test.module b/modules/simpletest/tests/xmlrpc_test.module
index 3534a7266037..132171742326 100644
--- a/modules/simpletest/tests/xmlrpc_test.module
+++ b/modules/simpletest/tests/xmlrpc_test.module
@@ -18,7 +18,7 @@ function xmlrpc_test_countTheEntities($string) {
     'ctAmpersands' => substr_count($string, '&'),
     'ctApostrophes' => substr_count($string, "'"),
     'ctQuotes' => substr_count($string, '"'),
-    );
+  );
 }
 
 function xmlrpc_test_easyStructTest($array) {
@@ -58,5 +58,32 @@ function xmlrpc_test_xmlrpc() {
     '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 in KB.
+ *
+ * @param $size
+ *   Message size in KB.
+ * @return array
+ *   Generated message structure.
+ */
+function xmlrpc_test_message_sized_in_kb($size) {
+  $message = array();
+
+  $word = 'abcdefg';
+
+  // Create a ~1KB sized struct.
+  for ($i = 0 ; $i < 128; $i++) {
+    $line['word_' . $i] = $word;
+  }
+
+  for($i = 0; $i < $size; $i++) {
+    $message['line_' . $i] = $line;
+  }
+
+  return $message;
 }
-- 
GitLab