VirtualBox

source: vbox/trunk/src/VBox/Main/webservice/webtest.cpp@ 22762

Last change on this file since 22762 was 22666, checked in by vboxsync, 15 years ago

webservice: add webtest logoff command, docs, cleanup

  • Property filesplitter.c set to Makefile.kmk
  • Property svn:eol-style set to native
File size: 16.6 KB
Line 
1/*
2 * webtest.cpp:
3 * demo webservice client in C++. This mimics some of the
4 * functionality of VBoxManage for testing purposes.
5 *
6 * Copyright (C) 2006-2009 Sun Microsystems, Inc.
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
17 * Clara, CA 95054 USA or visit http://www.sun.com if you need
18 * additional information or have any questions.
19 */
20
21// gSOAP headers (must come after vbox includes because it checks for conflicting defs)
22#include "soapStub.h"
23
24// include generated namespaces table
25#include "vboxwebsrv.nsmap"
26
27#include <iostream>
28#include <sstream>
29#include <string>
30
31
32/**
33 *
34 * @param argc
35 * @param argv[]
36 * @return
37 */
38int main(int argc, char* argv[])
39{
40 struct soap soap; // gSOAP runtime environment
41 soap_init(&soap); // initialize runtime environment (only once)
42
43 if (argc < 2)
44 {
45 std::cout <<
46 "webtest: VirtualBox webservice testcase.\n"
47 "Usage:\n"
48 " - IWebsessionManager:\n"
49 " - webtest logon <user> <pass>: IWebsessionManager::logon().\n"
50 " - webtest getsession <vboxref>: IWebsessionManager::getSessionObject().\n"
51 " - webtest logoff <vboxref>: IWebsessionManager::logoff().\n"
52 " - IVirtualBox:\n"
53 " - webtest version <vboxref>: IVirtualBox::getVersion().\n"
54 " - webtest gethost <vboxref>: IVirtualBox::getHost().\n"
55 " - webtest getmachines <vboxref>: IVirtualBox::getMachines().\n"
56 " - webtest createmachine <vboxref> <baseFolder> <name>: IVirtualBox::createMachine().\n"
57 " - webtest registermachine <vboxref> <machineref>: IVirtualBox::registerMachine().\n"
58 " - IHost:\n"
59 " - webtest getdvddrives <hostref>: IHost::getDVDDrives.\n"
60 " - IHostDVDDrive:\n"
61 " - webtest getdvdname <dvdref>: IHostDVDDrive::getname.\n"
62 " - IMachine:\n"
63 " - webtest getname <machineref>: IMachine::getName().\n"
64 " - webtest getid <machineref>: IMachine::getId().\n"
65 " - webtest getostype <machineref>: IMachine::getGuestOSType().\n"
66 " - webtest savesettings <machineref>: IMachine::saveSettings().\n"
67 " - All managed object references:\n"
68 " - webtest getif <ref>: report interface of object.\n"
69 " - webtest release <ref>: IUnknown::Release().\n";
70 exit(1);
71 }
72
73 const char *pcszArgEndpoint = "localhost:18083";
74
75 const char *pcszMode = argv[1];
76 int soaprc = 2;
77
78 if (!strcmp(pcszMode, "logon"))
79 {
80 if (argc < 4)
81 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
82 else
83 {
84 _vbox__IWebsessionManager_USCORElogon req;
85 req.username = argv[2];
86 req.password = argv[3];
87 _vbox__IWebsessionManager_USCORElogonResponse resp;
88
89 if (!(soaprc = soap_call___vbox__IWebsessionManager_USCORElogon(&soap,
90 pcszArgEndpoint,
91 NULL,
92 &req,
93 &resp)))
94 std::cout << "VirtualBox objref: \"" << resp.returnval << "\"\n";
95 }
96 }
97 else if (!strcmp(pcszMode, "getsession"))
98 {
99 if (argc < 3)
100 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
101 else
102 {
103 _vbox__IWebsessionManager_USCOREgetSessionObject req;
104 req.refIVirtualBox = argv[2];
105 _vbox__IWebsessionManager_USCOREgetSessionObjectResponse resp;
106
107 if (!(soaprc = soap_call___vbox__IWebsessionManager_USCOREgetSessionObject(&soap,
108 pcszArgEndpoint,
109 NULL,
110 &req,
111 &resp)))
112 std::cout << "session: \"" << resp.returnval << "\"\n";
113 }
114 }
115 else if (!strcmp(pcszMode, "logoff"))
116 {
117 if (argc < 3)
118 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
119 else
120 {
121 _vbox__IWebsessionManager_USCORElogoff req;
122 req.refIVirtualBox = argv[2];
123 _vbox__IWebsessionManager_USCORElogoffResponse resp;
124
125 if (!(soaprc = soap_call___vbox__IWebsessionManager_USCORElogoff(&soap,
126 pcszArgEndpoint,
127 NULL,
128 &req,
129 &resp)))
130 ;
131 }
132 }
133 else if (!strcmp(pcszMode, "version"))
134 {
135 if (argc < 3)
136 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
137 else
138 {
139 _vbox__IVirtualBox_USCOREgetVersion req;
140 req._USCOREthis = argv[2];
141 _vbox__IVirtualBox_USCOREgetVersionResponse resp;
142
143 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREgetVersion(&soap,
144 pcszArgEndpoint,
145 NULL,
146 &req,
147 &resp)))
148 std::cout << "version: \"" << resp.returnval << "\"\n";
149 }
150 }
151 else if (!strcmp(pcszMode, "gethost"))
152 {
153 if (argc < 3)
154 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
155 else
156 {
157 _vbox__IVirtualBox_USCOREgetHost req;
158 req._USCOREthis = argv[2];
159 _vbox__IVirtualBox_USCOREgetHostResponse resp;
160
161 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREgetHost(&soap,
162 pcszArgEndpoint,
163 NULL,
164 &req,
165 &resp)))
166 {
167 std::cout << "Host objref " << resp.returnval << "\n";
168 }
169 }
170 }
171 else if (!strcmp(pcszMode, "getmachines"))
172 {
173 if (argc < 3)
174 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
175 else
176 {
177 _vbox__IVirtualBox_USCOREgetMachines req;
178 req._USCOREthis = argv[2];
179 _vbox__IVirtualBox_USCOREgetMachinesResponse resp;
180
181 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREgetMachines(&soap,
182 pcszArgEndpoint,
183 NULL,
184 &req,
185 &resp)))
186 {
187 size_t c = resp.returnval.size();
188 for (size_t i = 0;
189 i < c;
190 ++i)
191 {
192 std::cout << "Machine " << i << ": objref " << resp.returnval[i] << "\n";
193 }
194 }
195 }
196 }
197 else if (!strcmp(pcszMode, "createmachine"))
198 {
199 if (argc < 5)
200 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
201 else
202 {
203 _vbox__IVirtualBox_USCOREcreateMachine req;
204 req._USCOREthis = argv[2];
205 req.baseFolder = argv[3];
206 req.name = argv[4];
207 std::cout << "createmachine: baseFolder = \"" << req.baseFolder << "\", name = \"" << req.name << "\"\n";
208 _vbox__IVirtualBox_USCOREcreateMachineResponse resp;
209
210 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREcreateMachine(&soap,
211 pcszArgEndpoint,
212 NULL,
213 &req,
214 &resp)))
215 std::cout << "Machine created: managed object reference ID is " << resp.returnval << "\n";
216 }
217 }
218 else if (!strcmp(pcszMode, "registermachine"))
219 {
220 if (argc < 4)
221 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
222 else
223 {
224 _vbox__IVirtualBox_USCOREregisterMachine req;
225 req._USCOREthis = argv[2];
226 req.machine = argv[3];
227 _vbox__IVirtualBox_USCOREregisterMachineResponse resp;
228 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREregisterMachine(&soap,
229 pcszArgEndpoint,
230 NULL,
231 &req,
232 &resp)))
233 std::cout << "Machine registered.\n";
234 }
235 }
236 else if (!strcmp(pcszMode, "getdvddrives"))
237 {
238 if (argc < 3)
239 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
240 else
241 {
242 _vbox__IHost_USCOREgetDVDDrives req;
243 req._USCOREthis = argv[2];
244 _vbox__IHost_USCOREgetDVDDrivesResponse resp;
245 if (!(soaprc = soap_call___vbox__IHost_USCOREgetDVDDrives(&soap,
246 pcszArgEndpoint,
247 NULL,
248 &req,
249 &resp)))
250 {
251 size_t c = resp.returnval.size();
252 for (size_t i = 0;
253 i < c;
254 ++i)
255 {
256 std::cout << "DVD drive " << i << ": objref " << resp.returnval[i] << "\n";
257 }
258 }
259 }
260 }
261 else if (!strcmp(pcszMode, "getdvdname"))
262 {
263 if (argc < 3)
264 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
265 else
266 {
267 _vbox__IHostDVDDrive_USCOREgetName req;
268 req._USCOREthis = argv[2];
269 _vbox__IHostDVDDrive_USCOREgetNameResponse resp;
270 if (!(soaprc = soap_call___vbox__IHostDVDDrive_USCOREgetName(&soap,
271 pcszArgEndpoint,
272 NULL,
273 &req,
274 &resp)))
275 std::cout << "Name is: \"" << resp.returnval << "\"\n";
276 }
277 }
278 else if (!strcmp(pcszMode, "getname"))
279 {
280 if (argc < 3)
281 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
282 else
283 {
284 _vbox__IMachine_USCOREgetName req;
285 req._USCOREthis = argv[2];
286 _vbox__IMachine_USCOREgetNameResponse resp;
287 if (!(soaprc = soap_call___vbox__IMachine_USCOREgetName(&soap,
288 pcszArgEndpoint,
289 NULL,
290 &req,
291 &resp)))
292 printf("Name is: %s\n", resp.returnval.c_str());
293 }
294 }
295 else if (!strcmp(pcszMode, "getid"))
296 {
297 if (argc < 3)
298 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
299 else
300 {
301 _vbox__IMachine_USCOREgetId req;
302 req._USCOREthis = argv[2];
303 _vbox__IMachine_USCOREgetIdResponse resp;
304 if (!(soaprc = soap_call___vbox__IMachine_USCOREgetId(&soap,
305 pcszArgEndpoint,
306 NULL,
307 &req,
308 &resp)))
309 std::cout << "UUID is: " << resp.returnval << "\n";;
310 }
311 }
312 else if (!strcmp(pcszMode, "getostypeid"))
313 {
314 if (argc < 3)
315 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
316 else
317 {
318 _vbox__IMachine_USCOREgetOSTypeId req;
319 req._USCOREthis = argv[2];
320 _vbox__IMachine_USCOREgetOSTypeIdResponse resp;
321 if (!(soaprc = soap_call___vbox__IMachine_USCOREgetOSTypeId(&soap,
322 pcszArgEndpoint,
323 NULL,
324 &req,
325 &resp)))
326 std::cout << "Guest OS type is: " << resp.returnval << "\n";
327 }
328 }
329 else if (!strcmp(pcszMode, "savesettings"))
330 {
331 if (argc < 3)
332 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
333 else
334 {
335 _vbox__IMachine_USCOREsaveSettings req;
336 req._USCOREthis = argv[2];
337 _vbox__IMachine_USCOREsaveSettingsResponse resp;
338 if (!(soaprc = soap_call___vbox__IMachine_USCOREsaveSettings(&soap,
339 pcszArgEndpoint,
340 NULL,
341 &req,
342 &resp)))
343 std::cout << "Settings saved\n";
344 }
345 }
346 else if (!strcmp(pcszMode, "release"))
347 {
348 if (argc < 3)
349 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
350 else
351 {
352 _vbox__IManagedObjectRef_USCORErelease req;
353 req._USCOREthis = argv[2];
354 _vbox__IManagedObjectRef_USCOREreleaseResponse resp;
355 if (!(soaprc = soap_call___vbox__IManagedObjectRef_USCORErelease(&soap,
356 pcszArgEndpoint,
357 NULL,
358 &req,
359 &resp)))
360 std::cout << "Managed object reference " << req._USCOREthis << " released.\n";
361 }
362 }
363 else
364 std::cout << "Unknown mode parameter \"" << pcszMode << "\".\n";
365
366 if (soaprc)
367 {
368 if ( (soap.fault)
369 && (soap.fault->detail)
370 )
371 {
372 if (soap.fault->detail->vbox__InvalidObjectFault)
373 {
374 std::cout << "Bad object ID: " << soap.fault->detail->vbox__InvalidObjectFault->badObjectID << "\n";
375 }
376 if (soap.fault->detail->vbox__RuntimeFault)
377 {
378 std::cout << "Result code: 0x" << std::hex << soap.fault->detail->vbox__RuntimeFault->resultCode << "\n";
379 std::cout << "Text: " << std::hex << soap.fault->detail->vbox__RuntimeFault->text << "\n";
380 std::cout << "Component: " << std::hex << soap.fault->detail->vbox__RuntimeFault->component << "\n";
381 std::cout << "Interface ID: " << std::hex << soap.fault->detail->vbox__RuntimeFault->interfaceID << "\n";
382 }
383 }
384 else
385 {
386 std::cerr << "Invalid fault data, fault message:\n";
387 soap_print_fault(&soap, stderr); // display the SOAP fault message on the stderr stream
388 }
389 }
390
391 soap_destroy(&soap); // delete deserialized class instances (for C++ only)
392 soap_end(&soap); // remove deserialized data and clean up
393 soap_done(&soap); // detach the gSOAP environment
394
395 return soaprc;
396}
397
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette