Ejemplo n.º 1
0
    def run(self, timeout):
        def target():
            self.process = subprocess.Popen(self.cmd, shell=True)
            self.process.communicate()

        thread = threading.Thread(target=target)
        thread.start()

        thread.join(timeout)
        if thread.is_alive():
            print redStr('ERROR: timeout reached for this process')
            self.process.terminate()
            thread.join()
        self.process = None
Ejemplo n.º 2
0
    def run(self, timeout):
        def target():
            self.process = subprocess.Popen(self.cmd, shell=True)
            self.process.communicate()

        thread = threading.Thread(target=target)
        thread.start()

        thread.join(timeout)
        if thread.is_alive():
            print redStr('ERROR: timeout reached for this process')
            self.process.terminate()
            thread.join()
        self.process = None
Ejemplo n.º 3
0
 def terminate(self):
     if self.process != None:
         self.process.terminate()
         print redStr('Ctrl-c pressed, aborting this test')
Ejemplo n.º 4
0
    def runProgramTests(self, program):
        tests = self.progDict[program]
        n = len(tests)
        outPath = join(self.fnDir, program)
        outDir = outPath
        testName = ""
        testNo = 1

        md = MetaData(self._statistics)

        for test, mpi, random, preruns, postruns, changeDirectory, testfiles, owner in tests:
            #for test, mpi, random, preruns, postruns, changeDirectory, testfiles in tests:
            objid = md.addObject()
            if n > 1:
                outDir = outPath + "_%02d" % testNo
                testName = "(%d of %d)" % (testNo, n)
            #test num
            md.setValue(MDL_BLOCK_NUMBER, testNo, objid)
            #program name
            #print type(program)
            md.setValue(MDL_PROGRAM, str(program), objid)
            dtBegin = datetime.now()
            timeStr = str(dtBegin)
            #beginning time
            md.setValue(MDL_DATE, str(timeStr), objid)

            print "------------------------------------------------------------------------------------"
            print warnStr(
                ">>> Running test %(testName)s of %(program)s (%(timeStr)s)" %
                locals())
            print "    Output dir: "
            print "       ", outDir
            print "    Statistics file: "
            print "       ", self._statistics
            print "    Timeout: "
            print "       %d seconds" % self._timeout

            if exists(outDir):
                shutil.rmtree(outDir)
            os.makedirs(outDir)
            self.outDir = outDir
            self.program = program
            test = self.expandFormat(test)
            self.runCommands(preruns, 'prerun')

            if mpi:
                cmd = "mpirun -np 3 `which %s`" % program  ##DO NOT REPLACE SO WE CAN TEST MPI EASILY.replace("xmipp_", "xmipp_mpi_")
            else:
                cmd = program
            if changeDirectory:
                cmd = "cd %s ; " % outDir + cmd + " %s > stdout.txt 2> stderr.txt" % test
            else:
                cmd += " %s > %s/stdout.txt 2> %s/stderr.txt" % (test, outDir,
                                                                 outDir)
            print "    Command: "
            print "       ", greenStr(cmd)

            #run the test itself
            command = Command(cmd)
            self._command = command
            try:
                command.run(timeout=self._timeout)
            except KeyboardInterrupt:
                command.terminate()
            #result = os.system(cmd)
            #result = subprocess.call(cmd, shell=True)

            self.runCommands(postruns, 'postrun')

            tdEnd = (datetime.now() - dtBegin).total_seconds()
            #elapsed time
            md.setValue(MDL_TIME, tdEnd, objid)

            print "    Elapsed time: %d seconds" % tdEnd
            error = self.checkResult(testfiles, outDir, random)
            if len(error):
                self.error += error
                self.errorFlag = True
                print redStr("ERRORS:\n" + error)
                md.setValue(MDL_ENABLED, -1, objid)
            else:
                md.setValue(MDL_ENABLED, 1, objid)
            testNo += 1
            md.setValue(MDL_USER, str(owner), objid)
        md.write(self._statistics)
Ejemplo n.º 5
0
 def terminate(self):
     if self.process != None:
         self.process.terminate()
         print redStr('Ctrl-c pressed, aborting this test')
Ejemplo n.º 6
0
    def runProgramTests(self, program):
        tests = self.progDict[program]
        n = len(tests)
        outPath = join(self.fnDir, program)
        outDir = outPath
        testName = ""
        testNo = 1
        
        md = MetaData(self._statistics)
        
        for test, mpi, random, preruns, postruns, changeDirectory, testfiles, owner in tests:
        #for test, mpi, random, preruns, postruns, changeDirectory, testfiles in tests:
            objid = md.addObject()
            if n > 1:
                outDir = outPath + "_%02d" % testNo
                testName = "(%d of %d)" % (testNo, n)
            #test num
            md.setValue(MDL_BLOCK_NUMBER, testNo , objid)
            #program name
            #print type(program)
            md.setValue(MDL_PROGRAM, str(program), objid)
            dtBegin = datetime.now()
            timeStr = str(dtBegin)
            #beginning time
            md.setValue(MDL_DATE, str(timeStr), objid)
            
            print "------------------------------------------------------------------------------------"
            print warnStr(">>> Running test %(testName)s of %(program)s (%(timeStr)s)" % locals())
            print "    Output dir: "
            print "       ", outDir
            print "    Statistics file: "
            print "       ", self._statistics
            print "    Timeout: "
            print "       %d seconds" % self._timeout
            
            if exists(outDir):
                shutil.rmtree(outDir)
            os.makedirs(outDir)
            self.outDir = outDir
            self.program = program
            test = self.expandFormat(test)            
            self.runCommands(preruns, 'prerun')
            
            if mpi:
                cmd = "mpirun -np 3 `which %s`" % program##DO NOT REPLACE SO WE CAN TEST MPI EASILY.replace("xmipp_", "xmipp_mpi_")
            else:
                cmd = program
            if changeDirectory:
                cmd = "cd %s ; " % outDir + cmd + " %s > stdout.txt 2> stderr.txt" % test
            else:
                cmd += " %s > %s/stdout.txt 2> %s/stderr.txt" % (test, outDir, outDir)
            print "    Command: "
            print "       ", greenStr(cmd)
                
            #run the test itself
            command = Command(cmd)
            self._command = command
            try:
                command.run(timeout=self._timeout)
            except KeyboardInterrupt:
                command.terminate()
            #result = os.system(cmd)
            #result = subprocess.call(cmd, shell=True) 

            self.runCommands(postruns, 'postrun')

            tdEnd = (datetime.now() - dtBegin).total_seconds()
            #elapsed time
            md.setValue(MDL_TIME, tdEnd, objid)
            
            print "    Elapsed time: %d seconds" % tdEnd
            error = self.checkResult(testfiles, outDir, random)
            if len(error):
                self.error += error
                self.errorFlag = True
                print redStr("ERRORS:\n" + error)
                md.setValue(MDL_ENABLED, -1, objid)
            else:
                md.setValue(MDL_ENABLED, 1, objid)
            testNo += 1
            md.setValue(MDL_USER, str(owner), objid)
        md.write(self._statistics)