def _uninstallVBoxOnSolaris(self): """ Uninstalls VBox on Solaris.""" reporter.flushall() if utils.processCall(['pkginfo', '-q', 'SUNWvbox']) != 0: return True sRsp = self._generateAutoResponseOnSolaris() fRc, _ = self._sudoExecuteSync(['pkgrm', '-n', '-a', sRsp, 'SUNWvbox']) return fRc
def _uninstallVBoxOnSolaris(self): """ Uninstalls VBox on Solaris.""" reporter.flushall(); if utils.processCall(['pkginfo', '-q', 'SUNWvbox']) != 0: return True; sRsp = self._generateAutoResponseOnSolaris(); fRc, _ = self._sudoExecuteSync(['pkgrm', '-n', '-a', sRsp, 'SUNWvbox']); return fRc;
def checkProcessHeap(): """ Calls HeapValidate(GetProcessHeap(), 0, NULL); """ # Get the process heap. try: hHeap = ctypes.windll.kernel32.GetProcessHeap() except: reporter.logXcpt() return False # Check it. try: fIsOkay = ctypes.windll.kernel32.HeapValidate(hHeap, 0, None) except: reporter.logXcpt() return False if fIsOkay == 0: reporter.log('HeapValidate failed!') # Try trigger a dump using c:\utils\procdump64.exe. from common import utils iPid = os.getpid() asArgs = [ 'e:\\utils\\procdump64.exe', '-ma', '%s' % (iPid, ), 'c:\\CrashDumps\\python.exe-%u-heap.dmp' % (iPid, ) ] if utils.getHostArch() != 'amd64': asArgs[0] = 'c:\\utils\\procdump.exe' reporter.log('Trying to dump this process using: %s' % (asArgs, )) utils.processCall(asArgs) # Generate a crash exception. ctypes.windll.msvcrt.strcpy(None, None, 1024) return True
def _executeSync(self, asArgs): """ Executes a child process synchronously. Returns True if the process executed successfully and returned 0, otherwise False is returned. """ reporter.log('Executing: %s' % (asArgs, )); reporter.flushall(); try: iRc = utils.processCall(asArgs, shell = False, close_fds = False); except: reporter.errorXcpt(); return False; reporter.log('Exit code: %s (%s)' % (iRc, asArgs)); return iRc is 0;
def _executeSync(self, asArgs): """ Executes a child process synchronously. Returns True if the process executed successfully and returned 0, otherwise False is returned. """ reporter.log('Executing: %s' % (asArgs, )) reporter.flushall() try: iRc = utils.processCall(asArgs, shell=False, close_fds=False) except: reporter.errorXcpt() return False reporter.log('Exit code: %s (%s)' % (iRc, asArgs)) return iRc is 0
def checkProcessHeap(): """ Calls HeapValidate(GetProcessHeap(), 0, NULL); """ # Get the process heap. try: hHeap = ctypes.windll.kernel32.GetProcessHeap(); except: reporter.logXcpt(); return False; # Check it. try: fIsOkay = ctypes.windll.kernel32.HeapValidate(hHeap, 0, None); except: reporter.logXcpt(); return False; if fIsOkay == 0: reporter.log('HeapValidate failed!'); # Try trigger a dump using c:\utils\procdump64.exe. from common import utils; iPid = os.getpid(); asArgs = [ 'e:\\utils\\procdump64.exe', '-ma', '%s' % (iPid,), 'c:\\CrashDumps\\python.exe-%u-heap.dmp' % (iPid,)]; if utils.getHostArch() != 'amd64': asArgs[0] = 'c:\\utils\\procdump.exe' reporter.log('Trying to dump this process using: %s' % (asArgs,)); utils.processCall(asArgs); # Generate a crash exception. ctypes.windll.msvcrt.strcpy(None, None, 1024); return True;
def _executeSync(self, asArgs, fMaySkip = False): """ Executes a child process synchronously. Returns True if the process executed successfully and returned 0. Returns None if fMaySkip is true and the child exits with RTEXITCODE_SKIPPED. Returns False for all other cases. """ reporter.log('Executing: %s' % (asArgs, )); reporter.flushall(); try: iRc = utils.processCall(asArgs, shell = False, close_fds = False); except: reporter.errorXcpt(); return False; reporter.log('Exit code: %s (%s)' % (iRc, asArgs)); if fMaySkip and iRc == rtexitcode.RTEXITCODE_SKIPPED: return None; return iRc is 0;
def _executeSync(self, asArgs, fMaySkip=False): """ Executes a child process synchronously. Returns True if the process executed successfully and returned 0. Returns None if fMaySkip is true and the child exits with RTEXITCODE_SKIPPED. Returns False for all other cases. """ reporter.log('Executing: %s' % (asArgs, )) reporter.flushall() try: iRc = utils.processCall(asArgs, shell=False, close_fds=False) except: reporter.errorXcpt() return False reporter.log('Exit code: %s (%s)' % (iRc, asArgs)) if fMaySkip and iRc == rtexitcode.RTEXITCODE_SKIPPED: return None return iRc is 0
def _uninstallVBoxOnSolaris(self, fRestartSvcConfigD): """ Uninstalls VBox on Solaris.""" reporter.flushall(); if utils.processCall(['pkginfo', '-q', 'SUNWvbox']) != 0: return True; sRsp = self._generateAutoResponseOnSolaris(); fRc, _ = self._sudoExecuteSync(['pkgrm', '-n', '-a', sRsp, 'SUNWvbox']); # # Restart the svc.configd as it has a tendency to clog up with time and # become unresponsive. It will handle SIGHUP by exiting the sigwait() # look in the main function and shut down the service nicely (backend_fini). # The restarter will then start a new instance of it. # if fRestartSvcConfigD: time.sleep(1); # Give it a chance to flush pkgrm stuff. self._sudoExecuteSync(['pkill', '-HUP', 'svc.configd']); time.sleep(5); # Spare a few cpu cycles it to shutdown and restart. return fRc;
def _uninstallVBoxOnSolaris(self, fRestartSvcConfigD): """ Uninstalls VBox on Solaris.""" reporter.flushall(); if utils.processCall(['pkginfo', '-q', 'SUNWvbox']) != 0: return True; sRsp = self._generateAutoResponseOnSolaris(); fRc, _ = self._sudoExecuteSync(['pkgrm', '-n', '-a', sRsp, 'SUNWvbox']); # # Restart the svc.configd as it has a tendency to clog up with time and # become unresponsive. It will handle SIGHUP by exiting the sigwait() # look in the main function and shut down the service nicely (backend_fini). # The restarter will then start a new instance of it. # if fRestartSvcConfigD: time.sleep(1); # Give it a chance to flush pkgrm stuff. self._sudoExecuteSync(['pkill', '-HUP', 'svc.configd']); time.sleep(5); # Spare a few cpu cycles it to shutdown and restart. return fRc;
def _mountShare(self, sMountPoint, sType, sServer, sShare, sUser, sPassword, sWhat): """ Mounts the specified share if needed. Raises exception on failure. """ # Only mount if the type is specified. if sType is None: return True; # Test if already mounted. sTestFile = os.path.join(sMountPoint + os.path.sep, sShare + '.txt'); if os.path.isfile(sTestFile): return True; # # Platform specific mount code. # sHostOs = utils.getHostOs() if sHostOs in ('darwin', 'freebsd'): utils.sudoProcessCall(['/sbin/umount', sMountPoint]); utils.sudoProcessCall(['/bin/mkdir', '-p', sMountPoint]); utils.sudoProcessCall(['/usr/sbin/chown', str(os.getuid()), sMountPoint]); # pylint: disable=E1101 if sType == 'cifs': # Note! no smb://server/share stuff here, 10.6.8 didn't like it. utils.processOutputChecked(['/sbin/mount_smbfs', '-o', 'automounted,nostreams,soft,noowners,noatime,rdonly', '-f', '0555', '-d', '0555', '//%s:%s@%s/%s' % (sUser, sPassword, sServer, sShare), sMountPoint]); else: raise TestBoxScriptException('Unsupported server type %s.' % (sType,)); elif sHostOs == 'linux': utils.sudoProcessCall(['/bin/umount', sMountPoint]); utils.sudoProcessCall(['/bin/mkdir', '-p', sMountPoint]); if sType == 'cifs': utils.sudoProcessOutputChecked(['/bin/mount', '-t', 'cifs', '-o', 'user='******',password='******',sec=ntlmv2' + ',uid=' + str(os.getuid()) # pylint: disable=E1101 + ',gid=' + str(os.getgid()) # pylint: disable=E1101 + ',nounix,file_mode=0555,dir_mode=0555,soft,ro', '//%s/%s' % (sServer, sShare), sMountPoint]); elif sType == 'nfs': utils.sudoProcessOutputChecked(['/bin/mount', '-t', 'nfs', '-o', 'soft,ro', '%s:%s' % (sServer, sShare if sShare.find('/') >= 0 else ('/export/' + sShare)), sMountPoint]); else: raise TestBoxScriptException('Unsupported server type %s.' % (sType,)); elif sHostOs == 'solaris': utils.sudoProcessCall(['/sbin/umount', sMountPoint]); utils.sudoProcessCall(['/bin/mkdir', '-p', sMountPoint]); if sType == 'cifs': ## @todo This stuff doesn't work on wei01-x4600b.de.oracle.com running 11.1. FIXME! oPasswdFile = tempfile.TemporaryFile(); oPasswdFile.write(sPassword + '\n'); oPasswdFile.flush(); utils.sudoProcessOutputChecked(['/sbin/mount', '-F', 'smbfs', '-o', 'user='******',uid=' + str(os.getuid()) # pylint: disable=E1101 + ',gid=' + str(os.getgid()) # pylint: disable=E1101 + ',fileperms=0555,dirperms=0555,noxattr,ro', '//%s/%s' % (sServer, sShare), sMountPoint], stdin = oPasswdFile); oPasswdFile.close(); elif sType == 'nfs': utils.sudoProcessOutputChecked(['/sbin/mount', '-F', 'nfs', '-o', 'noxattr,ro', '%s:%s' % (sServer, sShare if sShare.find('/') >= 0 else ('/export/' + sShare)), sMountPoint]); else: raise TestBoxScriptException('Unsupported server type %s.' % (sType,)); elif sHostOs == 'win': if sType != 'cifs': raise TestBoxScriptException('Only CIFS mounts are supported on Windows.'); utils.processCall(['net', 'use', sMountPoint, '/d']); utils.processOutputChecked(['net', 'use', sMountPoint, '\\\\' + sServer + '\\' + sShare, sPassword, '/USER:'******'Unsupported host %s' % (sHostOs,)); # # Re-test. # if not os.path.isfile(sTestFile): raise TestBoxException('Failed to mount %s (%s[%s]) at %s: %s not found' % (sWhat, sServer, sShare, sMountPoint, sTestFile)); return True;
def _mountShare(self, sMountPoint, sType, sServer, sShare, sUser, sPassword, sWhat): """ Mounts the specified share if needed. Raises exception on failure. """ # Only mount if the type is specified. if sType is None: return True; # Test if already mounted. sTestFile = os.path.join(sMountPoint + os.path.sep, sShare + '-new.txt'); if os.path.isfile(sTestFile): return True; # # Platform specific mount code. # sHostOs = utils.getHostOs() if sHostOs in ('darwin', 'freebsd'): utils.sudoProcessCall(['/sbin/umount', sMountPoint]); utils.sudoProcessCall(['/bin/mkdir', '-p', sMountPoint]); utils.sudoProcessCall(['/usr/sbin/chown', str(os.getuid()), sMountPoint]); # pylint: disable=E1101 if sType == 'cifs': # Note! no smb://server/share stuff here, 10.6.8 didn't like it. utils.processOutputChecked(['/sbin/mount_smbfs', '-o', 'automounted,nostreams,soft,noowners,noatime,rdonly', '-f', '0555', '-d', '0555', '//%s:%s@%s/%s' % (sUser, sPassword, sServer, sShare), sMountPoint]); else: raise TestBoxScriptException('Unsupported server type %s.' % (sType,)); elif sHostOs == 'linux': utils.sudoProcessCall(['/bin/umount', sMountPoint]); utils.sudoProcessCall(['/bin/mkdir', '-p', sMountPoint]); if sType == 'cifs': utils.sudoProcessOutputChecked(['/bin/mount', '-t', 'cifs', '-o', 'user='******',password='******',sec=ntlmv2' + ',uid=' + str(os.getuid()) # pylint: disable=E1101 + ',gid=' + str(os.getgid()) # pylint: disable=E1101 + ',nounix,file_mode=0555,dir_mode=0555,soft,ro', '//%s/%s' % (sServer, sShare), sMountPoint]); elif sType == 'nfs': utils.sudoProcessOutputChecked(['/bin/mount', '-t', 'nfs', '-o', 'soft,ro', '%s:%s' % (sServer, sShare if sShare.find('/') >= 0 else ('/export/' + sShare)), sMountPoint]); else: raise TestBoxScriptException('Unsupported server type %s.' % (sType,)); elif sHostOs == 'solaris': utils.sudoProcessCall(['/sbin/umount', sMountPoint]); utils.sudoProcessCall(['/bin/mkdir', '-p', sMountPoint]); if sType == 'cifs': ## @todo This stuff doesn't work on wei01-x4600b.de.oracle.com running 11.1. FIXME! oPasswdFile = tempfile.TemporaryFile(); oPasswdFile.write(sPassword + '\n'); oPasswdFile.flush(); utils.sudoProcessOutputChecked(['/sbin/mount', '-F', 'smbfs', '-o', 'user='******',uid=' + str(os.getuid()) # pylint: disable=E1101 + ',gid=' + str(os.getgid()) # pylint: disable=E1101 + ',fileperms=0555,dirperms=0555,noxattr,ro', '//%s/%s' % (sServer, sShare), sMountPoint], stdin = oPasswdFile); oPasswdFile.close(); elif sType == 'nfs': utils.sudoProcessOutputChecked(['/sbin/mount', '-F', 'nfs', '-o', 'noxattr,ro', '%s:%s' % (sServer, sShare if sShare.find('/') >= 0 else ('/export/' + sShare)), sMountPoint]); else: raise TestBoxScriptException('Unsupported server type %s.' % (sType,)); elif sHostOs == 'win': if sType != 'cifs': raise TestBoxScriptException('Only CIFS mounts are supported on Windows.'); utils.processCall(['net', 'use', sMountPoint, '/d']); utils.processOutputChecked(['net', 'use', sMountPoint, '\\\\' + sServer + '\\' + sShare, sPassword, '/USER:'******'Unsupported host %s' % (sHostOs,)); # # Re-test. # if not os.path.isfile(sTestFile): raise TestBoxException('Failed to mount %s (%s[%s]) at %s: %s not found' % (sWhat, sServer, sShare, sMountPoint, sTestFile)); return True;