VirtualBox

Ignore:
Timestamp:
Jul 6, 2015 12:32:55 AM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
101459
Message:

testmanager: Test result sorting.

File:
1 edited

Legend:

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

    r56764 r56809  
    513513    #
    514514
    515     ksResultsGroupingTypeNone       = 'ResultsGroupingTypeNone'
    516     ksResultsGroupingTypeTestGroup  = 'ResultsGroupingTypeTestGroup'
    517     ksResultsGroupingTypeBuildRev   = 'ResultsGroupingTypeBuild'
    518     ksResultsGroupingTypeTestBox    = 'ResultsGroupingTypeTestBox'
    519     ksResultsGroupingTypeTestCase   = 'ResultsGroupingTypeTestCase'
    520     ksResultsGroupingTypeSchedGroup = 'ResultsGroupingTypeSchedGroup'
     515    ksResultsGroupingTypeNone       = 'ResultsGroupingTypeNone';
     516    ksResultsGroupingTypeTestGroup  = 'ResultsGroupingTypeTestGroup';
     517    ksResultsGroupingTypeBuildRev   = 'ResultsGroupingTypeBuild';
     518    ksResultsGroupingTypeTestBox    = 'ResultsGroupingTypeTestBox';
     519    ksResultsGroupingTypeTestCase   = 'ResultsGroupingTypeTestCase';
     520    ksResultsGroupingTypeSchedGroup = 'ResultsGroupingTypeSchedGroup';
     521
     522    #kdResultGroupingMapOld = {
     523    #    ksResultsGroupingTypeNone:       ('TestSets',            None,                      None),
     524    #    ksResultsGroupingTypeTestGroup:  ('TestSets',            'TestSets.idTestGroup',    None),
     525    #    ksResultsGroupingTypeTestBox:    ('TestSets',            'TestSets.idTestBox',      None),
     526    #    ksResultsGroupingTypeTestCase:   ('TestSets',            'TestSets.idTestCase',     None),
     527    #    ksResultsGroupingTypeBuildRev:   ('TestSets, Builds',    'Builds.iRevision',
     528    #                                      ' AND Builds.idBuild      = TestSets.idBuild'
     529    #                                      ' AND Builds.tsExpire     > TestSets.tsCreated'
     530    #                                      ' AND Builds.tsEffective <= TestSets.tsCreated' ),
     531    #    ksResultsGroupingTypeSchedGroup: ('TestSets, TestBoxes', 'TestBoxes.idSchedGroup',
     532    #                                      ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox'),
     533    #};
     534
     535    ## @name Result sorting options.
     536    ## @{
     537    ksResultsSortByRunningAndStart      = 'ResultsSortByRunningAndStart'; ##< Default
     538    ksResultsSortByBuildRevision        = 'ResultsSortByBuildRevision';
     539    ksResultsSortByTestBoxName          = 'ResultsSortByTestBoxName';
     540    ksResultsSortByTestBoxOs            = 'ResultsSortByTestBoxOs';
     541    ksResultsSortByTestBoxOsVersion     = 'ResultsSortByTestBoxOsVersion';
     542    ksResultsSortByTestBoxOsArch        = 'ResultsSortByTestBoxOsArch';
     543    ksResultsSortByTestBoxArch          = 'ResultsSortByTestBoxArch';
     544    ksResultsSortByTestBoxCpuVendor     = 'ResultsSortByTestBoxCpuVendor';
     545    ksResultsSortByTestBoxCpuName       = 'ResultsSortByTestBoxCpuName';
     546    ksResultsSortByTestBoxCpuRev        = 'ResultsSortByTestBoxCpuRev';
     547    ksResultsSortByTestBoxCpuFeatures   = 'ResultsSortByTestBoxCpuFeatures';
     548    ksResultsSortByTestCaseName         = 'ResultsSortByTestCaseName';
     549    kasResultsSortBy = {
     550        ksResultsSortByRunningAndStart,
     551        ksResultsSortByBuildRevision,
     552        ksResultsSortByTestBoxName,
     553        ksResultsSortByTestBoxOs,
     554        ksResultsSortByTestBoxOsVersion,
     555        ksResultsSortByTestBoxOsArch,
     556        ksResultsSortByTestBoxArch,
     557        ksResultsSortByTestBoxCpuVendor,
     558        ksResultsSortByTestBoxCpuName,
     559        ksResultsSortByTestBoxCpuRev,
     560        ksResultsSortByTestBoxCpuFeatures,
     561        ksResultsSortByTestCaseName,
     562    };
     563    ## Used by the WUI for generating the drop down.
     564    kaasResultsSortByTitles = (
     565        ( ksResultsSortByRunningAndStart,       'Running & Start TS' ),
     566        ( ksResultsSortByBuildRevision,         'Build Revision' ),
     567        ( ksResultsSortByTestBoxName,           'TestBox Name' ),
     568        ( ksResultsSortByTestBoxOs,             'O/S' ),
     569        ( ksResultsSortByTestBoxOsVersion,      'O/S Version' ),
     570        ( ksResultsSortByTestBoxOsArch,         'O/S & Architecture' ),
     571        ( ksResultsSortByTestBoxArch,           'Architecture' ),
     572        ( ksResultsSortByTestBoxCpuVendor,      'CPU Vendor' ),
     573        ( ksResultsSortByTestBoxCpuName,        'CPU Vendor & Name' ),
     574        ( ksResultsSortByTestBoxCpuRev,         'CPU Vendor & Revision' ),
     575        ( ksResultsSortByTestBoxCpuFeatures,    'CPU Features' ),
     576        ( ksResultsSortByTestCaseName,          'Test Case Name' ),
     577    );
     578    ## @}
     579
     580    ## Default sort by map.
     581    kdResultSortByMap= {
     582        ksResultsSortByRunningAndStart:  ('', None, None, ''),
     583        ksResultsSortByBuildRevision: (
     584            # Sorting tables.
     585            ', Builds',
     586            # Sorting table join(s).
     587            ' AND TestSets.idBuild    = Builds.idBuild'
     588            ' AND Builds.tsExpire    >= TestSets.tsCreated'
     589            ' AND Builds.tsEffective <= TestSets.tsCreated',
     590            # Start of ORDER BY statement.
     591            ' Builds.iRevision DESC',
     592            # Extra columns to fetch for the above ORDER BY to work in a SELECT DISTINCT statement.
     593            ''  ),
     594        ksResultsSortByTestBoxName: (
     595            ', TestBoxes',
     596            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     597            ' TestBoxes.sName DESC',
     598            '' ),
     599        ksResultsSortByTestBoxOsArch: (
     600            ', TestBoxes',
     601            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     602            ' TestBoxes.sOs, TestBoxes.sCpuArch',
     603            ''  ),
     604        ksResultsSortByTestBoxOs: (
     605            ', TestBoxes',
     606            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     607            ' TestBoxes.sOs',
     608            ''  ),
     609        ksResultsSortByTestBoxOsVersion: (
     610            ', TestBoxes',
     611            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     612            ' TestBoxes.sOs, TestBoxes.sOsVersion DESC',
     613            ''  ),
     614        ksResultsSortByTestBoxArch: (
     615            ', TestBoxes',
     616            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     617            ' TestBoxes.sCpuArch',
     618            ''  ),
     619        ksResultsSortByTestBoxCpuVendor: (
     620            ', TestBoxes',
     621            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     622            ' TestBoxes.sCpuVendor',
     623            ''  ),
     624        ksResultsSortByTestBoxCpuName: (
     625            ', TestBoxes',
     626            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     627            ' TestBoxes.sCpuVendor, TestBoxes.sCpuName',
     628            ''  ),
     629        ksResultsSortByTestBoxCpuRev: (
     630            ', TestBoxes',
     631            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     632            ' TestBoxes.sCpuVendor, TestBoxes.lCpuRevision DESC',
     633            ', TestBoxes.lCpuRevision'  ),
     634        ksResultsSortByTestBoxCpuFeatures: (
     635            ', TestBoxes',
     636            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     637            ' TestBoxes.fCpuHwVirt DESC, TestBoxes.fCpuNestedPaging DESC, TestBoxes.fCpu64BitGuest DESC, TestBoxes.cCpus DESC',
     638            ', TestBoxes.cCpus' ),
     639        ksResultsSortByTestCaseName: (
     640            ', TestCases',
     641            ' AND TestSets.idGenTestCase = TestCases.idGenTestCase',
     642            ' TestCases.sName',
     643            ''  ),
     644    };
    521645
    522646    kdResultGroupingMap = {
    523         ksResultsGroupingTypeNone:       ('TestSets',            None,                      None),
    524         ksResultsGroupingTypeTestGroup:  ('TestSets',            'TestSets.idTestGroup',    None),
    525         ksResultsGroupingTypeTestBox:    ('TestSets',            'TestSets.idTestBox',      None),
    526         ksResultsGroupingTypeTestCase:   ('TestSets',            'TestSets.idTestCase',     None),
    527         ksResultsGroupingTypeBuildRev:   ('TestSets, Builds',    'Builds.iRevision',
    528                                           ' AND Builds.idBuild      = TestSets.idBuild'
    529                                           ' AND Builds.tsExpire     > TestSets.tsCreated'
    530                                           ' AND Builds.tsEffective <= TestSets.tsCreated' ),
    531         ksResultsGroupingTypeSchedGroup: ('TestSets, TestBoxes', 'TestBoxes.idSchedGroup',
    532                                           ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox'),
    533     }
     647        ksResultsGroupingTypeNone: (
     648            # Grouping tables;     # Grouping field;          # Grouping where addition.  # Sort by overrides.
     649            'TestSets',            None,                      None,                       {}
     650        ),
     651        ksResultsGroupingTypeTestGroup:  ('TestSets',   'TestSets.idTestGroup',     None, {}),
     652        ksResultsGroupingTypeTestBox:    ('TestSets',   'TestSets.idTestBox',       None, {}),
     653        ksResultsGroupingTypeTestCase:   ('TestSets',   'TestSets.idTestCase',      None, {}),
     654        ksResultsGroupingTypeBuildRev: (
     655            'TestSets, Builds',
     656            'Builds.iRevision',
     657            ' AND Builds.idBuild      = TestSets.idBuild'
     658            ' AND Builds.tsExpire     > TestSets.tsCreated'
     659            ' AND Builds.tsEffective <= TestSets.tsCreated',
     660            { ksResultsSortByBuildRevision: ( '', None,  ' Builds.iRevision DESC' ), }
     661        ),
     662        ksResultsGroupingTypeSchedGroup: (
     663            'TestSets, TestBoxes',
     664            'TestBoxes.idSchedGroup',
     665            ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
     666            { ksResultsSortByTestBoxName:       ( '', None, ' TestBoxes.sName DESC', '' ),
     667              ksResultsSortByTestBoxOsArch:     ( '', None, ' TestBoxes.sOs, TestBoxes.sCpuArch', ''  ),
     668              ksResultsSortByTestBoxOs:         ( '', None,  ' TestBoxes.sOs', ''  ),
     669              ksResultsSortByTestBoxOsVersion:  ( '', None, ' TestBoxes.sOs, TestBoxes.sOsVersion DESC', ''  ),
     670              ksResultsSortByTestBoxArch:       ( '', None, ' TestBoxes.sCpuArch', ''  ),
     671              ksResultsSortByTestBoxCpuVendor:  ( '', None, ' TestBoxes.sCpuVendor', ''  ),
     672              ksResultsSortByTestBoxCpuName:    ( '', None, ' TestBoxes.sCpuVendor, TestBoxes.sCpuName', ''  ),
     673              ksResultsSortByTestBoxCpuRev: (
     674                  '', None,  ' TestBoxes.sCpuVendor, TestBoxes.lCpuRevision DESC', ', TestBoxes.lCpuRevision'  ),
     675              ksResultsSortByTestBoxCpuFeatures: (
     676                  ' TestBoxes.fCpuHwVirt DESC, TestBoxes.fCpuNestedPaging DESC, TestBoxes.fCpu64BitGuest DESC, '
     677                  + 'TestBoxes.cCpus DESC',
     678                  ', TestBoxes.cCpus' ), }
     679        ),
     680    };
     681
    534682
    535683    def _getTimePeriodQueryPart(self, tsNow, sInterval):
     
    555703        return sRet
    556704
    557     def fetchResultsForListing(self, iStart, cMaxRows, tsNow, sInterval, enmResultsGroupingType, iResultsGroupingValue,
    558                                fOnlyFailures):
     705    def fetchResultsForListing(self, iStart, cMaxRows, tsNow, sInterval, enmResultSortBy,
     706                               enmResultsGroupingType, iResultsGroupingValue, fOnlyFailures):
    559707        """
    560708        Fetches TestResults table content.
     
    574722        # Get SQL query parameters
    575723        #
    576         if enmResultsGroupingType is None:
    577             raise TMExceptionBase('Unknown grouping type')
    578         if enmResultsGroupingType not in self.kdResultGroupingMap:
    579             raise TMExceptionBase('Unknown grouping type')
    580         sTables, sGroupingField, sGroupingCondition = self.kdResultGroupingMap[enmResultsGroupingType]
     724        if enmResultsGroupingType is None or enmResultsGroupingType not in self.kdResultGroupingMap:
     725            raise TMExceptionBase('Unknown grouping type');
     726        if enmResultSortBy is None or enmResultSortBy not in self.kasResultsSortBy:
     727            raise TMExceptionBase('Unknown sorting');
     728        sGroupingTables, sGroupingField, sGroupingCondition, dSortingOverrides = self.kdResultGroupingMap[enmResultsGroupingType];
     729        if enmResultSortBy in dSortingOverrides:
     730            sSortingTables, sSortingWhere, sSortingOrderBy, sSortingColumns = dSortingOverrides[enmResultSortBy];
     731        else:
     732            sSortingTables, sSortingWhere, sSortingOrderBy, sSortingColumns = self.kdResultSortByMap[enmResultSortBy];
    581733
    582734        #
     
    613765                  '       TestSuiteBits.idBuild AS idBuildTestSuite,\n' \
    614766                  '       TestSuiteBits.iRevision AS iRevisionTestSuite,\n' \
    615                   '       (TestSets.tsDone IS NULL) SortRunningFirst\n' \
     767                  '       (TestSets.tsDone IS NULL) SortRunningFirst' + sSortingColumns + '\n' \
    616768                  'FROM   BuildCategories,\n' \
    617769                  '       Builds,\n' \
     
    629781                  '                 TestSets.idGenTestCase AS idGenTestCase,\n' \
    630782                  '                 TestSets.idGenTestCaseArgs AS idGenTestCaseArgs\n' \
    631                   '          FROM  ' + sTables + '\n' \
     783                  '          FROM  ' + sGroupingTables + sSortingTables + '\n' \
    632784                  '          WHERE ' + self._getTimePeriodQueryPart(tsNow, sInterval);
    633785        if fOnlyFailures:
     
    638790        if sGroupingCondition is not None:
    639791            sQuery += sGroupingCondition.replace(' AND ', '            AND ');
    640         sQuery += '          ORDER BY (TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n' \
     792        if sSortingWhere is not None:
     793            sQuery += sSortingWhere.replace(' AND ', '            AND ');
     794        sQuery += '          ORDER BY ';
     795        if sSortingOrderBy is not None:
     796            sQuery += sSortingOrderBy + ',\n                ';
     797        sQuery += '(TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n' \
    641798                  '          LIMIT %s OFFSET %s\n' % (cMaxRows, iStart,);
    642799
     
    653810                  '   AND TestSets.idGenTestCase     = TestCases.idGenTestCase\n' \
    654811                  '   AND TestSets.idGenTestCaseArgs = TestCaseArgs.idGenTestCaseArgs\n' \
    655                   'ORDER BY (TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n'
     812                  'ORDER BY ';
     813        if sSortingOrderBy is not None:
     814            sQuery += sSortingOrderBy + ',\n       ';
     815        sQuery += '(TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n';
    656816
    657817        #
     
    686846        if enmResultsGroupingType not in self.kdResultGroupingMap:
    687847            raise TMExceptionBase('Unknown grouping type')
    688         sTables, sGroupingField, sGroupingCondition  = self.kdResultGroupingMap[enmResultsGroupingType]
     848        sGroupingTables, sGroupingField, sGroupingCondition, _  = self.kdResultGroupingMap[enmResultsGroupingType];
    689849
    690850        #
     
    692852        #
    693853        sQuery = 'SELECT COUNT(idTestSet)\n' \
    694                  'FROM   ' + sTables + '\n' \
     854                 'FROM   ' + sGroupingTables + '\n' \
    695855                 'WHERE  ' + self._getTimePeriodQueryPart(tsNow, sInterval);
    696856        if fOnlyFailures:
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