initial load of upstream version 1.06.32
[xmlrpc-c] / src / test / xml_data.c
1 #include <stddef.h>
2
3 #include "xml_data.h"
4
5 #define RAW_STRING_DATA \
6     "<value><array><data>\r\n" \
7     "<value><i4>2147483647</i4></value>\r\n" \
8     "<value><i4>-2147483648</i4></value>\r\n" \
9     "<value><boolean>0</boolean></value>\r\n" \
10     "<value><boolean>1</boolean></value>\r\n" \
11     "<value><string>Hello, world! &lt;&amp;&gt;</string></value>\r\n" \
12     "<value><base64>\r\n" \
13     "YmFzZTY0IGRhdGE=\r\n" \
14     "</base64></value>\r\n" \
15     "<value>" \
16       "<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>" \
17       "</value>\r\n" \
18     "<value><array><data>\r\n" \
19     "</data></array></value>\r\n" \
20     "</data></array></value>"
21     
22 char const serialized_data[] = RAW_STRING_DATA;
23
24 char const serialized_call[] =
25     XML_PROLOGUE
26     "<methodCall>\r\n"
27     "<methodName>gloom&amp;doom</methodName>\r\n"
28     "<params>\r\n"
29     "<param><value><i4>10</i4></value></param>\r\n"
30     "<param><value><i4>20</i4></value></param>\r\n"
31     "</params>\r\n"
32     "</methodCall>\r\n";
33
34 char const serialized_fault[] =
35     XML_PROLOGUE
36     "<methodResponse>\r\n"
37     "<fault>\r\n"
38     "<value><struct>\r\n"
39     "<member><name>faultCode</name>\r\n"
40     "<value><i4>6</i4></value></member>\r\n"
41     "<member><name>faultString</name>\r\n"
42     "<value><string>A fault occurred</string></value></member>\r\n"
43     "</struct></value>\r\n"
44     "</fault>\r\n"
45     "</methodResponse>\r\n";
46
47 char const expat_data[] = XML_PROLOGUE RAW_STRING_DATA "\r\n";
48 char const expat_error_data[] =
49     XML_PROLOGUE \
50     "<foo><bar>abc</bar><baz></baz>\r\n";
51     /* Invalid because there's no closing </foo> */
52
53
54 char const good_response_xml[] = 
55     XML_PROLOGUE 
56     "<methodResponse><params><param>\r\n" 
57     "<value><array><data>\r\n" 
58     RAW_STRING_DATA "\r\n" 
59     "<value><int>1</int></value>\r\n" 
60     "<value><double>-1.0</double></value>\r\n" 
61     "<value><double>0.0</double></value>\r\n" 
62     "<value><double>1.0</double></value>\r\n" 
63     "<value><struct>\r\n" 
64     "<member><name>ten &lt;&amp;&gt;</name>\r\n" 
65     "<value><i4>10</i4></value></member>\r\n" 
66     "<member><name>twenty</name>\r\n" 
67     "<value><i4>20</i4></value></member>\r\n" 
68     "</struct></value>\r\n" 
69     "<value>Untagged string</value>\r\n" 
70     "</data></array></value>\r\n" 
71     "</param></params></methodResponse>\r\n";
72
73 #define VALUE_HEADER \
74     XML_PROLOGUE"<methodResponse><params><param><value>\r\n"
75 #define VALUE_FOOTER \
76     "</value></param></params></methodResponse>\r\n"
77
78 #define MEMBER_HEADER \
79     VALUE_HEADER"<struct><member>"
80 #define MEMBER_FOOTER \
81     "</member></struct>"VALUE_FOOTER
82 #define ARBITRARY_VALUE \
83     "<value><i4>0</i4></value>"
84
85 char const unparseable_value[] = VALUE_HEADER"<i4>"VALUE_FOOTER;
86
87 const char * bad_values[] = {
88     VALUE_HEADER"<i4>0</i4><i4>0</i4>"VALUE_FOOTER,
89     VALUE_HEADER"<foo></foo>"VALUE_FOOTER,
90     VALUE_HEADER"<i4><i4>4</i4></i4>"VALUE_FOOTER,
91     VALUE_HEADER"<i4>2147483648</i4>"VALUE_FOOTER,
92     VALUE_HEADER"<i4>-2147483649</i4>"VALUE_FOOTER,
93     VALUE_HEADER"<i4> 0</i4>"VALUE_FOOTER,
94     VALUE_HEADER"<i4>0 </i4>"VALUE_FOOTER,
95     VALUE_HEADER"<boolean>2</boolean>"VALUE_FOOTER,
96     VALUE_HEADER"<boolean>-1</boolean>"VALUE_FOOTER,
97     VALUE_HEADER"<double> 0.0</double>"VALUE_FOOTER,
98     VALUE_HEADER"<double>0.0 </double>"VALUE_FOOTER,
99     VALUE_HEADER"<array></array>"VALUE_FOOTER,
100     VALUE_HEADER"<array><data></data><data></data></array>"VALUE_FOOTER,
101     VALUE_HEADER"<array><data></data><data></data></array>"VALUE_FOOTER,
102     VALUE_HEADER"<array><data><foo></foo></data></array>"VALUE_FOOTER,
103     VALUE_HEADER"<struct><foo></foo></struct>"VALUE_FOOTER,
104     MEMBER_HEADER MEMBER_FOOTER,
105     MEMBER_HEADER"<name>a</name>"MEMBER_FOOTER,
106     MEMBER_HEADER"<name>a</name>"ARBITRARY_VALUE"<f></f>"MEMBER_FOOTER,
107     MEMBER_HEADER"<foo></foo>"ARBITRARY_VALUE MEMBER_FOOTER,
108     MEMBER_HEADER"<name>a</name><foo></foo>"MEMBER_FOOTER,
109     MEMBER_HEADER"<name><foo></foo></name>"ARBITRARY_VALUE MEMBER_FOOTER,
110     NULL
111 };
112
113 #define RESPONSE_HEADER \
114     XML_PROLOGUE"<methodResponse>\r\n"
115 #define RESPONSE_FOOTER \
116     "</methodResponse>\r\n"
117
118 #define PARAMS_RESP_HEADER \
119     RESPONSE_HEADER"<params>"
120 #define PARAMS_RESP_FOOTER \
121     "</params>"RESPONSE_FOOTER
122
123 #define FAULT_HEADER \
124     RESPONSE_HEADER"<fault>"
125 #define FAULT_FOOTER \
126     "</fault>"RESPONSE_FOOTER
127
128 #define FAULT_STRUCT_HEADER \
129     FAULT_HEADER"<value><struct>"
130 #define FAULT_STRUCT_FOOTER \
131     "</struct></value>"FAULT_FOOTER
132
133 const char * bad_responses[] = {
134     XML_PROLOGUE"<foo></foo>\r\n",
135     RESPONSE_HEADER RESPONSE_FOOTER,
136     RESPONSE_HEADER"<params></params><params></params>"RESPONSE_FOOTER,
137     RESPONSE_HEADER"<foo></foo>"RESPONSE_FOOTER,
138
139     /* Make sure we insist on only one parameter in a response. */
140     PARAMS_RESP_HEADER PARAMS_RESP_FOOTER,
141     PARAMS_RESP_HEADER
142     "<param><i4>0</i4></param>"
143     "<param><i4>0</i4></param>"
144     PARAMS_RESP_FOOTER,
145
146     /* Test other sorts of bad parameters. */
147     PARAMS_RESP_HEADER"<foo></foo>"PARAMS_RESP_FOOTER,
148     PARAMS_RESP_HEADER"<param></param>"PARAMS_RESP_FOOTER,
149     PARAMS_RESP_HEADER"<param><foo></foo></param>"PARAMS_RESP_FOOTER,
150     PARAMS_RESP_HEADER
151     "<param>"ARBITRARY_VALUE ARBITRARY_VALUE"</param>"
152     PARAMS_RESP_FOOTER,
153     
154     /* Basic fault tests. */
155     FAULT_HEADER FAULT_FOOTER,
156     FAULT_HEADER"<foo></foo>"FAULT_FOOTER,
157     FAULT_HEADER"<value></value><value></value>"FAULT_FOOTER,
158     FAULT_HEADER"<value><i4>1</i4></value>"FAULT_FOOTER,
159
160     /* Make sure we insist on the proper members within the fault struct. */
161     FAULT_STRUCT_HEADER
162     "<member><name>faultString</name>"
163     "<value><string>foo</string></value></member>"
164     FAULT_STRUCT_FOOTER,
165     FAULT_STRUCT_HEADER
166     "<member><name>faultCode</name>"
167     "<value><i4>0</i4></value></member>"
168     FAULT_STRUCT_FOOTER,
169     FAULT_STRUCT_HEADER
170     "<member><name>faultCode</name>"
171     "<value><i4>0</i4></value></member>"
172     "<member><name>faultString</name>"
173     "<value><i4>0</i4></value></member>"
174     FAULT_STRUCT_FOOTER,
175     FAULT_STRUCT_HEADER
176     "<member><name>faultCode</name>"
177     "<value><string>0</string></value></member>"
178     "<member><name>faultString</name>"
179     "<value><string>foo</string></value></member>"
180     FAULT_STRUCT_FOOTER,
181     NULL};
182
183 #define CALL_HEADER \
184     XML_PROLOGUE"<methodCall>\r\n"
185 #define CALL_FOOTER \
186     "</methodCall>\r\n"
187
188 const char * bad_calls[] = {
189     XML_PROLOGUE"<foo></foo>\r\n",
190     CALL_HEADER CALL_FOOTER,
191     CALL_HEADER"<methodName>m</methodName><foo></foo>"CALL_FOOTER, 
192     CALL_HEADER"<foo></foo><params></params>"CALL_FOOTER, 
193     CALL_HEADER"<methodName><f></f></methodName><params></params>"CALL_FOOTER, 
194     NULL};
195
196