TestVBox.java revision 2c76fd8cdec6f32663a03b16fb5871f7c54330a6
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync/* $Id$ */
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync/* Small sample/testcase which demonstrates that the same source code can
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * be used to connect to the webservice and (XP)COM APIs. */
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync/*
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * Copyright (C) 2010-2011 Oracle Corporation
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync *
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * available from http://www.virtualbox.org. This file is free software;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * you can redistribute it and/or modify it under the terms of the GNU
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * General Public License (GPL) as published by the Free Software
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync */
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsyncimport org.virtualbox_4_2.*;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsyncimport java.util.List;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsyncimport java.util.Arrays;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsyncimport java.math.BigInteger;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsyncpublic class TestVBox
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync{
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static void processEvent(IEvent ev)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("got event: " + ev);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync VBoxEventType type = ev.getType();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("type = "+type);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync switch (type)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync case OnMachineStateChanged:
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync IMachineStateChangedEvent mcse = IMachineStateChangedEvent.queryInterface(ev);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (mcse == null)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("Cannot query an interface");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync else
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("mid="+mcse.getMachineId());
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync break;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static class EventHandler
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync EventHandler() {}
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync public void handleEvent(IEvent ev)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync processEvent(ev);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync } catch (Throwable t) {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync t.printStackTrace();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static void testEvents(VirtualBoxManager mgr, IEventSource es)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync // active mode for Java doesn't fully work yet, and using passive
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync // is more portable (the only mode for MSCOM and WS) and thus generally
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync // recommended
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync IEventListener listener = es.createListener();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync es.registerListener(listener, Arrays.asList(VBoxEventType.Any), false);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync for (int i=0; i<50; i++)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.print(".");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync IEvent ev = es.getEvent(listener, 500);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (ev != null)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync processEvent(ev);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync es.eventProcessed(listener, ev);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync } catch (Exception e) {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync e.printStackTrace();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync es.unregisterListener(listener);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static void testEnumeration(VirtualBoxManager mgr, IVirtualBox vbox)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync List<IMachine> machs = vbox.getMachines();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync for (IMachine m : machs)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String name;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync Long ram = 0L;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync boolean hwvirtEnabled = false, hwvirtNestedPaging = false;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync boolean paeEnabled = false;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync boolean inaccessible = false;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync name = m.getName();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync ram = m.getMemorySize();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync hwvirtEnabled = m.getHWVirtExProperty(HWVirtExPropertyType.Enabled);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync hwvirtNestedPaging = m.getHWVirtExProperty(HWVirtExPropertyType.NestedPaging);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync paeEnabled = m.getCPUProperty(CPUPropertyType.PAE);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync catch (VBoxException e)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync name = "<inaccessible>";
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync inaccessible = true;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("VM name: " + name);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (!inaccessible)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println(" RAM size: " + ram + "MB"
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync + ", HWVirt: " + hwvirtEnabled
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync + ", Nested Paging: " + hwvirtNestedPaging
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync + ", PAE: " + paeEnabled);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static void testStart(VirtualBoxManager mgr, IVirtualBox vbox)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String m = vbox.getMachines().get(0).getName();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("\nAttempting to start VM '" + m + "'");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr.startVm(m, null, 7000);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static void testMultiServer()
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync VirtualBoxManager mgr1 = VirtualBoxManager.createInstance(null);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync VirtualBoxManager mgr2 = VirtualBoxManager.createInstance(null);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr1.connect("http://i7:18083", "", "");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr2.connect("http://main:18083", "", "");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String mach1 = mgr1.getVBox().getMachines().get(0).getName();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String mach2 = mgr2.getVBox().getMachines().get(0).getName();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr1.startVm(mach1, null, 7000);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr2.startVm(mach2, null, 7000);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync } finally {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr1.cleanup();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr2.cleanup();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync static void testReadLog(VirtualBoxManager mgr, IVirtualBox vbox)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync IMachine m = vbox.getMachines().get(0);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync long logNo = 0;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync long off = 0;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync long size = 16 * 1024;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync while (true)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync byte[] buf = m.readLog(logNo, off, size);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (buf.length == 0)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync break;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.print(new String(buf));
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync off += buf.length;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync public static void main(String[] args)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync VirtualBoxManager mgr = VirtualBoxManager.createInstance(null);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync boolean ws = false;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String url = null;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String user = null;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync String passwd = null;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync for (int i = 0; i<args.length; i++)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if ("-w".equals(args[i]))
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync ws = true;
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync else if ("-url".equals(args[i]))
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync url = args[++i];
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync else if ("-user".equals(args[i]))
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync user = args[++i];
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync else if ("-passwd".equals(args[i]))
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync passwd = args[++i];
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (ws)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr.connect(url, user, passwd);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync } catch (VBoxException e) {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync e.printStackTrace();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("Cannot connect, start webserver first!");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync IVirtualBox vbox = mgr.getVBox();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (vbox != null)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("VirtualBox version: " + vbox.getVersion() + "\n");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync testEnumeration(mgr, vbox);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync testReadLog(mgr, vbox);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync testStart(mgr, vbox);
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync testEvents(mgr, vbox.getEventSource());
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("done, press Enter...");
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync int ch = System.in.read();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync catch (VBoxException e)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync System.out.println("VBox error: "+e.getMessage()+" original="+e.getWrapped());
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync e.printStackTrace();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync catch (java.io.IOException e)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync e.printStackTrace();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync if (ws)
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync try {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr.disconnect();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync } catch (VBoxException e) {
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync e.printStackTrace();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync mgr.cleanup();
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync }
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync}
c9579522f347fc3fda6b3f4add0b355981cd7758vboxsync