summaryrefslogtreecommitdiff
path: root/jni/ruby/test/xmlrpc
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/test/xmlrpc')
-rw-r--r--jni/ruby/test/xmlrpc/data/blog.xml18
-rw-r--r--jni/ruby/test/xmlrpc/data/bug_bool.expected3
-rw-r--r--jni/ruby/test/xmlrpc/data/bug_bool.xml8
-rw-r--r--jni/ruby/test/xmlrpc/data/bug_cdata.expected3
-rw-r--r--jni/ruby/test/xmlrpc/data/bug_cdata.xml8
-rw-r--r--jni/ruby/test/xmlrpc/data/bug_covert.expected10
-rw-r--r--jni/ruby/test/xmlrpc/data/bug_covert.xml6
-rw-r--r--jni/ruby/test/xmlrpc/data/datetime_iso8601.xml8
-rw-r--r--jni/ruby/test/xmlrpc/data/fault.xml16
-rw-r--r--jni/ruby/test/xmlrpc/data/value.expected7
-rw-r--r--jni/ruby/test/xmlrpc/data/value.xml22
-rw-r--r--jni/ruby/test/xmlrpc/data/xml1.expected243
-rw-r--r--jni/ruby/test/xmlrpc/data/xml1.xml1
-rw-r--r--jni/ruby/test/xmlrpc/htpasswd2
-rw-r--r--jni/ruby/test/xmlrpc/test_client.rb317
-rw-r--r--jni/ruby/test/xmlrpc/test_cookie.rb96
-rw-r--r--jni/ruby/test/xmlrpc/test_datetime.rb161
-rw-r--r--jni/ruby/test/xmlrpc/test_features.rb50
-rw-r--r--jni/ruby/test/xmlrpc/test_marshal.rb110
-rw-r--r--jni/ruby/test/xmlrpc/test_parser.rb93
-rw-r--r--jni/ruby/test/xmlrpc/test_webrick_server.rb135
-rw-r--r--jni/ruby/test/xmlrpc/webrick_testing.rb55
22 files changed, 1372 insertions, 0 deletions
diff --git a/jni/ruby/test/xmlrpc/data/blog.xml b/jni/ruby/test/xmlrpc/data/blog.xml
new file mode 100644
index 0000000..cb325f1
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/blog.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ <array><data>
+ <value><struct>
+ <member><name>isAdmin</name><value><boolean>1</boolean></value></member>
+ <member><name>url</name><value><string>http://tenderlovemaking.com/</string></value></member>
+ <member><name>blogid</name><value><string>1</string></value></member>
+ <member><name>blogName</name><value><string>Tender Lovemaking</string></value></member>
+ <member><name>xmlrpc</name><value><string>http://tenderlovemaking.com/xmlrpc.php</string></value></member>
+</struct></value>
+</data></array>
+ </value>
+ </param>
+ </params>
+</methodResponse>
diff --git a/jni/ruby/test/xmlrpc/data/bug_bool.expected b/jni/ruby/test/xmlrpc/data/bug_bool.expected
new file mode 100644
index 0000000..121e3a8
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/bug_bool.expected
@@ -0,0 +1,3 @@
+---
+- true
+- false \ No newline at end of file
diff --git a/jni/ruby/test/xmlrpc/data/bug_bool.xml b/jni/ruby/test/xmlrpc/data/bug_bool.xml
new file mode 100644
index 0000000..04ed007
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/bug_bool.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<methodResponse>
+ <params>
+ <param>
+ <value><boolean>0</boolean></value>
+ </param>
+ </params>
+</methodResponse>
diff --git a/jni/ruby/test/xmlrpc/data/bug_cdata.expected b/jni/ruby/test/xmlrpc/data/bug_cdata.expected
new file mode 100644
index 0000000..17d7861
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/bug_cdata.expected
@@ -0,0 +1,3 @@
+---
+- true
+- test \ No newline at end of file
diff --git a/jni/ruby/test/xmlrpc/data/bug_cdata.xml b/jni/ruby/test/xmlrpc/data/bug_cdata.xml
new file mode 100644
index 0000000..ba990e0
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/bug_cdata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<methodResponse>
+ <params>
+ <param>
+ <value><string><![CDATA[test]]></string></value>
+ </param>
+ </params>
+</methodResponse>
diff --git a/jni/ruby/test/xmlrpc/data/bug_covert.expected b/jni/ruby/test/xmlrpc/data/bug_covert.expected
new file mode 100644
index 0000000..a9ac103
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/bug_covert.expected
@@ -0,0 +1,10 @@
+---
+- true
+- >
+ Site,SANs,Array
+
+ Configured Capacity,Array Reserved Capacity,Array Ava
+
+ ilable Capacity,Array % Reserved,Host Allocated,Host Used,Host Free,Host %
+
+ Used
diff --git a/jni/ruby/test/xmlrpc/data/bug_covert.xml b/jni/ruby/test/xmlrpc/data/bug_covert.xml
new file mode 100644
index 0000000..1d9abd2
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/bug_covert.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"
+encoding="ISO-8859-1"?><methodResponse><params><param><value>Site,SANs,Array
+Configured Capacity,Array Reserved Capacity,Array Ava
+ilable Capacity,Array % Reserved,Host Allocated,Host Used,Host Free,Host %
+Used
+</value></param></params></methodResponse>
diff --git a/jni/ruby/test/xmlrpc/data/datetime_iso8601.xml b/jni/ruby/test/xmlrpc/data/datetime_iso8601.xml
new file mode 100644
index 0000000..43d8da6
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/datetime_iso8601.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<methodResponse>
+ <params>
+ <param>
+ <value><dateTime.iso8601>20041105T01:15:23Z</dateTime.iso8601></value>
+ </param>
+ </params>
+</methodResponse>
diff --git a/jni/ruby/test/xmlrpc/data/fault.xml b/jni/ruby/test/xmlrpc/data/fault.xml
new file mode 100644
index 0000000..041c464
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/fault.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<methodResponse>
+ <fault>
+ <value><struct>
+ <member>
+ <name>faultCode</name>
+ <value><int>4</int></value>
+ </member>
+ <member>
+ <name>faultString</name>
+ <value>an error message</value>
+ </member>
+ </struct></value>
+ </fault>
+</methodResponse>
+
diff --git a/jni/ruby/test/xmlrpc/data/value.expected b/jni/ruby/test/xmlrpc/data/value.expected
new file mode 100644
index 0000000..9463d02
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/value.expected
@@ -0,0 +1,7 @@
+---
+- Test
+-
+ - Hallo Leute
+ - " Hallo "
+ - ''
+ - " " \ No newline at end of file
diff --git a/jni/ruby/test/xmlrpc/data/value.xml b/jni/ruby/test/xmlrpc/data/value.xml
new file mode 100644
index 0000000..1978616
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/value.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<methodCall>
+ <methodName>Test</methodName>
+ <params>
+ <param>
+ <value>Hallo Leute</value>
+ </param>
+ <param>
+ <value> Hallo </value>
+ </param>
+ <param>
+ <value></value>
+ </param>
+ <param>
+ <value> </value>
+ </param>
+ </params>
+</methodCall>
+
+
+
+
diff --git a/jni/ruby/test/xmlrpc/data/xml1.expected b/jni/ruby/test/xmlrpc/data/xml1.expected
new file mode 100644
index 0000000..ff96de8
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/xml1.expected
@@ -0,0 +1,243 @@
+---
+- true
+-
+ -
+ subscriber: MegaCorp
+ lastName: Baker
+ telephone1: 1-508-791-1267
+ telephone2: 1-800-445-2588
+ password: p1111
+ OID: "1"
+ email: hbaker@yahoo.com
+ adminId: hbaker
+ objectName: AdministratorDO
+ -
+ subscriber: CornerStore
+ lastName: Dragon
+ telephone1: 1-781-789-9089
+ telephone2: 1-800-445-2588
+ password: p3333
+ OID: "3"
+ email: adragon@yahoo.com
+ adminId: adragon
+ objectName: AdministratorDO
+ -
+ subscriber: Cyberdyne
+ lastName: Rodman
+ telephone1: 1-617-789-1890
+ telephone2: 1-800-445-2588
+ password: p4444
+ OID: "4"
+ email: mrodman@yahoo.com
+ adminId: mrodman
+ objectName: AdministratorDO
+ -
+ subscriber: StarSports
+ lastName: Jordan
+ telephone1: 1-617-890-7897
+ telephone2: 1-800-445-2588
+ password: p5555
+ OID: "5"
+ email: mjordan@yahoo.com
+ adminId: mjordan
+ objectName: AdministratorDO
+ -
+ subscriber: GreatBooks
+ lastName: Pippen
+ telephone1: 1-781-789-9876
+ telephone2: 1-800-445-2588
+ password: p6666
+ OID: "6"
+ email: gpippen@yahoo.com
+ adminId: gpippen
+ objectName: AdministratorDO
+ -
+ subscriber: AxisChemicals
+ lastName: Andhrew
+ telephone1: 1-781-678-8970
+ telephone2: 1-800-445-2588
+ password: p7777
+ OID: "7"
+ email: aandrew@yahoo.com
+ adminId: aandrew
+ objectName: AdministratorDO
+ -
+ subscriber: MediaShop
+ lastName: Vincent
+ telephone1: 1-786-897-8908
+ telephone2: 1-800-445-2588
+ password: p8888
+ OID: "8"
+ email: tvincent@yahoo.com
+ adminId: tvincent
+ objectName: AdministratorDO
+ -
+ subscriber: SmartShop
+ lastName: Richard
+ telephone1: 1-508-789-6789
+ telephone2: 1-800-445-2588
+ password: p9999
+ OID: "9"
+ email: krichard@yahoo.com
+ adminId: krichard
+ objectName: AdministratorDO
+ -
+ subscriber: HomeNeeds
+ lastName: Cornell
+ telephone1: 1-617-789-8979
+ telephone2: 1-800-445-2588
+ password: paaaa
+ OID: "10"
+ email: gconell@yahoo.com
+ adminId: gcornell
+ objectName: AdministratorDO
+ -
+ subscriber: MegaCorp
+ lastName: HorstMann
+ telephone1: 1-508-791-1267
+ telephone2: 1-800-445-2588
+ password: p1111
+ OID: "11"
+ email: shorstmann@yahoo.com
+ adminId: shorstmann
+ objectName: AdministratorDO
+ -
+ subscriber: CornerStore
+ lastName: Bob
+ telephone1: 1-781-789-9089
+ telephone2: 1-800-445-2588
+ password: p3333
+ OID: "13"
+ email: rbob@yahoo.com
+ adminId: rbob
+ objectName: AdministratorDO
+ -
+ subscriber: Cyberdyne
+ lastName: Peter
+ telephone1: 1-617-789-1890
+ telephone2: 1-800-445-2588
+ password: p4444
+ OID: "14"
+ email: speter@yahoo.com
+ adminId: speter
+ objectName: AdministratorDO
+ -
+ subscriber: StarSports
+ lastName: Novak
+ telephone1: 1-617-890-7897
+ telephone2: 1-800-445-2588
+ password: p5555
+ OID: "15"
+ email: pnovak@yahoo.com
+ adminId: pnovak
+ objectName: AdministratorDO
+ -
+ subscriber: GreatBooks
+ lastName: Nancy
+ telephone1: 1-781-789-9876
+ telephone2: 1-800-445-2588
+ password: p6666
+ OID: "16"
+ email: pnancy@yahoo.com
+ adminId: pnancy
+ objectName: AdministratorDO
+ -
+ subscriber: AxisChemicals
+ lastName: Michel
+ telephone1: 1-781-678-8970
+ telephone2: 1-800-445-2588
+ password: p7777
+ OID: "17"
+ email: hmichel@yahoo.com
+ adminId: hmichel
+ objectName: AdministratorDO
+ -
+ subscriber: MediaShop
+ lastName: David
+ telephone1: 1-786-897-8908
+ telephone2: 1-800-445-2588
+ password: p8888
+ OID: "18"
+ email: kdavid@yahoo.com
+ adminId: kdavid
+ objectName: AdministratorDO
+ -
+ subscriber: SmartShop
+ lastName: Valnoor
+ telephone1: 1-508-789-6789
+ telephone2: 1-800-445-2588
+ password: p9999
+ OID: "19"
+ email: pvalnoor@yahoo.com
+ adminId: pvalnoor
+ objectName: AdministratorDO
+ -
+ subscriber: HomeNeeds
+ lastName: Smith
+ telephone1: 1-617-789-8979
+ telephone2: 1-800-445-2588
+ password: paaaa
+ OID: "20"
+ email: wsmith@yahoo.com
+ adminId: wsmith
+ objectName: AdministratorDO
+ -
+ subscriber: MegaCorp
+ lastName: Caral
+ telephone1: 1-781-789-9876
+ telephone2: 1-800-445-2588
+ password: p6666
+ OID: "21"
+ email: gcaral@yahoo.com
+ adminId: gcaral
+ objectName: AdministratorDO
+ -
+ subscriber: CornerStore
+ lastName: Hillary
+ telephone1: 1-786-897-8908
+ telephone2: 1-800-445-2588
+ password: p8888
+ OID: "23"
+ email: phillary@yahoo.com
+ adminId: phillary
+ objectName: AdministratorDO
+ -
+ subscriber: Cyberdyne
+ lastName: Philip
+ telephone1: 1-508-789-6789
+ telephone2: 1-800-445-2588
+ password: p9999
+ OID: "24"
+ email: bphilip@yahoo.com
+ adminId: bphilip
+ objectName: AdministratorDO
+ -
+ subscriber: StarSports
+ lastName: Andrea
+ telephone1: 1-617-789-8979
+ telephone2: 1-800-445-2588
+ password: paaaa
+ OID: "25"
+ email: sandrea@yahoo.com
+ adminId: sandrea
+ objectName: AdministratorDO
+ -
+ subscriber: s4
+ lastName: "null"
+ telephone1: "null"
+ telephone2: "null"
+ password: s4
+ OID: "26"
+ email: "null"
+ adminId: s4
+ objectName: AdministratorDO
+ -
+ subscriber: BigBank
+ lastName: administrator
+ telephone1: ''
+ telephone2: ''
+ password: admin
+ OID: "82"
+ email: ''
+ adminId: admin
+ objectName: AdministratorDO \ No newline at end of file
diff --git a/jni/ruby/test/xmlrpc/data/xml1.xml b/jni/ruby/test/xmlrpc/data/xml1.xml
new file mode 100644
index 0000000..10aa554
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/data/xml1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="ISO-8859-1"?><methodResponse><params><param><value><array><data><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>hbaker</value></member><member><name>email</name><value>hbaker@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-508-791-1267</value></member><member><name>OID</name><value>1</value></member><member><name>password</name><value>p1111</value></member><member><name>lastName</name><value>Baker</value></member><member><name>subscriber</name><value>MegaCorp</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>adragon</value></member><member><name>email</name><value>adragon@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-789-9089</value></member><member><name>OID</name><value>3</value></member><member><name>password</name><value>p3333</value></member><member><name>lastName</name><value>Dragon</value></member><member><name>subscriber</name><value>CornerStore</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>mrodman</value></member><member><name>email</name><value>mrodman@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-789-1890</value></member><member><name>OID</name><value>4</value></member><member><name>password</name><value>p4444</value></member><member><name>lastName</name><value>Rodman</value></member><member><name>subscriber</name><value>Cyberdyne</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>mjordan</value></member><member><name>email</name><value>mjordan@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-890-7897</value></member><member><name>OID</name><value>5</value></member><member><name>password</name><value>p5555</value></member><member><name>lastName</name><value>Jordan</value></member><member><name>subscriber</name><value>StarSports</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>gpippen</value></member><member><name>email</name><value>gpippen@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-789-9876</value></member><member><name>OID</name><value>6</value></member><member><name>password</name><value>p6666</value></member><member><name>lastName</name><value>Pippen</value></member><member><name>subscriber</name><value>GreatBooks</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>aandrew</value></member><member><name>email</name><value>aandrew@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-678-8970</value></member><member><name>OID</name><value>7</value></member><member><name>password</name><value>p7777</value></member><member><name>lastName</name><value>Andhrew</value></member><member><name>subscriber</name><value>AxisChemicals</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>tvincent</value></member><member><name>email</name><value>tvincent@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-786-897-8908</value></member><member><name>OID</name><value>8</value></member><member><name>password</name><value>p8888</value></member><member><name>lastName</name><value>Vincent</value></member><member><name>subscriber</name><value>MediaShop</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>krichard</value></member><member><name>email</name><value>krichard@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-508-789-6789</value></member><member><name>OID</name><value>9</value></member><member><name>password</name><value>p9999</value></member><member><name>lastName</name><value>Richard</value></member><member><name>subscriber</name><value>SmartShop</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>gcornell</value></member><member><name>email</name><value>gconell@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-789-8979</value></member><member><name>OID</name><value>10</value></member><member><name>password</name><value>paaaa</value></member><member><name>lastName</name><value>Cornell</value></member><member><name>subscriber</name><value>HomeNeeds</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>shorstmann</value></member><member><name>email</name><value>shorstmann@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-508-791-1267</value></member><member><name>OID</name><value>11</value></member><member><name>password</name><value>p1111</value></member><member><name>lastName</name><value>HorstMann</value></member><member><name>subscriber</name><value>MegaCorp</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>rbob</value></member><member><name>email</name><value>rbob@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-789-9089</value></member><member><name>OID</name><value>13</value></member><member><name>password</name><value>p3333</value></member><member><name>lastName</name><value>Bob</value></member><member><name>subscriber</name><value>CornerStore</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>speter</value></member><member><name>email</name><value>speter@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-789-1890</value></member><member><name>OID</name><value>14</value></member><member><name>password</name><value>p4444</value></member><member><name>lastName</name><value>Peter</value></member><member><name>subscriber</name><value>Cyberdyne</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>pnovak</value></member><member><name>email</name><value>pnovak@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-890-7897</value></member><member><name>OID</name><value>15</value></member><member><name>password</name><value>p5555</value></member><member><name>lastName</name><value>Novak</value></member><member><name>subscriber</name><value>StarSports</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>pnancy</value></member><member><name>email</name><value>pnancy@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-789-9876</value></member><member><name>OID</name><value>16</value></member><member><name>password</name><value>p6666</value></member><member><name>lastName</name><value>Nancy</value></member><member><name>subscriber</name><value>GreatBooks</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>hmichel</value></member><member><name>email</name><value>hmichel@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-678-8970</value></member><member><name>OID</name><value>17</value></member><member><name>password</name><value>p7777</value></member><member><name>lastName</name><value>Michel</value></member><member><name>subscriber</name><value>AxisChemicals</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>kdavid</value></member><member><name>email</name><value>kdavid@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-786-897-8908</value></member><member><name>OID</name><value>18</value></member><member><name>password</name><value>p8888</value></member><member><name>lastName</name><value>David</value></member><member><name>subscriber</name><value>MediaShop</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>pvalnoor</value></member><member><name>email</name><value>pvalnoor@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-508-789-6789</value></member><member><name>OID</name><value>19</value></member><member><name>password</name><value>p9999</value></member><member><name>lastName</name><value>Valnoor</value></member><member><name>subscriber</name><value>SmartShop</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>wsmith</value></member><member><name>email</name><value>wsmith@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-789-8979</value></member><member><name>OID</name><value>20</value></member><member><name>password</name><value>paaaa</value></member><member><name>lastName</name><value>Smith</value></member><member><name>subscriber</name><value>HomeNeeds</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>gcaral</value></member><member><name>email</name><value>gcaral@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-781-789-9876</value></member><member><name>OID</name><value>21</value></member><member><name>password</name><value>p6666</value></member><member><name>lastName</name><value>Caral</value></member><member><name>subscriber</name><value>MegaCorp</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>phillary</value></member><member><name>email</name><value>phillary@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-786-897-8908</value></member><member><name>OID</name><value>23</value></member><member><name>password</name><value>p8888</value></member><member><name>lastName</name><value>Hillary</value></member><member><name>subscriber</name><value>CornerStore</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>bphilip</value></member><member><name>email</name><value>bphilip@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-508-789-6789</value></member><member><name>OID</name><value>24</value></member><member><name>password</name><value>p9999</value></member><member><name>lastName</name><value>Philip</value></member><member><name>subscriber</name><value>Cyberdyne</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>sandrea</value></member><member><name>email</name><value>sandrea@yahoo.com</value></member><member><name>telephone2</name><value>1-800-445-2588</value></member><member><name>telephone1</name><value>1-617-789-8979</value></member><member><name>OID</name><value>25</value></member><member><name>password</name><value>paaaa</value></member><member><name>lastName</name><value>Andrea</value></member><member><name>subscriber</name><value>StarSports</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>s4</value></member><member><name>email</name><value>null</value></member><member><name>telephone2</name><value>null</value></member><member><name>telephone1</name><value>null</value></member><member><name>OID</name><value>26</value></member><member><name>password</name><value>s4</value></member><member><name>lastName</name><value>null</value></member><member><name>subscriber</name><value>s4</value></member></struct></value><value><struct><member><name>objectName</name><value>AdministratorDO</value></member><member><name>adminId</name><value>admin</value></member><member><name>email</name><value></value></member><member><name>telephone2</name><value></value></member><member><name>telephone1</name><value></value></member><member><name>OID</name><value>82</value></member><member><name>password</name><value>admin</value></member><member><name>lastName</name><value>administrator</value></member><member><name>subscriber</name><value>BigBank</value></member></struct></value></data></array></value></param></params></methodResponse>
diff --git a/jni/ruby/test/xmlrpc/htpasswd b/jni/ruby/test/xmlrpc/htpasswd
new file mode 100644
index 0000000..898fc86
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/htpasswd
@@ -0,0 +1,2 @@
+admin:Qg266hq/YYKe2
+01234567890123456789012345678901234567890123456789012345678901234567890123456789:Yl.SJmoFETpS2
diff --git a/jni/ruby/test/xmlrpc/test_client.rb b/jni/ruby/test/xmlrpc/test_client.rb
new file mode 100644
index 0000000..83f8c6b
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_client.rb
@@ -0,0 +1,317 @@
+require 'minitest/autorun'
+require 'xmlrpc/client'
+require 'net/http'
+begin
+ require 'openssl'
+rescue LoadError
+end
+
+module XMLRPC
+ class ClientTest < MiniTest::Unit::TestCase
+ module Fake
+ class HTTP
+ attr_accessor :read_timeout, :open_timeout, :use_ssl
+
+ def initialize responses = {}
+ @started = false
+ @responses = responses
+ end
+
+ def started?
+ @started
+ end
+
+ def start
+ @started = true
+ if block_given?
+ begin
+ return yield(self)
+ ensure
+ @started = false
+ end
+ end
+ self
+ end
+
+ def request_post path, request, headers
+ @responses[path].shift
+ end
+ end
+
+ class Client < XMLRPC::Client
+ attr_reader :args, :http
+
+ def initialize(*args)
+ @args = args
+ super
+ end
+
+ private
+ def net_http host, port, proxy_host, proxy_port
+ HTTP.new
+ end
+ end
+
+ class Response
+ def self.new body, fields = [], status = '200'
+ klass = Class.new(Net::HTTPResponse::CODE_TO_OBJ[status]) {
+ def initialize(*args)
+ super
+ @read = true
+ end
+ }
+
+ resp = klass.new '1.1', status, 'OK'
+ resp.body = body
+ fields.each do |k,v|
+ resp.add_field k, v
+ end
+ resp
+ end
+ end
+ end
+
+ def test_new2_host_path_port
+ client = Fake::Client.new2 'http://example.org/foo'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/foo', path
+ assert_equal 80, port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_new2_custom_port
+ client = Fake::Client.new2 'http://example.org:1234/foo'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/foo', path
+ assert_equal 1234, port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_new2_ssl
+ client = Fake::Client.new2 'https://example.org/foo'
+ host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/foo', path
+ assert_equal 443, port
+ assert use_ssl
+
+ refute proxy_host
+ refute proxy_port
+ refute user
+ refute password
+ refute timeout
+ end if defined?(OpenSSL)
+
+ def test_new2_ssl_custom_port
+ client = Fake::Client.new2 'https://example.org:1234/foo'
+ host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/foo', path
+ assert_equal 1234, port
+ assert use_ssl
+
+ refute proxy_host
+ refute proxy_port
+ refute user
+ refute password
+ refute timeout
+ end if defined?(OpenSSL)
+
+ def test_new2_user_password
+ client = Fake::Client.new2 'http://aaron:tenderlove@example.org/foo'
+ host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
+
+ [ host, path, port ].each { |x| assert x }
+ assert_equal 'aaron', user
+ assert_equal 'tenderlove', password
+
+ [ proxy_host, proxy_port, use_ssl, timeout ].each { |x| refute x }
+ end
+
+ def test_new2_proxy_host
+ client = Fake::Client.new2 'http://example.org/foo', 'example.com'
+ host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
+
+ [ host, path, port ].each { |x| assert x }
+
+ assert_equal 'example.com', proxy_host
+
+ [ user, password, proxy_port, use_ssl, timeout ].each { |x| refute x }
+ end
+
+ def test_new2_proxy_port
+ client = Fake::Client.new2 'http://example.org/foo', 'example.com:1234'
+ host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
+
+ [ host, path, port ].each { |x| assert x }
+
+ assert_equal 'example.com', proxy_host
+ assert_equal 1234, proxy_port
+
+ [ user, password, use_ssl, timeout ].each { |x| refute x }
+ end
+
+ def test_new2_no_path
+ client = Fake::Client.new2 'http://example.org'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_nil path
+ assert port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_new2_slash_path
+ client = Fake::Client.new2 'http://example.org/'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/', path
+ assert port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_new2_bad_protocol
+ assert_raises(ArgumentError) do
+ XMLRPC::Client.new2 'ftp://example.org'
+ end
+ end
+
+ def test_new2_bad_uri
+ assert_raises(ArgumentError) do
+ XMLRPC::Client.new2 ':::::'
+ end
+ end
+
+ def test_new2_path_with_query
+ client = Fake::Client.new2 'http://example.org/foo?bar=baz'
+ host, path, port, *rest = client.args
+
+ assert_equal 'example.org', host
+ assert_equal '/foo?bar=baz', path
+ assert port
+
+ rest.each { |x| refute x }
+ end
+
+ def test_request
+ fh = read 'blog.xml'
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh, [['Content-Type', 'text/xml']]) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+ expected = [{
+ "isAdmin" => true,
+ "url" => "http://tenderlovemaking.com/",
+ "blogid" => "1",
+ "blogName" => "Tender Lovemaking",
+ "xmlrpc" => "http://tenderlovemaking.com/xmlrpc.php"
+ }]
+
+ assert_equal expected, resp
+ end
+
+ def test_async_request
+ fh = read 'blog.xml'
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh, [['Content-Type', 'text/xml']]) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call_async('wp.getUsersBlogs', 'tlo', 'omg')
+
+ expected = [{
+ "isAdmin" => true,
+ "url" => "http://tenderlovemaking.com/",
+ "blogid" => "1",
+ "blogName" => "Tender Lovemaking",
+ "xmlrpc" => "http://tenderlovemaking.com/xmlrpc.php"
+ }]
+
+ assert_equal expected, resp
+ end
+
+ # make a request without content-type header
+ def test_bad_content_type
+ fh = read 'blog.xml'
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+ expected = [{
+ "isAdmin" => true,
+ "url" => "http://tenderlovemaking.com/",
+ "blogid" => "1",
+ "blogName" => "Tender Lovemaking",
+ "xmlrpc" => "http://tenderlovemaking.com/xmlrpc.php"
+ }]
+
+ assert_equal expected, resp
+ end
+
+ def test_i8_tag
+ fh = read('blog.xml').gsub(/string/, 'i8')
+
+ responses = {
+ '/foo' => [ Fake::Response.new(fh) ]
+ }
+
+ client = fake_client(responses).new2 'http://example.org/foo'
+
+ resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+ assert_equal 1, resp.first['blogid']
+ end
+
+ def test_cookie_simple
+ client = Fake::Client.new2('http://example.org/cookie')
+ assert_nil(client.cookie)
+ client.send(:parse_set_cookies, ["param1=value1", "param2=value2"])
+ assert_equal("param1=value1; param2=value2", client.cookie)
+ end
+
+ def test_cookie_override
+ client = Fake::Client.new2('http://example.org/cookie')
+ client.send(:parse_set_cookies,
+ [
+ "param1=value1",
+ "param2=value2",
+ "param1=value3",
+ ])
+ assert_equal("param2=value2; param1=value3", client.cookie)
+ end
+
+ private
+ def read filename
+ File.read File.expand_path(File.join(__FILE__, '..', 'data', filename))
+ end
+
+ def fake_client responses
+ Class.new(Fake::Client) {
+ define_method(:net_http) { |*_| Fake::HTTP.new(responses) }
+ }
+ end
+ end
+end
diff --git a/jni/ruby/test/xmlrpc/test_cookie.rb b/jni/ruby/test/xmlrpc/test_cookie.rb
new file mode 100644
index 0000000..cfcfe4c
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_cookie.rb
@@ -0,0 +1,96 @@
+require 'test/unit'
+require 'time'
+require 'webrick'
+require_relative 'webrick_testing'
+require "xmlrpc/server"
+require 'xmlrpc/client'
+
+module TestXMLRPC
+class TestCookie < Test::Unit::TestCase
+ include WEBrick_Testing
+
+ def create_servlet
+ s = XMLRPC::WEBrickServlet.new
+
+ def s.logged_in_users
+ @logged_in_users ||= {}
+ end
+ def s.request
+ @request
+ end
+ def s.response
+ @response
+ end
+ def s.service(request, response)
+ @request = request
+ @response = response
+ super
+ ensure
+ @request = nil
+ @response = nil
+ end
+
+ key = Time.now.to_i.to_s
+ valid_user = "valid-user"
+ s.add_handler("test.login") do |user, password|
+ ok = (user == valid_user and password == "secret")
+ if ok
+ s.logged_in_users[key] = user
+ expires = (Time.now + 60 * 60).httpdate
+ cookies = s.response.cookies
+ cookies << "key=\"#{key}\"; path=\"/RPC2\"; expires=#{expires}"
+ cookies << "user=\"#{user}\"; path=\"/RPC2\""
+ end
+ ok
+ end
+
+ s.add_handler("test.require_authenticate_echo") do |string|
+ cookies = {}
+ s.request.cookies.each do |cookie|
+ cookies[cookie.name] = cookie.value
+ end
+ if cookies == {"key" => key, "user" => valid_user}
+ string
+ else
+ raise XMLRPC::FaultException.new(29, "Authentication required")
+ end
+ end
+
+ s.set_default_handler do |name, *args|
+ raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
+ " or wrong number of parameters!")
+ end
+
+ s.add_introspection
+
+ s
+ end
+
+ def setup_http_server_option
+ option = {:Port => 0}
+ end
+
+ def test_cookie
+ option = setup_http_server_option
+ with_server(option, create_servlet) {|addr|
+ begin
+ @s = XMLRPC::Client.new3(:host => addr.ip_address, :port => addr.ip_port)
+ do_test
+ ensure
+ @s.http.finish
+ end
+ }
+ end
+
+ def do_test
+ assert(!@s.call("test.login", "invalid-user", "invalid-password"))
+ exception = assert_raise(XMLRPC::FaultException) do
+ @s.call("test.require_authenticate_echo", "Hello")
+ end
+ assert_equal(29, exception.faultCode)
+
+ assert(@s.call("test.login", "valid-user", "secret"))
+ assert_equal("Hello", @s.call("test.require_authenticate_echo", "Hello"))
+ end
+end
+end
diff --git a/jni/ruby/test/xmlrpc/test_datetime.rb b/jni/ruby/test/xmlrpc/test_datetime.rb
new file mode 100644
index 0000000..d6bb95d
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_datetime.rb
@@ -0,0 +1,161 @@
+require 'test/unit'
+require "xmlrpc/datetime"
+
+module TestXMLRPC
+class Test_DateTime < Test::Unit::TestCase
+
+ def test_new
+ dt = createDateTime()
+
+ assert_instance_of(XMLRPC::DateTime, dt)
+ end
+
+ def test_new_exception
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(4.5, 13, 32, 25, 60, 60) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 32, 25, 60, 60) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 25, 60, 60) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 24, 60, 60) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 24, 59, 60) }
+ assert_nothing_raised(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 24, 59, 59) }
+
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 0, 0, -1, -1, -1) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 0, -1, -1, -1) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, -1, -1, -1) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, 0, -1, -1) }
+ assert_raise(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, 0, 0, -1) }
+ assert_nothing_raised(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, 0, 0, 0) }
+ end
+
+
+ def test_get_values
+ y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5
+ dt = XMLRPC::DateTime.new(y, m, d, h, mi, s)
+
+ assert_equal(y, dt.year)
+ assert_equal(m, dt.month)
+ assert_equal(m, dt.mon)
+ assert_equal(d, dt.day)
+
+ assert_equal(h, dt.hour)
+ assert_equal(mi,dt.min)
+ assert_equal(s, dt.sec)
+ end
+
+ def test_set_values
+ dt = createDateTime()
+ y, m, d, h, mi, s = 1950, 12, 9, 8, 52, 30
+
+ dt.year = y
+ dt.month = m
+ dt.day = d
+ dt.hour = h
+ dt.min = mi
+ dt.sec = s
+
+ assert_equal(y, dt.year)
+ assert_equal(m, dt.month)
+ assert_equal(m, dt.mon)
+ assert_equal(d, dt.day)
+
+ assert_equal(h, dt.hour)
+ assert_equal(mi,dt.min)
+ assert_equal(s, dt.sec)
+
+ dt.mon = 5
+ assert_equal(5, dt.month)
+ assert_equal(5, dt.mon)
+ end
+
+ def test_set_exception
+ dt = createDateTime()
+
+ assert_raise(ArgumentError) { dt.year = 4.5 }
+ assert_nothing_raised(ArgumentError) { dt.year = -2000 }
+
+ assert_raise(ArgumentError) { dt.month = 0 }
+ assert_raise(ArgumentError) { dt.month = 13 }
+ assert_nothing_raised(ArgumentError) { dt.month = 7 }
+
+ assert_raise(ArgumentError) { dt.mon = 0 }
+ assert_raise(ArgumentError) { dt.mon = 13 }
+ assert_nothing_raised(ArgumentError) { dt.mon = 7 }
+
+ assert_raise(ArgumentError) { dt.day = 0 }
+ assert_raise(ArgumentError) { dt.day = 32 }
+ assert_nothing_raised(ArgumentError) { dt.day = 16 }
+
+ assert_raise(ArgumentError) { dt.hour = -1 }
+ assert_raise(ArgumentError) { dt.hour = 25 }
+ assert_nothing_raised(ArgumentError) { dt.hour = 12 }
+
+ assert_raise(ArgumentError) { dt.min = -1 }
+ assert_raise(ArgumentError) { dt.min = 60 }
+ assert_nothing_raised(ArgumentError) { dt.min = 30 }
+
+ assert_raise(ArgumentError) { dt.sec = -1 }
+ assert_raise(ArgumentError) { dt.sec = 60 }
+ assert_nothing_raised(ArgumentError) { dt.sec = 30 }
+ end
+
+ def test_to_a
+ y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5
+ dt = XMLRPC::DateTime.new(y, m, d, h, mi, s)
+ a = dt.to_a
+
+ assert_instance_of(Array, a)
+ assert_equal(6, a.size, "Returned array has wrong size")
+
+ assert_equal(y, a[0])
+ assert_equal(m, a[1])
+ assert_equal(d, a[2])
+ assert_equal(h, a[3])
+ assert_equal(mi, a[4])
+ assert_equal(s, a[5])
+ end
+
+ def test_to_time1
+ y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5
+ dt = XMLRPC::DateTime.new(y, m, d, h, mi, s)
+ time = dt.to_time
+
+ assert_not_nil(time)
+
+ assert_equal(y, time.year)
+ assert_equal(m, time.month)
+ assert_equal(d, time.day)
+ assert_equal(h, time.hour)
+ assert_equal(mi, time.min)
+ assert_equal(s, time.sec)
+ end
+
+ def test_to_time2
+ dt = createDateTime()
+ dt.year = 1969
+
+ assert_nil(dt.to_time)
+ end
+
+ def test_to_date1
+ y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5
+ dt = XMLRPC::DateTime.new(y, m, d, h, mi, s)
+ date = dt.to_date
+
+ assert_equal(y, date.year)
+ assert_equal(m, date.month)
+ assert_equal(d, date.day)
+ end
+
+ def test_to_date2
+ dt = createDateTime()
+ dt.year = 666
+
+ assert_equal(666, dt.to_date.year)
+ end
+
+
+ def createDateTime
+ XMLRPC::DateTime.new(1970, 3, 24, 12, 0, 5)
+ end
+
+end
+end
diff --git a/jni/ruby/test/xmlrpc/test_features.rb b/jni/ruby/test/xmlrpc/test_features.rb
new file mode 100644
index 0000000..48bb0d4
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_features.rb
@@ -0,0 +1,50 @@
+require 'test/unit'
+require "xmlrpc/create"
+require "xmlrpc/parser"
+require "xmlrpc/config"
+
+module TestXMLRPC
+class Test_Features < Test::Unit::TestCase
+
+ def setup
+ @params = [nil, {"test" => nil}, [nil, 1, nil]]
+ end
+
+ def test_nil_create
+ XMLRPC::XMLWriter.each_installed_writer do |writer|
+ c = XMLRPC::Create.new(writer)
+
+ XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_CREATE)}
+ XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, false)
+ assert_raise(RuntimeError) { c.methodCall("test", *@params) }
+
+ XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_CREATE)}
+ XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, true)
+ assert_nothing_raised { c.methodCall("test", *@params) }
+ end
+ end
+
+ def test_nil_parse
+ XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_CREATE)}
+ XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, true)
+
+ XMLRPC::XMLWriter.each_installed_writer do |writer|
+ c = XMLRPC::Create.new(writer)
+ str = c.methodCall("test", *@params)
+ XMLRPC::XMLParser.each_installed_parser do |parser|
+ para = nil
+
+ XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_PARSER)}
+ XMLRPC::Config.const_set(:ENABLE_NIL_PARSER, false)
+ assert_raise(RuntimeError) { para = parser.parseMethodCall(str) }
+
+ XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_PARSER)}
+ XMLRPC::Config.const_set(:ENABLE_NIL_PARSER, true)
+ assert_nothing_raised { para = parser.parseMethodCall(str) }
+ assert_equal(para[1], @params)
+ end
+ end
+ end
+
+end
+end
diff --git a/jni/ruby/test/xmlrpc/test_marshal.rb b/jni/ruby/test/xmlrpc/test_marshal.rb
new file mode 100644
index 0000000..34ddfa9
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_marshal.rb
@@ -0,0 +1,110 @@
+require 'test/unit'
+require "xmlrpc/marshal"
+
+module TestXMLRPC
+class Test_Marshal < Test::Unit::TestCase
+ # for test_parser_values
+ class Person
+ include XMLRPC::Marshallable
+ attr_reader :name
+ def initialize(name)
+ @name = name
+ end
+ end
+
+
+ def test1_dump_response
+ assert_nothing_raised(NameError) {
+ XMLRPC::Marshal.dump_response('arg')
+ }
+ end
+
+ def test1_dump_call
+ assert_nothing_raised(NameError) {
+ XMLRPC::Marshal.dump_call('methodName', 'arg')
+ }
+ end
+
+ def test2_dump_load_response
+ value = [1, 2, 3, {"test" => true}, 3.4]
+ res = XMLRPC::Marshal.dump_response(value)
+
+ assert_equal(value, XMLRPC::Marshal.load_response(res))
+ end
+
+ def test2_dump_load_call
+ methodName = "testMethod"
+ value = [1, 2, 3, {"test" => true}, 3.4]
+ exp = [methodName, [value, value]]
+
+ res = XMLRPC::Marshal.dump_call(methodName, value, value)
+
+ assert_equal(exp, XMLRPC::Marshal.load_call(res))
+ end
+
+ def test_parser_values
+ v1 = [
+ 1, -7778, -(2**31), 2**31-1, # integers
+ 1.0, 0.0, -333.0, 2343434343.0, # floats
+ false, true, true, false, # booleans
+ "Hallo", "with < and >", "" # strings
+ ]
+
+ v2 = [
+ [v1, v1, v1],
+ {"a" => v1}
+ ]
+
+ v3 = [
+ XMLRPC::Base64.new("\001"*1000), # base64
+ :aSymbol, :anotherSym # symbols (-> string)
+ ]
+ v3_exp = [
+ "\001"*1000,
+ "aSymbol", "anotherSym"
+ ]
+ person = Person.new("Michael")
+
+ XMLRPC::XMLParser.each_installed_parser do |parser|
+ m = XMLRPC::Marshal.new(parser)
+
+ assert_equal( v1, m.load_response(m.dump_response(v1)) )
+ assert_equal( v2, m.load_response(m.dump_response(v2)) )
+ assert_equal( v3_exp, m.load_response(m.dump_response(v3)) )
+
+ pers = m.load_response(m.dump_response(person))
+
+ assert( pers.is_a?(Person) )
+ assert( person.name == pers.name )
+ end
+
+ # missing, Date, Time, DateTime
+ # Struct
+ end
+
+ def test_parser_invalid_values
+ values = [
+ -1-(2**31), 2**31,
+ Float::INFINITY, -Float::INFINITY, Float::NAN
+ ]
+ XMLRPC::XMLParser.each_installed_parser do |parser|
+ m = XMLRPC::Marshal.new(parser)
+
+ values.each do |v|
+ assert_raise(RuntimeError, "#{v} shouldn't be dumped, but dumped") \
+ { m.dump_response(v) }
+ end
+ end
+ end
+
+ def test_no_params_tag
+ # bug found by Idan Sofer
+
+ expect = %{<?xml version="1.0" ?><methodCall><methodName>myMethod</methodName><params/></methodCall>\n}
+
+ str = XMLRPC::Marshal.dump_call("myMethod")
+ assert_equal(expect, str)
+ end
+
+end
+end
diff --git a/jni/ruby/test/xmlrpc/test_parser.rb b/jni/ruby/test/xmlrpc/test_parser.rb
new file mode 100644
index 0000000..5591645
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_parser.rb
@@ -0,0 +1,93 @@
+require 'test/unit'
+require 'xmlrpc/datetime'
+require "xmlrpc/parser"
+require 'yaml'
+
+module TestXMLRPC
+module GenericParserTest
+ def datafile(base)
+ File.join(File.dirname(__FILE__), "data", base)
+ end
+
+ def load_data(name)
+ [File.read(datafile(name) + ".xml"), YAML.load(File.read(datafile(name) + ".expected"))]
+ end
+
+ def setup
+ @xml1, @expected1 = load_data('xml1')
+ @xml2, @expected2 = load_data('bug_covert')
+ @xml3, @expected3 = load_data('bug_bool')
+ @xml4, @expected4 = load_data('value')
+
+ @cdata_xml, @cdata_expected = load_data('bug_cdata')
+
+ @datetime_xml = File.read(datafile('datetime_iso8601.xml'))
+ @datetime_expected = XMLRPC::DateTime.new(2004, 11, 5, 1, 15, 23)
+
+ @fault_doc = File.read(datafile('fault.xml'))
+ end
+
+ # test parseMethodResponse --------------------------------------------------
+
+ def test_parseMethodResponse1
+ assert_equal(@expected1, @p.parseMethodResponse(@xml1))
+ end
+
+ def test_parseMethodResponse2
+ assert_equal(@expected2, @p.parseMethodResponse(@xml2))
+ end
+
+ def test_parseMethodResponse3
+ assert_equal(@expected3, @p.parseMethodResponse(@xml3))
+ end
+
+ def test_cdata
+ assert_equal(@cdata_expected, @p.parseMethodResponse(@cdata_xml))
+ end
+
+ def test_dateTime
+ assert_equal(@datetime_expected, @p.parseMethodResponse(@datetime_xml)[1])
+ end
+
+ # test parseMethodCall ------------------------------------------------------
+
+ def test_parseMethodCall
+ assert_equal(@expected4, @p.parseMethodCall(@xml4))
+ end
+
+ # test fault ----------------------------------------------------------------
+
+ def test_fault
+ flag, fault = @p.parseMethodResponse(@fault_doc)
+ assert_equal(flag, false)
+ unless fault.is_a? XMLRPC::FaultException
+ assert(false, "must be an instance of class XMLRPC::FaultException")
+ end
+ assert_equal(fault.faultCode, 4)
+ assert_equal(fault.faultString, "an error message")
+ end
+
+ def test_fault_message
+ fault = XMLRPC::FaultException.new(1234, 'an error message')
+ assert_equal('an error message', fault.to_s)
+ assert_equal('#<XMLRPC::FaultException: an error message>', fault.inspect)
+ end
+end
+
+# create test class for each installed parser
+XMLRPC::XMLParser.each_installed_parser do |parser|
+ klass = parser.class
+ name = klass.to_s.split("::").last
+
+ eval %{
+ class Test_#{name} < Test::Unit::TestCase
+ include GenericParserTest
+
+ def setup
+ super
+ @p = #{klass}.new
+ end
+ end
+ }
+end
+end
diff --git a/jni/ruby/test/xmlrpc/test_webrick_server.rb b/jni/ruby/test/xmlrpc/test_webrick_server.rb
new file mode 100644
index 0000000..bc10239
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/test_webrick_server.rb
@@ -0,0 +1,135 @@
+# coding: utf-8
+
+require 'test/unit'
+require 'webrick'
+require_relative 'webrick_testing'
+require "xmlrpc/server"
+require 'xmlrpc/client'
+require 'logger'
+
+module TestXMLRPC
+class Test_Webrick < Test::Unit::TestCase
+ include WEBrick_Testing
+
+ def create_servlet(server)
+ s = XMLRPC::WEBrickServlet.new
+
+ basic_auth = WEBrick::HTTPAuth::BasicAuth.new(
+ :Realm => 'auth',
+ :UserDB => WEBrick::HTTPAuth::Htpasswd.new(File.expand_path('./htpasswd', File.dirname(__FILE__))),
+ :Logger => server.logger,
+ )
+
+ class << s; self end.send(:define_method, :service) {|req, res|
+ basic_auth.authenticate(req, res)
+ super(req, res)
+ }
+
+ s.add_handler("test.add") do |a,b|
+ a + b
+ end
+
+ s.add_handler("test.div") do |a,b|
+ if b == 0
+ raise XMLRPC::FaultException.new(1, "division by zero")
+ else
+ a / b
+ end
+ end
+
+ s.set_default_handler do |name, *args|
+ raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
+ " or wrong number of parameters!")
+ end
+
+ s.add_introspection
+
+ return s
+ end
+
+ def setup_http_server_option(use_ssl)
+ option = {
+ :BindAddress => "localhost",
+ :Port => 0,
+ :SSLEnable => use_ssl,
+ }
+ if use_ssl
+ require 'webrick/https'
+ option.update(
+ :SSLVerifyClient => ::OpenSSL::SSL::VERIFY_NONE,
+ :SSLCertName => []
+ )
+ end
+
+ option
+ end
+
+ def test_client_server
+ # NOTE: I don't enable SSL testing as this hangs
+ [false].each do |use_ssl|
+ option = setup_http_server_option(use_ssl)
+ with_server(option, method(:create_servlet)) {|addr|
+ @s = XMLRPC::Client.new3(:host => addr.ip_address, :port => addr.ip_port, :use_ssl => use_ssl)
+ @s.user = 'admin'
+ @s.password = 'admin'
+ silent do
+ do_test
+ end
+ @s.http.finish
+ @s = XMLRPC::Client.new3(:host => addr.ip_address, :port => addr.ip_port, :use_ssl => use_ssl)
+ @s.user = '01234567890123456789012345678901234567890123456789012345678901234567890123456789'
+ @s.password = 'guest'
+ silent do
+ do_test
+ end
+ @s.http.finish
+ }
+ end
+ end
+
+ def silent
+ begin
+ back, $VERBOSE = $VERBOSE, nil
+ yield
+ ensure
+ $VERBOSE = back
+ end
+ end
+
+ def do_test
+ # simple call
+ assert_equal 9, @s.call('test.add', 4, 5)
+
+ # fault exception
+ assert_raise(XMLRPC::FaultException) { @s.call('test.div', 1, 0) }
+
+ # fault exception via call2
+ ok, param = @s.call2('test.div', 1, 0)
+ assert_equal false, ok
+ assert_instance_of XMLRPC::FaultException, param
+ assert_equal 1, param.faultCode
+ assert_equal 'division by zero', param.faultString
+
+ # call2 without fault exception
+ ok, param = @s.call2('test.div', 10, 5)
+ assert_equal true, ok
+ assert_equal param, 2
+
+ # introspection
+ assert_equal ["test.add", "test.div", "system.listMethods", "system.methodSignature", "system.methodHelp"], @s.call("system.listMethods")
+
+ # default handler (missing handler)
+ ok, param = @s.call2('test.nonexisting')
+ assert_equal false, ok
+ assert_equal(-99, param.faultCode)
+
+ # default handler (wrong number of arguments)
+ ok, param = @s.call2('test.add', 1, 2, 3)
+ assert_equal false, ok
+ assert_equal(-99, param.faultCode)
+
+ # multibyte characters
+ assert_equal "あいうえおかきくけこ", @s.call('test.add', "あいうえお", "かきくけこ")
+ end
+end
+end
diff --git a/jni/ruby/test/xmlrpc/webrick_testing.rb b/jni/ruby/test/xmlrpc/webrick_testing.rb
new file mode 100644
index 0000000..37c0b69
--- /dev/null
+++ b/jni/ruby/test/xmlrpc/webrick_testing.rb
@@ -0,0 +1,55 @@
+require 'timeout'
+
+module TestXMLRPC
+module WEBrick_Testing
+ def start_server(logger, config={})
+ raise "already started" if defined?(@__server) && @__server
+ @__started = false
+
+ @__server = WEBrick::HTTPServer.new(
+ {
+ :BindAddress => "localhost",
+ :Logger => logger,
+ :AccessLog => [],
+ }.update(config))
+ yield @__server
+ @__started = true
+
+ addr = @__server.listeners.first.connect_address
+
+ @__server_thread = Thread.new {
+ begin
+ @__server.start
+ rescue IOError => e
+ assert_match(/closed/, e.message)
+ ensure
+ @__started = false
+ end
+ }
+
+ addr
+ end
+
+ def with_server(config, servlet)
+ log = []
+ logger = WEBrick::Log.new(log, WEBrick::BasicLog::WARN)
+ addr = start_server(logger, config) {|w|
+ servlet = servlet.call(w) if servlet.respond_to? :call
+ w.mount('/RPC2', servlet)
+ }
+ client_thread = Thread.new {
+ begin
+ yield addr
+ ensure
+ @__server.shutdown
+ end
+ }
+ server_thread = Thread.new {
+ @__server_thread.join
+ @__server = nil
+ assert_equal([], log)
+ }
+ assert_join_threads([client_thread, server_thread])
+ end
+end
+end