tstMediumLock.cpp revision 6e5289333915775dee98cc679eafec64d7916312
/* $Id$ */
/** @file
*
* Medium lock test cases.
*/
/*
* Copyright (C) 2013 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#define LOG_ENABLED
#define LOG_GROUP LOG_GROUP_MAIN
#define LOG_INSTANCE NULL
#include <iprt/initterm.h>
using namespace com;
#define TEST_RT_SUCCESS(x,y,z) \
do \
{ \
int rc = (y); \
if (RT_FAILURE(rc)) \
} while (0)
#define TEST_COM_SUCCESS(x,y,z) \
do \
{ \
} while (0)
#define TEST_COM_FAILURE(x,y,z) \
do \
{ \
RTTestFailed((x), "%s", (z)); \
} while (0)
{
/* Init the runtime without loading the support driver. */
if (rcExit)
return rcExit;
bool fComInit = false;
if (!RTTestSubErrorCount(hTest))
{
RTUuidCreate(&uuid);
char szFile[50];
TEST_RT_SUCCESS(hTest, RTPathAppend(szPathTemp, sizeof(szPathTemp), szFile), "concatenate image name");
}
if (!RTTestSubErrorCount(hTest))
{
}
if (!RTTestSubErrorCount(hTest))
{
fComInit = true;
}
if (!RTTestSubErrorCount(hTest))
{
TEST_COM_SUCCESS(hTest, pVirtualBox->CreateHardDisk(Bstr("VDI").raw(), Bstr(szPathTemp).raw(), pMedium.asOutParam()), "create medium");
{
TEST_COM_SUCCESS(hTest, pMedium->CreateBaseStorage(_1M, ComSafeArrayAsInParam(variant), pProgress.asOutParam()), "create base storage");
}
}
if (!RTTestSubErrorCount(hTest))
{
if (mediumState != MediumState_Created)
if (mediumState != MediumState_LockedWrite)
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after nested lock write state");
if (mediumState != MediumState_LockedWrite)
if (mediumState != MediumState_Created)
}
if (!RTTestSubErrorCount(hTest))
{
if (mediumState != MediumState_Created)
if (mediumState != MediumState_LockedRead)
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after nested lock read state");
if (mediumState != MediumState_LockedRead)
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after nested lock read state");
if (mediumState != MediumState_LockedRead)
if (mediumState != MediumState_Created)
}
if (!RTTestSubErrorCount(hTest))
{
if (mediumState != MediumState_Created)
if (mediumState != MediumState_LockedWrite)
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after nested lock write state");
if (mediumState != MediumState_LockedWrite)
if (mediumState != MediumState_Created)
}
if (!RTTestSubErrorCount(hTest))
{
if (mediumState != MediumState_Created)
if (mediumState != MediumState_LockedRead)
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after nested lock read state");
if (mediumState != MediumState_LockedRead)
if (mediumState != MediumState_Created)
}
if (!RTTestSubErrorCount(hTest))
{
if (mediumState != MediumState_Created)
if (mediumState != MediumState_LockedWrite)
TEST_COM_FAILURE(hTest, pMedium->UnlockRead(&mediumState), "read unlocking a write lock succeeded");
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after read unlock write state");
if (mediumState != MediumState_LockedWrite)
if (mediumState != MediumState_Created)
}
if (!RTTestSubErrorCount(hTest))
{
if (mediumState != MediumState_Created)
if (mediumState != MediumState_LockedRead)
TEST_COM_FAILURE(hTest, pMedium->UnlockWrite(&mediumState), "write unlocking a read lock succeeded");
TEST_COM_SUCCESS(hTest, pMedium->COMGETTER(State)(&mediumState), "getting after write unlock read state");
if (mediumState != MediumState_LockedRead)
if (mediumState != MediumState_Created)
}
/* Cleanup, also part of the testcase */
{
if (mediumState == MediumState_Created)
{
}
}
/* Make sure that there are no object references alive here, XPCOM does
* a very bad job at cleaning up such leftovers, spitting out warning
* messages in a debug build. */
if (fComInit)
{
Shutdown();
}
/*
* Summary.
*/
return RTTestSummaryAndDestroy(hTest);
}