diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/xmlrpc |
Fresh start
Diffstat (limited to 'jni/ruby/test/xmlrpc')
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 |