VirtualBox

Changeset 65199 in vbox for trunk/src


Ignore:
Timestamp:
Jan 9, 2017 11:57:35 AM (8 years ago)
Author:
vboxsync
Message:

testdriver/base.py,vboxwrappers.py,tdUnitTest1.py: Modified pidFileAdd and friends to keep the process name and SUDO/set-uid-to-root status around.

Location:
trunk/src/VBox/ValidationKit
Files:
3 edited

Legend:

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

    r62795 r65199  
    11391139        """
    11401140        Worker that reads the PID file.
    1141         Returns list of PID, empty if no file.
    1142         """
    1143         aiPids = [];
     1141        Returns dictionary of PID with value (sName, fSudo), empty if no file.
     1142        """
     1143        dPids = {};
    11441144        if os.path.isfile(self.sPidFile):
    11451145            try:
     
    11491149            except:
    11501150                reporter.errorXcpt();
    1151                 return aiPids;
     1151                return dPids;
    11521152
    11531153            sContent = str(sContent).strip().replace('\n', ' ').replace('\r', ' ').replace('\t', ' ');
    1154             for sPid in sContent.split(' '):
    1155                 if sPid.isdigit():
     1154            for sProcess in sContent.split(' '):
     1155                asFields = sProcess.split(':');
     1156                if len(asFields) == 3 and asFields[0].isdigit():
    11561157                    try:
    1157                         aiPids.append(int(sPid));
     1158                        dPids[int(asFields[0])] = (asFields[2], asFields[1] == 'sudo');
    11581159                    except:
    1159                         reporter.logXcpt('sPid=%s' % (sPid,));
     1160                        reporter.logXcpt('sProcess=%s' % (sProcess,));
    11601161                else:
    1161                     reporter.log('%s: "%s"' % (self.sPidFile, sPid));
    1162 
    1163         return aiPids;
    1164 
    1165     def pidFileAdd(self, iPid, fSudo = False):
     1162                    reporter.log('%s: "%s"' % (self.sPidFile, sProcess));
     1163
     1164        return dPids;
     1165
     1166    def pidFileAdd(self, iPid, sName, fSudo = False):
    11661167        """
    11671168        Adds a PID to the PID file, creating the file if necessary.
     
    11701171        try:
    11711172            oFile = utils.openNoInherit(self.sPidFile, 'a');
    1172             oFile.write(str(iPid) + '\n');
     1173            oFile.write('%s:%s:%s\n'
     1174                        % ( iPid,
     1175                            'sudo' if fSudo else 'normal',
     1176                             sName.replace(' ', '_').replace(':','_').replace('\n','_').replace('\r','_').replace('\t','_'),));
    11731177            oFile.close();
    11741178        except:
     
    11821186        Removes a PID from the PID file.
    11831187        """
    1184         aiPids = self.pidFileRead();
    1185         if iPid not in aiPids:
     1188        dPids = self.pidFileRead();
     1189        if iPid not in dPids:
    11861190            if not fQuiet:
    1187                 reporter.log('pidFileRemove could not find %s in the PID file (content: %s)' % (iPid, aiPids));
     1191                reporter.log('pidFileRemove could not find %s in the PID file (content: %s)' % (iPid, dPids));
    11881192            return False;
    11891193
    1190         aiPids.remove(iPid);
     1194        sName = dPids[iPid][0];
     1195        del dPids[iPid];
     1196
    11911197        sPid = '';
    1192         for iPid2 in aiPids:
    1193             sPid += '%s\n' % (iPid2,);
     1198        for iPid2 in dPids:
     1199            sPid += '%s:%s:%s\n' % (iPid2, 'sudo' if dPids[iPid2][1] else 'normal', dPids[iPid2][0]);
    11941200
    11951201        try:
     
    12011207            return False;
    12021208
    1203         reporter.log2('pidFileRemove: removed PID %d (new content: %s)' % (iPid, self.pidFileRead(),));
     1209        reporter.log2('pidFileRemove: removed PID %d [%s] (new content: %s)' % (iPid, sName, self.pidFileRead(),));
    12041210        return True;
    12051211
     
    15161522        """
    15171523
    1518         aiPids = self.pidFileRead();
    1519         reporter.log('The pid file contained: %s' % (aiPids,));
     1524        dPids = self.pidFileRead();
     1525        reporter.log('The pid file contained: %s' % (dPids,));
    15201526
    15211527        #
     
    15271533            afnMethods = [ sendUserSignal1, processInterrupt, processTerminate, processKill ];
    15281534        for fnMethod in afnMethods:
    1529             for iPid in aiPids:
     1535            ## @todo Handle SUDO processes.
     1536            for iPid in dPids:
    15301537                fnMethod(iPid);
    15311538
     
    15341541                    time.sleep(1);
    15351542
    1536                 for j in range(len(aiPids) - 1, -1, -1):
    1537                     iPid = aiPids[j];
     1543                for iPid in dPids.keys():
    15381544                    if not processExists(iPid):
    1539                         reporter.log('%s terminated' % (iPid,));
     1545                        reporter.log('%s (%s) terminated' % (dPids[iPid][0], iPid,));
    15401546                        self.pidFileRemove(iPid, fQuiet = True);
    1541                         aiPids.pop(j);
    1542 
    1543                 if len(aiPids) == 0:
     1547                        del dPids[iPid];
     1548
     1549                if len(dPids) == 0:
    15441550                    reporter.log('All done.');
    15451551                    return True;
    15461552
    15471553                if i in [4, 8]:
    1548                     reporter.log('Still waiting for: %s (method=%s)' % (aiPids, fnMethod,));
    1549 
    1550         reporter.log('Failed to terminate the following processes: %s' % (aiPids,));
     1554                    reporter.log('Still waiting for: %s (method=%s)' % (dPids, fnMethod,));
     1555
     1556        reporter.log('Failed to terminate the following processes: %s' % (dPids,));
    15511557        return False;
    15521558
     
    16611667                reporter.log('*** cleanup-before action completed (fRc2=%s, fRc=%s) ***' % (fRc2, fRc,));
    16621668
    1663             self.pidFileAdd(os.getpid());
     1669            self.pidFileAdd(os.getpid(), os.path.basename(sys.argv[0]));
    16641670
    16651671            if 'config' in asActions and fRc is True:
     
    17301736
    17311737    def testPidFile(self):
    1732         aiPids = [os.getpid() + 1, os.getpid() + 2];
    1733         self.assertTrue(self.oTstDrv.pidFileAdd(aiPids[0]));
    1734         self.assertEqual(self.oTstDrv.pidFileRead(), aiPids[0:1]);
    1735         self.assertTrue(self.oTstDrv.pidFileAdd(aiPids[1]));
    1736         self.assertEqual(self.oTstDrv.pidFileRead(), aiPids[0:2]);
     1738
     1739        iPid1 = os.getpid() + 1;
     1740        iPid2 = os.getpid() + 2;
     1741
     1742        self.assertTrue(self.oTstDrv.pidFileAdd(iPid1, 'test1'));
     1743        self.assertEqual(self.oTstDrv.pidFileRead(), {iPid1:('test1',False)});
     1744
     1745        self.assertTrue(self.oTstDrv.pidFileAdd(iPid2, 'test2', fSudo = True));
     1746        self.assertEqual(self.oTstDrv.pidFileRead(), {iPid1:('test1',False), iPid2:('test2',True)});
     1747
     1748        self.assertTrue(self.oTstDrv.pidFileRemove(iPid1));
     1749        self.assertEqual(self.oTstDrv.pidFileRead(), {iPid2:('test2',True)});
     1750
     1751        self.assertTrue(self.oTstDrv.pidFileRemove(iPid2));
     1752        self.assertEqual(self.oTstDrv.pidFileRead(), {});
     1753
    17371754        self.assertTrue(self.oTstDrv.pidFileDelete());
    17381755
  • trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py

    r64332 r65199  
    26182618            if self.uPid is not None:
    26192619                reporter.log2('getPid: %u' % (self.uPid,));
    2620                 self.oTstDrv.pidFileAdd(self.uPid);
     2620                self.oTstDrv.pidFileAdd(self.uPid, 'vm_%s' % (self.sName,), fSudo = True); # Set-uid-to-root is similar to SUDO.
    26212621        return self.uPid;
    26222622
  • trunk/src/VBox/ValidationKit/tests/unittests/tdUnitTest1.py

    r65196 r65199  
    645645
    646646            if oChild is not None:
    647                 self.pidFileAdd(oChild.pid, fSudo = fHardened);
     647                self.pidFileAdd(oChild.pid, sName, fSudo = fHardened);
    648648                iRc = oChild.wait();
    649649                self.pidFileRemove(oChild.pid);
Note: See TracChangeset for help on using the changeset viewer.

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