Пример #1
0
class TaskAPITests(object):
    """
    TaskAPITests for the Job class
    """

    ##########################################################################
    def __init__(self, dbtype, installDb=False):
        """
        __init__
        """

        self.bossSession = None
        self.schedSession = None
        self.task = None
        self.jobRange = 'all'
        self.outdir = None
        self.taskId = None
        self.taskName = 'test_task'

        # read configuration
        self.database = dbType
        self.dbConfig = dbConfig
        self.schedulerConfig = schedulerConfig

        if dbtype.lower() == 'sqlite':
            self.bossSession = self._SqLiteSession(installDb)
        elif dbtype.lower() == 'mysql':
            self.bossSession = self._MySqlSession(installDb)
        else:
            print "bad db choice: '%s', allowed only 'SQLite' or 'MySQL'" % \
                  dbtype
            sys.exit()

    ##########################################################################
    def _SqLiteSession(self, installDb):
        """
        __sqLiteSession__
        """

        if self.bossSession is not None:
            return

        # BossLiteApi session
        self.database = "SQLite"

        self.bossSession = BossLiteAPI(self.database, self.dbConfig)

        # db installed?
        try:
            if installDb:
                self.bossSession.bossLiteDB.installDB(
                    '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql'
                )
                self.bossSession.bossLiteDB.reset()
        except:
            pass

        return self.bossSession

    ##########################################################################
    def _MySqlSession(self, installDb):
        """
        __mySqlSession__
        """

        if self.bossSession is not None:
            return

        self.database = "MySQL"

        # BossLiteApi session
        self.bossSession = BossLiteAPI(self.database, self.dbConfig)

        # db installed?
        try:
            if installDb:
                self.bossSession.bossLiteDB.installDB(
                    '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase.sql'
                )
        except:
            pass

        return self.bossSession

    ##########################################################################
    def schedulerSession(self):
        """
        __schedulerSession__
        """

        if self.schedSession is not None:
            return self.schedSession

        self.schedSession = BossLiteAPISched( self.bossSession, \
                                                  self.schedulerConfig, \
                                                  self.task )
        return self.schedSession

    ##########################################################################
    def testTask(self):
        """
        __testTask__
        """

        try:
            if self.taskId is not None:
                self.load(self.taskId, self.jobRange)
            else:
                self.task = self.bossSession.loadTaskByName(self.taskName,
                                                            deep=False)
                self.load(self.task, self.jobRange)
            print "Task loaded..."
        except BossLiteError, e:
            print "Task not found... declaring"

            taskParams = {
                'name': self.taskName,
                'globalSandbox': '/etc/redhat-release'
            }

            self.task = Task(taskParams)
            print self.task

            parameters = {
                'executable': '/bin/echo',
                'arguments': 'ciao',
                'standardError': 'err.txt',
                'standardOutput': 'out.txt',
                'outputFiles': ['out.txt']
            }
            #                      'outputFiles' : ['err.txt', 'out.txt', '.BrokerInfo']}
            jobs = []
            for jobId in range(1, 51):
                parameters['name'] = 'job' + str(jobId)
                job = Job(parameters)
                self.bossSession.getNewRunningInstance(job)
                jobs.append(job)

            parameters['arguments'] = 'ciao2'
            for jobId in range(51, 101):
                parameters['name'] = 'job' + str(jobId)
                job = Job(parameters)
                self.bossSession.getNewRunningInstance(job)
                jobs.append(job)

            self.task.addJobs(jobs)
            self.bossSession.saveTask(self.task)

            for job in self.task.jobs:
                print job['jobId'], job['taskId'], job['submissionNumber'],
                if job.runningJob is not None:
                    print job.runningJob['jobId'], \
                          job.runningJob['taskId'], \
                          job.runningJob['submission']

        return self.task
Пример #2
0
class TaskAPITests(object):
    """
    TaskAPITests for the Job class
    """

    ##########################################################################
    def __init__(self, dbtype, installDb=False):
        """
        __init__
        """
        
        self.bossSession = None
        self.schedSession = None
        self.task = None
        self.jobRange = 'all'
        self.outdir = None
        self.taskId =  None
        self.taskName =  'test_task'

        # read configuration
        self.database = dbType
        self.dbConfig = dbConfig
        self.schedulerConfig = schedulerConfig

        if dbtype.lower() == 'sqlite' :
            self.bossSession = self._SqLiteSession(installDb)
        elif dbtype.lower() == 'mysql' :
            self.bossSession = self._MySqlSession(installDb)
        else :
            print "bad db choice: '%s', allowed only 'SQLite' or 'MySQL'" % \
                  dbtype
            sys.exit()
        

    ##########################################################################
    def _SqLiteSession(self, installDb):
        """
        __sqLiteSession__
        """

        if self.bossSession is not None :
            return

        # BossLiteApi session
        self.database = "SQLite"
        
        self.bossSession = BossLiteAPI( self.database, self.dbConfig )
        
        # db installed?
        try:
            if installDb :
                self.bossSession.bossLiteDB.installDB(
                    '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql'
                    )
                self.bossSession.bossLiteDB.reset()
        except:
            pass
    
        return self.bossSession


    ##########################################################################
    def _MySqlSession(self, installDb):
        """
        __mySqlSession__
        """

        if self.bossSession is not None :
            return

        self.database = "MySQL"
    
        # BossLiteApi session
        self.bossSession = BossLiteAPI( self.database, self.dbConfig )
    
        # db installed?
        try:
            if installDb :
                self.bossSession.bossLiteDB.installDB(
                    '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase.sql'
                    )
        except:
            pass
    
        return self.bossSession


    ##########################################################################
    def schedulerSession(self):
        """
        __schedulerSession__
        """

        if self.schedSession is not None:
            return self.schedSession

        self.schedSession = BossLiteAPISched( self.bossSession, \
                                                  self.schedulerConfig, \
                                                  self.task )
        return self.schedSession


    ##########################################################################
    def testTask( self ) :
        """
        __testTask__
        """
        
        try:
            if self.taskId is not None :
                self.load( self.taskId, self.jobRange)
            else :
                self.task = self.bossSession.loadTaskByName( self.taskName,
                                                             deep=False)
                self.load( self.task, self.jobRange)
            print "Task loaded..."
        except BossLiteError, e:
            print "Task not found... declaring"

 
            taskParams = {'name' : self.taskName,
                          'globalSandbox' : '/etc/redhat-release' }
            
            self.task = Task( taskParams )
            print self.task
            
            parameters = {'executable' : '/bin/echo',
                          'arguments' : 'ciao',
                          'standardError' : 'err.txt',
                          'standardOutput' : 'out.txt',
                          'outputFiles' : ['out.txt']}
    #                      'outputFiles' : ['err.txt', 'out.txt', '.BrokerInfo']}
            jobs = []
            for jobId in range(1, 51):
                parameters['name'] = 'job' + str(jobId)
                job = Job(parameters)
                self.bossSession.getNewRunningInstance(job)
                jobs.append(job)
    
            parameters['arguments'] = 'ciao2'
            for jobId in range(51, 101):
                parameters['name'] = 'job' + str(jobId)
                job = Job(parameters)
                self.bossSession.getNewRunningInstance(job)
                jobs.append(job)

            self.task.addJobs(jobs)
            self.bossSession.saveTask( self.task )
    
            for job in self.task.jobs :
                print job['jobId'], job['taskId'], job['submissionNumber'],
                if job.runningJob is not None :
                    print job.runningJob['jobId'], \
                          job.runningJob['taskId'], \
                          job.runningJob['submission']
    
        return self.task