9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * tstVBoxAPI - Checks VirtualBox API.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Copyright (C) 2006-2014 Oracle Corporation
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* Header Files *
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync*******************************************************************************/
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsyncusing namespace com;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/*******************************************************************************
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync* Global Variables *
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync*******************************************************************************/
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync/** Worker for TST_COM_EXPR(). */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsyncstatic HRESULT tstComExpr(HRESULT hrc, const char *pszOperation, int iLine)
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestFailed(g_hTest, "%s failed on line %u with hrc=%Rhrc", pszOperation, iLine, hrc);
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__)
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Version)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::version failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::versionNormalized");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(VersionNormalized)(bstrTmp.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::versionNormalized");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::versionNormalized failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::revision failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(PackageType)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::packageType failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(APIVersion)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::APIVersion failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(HomeFolder)(bstrTmp.asOutParam()));
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::homeFolder failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::settingsFilePath");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(SettingsFilePath)(bstrTmp.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::settingsFilePath");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::settingsFilePath failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(GuestOSTypes)(ComSafeArrayAsOutParam(guestOSTypes)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::guestOSTypes");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::guestOSTypes failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** Create VM */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** Default VM settings */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, CreateMachine(NULL, /** Settings */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::CreateMachine");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::CreateMachine failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::RegisterMachine");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::RegisterMachine");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::RegisterMachine failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Host)(host.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IHost testing here. */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::host failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::systemProperties");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(SystemProperties)(sysprop.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add ISystemProperties testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::systemProperties");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::systemProperties failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(Machines)(ComSafeArrayAsOutParam(machines)));
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync rc = machines[i]->COMGETTER(Name)(tmpName.asOutParam());
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::machines failed. No created machine found", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::machines failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync#if 0 /** Not yet implemented */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(SharedFolders)(ComSafeArrayAsOutParam(sharedFolders)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add ISharedFolders testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::sharedFolders");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::sharedFolders failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(HardDisks)(ComSafeArrayAsOutParam(hardDisks)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add hardDisks testing here. */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::hardDisks failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(DVDImages)(ComSafeArrayAsOutParam(DVDImages)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add DVDImages testing here. */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::DVDImages failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(FloppyImages)(ComSafeArrayAsOutParam(floppyImages)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add floppyImages testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::floppyImages");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::floppyImages failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::progressOperations");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(ProgressOperations)(ComSafeArrayAsOutParam(progressOperations)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IProgress testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::progressOperations");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::progressOperations failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync ComPtr<IPerformanceCollector> performanceCollector;
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::performanceCollector");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(PerformanceCollector)(performanceCollector.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IPerformanceCollector testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::performanceCollector");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::performanceCollector failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(DHCPServers)(ComSafeArrayAsOutParam(DHCPServers)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IDHCPServers testing here. */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::DHCPServers failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(NATNetworks)(ComSafeArrayAsOutParam(NATNetworks)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add INATNetworks testing here. */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::NATNetworks failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(EventSource)(eventSource.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IEventSource testing here. */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::eventSource failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::extensionPackManager");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(ExtensionPackManager)(extensionPackManager.asOutParam()));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** @todo Add IExtPackManager testing here. */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::extensionPackManager");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::extensionPackManager failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::internalNetworks");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(InternalNetworks)(ComSafeArrayAsOutParam(internalNetworks)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::internalNetworks");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::internalNetworks failed", __LINE__);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "IVirtualBox::genericNetworkDrivers");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR(pVBox, COMGETTER(GenericNetworkDrivers)(ComSafeArrayAsOutParam(genericNetworkDrivers)));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestPassed(g_hTest, "IVirtualBox::genericNetworkDrivers");
d359a449751447a199b2c99537c9a1c641521ba9vboxsync RTTestFailed(g_hTest, "%d: IVirtualBox::genericNetworkDrivers failed", __LINE__);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync /** Delete created VM and its files */
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(pVBox, FindMachine(Bstr(tstMachineName).raw(), machine.asOutParam()), FALSE);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(machine, Unregister(CleanupMode_DetachAllReturnHardDisksOnly,
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(machine, DeleteConfig(ComSafeArrayAsInParam(media), progress.asOutParam()), FALSE);
d359a449751447a199b2c99537c9a1c641521ba9vboxsync CHECK_ERROR_RET(progress, WaitForCompletion(-1), FALSE);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Initialization.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTEXITCODE rcExit = RTTestInitAndCreate("tstVBoxAPI", &g_hTest);
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestSub(g_hTest, "Initializing COM and singletons");
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync hrc = TST_COM_EXPR(ptrVBox.createLocalObject(CLSID_VirtualBox));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync hrc = TST_COM_EXPR(ptrSession.createInprocObject(CLSID_Session));
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync * Call test functions.
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync /** Test IVirtualBox interface */
b7309b3ed1ae8e9fc964dacf3135baef78f03067vboxsync /** Clean files/configs */
9cb3444b30e713c3f86a4ce0a14a182d242c284bvboxsync RTTestIFailed("com::Initialize failed with hrc=%Rhrc", hrc);