Beispiel #1
0
    def _recreateQueueItems(self, oData):
        #
        # Prepare the input data for the loop below.  We compress the priority
        # to reduce the number of loops we need to executes below.
        #
        # Note! For BECI test group priority only applies to the ordering of
        #       test groups, which has been resolved by the done sorting in the
        #       base class.
        #
        iMinPriority = 0x7fff
        iMaxPriority = 0
        for oTestGroup in oData.aoTestGroups:
            for oTestCase in oTestGroup.aoTestCases:
                iPrio = oTestCase.iSchedPriority
                assert iPrio in range(32)
                iPrio = iPrio / 4
                assert iPrio in range(8)
                if iPrio > iMaxPriority:
                    iMaxPriority = iPrio
                if iPrio < iMinPriority:
                    iMinPriority = iPrio

                oTestCase.iBeciPrio = iPrio
                oTestCase.iNextVariation = -1

        assert iMinPriority in range(8)
        assert iMaxPriority in range(8)
        assert iMinPriority <= iMaxPriority

        #
        # Generate the
        #
        cMaxItems = len(oData.aoArgsVariations) * 64
        if cMaxItems > 1048576:
            cMaxItems = 1048576

        aoItems = list()
        cNotAtEnd = len(oData.aoTestCases)
        while len(aoItems) < cMaxItems:
            self.msgDebug('outer loop: %s items' % (len(aoItems), ))
            for iPrio in range(iMaxPriority, iMinPriority - 1, -1):
                #self.msgDebug('prio loop: %s' % (iPrio,));
                for oTestGroup in oData.aoTestGroups:
                    #self.msgDebug('testgroup loop: %s' % (oTestGroup,));
                    for oTestCase in oTestGroup.aoTestCases:
                        #self.msgDebug('testcase loop: idTestCase=%s' % (oTestCase.idTestCase,));
                        if iPrio <= oTestCase.iBeciPrio and oTestCase.aoArgsVariations:
                            # Get variation.
                            iNext = oTestCase.iNextVariation
                            if iNext != 0:
                                if iNext == -1: iNext = 0
                                cNotAtEnd -= 1
                            oArgsVariation = oTestCase.aoArgsVariations[iNext]

                            # Update next variation.
                            iNext = (iNext + 1) % len(
                                oTestCase.aoArgsVariations)
                            cNotAtEnd += iNext != 0
                            oTestCase.iNextVariation = iNext

                            # Create queue item and append it.
                            oItem = SchedQueueData()
                            oItem.initFromValues(
                                idSchedGroup=self._oSchedGrpData.idSchedGroup,
                                idGenTestCaseArgs=oArgsVariation.
                                idGenTestCaseArgs,
                                idTestGroup=oTestGroup.idTestGroup,
                                aidTestGroupPreReqs=oTestGroup.
                                aidTestGroupPreReqs,
                                bmHourlySchedule=oTestGroup.bmHourlySchedule,
                                cMissingGangMembers=oArgsVariation.
                                cGangMembers,
                                offQueue=len(aoItems))
                            aoItems.append(oItem)

                            # Done?
                            if cNotAtEnd == 0:
                                self.msgDebug('returns %s items' %
                                              (len(aoItems), ))
                                return aoItems
        return aoItems
    def _recreateQueueItems(self, oData):
        #
        # Prepare the input data for the loop below.  We compress the priority
        # to reduce the number of loops we need to executes below.
        #
        # Note! For BECI test group priority only applies to the ordering of
        #       test groups, which has been resolved by the done sorting in the
        #       base class.
        #
        iMinPriority = 0x7fff;
        iMaxPriority = 0;
        for oTestGroup in oData.aoTestGroups:
            for oTestCase in oTestGroup.aoTestCases:
                iPrio = oTestCase.iSchedPriority;
                assert iPrio in range(32);
                iPrio = iPrio / 4;
                assert iPrio in range(8);
                if iPrio > iMaxPriority:
                    iMaxPriority = iPrio;
                if iPrio < iMinPriority:
                    iMinPriority = iPrio;

                oTestCase.iBeciPrio      = iPrio;
                oTestCase.iNextVariation = -1;

        assert iMinPriority in range(8);
        assert iMaxPriority in range(8);
        assert iMinPriority <= iMaxPriority;

        #
        # Generate the
        #
        cMaxItems = len(oData.aoArgsVariations) * 64;
        if cMaxItems > 1048576:
            cMaxItems = 1048576;

        aoItems   = list();
        cNotAtEnd = len(oData.aoTestCases);
        while len(aoItems) < cMaxItems:
            self.msgDebug('outer loop: %s items' % (len(aoItems),));
            for iPrio in range(iMaxPriority, iMinPriority - 1, -1):
                #self.msgDebug('prio loop: %s' % (iPrio,));
                for oTestGroup in oData.aoTestGroups:
                    #self.msgDebug('testgroup loop: %s' % (oTestGroup,));
                    for oTestCase in oTestGroup.aoTestCases:
                        #self.msgDebug('testcase loop: idTestCase=%s' % (oTestCase.idTestCase,));
                        if iPrio <= oTestCase.iBeciPrio  and  len(oTestCase.aoArgsVariations) > 0:
                            # Get variation.
                            iNext = oTestCase.iNextVariation;
                            if iNext != 0:
                                if iNext == -1: iNext = 0;
                                cNotAtEnd -= 1;
                            oArgsVariation = oTestCase.aoArgsVariations[iNext];

                            # Update next variation.
                            iNext = (iNext + 1) % len(oTestCase.aoArgsVariations);
                            cNotAtEnd += iNext != 0;
                            oTestCase.iNextVariation = iNext;

                            # Create queue item and append it.
                            oItem = SchedQueueData();
                            oItem.initFromValues(idSchedGroup        = self._oSchedGrpData.idSchedGroup,
                                                 idGenTestCaseArgs   = oArgsVariation.idGenTestCaseArgs,
                                                 idTestGroup         = oTestGroup.idTestGroup,
                                                 aidTestGroupPreReqs = oTestGroup.aidTestGroupPreReqs,
                                                 bmHourlySchedule    = oTestGroup.bmHourlySchedule,
                                                 cMissingGangMembers = oArgsVariation.cGangMembers,
                                                 offQueue            = len(aoItems));
                            aoItems.append(oItem);

                            # Done?
                            if cNotAtEnd == 0:
                                self.msgDebug('returns %s items' % (len(aoItems),));
                                return aoItems;
        return aoItems;