9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/* $Id$ */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/** @file
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * tstVBoxAPI - Checks VirtualBox API.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/*
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Copyright (C) 2006-2014 Oracle Corporation
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync *
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * available from http://www.virtualbox.org. This file is free software;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * General Public License (GPL) as published by the Free Software
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/*******************************************************************************
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync* Header Files *
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync*******************************************************************************/
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/com/com.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/com/string.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/com/array.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/com/Guid.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/com/ErrorInfo.h>
d359a449751447a199b2c99537c9a1c641521ba9vboxsync#include <VBox/com/errorprint.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/com/VirtualBox.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <VBox/sup.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <iprt/test.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#include <iprt/time.h>
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsyncusing namespace com;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/*******************************************************************************
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync* Global Variables *
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync*******************************************************************************/
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsyncstatic RTTEST g_hTest;
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsyncstatic Bstr tstMachineName = "tstVBoxAPI test VM";
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/** Worker for TST_COM_EXPR(). */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsyncstatic HRESULT tstComExpr(HRESULT hrc, const char *pszOperation, int iLine)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync{
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (FAILED(hrc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestFailed(g_hTest, "%s failed on line %u with hrc=%Rhrc", pszOperation, iLine, hrc);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync return hrc;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync}
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/** Macro that executes the given expression and report any failure.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * The expression must return a HRESULT. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#define TST_COM_EXPR(expr) tstComExpr(expr, #expr, __LINE__)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
d359a449751447a199b2c99537c9a1c641521ba9vboxsyncstatic BOOL tstApiIVirtualBox(IVirtualBox *pVBox)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync{
d359a449751447a199b2c99537c9a1c641521ba9vboxsync HRESULT rc;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync Bstr bstrTmp;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ULONG ulTmp;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::version");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Version)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::version");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::version failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::versionNormalized");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(VersionNormalized)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::versionNormalized");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::versionNormalized failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::revision");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Revision)(&ulTmp));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::revision");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::revision failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::packageType");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(PackageType)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::packageType");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::packageType failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::APIVersion");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(APIVersion)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::APIVersion");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::APIVersion failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::homeFolder");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(HomeFolder)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::homeFolder");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::homeFolder failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::settingsFilePath");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(SettingsFilePath)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::settingsFilePath");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::settingsFilePath failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IGuestOSType> guestOSTypes;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::guestOSTypes");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(GuestOSTypes)(ComSafeArrayAsOutParam(guestOSTypes)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::guestOSTypes");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::guestOSTypes failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** Create VM */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::CreateMachine");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IMachine> ptrMachine;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeArray<BSTR> groups;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** Default VM settings */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, CreateMachine(NULL, /** Settings */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync tstMachineName.raw(), /** Name */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync ComSafeArrayAsInParam(groups), /** Groups */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync NULL, /** OS Type */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync NULL, /** Create flags */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync ptrMachine.asOutParam())); /** Machine */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::CreateMachine");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::CreateMachine failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync return FALSE;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::RegisterMachine");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, RegisterMachine(ptrMachine));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::RegisterMachine");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::RegisterMachine failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync return FALSE;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IHost> host;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::host");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Host)(host.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IHost testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::host");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::host failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<ISystemProperties> sysprop;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::systemProperties");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(SystemProperties)(sysprop.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add ISystemProperties testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::systemProperties");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::systemProperties failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IMachine> machines;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::machines");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Machines)(ComSafeArrayAsOutParam(machines)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync bool bFound = FALSE;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync for (size_t i = 0; i < machines.size(); ++i)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (machines[i])
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync Bstr tmpName;
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync rc = machines[i]->COMGETTER(Name)(tmpName.asOutParam());
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (tmpName == tstMachineName)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync bFound = TRUE;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync break;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (bFound)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::machines");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::machines failed. No created machine found", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::machines failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#if 0 /** Not yet implemented */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<ISharedFolder> sharedFolders;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::sharedFolders");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(SharedFolders)(ComSafeArrayAsOutParam(sharedFolders)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add ISharedFolders testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::sharedFolders");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::sharedFolders failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#endif
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IMedium> hardDisks;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::hardDisks");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(HardDisks)(ComSafeArrayAsOutParam(hardDisks)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add hardDisks testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::hardDisks");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::hardDisks failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IMedium> DVDImages;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::DVDImages");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(DVDImages)(ComSafeArrayAsOutParam(DVDImages)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add DVDImages testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::DVDImages");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::DVDImages failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IMedium> floppyImages;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::floppyImages");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(FloppyImages)(ComSafeArrayAsOutParam(floppyImages)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add floppyImages testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::floppyImages");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::floppyImages failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IProgress> progressOperations;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::progressOperations");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(ProgressOperations)(ComSafeArrayAsOutParam(progressOperations)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IProgress testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::progressOperations");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::progressOperations failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IPerformanceCollector> performanceCollector;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::performanceCollector");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(PerformanceCollector)(performanceCollector.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IPerformanceCollector testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::performanceCollector");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::performanceCollector failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<IDHCPServer> DHCPServers;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::DHCPServers");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(DHCPServers)(ComSafeArrayAsOutParam(DHCPServers)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IDHCPServers testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::DHCPServers");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::DHCPServers failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeIfaceArray<INATNetwork> NATNetworks;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::NATNetworks");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(NATNetworks)(ComSafeArrayAsOutParam(NATNetworks)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add INATNetworks testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::NATNetworks");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::NATNetworks failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IEventSource> eventSource;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::eventSource");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(EventSource)(eventSource.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IEventSource testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::eventSource");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::eventSource failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IExtPackManager> extensionPackManager;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::extensionPackManager");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(ExtensionPackManager)(extensionPackManager.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IExtPackManager testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::extensionPackManager");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::extensionPackManager failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeArray<BSTR> internalNetworks;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::internalNetworks");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(InternalNetworks)(ComSafeArrayAsOutParam(internalNetworks)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::internalNetworks");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::internalNetworks failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::SafeArray<BSTR> genericNetworkDrivers;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::genericNetworkDrivers");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(GenericNetworkDrivers)(ComSafeArrayAsOutParam(genericNetworkDrivers)));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync if (SUCCEEDED(rc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::genericNetworkDrivers");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::genericNetworkDrivers failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync return TRUE;
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync}
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsyncstatic BOOL tstApiClean(IVirtualBox *pVBox)
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync{
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync HRESULT rc;
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync
d359a449751447a199b2c99537c9a1c641521ba9vboxsync /** Delete created VM and its files */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync ComPtr<IMachine> machine;
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(pVBox, FindMachine(Bstr(tstMachineName).raw(), machine.asOutParam()), FALSE);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync SafeIfaceArray<IMedium> media;
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(machine, Unregister(CleanupMode_DetachAllReturnHardDisksOnly,
d359a449751447a199b2c99537c9a1c641521ba9vboxsync ComSafeArrayAsOutParam(media)), FALSE);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync ComPtr<IProgress> progress;
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(machine, DeleteConfig(ComSafeArrayAsInParam(media), progress.asOutParam()), FALSE);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(progress, WaitForCompletion(-1), FALSE);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync
d359a449751447a199b2c99537c9a1c641521ba9vboxsync return TRUE;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync}
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsyncint main(int argc, char **argv)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync{
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /*
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Initialization.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTEXITCODE rcExit = RTTestInitAndCreate("tstVBoxAPI", &g_hTest);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (rcExit != RTEXITCODE_SUCCESS)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync return rcExit;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync SUPR3Init(NULL); /* Better time support. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestBanner(g_hTest);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "Initializing COM and singletons");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync HRESULT hrc = com::Initialize();
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (SUCCEEDED(hrc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IVirtualBox> ptrVBox;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync hrc = TST_COM_EXPR(ptrVBox.createLocalObject(CLSID_VirtualBox));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (SUCCEEDED(hrc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<ISession> ptrSession;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync hrc = TST_COM_EXPR(ptrSession.createInprocObject(CLSID_Session));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync if (SUCCEEDED(hrc))
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync {
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSubDone(g_hTest);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /*
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Call test functions.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** Test IVirtualBox interface */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync tstApiIVirtualBox(ptrVBox);
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync /** Clean files/configs */
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync tstApiClean(ptrVBox);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ptrVBox.setNull();
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync com::Shutdown();
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync }
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync else
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestIFailed("com::Initialize failed with hrc=%Rhrc", hrc);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync return RTTestSummaryAndDestroy(g_hTest);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync}