VirtualBox

Ignore:
Timestamp:
Jan 31, 2020 11:13:38 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
135938
Message:

TestManager: Added revision range filtering.

Location:
trunk/src/VBox/ValidationKit/testmanager/core
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testmanager/core/base.py

    r82641 r82939  
    11911191    ksType_UIntNil = 'uint-nil'; ##< unsigned integer value, with nil.
    11921192    ksType_String  = 'string';   ##< string value.
     1193    ksType_Ranges  = 'ranges';   ##< List of (unsigned) integer ranges.
    11931194    ## @}
    11941195
     
    12431244        self.aCriteria = [] # type: list[FilterCriterion]
    12441245
    1245     def _initFromParamsWorker(self, oDisp, oCriterion):
     1246    def _initFromParamsWorker(self, oDisp, oCriterion): # (,FilterCriterion)
    12461247        """ Worker for initFromParams. """
    12471248        if oCriterion.sType == FilterCriterion.ksType_UInt:
     
    12591260                  or sValue[-1] == '\\':
    12601261                    raise TMExceptionBase('Variable %s has an illegal value "%s"!' % (oCriterion.sVarNm, sValue));
     1262        elif oCriterion.sType == FilterCriterion.ksType_Ranges:
     1263            def convertRangeNumber(sValue):
     1264                """ Helper """
     1265                sValue = sValue.strip();
     1266                if sValue and sValue not in ('inf', 'Inf', 'INf', 'INF', 'InF', 'iNf', 'iNF', 'inF',):
     1267                    try:    return int(sValue);
     1268                    except: pass;
     1269                return None;
     1270
     1271            for sRange in oDisp.getStringParam(oCriterion.sVarNm, sDefault = '').split(','):
     1272                sRange = sRange.strip();
     1273                if sRange and sRange != '-' and any(ch.isdigit() for ch in sRange):
     1274                    asValues = sRange.split('-');
     1275                    if len(asValues) == 1:
     1276                        asValues = [asValues[0], asValues[0]];
     1277                    elif len(asValues) > 2:
     1278                        asValues = [asValues[0], asValues[-1]];
     1279                    tTuple = (convertRangeNumber(asValues[0]), convertRangeNumber(asValues[1]));
     1280                    if tTuple[0] is not None and tTuple[1] is not None and tTuple[0] > tTuple[1]:
     1281                        tTuple = (tTuple[1], tTuple[0]);
     1282                    oCriterion.aoSelected.append(tTuple);
    12611283        else:
    12621284            assert False;
  • trunk/src/VBox/ValidationKit/testmanager/core/testresults.py

    r80128 r82939  
    703703    kiBuildTypes            =  3;
    704704    kiRevisions             =  4;
    705     kiFailReasons           =  5;
    706     kiTestCases             =  6;
    707     kiTestCaseMisc          =  7;
    708     kiTestBoxes             =  8
    709     kiOses                  =  9;
    710     kiCpuArches             = 10;
    711     kiCpuVendors            = 11;
    712     kiCpuCounts             = 12;
    713     kiMemory                = 13;
    714     kiTestboxMisc           = 14;
    715     kiPythonVersions        = 15;
    716     kiSchedGroups           = 16;
     705    kiRevisionRange         =  5;
     706    kiFailReasons           =  6;
     707    kiTestCases             =  7;
     708    kiTestCaseMisc          =  8;
     709    kiTestBoxes             =  9;
     710    kiOses                  = 10;
     711    kiCpuArches             = 11;
     712    kiCpuVendors            = 12;
     713    kiCpuCounts             = 13;
     714    kiMemory                = 14;
     715    kiTestboxMisc           = 15;
     716    kiPythonVersions        = 16;
     717    kiSchedGroups           = 17;
    717718
    718719    ## Misc test case / variation name filters.
     
    783784        assert self.aCriteria[self.kiRevisions] is oCrit;
    784785
     786        # Revision Range
     787        oCrit = FilterCriterion('Revision Range', sVarNm = 'rr', sType = FilterCriterion.ksType_Ranges,
     788                                sKind = FilterCriterion.ksKind_ElementOfOrNot, sTable = 'Builds', sColumn = 'iRevision');
     789        self.aCriteria.append(oCrit);
     790        assert self.aCriteria[self.kiRevisionRange] is oCrit;
     791
    785792        # Failure reasons
    786793        oCrit = FilterCriterion('Failure reasons', sVarNm = 'fr', sType = FilterCriterion.ksType_UIntNil,
     
    907914                    if iValue in dConditions:
    908915                        sQuery += '%s   AND %s\n' % (sExtraIndent, dConditions[iValue],);
     916            elif oCrit.sType == FilterCriterion.ksType_Ranges:
     917                assert len(oCrit.aoPossible) == 0;
     918                if oCrit.aoSelected:
     919                    asConditions = [];
     920                    for tRange in oCrit.aoSelected:
     921                        if tRange[0] == tRange[1]:
     922                            asConditions.append('%s.%s = %s' % (oCrit.asTables[0], oCrit.sColumn, tRange[0]));
     923                        elif tRange[1] is None: # 9999-
     924                            asConditions.append('%s.%s >= %s' % (oCrit.asTables[0], oCrit.sColumn, tRange[0]));
     925                        elif tRange[0] is None: # -9999
     926                            asConditions.append('%s.%s <= %s' % (oCrit.asTables[0], oCrit.sColumn, tRange[1]));
     927                        else:
     928                            asConditions.append('%s.%s BETWEEN %s AND %s' % (oCrit.asTables[0], oCrit.sColumn,
     929                                                                             tRange[0], tRange[1]));
     930                    if not oCrit.fInverted:
     931                        sQuery += '%s   AND (%s)\n' % (sExtraIndent, ' OR '.join(asConditions));
     932                    else:
     933                        sQuery += '%s   AND NOT (%s)\n' % (sExtraIndent, ' OR '.join(asConditions));
    909934            else:
    910935                assert len(oCrit.asTables) == 1;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette