VirtualBox

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

Last change on this file since 26600 was 26562, checked in by vboxsync, 15 years ago

*: Added svn:keywords where missing.

  • Property filesplitter.c set to Makefile.kmk
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 15.9 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 }
134 }
135 else if (!strcmp(pcszMode, "version"))
136 {
137 if (argc < 3)
138 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
139 else
140 {
141 _vbox__IVirtualBox_USCOREgetVersion req;
142 req._USCOREthis = argv[2];
143 _vbox__IVirtualBox_USCOREgetVersionResponse resp;
144
145 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREgetVersion(&soap,
146 pcszArgEndpoint,
147 NULL,
148 &req,
149 &resp)))
150 std::cout << "version: \"" << resp.returnval << "\"\n";
151 }
152 }
153 else if (!strcmp(pcszMode, "gethost"))
154 {
155 if (argc < 3)
156 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
157 else
158 {
159 _vbox__IVirtualBox_USCOREgetHost req;
160 req._USCOREthis = argv[2];
161 _vbox__IVirtualBox_USCOREgetHostResponse resp;
162
163 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREgetHost(&soap,
164 pcszArgEndpoint,
165 NULL,
166 &req,
167 &resp)))
168 {
169 std::cout << "Host objref " << resp.returnval << "\n";
170 }
171 }
172 }
173 else if (!strcmp(pcszMode, "getmachines"))
174 {
175 if (argc < 3)
176 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
177 else
178 {
179 _vbox__IVirtualBox_USCOREgetMachines req;
180 req._USCOREthis = argv[2];
181 _vbox__IVirtualBox_USCOREgetMachinesResponse resp;
182
183 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREgetMachines(&soap,
184 pcszArgEndpoint,
185 NULL,
186 &req,
187 &resp)))
188 {
189 size_t c = resp.returnval.size();
190 for (size_t i = 0;
191 i < c;
192 ++i)
193 {
194 std::cout << "Machine " << i << ": objref " << resp.returnval[i] << "\n";
195 }
196 }
197 }
198 }
199 else if (!strcmp(pcszMode, "createmachine"))
200 {
201 if (argc < 5)
202 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
203 else
204 {
205 _vbox__IVirtualBox_USCOREcreateMachine req;
206 req._USCOREthis = argv[2];
207 req.baseFolder = argv[3];
208 req.name = argv[4];
209 std::cout << "createmachine: baseFolder = \"" << req.baseFolder << "\", name = \"" << req.name << "\"\n";
210 _vbox__IVirtualBox_USCOREcreateMachineResponse resp;
211
212 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREcreateMachine(&soap,
213 pcszArgEndpoint,
214 NULL,
215 &req,
216 &resp)))
217 std::cout << "Machine created: managed object reference ID is " << resp.returnval << "\n";
218 }
219 }
220 else if (!strcmp(pcszMode, "registermachine"))
221 {
222 if (argc < 4)
223 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
224 else
225 {
226 _vbox__IVirtualBox_USCOREregisterMachine req;
227 req._USCOREthis = argv[2];
228 req.machine = argv[3];
229 _vbox__IVirtualBox_USCOREregisterMachineResponse resp;
230 if (!(soaprc = soap_call___vbox__IVirtualBox_USCOREregisterMachine(&soap,
231 pcszArgEndpoint,
232 NULL,
233 &req,
234 &resp)))
235 std::cout << "Machine registered.\n";
236 }
237 }
238 else if (!strcmp(pcszMode, "getdvddrives"))
239 {
240 if (argc < 3)
241 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
242 else
243 {
244 _vbox__IHost_USCOREgetDVDDrives req;
245 req._USCOREthis = argv[2];
246 _vbox__IHost_USCOREgetDVDDrivesResponse resp;
247 if (!(soaprc = soap_call___vbox__IHost_USCOREgetDVDDrives(&soap,
248 pcszArgEndpoint,
249 NULL,
250 &req,
251 &resp)))
252 {
253 size_t c = resp.returnval.size();
254 for (size_t i = 0;
255 i < c;
256 ++i)
257 {
258 std::cout << "DVD drive " << i << ": objref " << resp.returnval[i] << "\n";
259 }
260 }
261 }
262 }
263 else if (!strcmp(pcszMode, "getname"))
264 {
265 if (argc < 3)
266 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
267 else
268 {
269 _vbox__IMachine_USCOREgetName req;
270 req._USCOREthis = argv[2];
271 _vbox__IMachine_USCOREgetNameResponse resp;
272 if (!(soaprc = soap_call___vbox__IMachine_USCOREgetName(&soap,
273 pcszArgEndpoint,
274 NULL,
275 &req,
276 &resp)))
277 printf("Name is: %s\n", resp.returnval.c_str());
278 }
279 }
280 else if (!strcmp(pcszMode, "getid"))
281 {
282 if (argc < 3)
283 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
284 else
285 {
286 _vbox__IMachine_USCOREgetId req;
287 req._USCOREthis = argv[2];
288 _vbox__IMachine_USCOREgetIdResponse resp;
289 if (!(soaprc = soap_call___vbox__IMachine_USCOREgetId(&soap,
290 pcszArgEndpoint,
291 NULL,
292 &req,
293 &resp)))
294 std::cout << "UUID is: " << resp.returnval << "\n";;
295 }
296 }
297 else if (!strcmp(pcszMode, "getostypeid"))
298 {
299 if (argc < 3)
300 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
301 else
302 {
303 _vbox__IMachine_USCOREgetOSTypeId req;
304 req._USCOREthis = argv[2];
305 _vbox__IMachine_USCOREgetOSTypeIdResponse resp;
306 if (!(soaprc = soap_call___vbox__IMachine_USCOREgetOSTypeId(&soap,
307 pcszArgEndpoint,
308 NULL,
309 &req,
310 &resp)))
311 std::cout << "Guest OS type is: " << resp.returnval << "\n";
312 }
313 }
314 else if (!strcmp(pcszMode, "savesettings"))
315 {
316 if (argc < 3)
317 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
318 else
319 {
320 _vbox__IMachine_USCOREsaveSettings req;
321 req._USCOREthis = argv[2];
322 _vbox__IMachine_USCOREsaveSettingsResponse resp;
323 if (!(soaprc = soap_call___vbox__IMachine_USCOREsaveSettings(&soap,
324 pcszArgEndpoint,
325 NULL,
326 &req,
327 &resp)))
328 std::cout << "Settings saved\n";
329 }
330 }
331 else if (!strcmp(pcszMode, "release"))
332 {
333 if (argc < 3)
334 std::cout << "Not enough arguments for \"" << pcszMode << "\" mode.\n";
335 else
336 {
337 _vbox__IManagedObjectRef_USCORErelease req;
338 req._USCOREthis = argv[2];
339 _vbox__IManagedObjectRef_USCOREreleaseResponse resp;
340 if (!(soaprc = soap_call___vbox__IManagedObjectRef_USCORErelease(&soap,
341 pcszArgEndpoint,
342 NULL,
343 &req,
344 &resp)))
345 std::cout << "Managed object reference " << req._USCOREthis << " released.\n";
346 }
347 }
348 else
349 std::cout << "Unknown mode parameter \"" << pcszMode << "\".\n";
350
351 if (soaprc)
352 {
353 if ( (soap.fault)
354 && (soap.fault->detail)
355 )
356 {
357 if (soap.fault->detail->vbox__InvalidObjectFault)
358 {
359 std::cout << "Bad object ID: " << soap.fault->detail->vbox__InvalidObjectFault->badObjectID << "\n";
360 }
361 if (soap.fault->detail->vbox__RuntimeFault)
362 {
363 std::cout << "Result code: 0x" << std::hex << soap.fault->detail->vbox__RuntimeFault->resultCode << "\n";
364 std::cout << "Text: " << std::hex << soap.fault->detail->vbox__RuntimeFault->text << "\n";
365 std::cout << "Component: " << std::hex << soap.fault->detail->vbox__RuntimeFault->component << "\n";
366 std::cout << "Interface ID: " << std::hex << soap.fault->detail->vbox__RuntimeFault->interfaceID << "\n";
367 }
368 }
369 else
370 {
371 std::cerr << "Invalid fault data, fault message:\n";
372 soap_print_fault(&soap, stderr); // display the SOAP fault message on the stderr stream
373 }
374 }
375
376 soap_destroy(&soap); // delete deserialized class instances (for C++ only)
377 soap_end(&soap); // remove deserialized data and clean up
378 soap_done(&soap); // detach the gSOAP environment
379
380 return soaprc;
381}
382
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