initial load of upstream version 1.06.32
[xmlrpc-c] / src / test / client.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <errno.h>
5
6 #include "xmlrpc_config.h"
7
8 #include "xmlrpc-c/base.h"
9 #include "xmlrpc-c/client.h"
10
11 #include "test.h"
12 #include "client.h"
13
14
15 static void
16 testGlobalConst(void) {
17
18     xmlrpc_env env;
19     xmlrpc_env_init(&env);
20
21     xmlrpc_client_setup_global_const(&env);
22     TEST_NO_FAULT(&env);
23
24     xmlrpc_client_teardown_global_const();
25
26     xmlrpc_client_setup_global_const(&env);
27     TEST_NO_FAULT(&env);
28     xmlrpc_client_setup_global_const(&env);
29     TEST_NO_FAULT(&env);
30
31     xmlrpc_client_teardown_global_const();
32     xmlrpc_client_teardown_global_const();
33
34     xmlrpc_env_clean(&env);
35 }
36
37
38
39 static void
40 testCreateDestroy(void) {
41
42     xmlrpc_env env;
43     xmlrpc_client * clientP;
44     struct xmlrpc_clientparms clientParms1;
45     struct xmlrpc_curl_xportparms curlTransportParms1;
46
47     xmlrpc_env_init(&env);
48
49     xmlrpc_client_create(&env, 0, "testprog", "1.0", NULL, 0, &clientP);
50     TEST_FAULT(&env, XMLRPC_INTERNAL_ERROR);
51         /* Didn't set up global const */
52
53     xmlrpc_client_setup_global_const(&env);
54     TEST_NO_FAULT(&env);
55
56     xmlrpc_client_create(&env, 0, "testprog", "1.0", NULL, 0, &clientP);
57     TEST_NO_FAULT(&env);
58     xmlrpc_client_destroy(clientP);
59
60     xmlrpc_client_create(&env, 0, "testprog", "1.0", &clientParms1, 0,
61                          &clientP);
62     TEST_NO_FAULT(&env);
63     xmlrpc_client_destroy(clientP);
64
65     clientParms1.transport = "curl";
66     xmlrpc_client_create(&env, 0, "testprog", "1.0",
67                         &clientParms1, XMLRPC_CPSIZE(transport), &clientP);
68     TEST_NO_FAULT(&env);
69     xmlrpc_client_destroy(clientP);
70
71     clientParms1.transportparmsP = NULL;
72     xmlrpc_client_create(&env, 0, "testprog", "1.0",
73                          &clientParms1, XMLRPC_CPSIZE(transportparmsP),
74                          &clientP);
75     TEST_NO_FAULT(&env);
76     xmlrpc_client_destroy(clientP);
77
78     clientParms1.transportparmsP = (struct xmlrpc_xportparms *)(void *)
79         &curlTransportParms1;
80
81     xmlrpc_client_create(&env, 0, "testprog", "1.0",
82                          &clientParms1, XMLRPC_CPSIZE(transportparmsP),
83                          &clientP);
84     TEST_FAULT(&env, XMLRPC_INTERNAL_ERROR);
85
86     clientParms1.transportparm_size = 0;
87     xmlrpc_client_create(&env, 0, "testprog", "1.0",
88                          &clientParms1, XMLRPC_CPSIZE(transportparm_size),
89                          &clientP);
90     TEST_NO_FAULT(&env);
91     xmlrpc_client_destroy(clientP);
92
93     curlTransportParms1.network_interface = "eth0";
94     clientParms1.transportparm_size = XMLRPC_CXPSIZE(network_interface);
95     xmlrpc_client_create(&env, 0, "testprog", "1.0",
96                          &clientParms1, XMLRPC_CPSIZE(transportparm_size),
97                          &clientP);
98     TEST_NO_FAULT(&env);
99     xmlrpc_client_destroy(clientP);
100
101     curlTransportParms1.no_ssl_verifypeer = 1;
102     curlTransportParms1.no_ssl_verifyhost = 1;
103     clientParms1.transportparm_size = XMLRPC_CXPSIZE(no_ssl_verifyhost);
104     xmlrpc_client_create(&env, 0, "testprog", "1.0",
105                          &clientParms1, XMLRPC_CPSIZE(transportparm_size),
106                          &clientP);
107     TEST_NO_FAULT(&env);
108     xmlrpc_client_destroy(clientP);
109
110     curlTransportParms1.user_agent = "testprog/1.0";
111     clientParms1.transportparm_size = XMLRPC_CXPSIZE(user_agent);
112     xmlrpc_client_create(&env, 0, "testprog", "1.0",
113                          &clientParms1, XMLRPC_CPSIZE(transportparm_size),
114                          &clientP);
115     TEST_NO_FAULT(&env);
116     xmlrpc_client_destroy(clientP);
117
118     xmlrpc_client_teardown_global_const();
119
120     xmlrpc_env_clean(&env);
121 }
122
123
124
125 static void
126 testSynchCall(void) {
127
128     xmlrpc_env env;
129     xmlrpc_client * clientP;
130     xmlrpc_value * resultP;
131     xmlrpc_value * emptyArrayP;
132     xmlrpc_server_info * noSuchServerInfoP;
133
134     xmlrpc_env_init(&env);
135
136     emptyArrayP = xmlrpc_array_new(&env);
137     TEST_NO_FAULT(&env);
138
139     xmlrpc_client_setup_global_const(&env);
140     TEST_NO_FAULT(&env);
141
142     xmlrpc_client_create(&env, 0, "testprog", "1.0", NULL, 0, &clientP);
143     TEST_NO_FAULT(&env);
144
145     noSuchServerInfoP = xmlrpc_server_info_new(&env, "nosuchserver");
146     TEST_NO_FAULT(&env);
147
148     xmlrpc_client_call2(&env, clientP, noSuchServerInfoP, "nosuchmethod",
149                         emptyArrayP, &resultP);
150     TEST_FAULT(&env, XMLRPC_NETWORK_ERROR);  /* No such server */
151
152     xmlrpc_client_call2f(&env, clientP, "nosuchserver", "nosuchmethod",
153                           &resultP, "(i)", 7);
154     TEST_FAULT(&env, XMLRPC_NETWORK_ERROR);  /* No such server */
155
156     xmlrpc_server_info_free(noSuchServerInfoP);
157
158     xmlrpc_client_destroy(clientP);
159
160     xmlrpc_DECREF(emptyArrayP);
161     
162     xmlrpc_client_teardown_global_const();
163
164     xmlrpc_env_clean(&env);
165 }
166
167
168
169 static void
170 testInitCleanup(void) {
171
172     xmlrpc_env env;
173     struct xmlrpc_clientparms clientParms1;
174     struct xmlrpc_curl_xportparms curlTransportParms1;
175
176     xmlrpc_env_init(&env);
177
178     xmlrpc_client_init2(&env, 0, "testprog", "1.0", NULL, 0);
179     TEST_NO_FAULT(&env);
180     xmlrpc_client_cleanup();
181
182     xmlrpc_client_init2(&env, 0, "testprog", "1.0", &clientParms1, 0);
183     TEST_NO_FAULT(&env);
184     xmlrpc_client_cleanup();
185
186     clientParms1.transport = "curl";
187     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
188                         &clientParms1, XMLRPC_CPSIZE(transport));
189     TEST_NO_FAULT(&env);
190     xmlrpc_client_cleanup();
191
192     clientParms1.transportparmsP = NULL;
193     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
194                         &clientParms1, XMLRPC_CPSIZE(transportparmsP));
195     TEST_NO_FAULT(&env);
196     xmlrpc_client_cleanup();
197
198     clientParms1.transportparmsP = (struct xmlrpc_xportparms *)(void *)
199         &curlTransportParms1;
200
201     /* Fails because we didn't include transportparm_size: */
202     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
203                         &clientParms1, XMLRPC_CPSIZE(transportparmsP));
204     TEST_FAULT(&env, XMLRPC_INTERNAL_ERROR);
205
206     clientParms1.transportparm_size = 0;
207     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
208                         &clientParms1, XMLRPC_CPSIZE(transportparm_size));
209     TEST_NO_FAULT(&env);
210     xmlrpc_client_cleanup();
211
212     curlTransportParms1.network_interface = "eth0";
213     clientParms1.transportparm_size = XMLRPC_CXPSIZE(network_interface);
214     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
215                         &clientParms1, XMLRPC_CPSIZE(transportparm_size));
216     TEST_NO_FAULT(&env);
217     xmlrpc_client_cleanup();
218
219     curlTransportParms1.no_ssl_verifypeer = 1;
220     curlTransportParms1.no_ssl_verifyhost = 1;
221     clientParms1.transportparm_size = XMLRPC_CXPSIZE(no_ssl_verifyhost);
222     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
223                         &clientParms1, XMLRPC_CPSIZE(transportparm_size));
224     TEST_NO_FAULT(&env);
225     xmlrpc_client_cleanup();
226
227     curlTransportParms1.user_agent = "testprog/1.0";
228     clientParms1.transportparm_size = XMLRPC_CXPSIZE(user_agent);
229     xmlrpc_client_init2(&env, 0, "testprog", "1.0",
230                         &clientParms1, XMLRPC_CPSIZE(transportparm_size));
231     TEST_NO_FAULT(&env);
232     xmlrpc_client_cleanup();
233
234     xmlrpc_client_init(0, "testprog", "1.0");
235     TEST_NO_FAULT(&env);
236     xmlrpc_client_cleanup();
237
238     xmlrpc_env_clean(&env);
239 }
240
241
242
243 void 
244 test_client(void) {
245
246     printf("Running client tests.");
247
248     testGlobalConst();
249     testCreateDestroy();
250     testInitCleanup();
251     testSynchCall();
252
253     printf("\n");
254     printf("Client tests done.\n");
255 }