cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# -*- coding: utf-8 -*-
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# $Id$
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncTest Manager - Test Case Arguments Variations.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync__copyright__ = \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncCopyright (C) 2012-2014 Oracle Corporation
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncThis file is part of VirtualBox Open Source Edition (OSE), as
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncavailable from http://www.virtualbox.org. This file is free software;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncyou can redistribute it and/or modify it under the terms of the GNU
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncGeneral Public License (GPL) as published by the Free Software
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncFoundation, in version 2 as it comes in the "COPYING" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncVirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsynchope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncThe contents of this file may alternatively be used under the terms
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncof the Common Development and Distribution License Version 1.0
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync(CDDL) only, as it comes in the "COPYING.CDDL" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncVirtualBox OSE distribution, in which case the provisions of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncCDDL are applicable instead of those of the GPL.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncYou may elect to license modified versions of this file under the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncterms and conditions of either the GPL or the CDDL or both.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync__version__ = "$Revision$"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# Standard python imports.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncimport unittest;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncimport sys;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# Validation Kit imports.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncfrom common import utils;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncfrom testmanager.core.base import ModelDataBase, ModelDataBaseTestCase, ModelLogicBase, TMExceptionBase;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncfrom testmanager.core.testcase import TestCaseData, TestCaseDependencyLogic, TestCaseGlobalRsrcDepLogic;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# Python 3 hacks:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncif sys.version_info[0] >= 3:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync long = int; # pylint: disable=W0622,C0103
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncclass TestCaseArgsData(ModelDataBase):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Test case argument variation.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksIdAttr = 'idTestCaseArgs';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksIdGenAttr = 'idGenTestCaseArgs';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_idTestCase = 'TestCaseArgs_idTestCase';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_idTestCaseArgs = 'TestCaseArgs_idTestCaseArgs';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_tsEffective = 'TestCaseArgs_tsEffective';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_tsExpire = 'TestCaseArgs_tsExpire';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_uidAuthor = 'TestCaseArgs_uidAuthor';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_idGenTestCaseArgs = 'TestCaseArgs_idGenTestCaseArgs';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_sArgs = 'TestCaseArgs_sArgs';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_cSecTimeout = 'TestCaseArgs_cSecTimeout';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_sTestBoxReqExpr = 'TestCaseArgs_sTestBoxReqExpr';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_sBuildReqExpr = 'TestCaseArgs_sBuildReqExpr';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ksParam_cGangMembers = 'TestCaseArgs_cGangMembers';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync kasAllowNullAttributes = [ 'idTestCase', 'idTestCaseArgs', 'tsEffective', 'tsExpire', 'uidAuthor', 'idGenTestCaseArgs',
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'cSecTimeout', 'sTestBoxReqExpr', 'sBuildReqExpr', ];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def __init__(self):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ModelDataBase.__init__(self);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync #
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync # Initialize with defaults.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync # See the database for explanations of each of these fields.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync #
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idTestCase = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idTestCaseArgs = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.tsEffective = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.tsExpire = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.uidAuthor = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idGenTestCaseArgs = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sArgs = '';
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.cSecTimeout = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sTestBoxReqExpr = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sBuildReqExpr = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.cGangMembers = 1;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbRow(self, aoRow):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Re-initializes the object from a SELECT * FROM TestCaseArgs row.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Returns self. Raises exception if aoRow is None.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if aoRow is None:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise TMExceptionBase('TestBoxStatus not found.');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idTestCase = aoRow[0];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idTestCaseArgs = aoRow[1];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.tsEffective = aoRow[2];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.tsExpire = aoRow[3];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.uidAuthor = aoRow[4];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idGenTestCaseArgs = aoRow[5];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sArgs = aoRow[6];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.cSecTimeout = aoRow[7];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sTestBoxReqExpr = aoRow[8];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sBuildReqExpr = aoRow[9];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.cGangMembers = aoRow[10];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return self;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbWithId(self, oDb, idTestCaseArgs, tsNow = None, sPeriodBack = None):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Initialize from the database.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync oDb.execute(self.formatSimpleNowAndPeriodQuery(oDb,
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'SELECT *\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM TestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE idTestCaseArgs = %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync , ( idTestCaseArgs,), tsNow, sPeriodBack));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoRow = oDb.fetchOne()
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if aoRow is None:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise TMExceptionBase('idTestCaseArgs=%s not found (tsNow=%s sPeriodBack=%s)'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync % (idTestCaseArgs, tsNow, sPeriodBack,));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return self.initFromDbRow(aoRow);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbWithGenId(self, oDb, idGenTestCaseArgs):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Initialize from the database, given the generation ID of a row.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync oDb.execute('SELECT * FROM TestCaseArgs WHERE idGenTestCaseArgs = %s', (idGenTestCaseArgs,));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return self.initFromDbRow(oDb.fetchOne());
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromValues(self, sArgs, cSecTimeout = None, sTestBoxReqExpr = None, sBuildReqExpr = None, # pylint: disable=R0913
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cGangMembers = 1, idTestCase = None, idTestCaseArgs = None, tsEffective = None, tsExpire = None,
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync uidAuthor = None, idGenTestCaseArgs = None):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Reinitialize from values.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Returns self.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idTestCase = idTestCase;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idTestCaseArgs = idTestCaseArgs;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.tsEffective = tsEffective;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.tsExpire = tsExpire;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.uidAuthor = uidAuthor;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.idGenTestCaseArgs = idGenTestCaseArgs;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sArgs = sArgs;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.cSecTimeout = utils.parseIntervalSeconds(cSecTimeout);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sTestBoxReqExpr = sTestBoxReqExpr;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.sBuildReqExpr = sBuildReqExpr;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.cGangMembers = cGangMembers;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return self;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def getAttributeParamNullValues(self, sAttr):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoNilValues = ModelDataBase.getAttributeParamNullValues(self, sAttr);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if sAttr == 'cSecTimeout':
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoNilValues.insert(0, ''); # Prettier NULL value for cSecTimeout.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync elif sAttr == 'sArgs':
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoNilValues = []; # No NULL value here, thank you.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return aoNilValues;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def _validateAndConvertAttribute(self, sAttr, sParam, oValue, aoNilValues, fAllowNull, oDb):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if sAttr == 'cSecTimeout' and oValue not in aoNilValues: # Allow human readable interval formats.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return utils.parseIntervalSeconds(oValue);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync (oValue, sError) = ModelDataBase._validateAndConvertAttribute(self, sAttr, sParam, oValue, aoNilValues, fAllowNull, oDb);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if sError is None:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if sAttr == 'sTestBoxReqExpr':
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync sError = TestCaseData.validateTestBoxReqExpr(oValue);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync elif sAttr == 'sBuildReqExpr':
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync sError = TestCaseData.validateBuildReqExpr(oValue);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return (oValue, sError);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncclass TestCaseArgsDataEx(TestCaseArgsData):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Complete data set.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def __init__(self):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync TestCaseArgsData.__init__(self);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.oTestCase = None;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.aoTestCasePreReqs = [];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.aoGlobalRsrc = [];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbRow(self, aoRow):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise TMExceptionBase('Do not call me: %s' % (aoRow,))
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbWithId(self, oDb, idTestCaseArgs, tsNow = None, sPeriodBack = None):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync _ = oDb; _ = idTestCaseArgs; _ = tsNow; _ = sPeriodBack;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise Exception('Not supported.');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbWithGenId(self, oDb, idGenTestCaseArgs):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync _ = oDb; _ = idGenTestCaseArgs;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise Exception('Use initFromDbWithGenIdEx...');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def initFromDbWithGenIdEx(self, oDb, idGenTestCaseArgs, tsConfigEff = None, tsRsrcEff = None):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Initialize from the database, given the ID of a row.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync oDb.execute('SELECT *, CURRENT_TIMESTAMP FROM TestCaseArgs WHERE idGenTestCaseArgs = %s', (idGenTestCaseArgs,));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoRow = oDb.fetchOne();
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync TestCaseArgsData.initFromDbRow(self, aoRow);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync tsNow = aoRow[11];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if tsConfigEff is None: tsConfigEff = tsNow;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if tsRsrcEff is None: tsRsrcEff = tsNow;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.oTestCase = TestCaseData().initFromDbWithId(oDb, self.idTestCase, tsConfigEff);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.aoTestCasePreReqs = TestCaseDependencyLogic(oDb).getTestCaseDeps(self.idTestCase, tsConfigEff);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.aoGlobalRsrc = TestCaseGlobalRsrcDepLogic(oDb).getTestCaseDeps(self.idTestCase, tsRsrcEff);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return self;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def convertFromParamNull(self):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise TMExceptionBase('Not implemented');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def convertToParamNull(self):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise TMExceptionBase('Not implemented');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def isEqual(self, oOther):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync raise TMExceptionBase('Not implemented');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def matchesTestBoxProps(self, oTestBoxData):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Checks if the all of the testbox related test requirements matches the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync given testbox.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Returns True or False according to the expression, None on exception or
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync non-boolean expression result.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return TestCaseData.matchesTestBoxPropsEx(oTestBoxData, self.oTestCase.sTestBoxReqExpr) \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync and TestCaseData.matchesTestBoxPropsEx(oTestBoxData, self.sTestBoxReqExpr);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def matchesBuildProps(self, oBuildDataEx):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Checks if the all of the build related test requirements matches the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync given build.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Returns True or False according to the expression, None on exception or
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync non-boolean expression result.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return TestCaseData.matchesBuildPropsEx(oBuildDataEx, self.oTestCase.sBuildReqExpr) \
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync and TestCaseData.matchesBuildPropsEx(oBuildDataEx, self.sBuildReqExpr);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncclass TestCaseArgsLogic(ModelLogicBase):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync TestCaseArgs database logic.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def __init__(self, oDb):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ModelLogicBase.__init__(self, oDb);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def areResourcesFree(self, oDataEx):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Checks if all global resources are currently still in existance and free.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Returns True/False. May raise exception on database error.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync # Create a set of global resource IDs.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if len(oDataEx.aoGlobalRsrc) == 0:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return True;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync asIdRsrcs = [str(oDep.idGlobalRsrc) for oDep, _ in oDataEx.aoGlobalRsrc];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync # A record in the resource status table means it's allocated.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT COUNT(*)\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM GlobalResourceStatuses\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE GlobalResourceStatuses.idGlobalRsrc IN (' + ', '.join(asIdRsrcs) + ')\n');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if self._oDb.fetchOne()[0] == 0:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync # Check for disabled or deleted resources (we cannot allocate them).
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT COUNT(*)\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM GlobalResources\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE GlobalResources.idGlobalRsrc IN (' + ', '.join(asIdRsrcs) + ')\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND GlobalResources.tsExpire = \'infinity\'::TIMESTAMP\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND GlobalResources.fEnabled = TRUE\n');
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if self._oDb.fetchOne()[0] == len(oDataEx.aoGlobalRsrc):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return True;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return False;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def getAll(self):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """Get list of objects of type TestCaseArgsData"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT *\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM TestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE tsExpire = \'infinity\'::TIMESTAMP')
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aaoRows = self._oDb.fetchAll()
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoRet = []
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync for aoRow in aaoRows:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoRet.append(TestCaseArgsData().initFromDbRow(aoRow))
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return aoRet
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def getTestCaseArgs(self, idTestCase, tsNow = None, aiWhiteList = None):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """Get list of testcase's arguments variations"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if aiWhiteList is None:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if tsNow is None:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT *\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM TestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE idTestCase = %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND tsExpire = \'infinity\'::TIMESTAMP\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'ORDER BY TestCaseArgs.idTestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync , (idTestCase,));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync else:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT *\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM TestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE idTestCase = %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND tsExpire > %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND tsEffective <= %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'ORDER BY TestCaseArgs.idTestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync , (idTestCase, tsNow, tsNow));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync else:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync sWhiteList = ','.join((str(x) for x in aiWhiteList));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if tsNow is None:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT *\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM TestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE idTestCase = %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND tsExpire = \'infinity\'::TIMESTAMP\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND idTestCaseArgs IN (' + sWhiteList + ')\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'ORDER BY TestCaseArgs.idTestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync , (idTestCase,));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync else:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self._oDb.execute('SELECT *\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'FROM TestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'WHERE idTestCase = %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND tsExpire > %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND tsEffective <= %s\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ' AND idTestCaseArgs IN (' + sWhiteList + ')\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 'ORDER BY TestCaseArgs.idTestCaseArgs\n'
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync , (idTestCase, tsNow, tsNow));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aaoRows = self._oDb.fetchAll()
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoRet = []
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync for aoRow in aaoRows:
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync aoRet.append(TestCaseArgsData().initFromDbRow(aoRow))
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return aoRet
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def addTestCaseArgs(self, oTestCaseArgsData):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync """Add Test Case Args record into DB"""
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync pass
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# Unit testing.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync# pylint: disable=C0111
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncclass TestCaseArgsDataTestCase(ModelDataBaseTestCase):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync def setUp(self):
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync self.aoSamples = [TestCaseArgsData(),];
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncif __name__ == '__main__':
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync unittest.main();
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync # not reached.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync