def main(): (opts, args) = getopts() if chkopts(opts) is True: return 1 try: input_db = Database(opts.input, encoding="utf-8", convert_unicode=True, assert_unicode=DEBUG, echo=DEBUG, echo_pool=DEBUG ) reload_mappers(input_db.get_metadata()) output_db = Database(opts.output, encoding="utf-8", convert_unicode=True, assert_unicode=DEBUG, echo=DEBUG, echo_pool=DEBUG ) reload_mappers(output_db.get_metadata()) except Exception, e: print >>sys.stderr, 'Initializing a database error' raise
class Command: """Command is a class designed to assist implmentation of CLI programs. Expacted to be inherited. """ cf = None logger = None def __init__(self): if os.environ.has_key('PYSILHOUETTE_CONF') is False: print >>sys.stderr, '[Error] "PYSILHOUETTE_CONF" did not exist in the environment.' sys.exit(1) self.cf = pysilhouette.prep.readconf(os.environ['PYSILHOUETTE_CONF']) if self.logger is None: pysilhouette.log.reload_conf(self.cf["env.sys.log.conf.path"]) self.logger = logging.getLogger('pysilhouette.command') try: self.db = Database(self.cf['database.url'], encoding="utf-8", convert_unicode=True, #assert_unicode='warn', # DEBUG echo = False, echo_pool = False, ) reload_mappers(self.db.get_metadata()) self.session = self.db.get_session() except Exception, e: print >>sys.stderr, '[Error] Initializing a database error - %s' % str(e.args) self.logger.error('Initializing a database error - %s' % str(e.args)) t_logger = logging.getLogger('pysilhouette_traceback') t_logger.error(traceback.format_exc()) sys.exit(1)
def get_engine(): """<comment-ja> Databaseを返却します。(Optimistic Singleton) </comment-ja> <comment-en> TODO: English Comment </comment-en> """ global __db if __db is None: logger = logging.getLogger("karesansui.pysilhouette.db.engine") echo = True echo_pool = True if karesansui.sheconf['database.url'][:6].strip() == 'sqlite': __db = Database(karesansui.sheconf['database.url'], encoding="utf-8", convert_unicode=True, #assert_unicode='warn', # DEBUG echo = echo, echo_pool = echo_pool, ) else: if int(karesansui.sheconf['database.pool.status']) == 0: __db = Database(karesansui.sheconf['database.url'], encoding="utf-8", convert_unicode=True, #assert_unicode='warn', # DEBUG poolclass=SingletonThreadPool, #echo = opts.verbose, #echo_pool = opts.verbose, echo=echo, echo_pool=echo_pool ) else: __db = Database(karesansui.sheconf['database.url'], encoding="utf-8", convert_unicode=True, #assert_unicode='warn', # DEBUG poolclass=QueuePool, pool_size=int(karesansui.sheconf['database.pool.size']), max_overflow=int(karesansui.sheconf['database.pool.max.overflow']), #echo = opts.verbose, #echo_pool = opts.verbose, echo=echo, echo_pool=echo_pool ) __engine = __db.get_engine() # mapper!! mapper(__db.get_metadata()) logger.debug('[pysilhouette] engine.name=%s - pool=%s' % (__engine.name, __engine.pool.__class__)) return __db.get_engine()
def test_setup(cf): # -- db = Database(cf['database.url'], encoding='utf-8', convert_unicode=True) reload_mappers(db.get_metadata()) db.get_metadata().drop_all() db.get_metadata().create_all() f_cmd = ( u'python /root/repository/pysilhouette_svn/pysilhouette/job/sendmail.py' u' --from="root@localhost"' u' --to="root@localhost"' u' --subject="test"' u' --hostname="localhost"' u' --port="25"' u' --msg="%s"' u' --charset="utf-8"') session = db.get_session() jg1 = JobGroup(u'get date', '172.16.0.123') jg1.finish_command = f_cmd % jg1.name jb1 = Job(u'get date', '0', u'/bin/date error') jb1.rollback_command = u'/bin/date' jg1.jobs.append(jb1) jg2 = JobGroup(u'get route', '172.16.0.123') jg2.finish_command = f_cmd % jg2.name jg2.jobs.append(Job(u'get route', '1', u'/sbin/route')) jg3 = JobGroup(u'print string', '172.16.0.123') jg3.finish_command = f_cmd % jg3.name jg3.jobs.append(Job(u'print string', '2', u'/bin/echo test')) session.add_all([jg1, jg2, jg3]) #session.add(jg1) session.commit() from pysilhouette.db.access import jobgroup_findbystatus _m_jgs = jobgroup_findbystatus(session) return db, session, _m_jgs
def test_setup(cf): # -- db = Database(cf['database.url'], encoding='utf-8', convert_unicode=True) reload_mappers(db.get_metadata()) db.get_metadata().drop_all() db.get_metadata().create_all() f_cmd = (u'python /root/repository/pysilhouette_svn/pysilhouette/job/sendmail.py' u' --from="root@localhost"' u' --to="root@localhost"' u' --subject="test"' u' --hostname="localhost"' u' --port="25"' u' --msg="%s"' u' --charset="utf-8"') session = db.get_session() jg1 = JobGroup(u'get date', '172.16.0.123') jg1.finish_command = f_cmd % jg1.name jb1 = Job(u'get date','0',u'/bin/date error') jb1.rollback_command = u'/bin/date' jg1.jobs.append(jb1) jg2 = JobGroup(u'get route', '172.16.0.123') jg2.finish_command = f_cmd % jg2.name jg2.jobs.append(Job(u'get route','1', u'/sbin/route')) jg3 = JobGroup(u'print string', '172.16.0.123') jg3.finish_command = f_cmd % jg3.name jg3.jobs.append(Job(u'print string','2', u'/bin/echo test')) session.add_all([jg1,jg2,jg3]) #session.add(jg1) session.commit() from pysilhouette.db.access import jobgroup_findbystatus _m_jgs = jobgroup_findbystatus(session) return db, session, _m_jgs
class Command: """Command is a class designed to assist implmentation of CLI programs. Expacted to be inherited. """ cf = None logger = None def __init__(self): if os.environ.has_key('PYSILHOUETTE_CONF') is False: print >> sys.stderr, '[Error] "PYSILHOUETTE_CONF" did not exist in the environment.' sys.exit(1) self.cf = pysilhouette.prep.readconf(os.environ['PYSILHOUETTE_CONF']) if self.logger is None: pysilhouette.log.reload_conf(self.cf["env.sys.log.conf.path"]) self.logger = logging.getLogger('pysilhouette.command') try: self.db = Database( self.cf['database.url'], encoding="utf-8", convert_unicode=True, #assert_unicode='warn', # DEBUG echo=False, echo_pool=False, ) reload_mappers(self.db.get_metadata()) self.session = self.db.get_session() except Exception, e: print >> sys.stderr, '[Error] Initializing a database error - %s' % str( e.args) self.logger.error('Initializing a database error - %s' % str(e.args)) t_logger = logging.getLogger('pysilhouette_traceback') t_logger.error(traceback.format_exc()) sys.exit(1)
class TestWorker(unittest.TestCase): """ """ _db = None def setUp(self): # O/R mapping self._db = Database(cf['database.url'], encoding="utf-8", convert_unicode=True, echo=True) reload_mappers(self._db.get_metadata()) # database init self._db.get_metadata().drop_all() self._db.get_metadata().create_all() # create table pass def tearDown(self): sqlalchemy.orm.clear_mappers() pass def set_job(self, session, jg_name, uniqkey, job=(True, True, True), rollback=None, mail=None): jg1 = JobGroup(jg_name.decode('utf-8'), uniqkey) if job[0] is True: j1 = Job(u'file create','0','/bin/touch /tmp/test_case1.txt') else: j1 = Job(u'file create','0','/bin/touch_dummy /tmp/test_case1.txt') if job[1] is True: j2 = Job(u'file copy', '1', '/bin/cp /tmp/test_case1.txt /tmp/test_case1_rename.txt') else: j2 = Job(u'file copy', '1', '/bin/cp_dummy /tmp/test_case1.txt /tmp/test_case1_rename.txt') if job[2] is True: j3 = Job(u'file delete','2','/bin/rm /tmp/test_case1.txt') else: j3 = Job(u'file delete','2','/bin/rm_dummy /tmp/test_case1.txt') jg1.jobs.append(j1) jg1.jobs.append(j2) jg1.jobs.append(j3) if rollback is True: j1.rollback_command = u'/bin/echo JOB1 rollback' j2.rollback_command = u'/bin/echo JOB2 rollback' j3.rollback_command = u'/bin/echo JOB3 rollback' elif rollback is False: j1.rollback_command = u'/bin/echo_dummy JOB1 rollback' j2.rollback_command = u'/bin/echo_dummy JOB2 rollback' j3.rollback_command = u'/bin/echo_dummy JOB3 rollback' elif rollback is None: pass if mail is True: jg1.finish_command = ok_f_cmd % (jg1.name, jg1.name) elif mail is False: jg1.finish_command = ng_f_cmd % (jg1.name, jg1.name) elif mail is None: pass session.add_all([jg1]) session.commit() def run_job(self, sess): _m_jgs = jobgroup_findbystatus(sess) for _m_jg in _m_jgs: _w = Worker(self._db, _m_jg.id) _w.process() worker_debug(self._db, _m_jg.id) sess.close() def check_job(self, sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)): sess = self._db.get_session() _m_jg1 = jobgroup_findbyid(sess, 1) self.assertEqual(int(_m_jg1.status), int(jg)) _m_jobs = job_findbyjobgroup_id(sess, 1, False) self.assertEqual(int(_m_jobs[0].status), int(job[0])) self.assertEqual(int(_m_jobs[1].status), int(job[1])) self.assertEqual(int(_m_jobs[2].status), int(job[2])) sess.close() def test_case1(self): """Test Case 1 - Job Group : Normal end - Job : All Normal end - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 1', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) def test_case2(self): """Test Case 2 - Job Group : Normal end - Job : All Normal end - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 2', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case3(self): """Test Case 3 - Job Group : Normal end - Job : All Normal end - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 3', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case4(self): """Test Case 4 - Job Group : Normal end - Job : All Normal end - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 4', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case5(self): """Test Case 5 - Job Group : Normal end - Job : All Normal end - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 5', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case6(self): """Test Case 6 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 6', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING, RES_PENDING)) sess.close() def test_case7(self): """Test Case 7 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 7', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_PENDING, RES_PENDING)) sess.close() def test_case8(self): """Test Case 8 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 8', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ABNORMAL_TERMINATION, RES_PENDING, RES_PENDING)) sess.close() def test_case9(self): """Test Case 9 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 9', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=True, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING, RES_PENDING)) sess.close() def test_case10(self): """Test Case 10 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 10', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=False, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_PENDING, RES_PENDING)) sess.close() def test_case11(self): """Test Case 11 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback : None - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 11', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ABNORMAL_TERMINATION, RES_PENDING, RES_PENDING)) sess.close() def test_case12(self): """Test Case 12 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Normal end - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 12', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=True, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING, RES_PENDING)) sess.close() def test_case13(self): """Test Case 13 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Abnormal termination - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 13', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=False, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_PENDING, RES_PENDING)) sess.close() def test_case14(self): """Test Case 14 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 14', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ABNORMAL_TERMINATION, RES_PENDING, RES_PENDING)) sess.close() def test_case15(self): """Test Case 15 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 15', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING)) sess.close() def test_case16(self): """Test Case 16 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 16', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_PENDING)) sess.close() def test_case17(self): """Test Case 17 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 17', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_ABNORMAL_TERMINATION, RES_PENDING)) sess.close() def test_case18(self): """Test Case 9 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 18', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=True, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING)) sess.close() def test_case19(self): """Test Case 19 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 19', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=False, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_PENDING)) sess.close() def test_case20(self): """Test Case 11 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback : None - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 20', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_ABNORMAL_TERMINATION, RES_PENDING)) sess.close() def test_case21(self): """Test Case 21 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Normal end - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 21', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=True, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING)) sess.close() def test_case22(self): """Test Case 22 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Abnormal termination - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case ス22', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=False, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_PENDING)) sess.close() def test_case23(self): """Test Case 23 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'テストケース23', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_ABNORMAL_TERMINATION, RES_PENDING)) sess.close() def test_case24(self): """Test Case 24 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 24', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION)) sess.close() def test_case25(self): """Test Case 25 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 25', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND)) sess.close() def test_case26(self): """Test Case 26 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 26', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_NORMAL_END, RES_ABNORMAL_TERMINATION)) sess.close() def test_case27(self): """Test Case 27 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 27', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=True, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION)) sess.close() def test_case28(self): """Test Case 28 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 28', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=False, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND)) sess.close() def test_case29(self): """Test Case 29 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback : None - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 29', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_NORMAL_END, RES_ABNORMAL_TERMINATION)) sess.close() def test_case30(self): """Test Case 30 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Normal end - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 30', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=True, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION)) sess.close() def test_case31(self): """Test Case 31 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Abnormal termination - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 31', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=False, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND)) sess.close() def test_case32(self): """Test Case 32 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 32', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_NORMAL_END, RES_ABNORMAL_TERMINATION)) sess.close()
class TestWorker(unittest.TestCase): """ """ _db = None def setUp(self): # O/R mapping self._db = Database(cf['database.url'], encoding="utf-8", convert_unicode=True, echo=True) reload_mappers(self._db.get_metadata()) # database init self._db.get_metadata().drop_all() self._db.get_metadata().create_all() # create table pass def tearDown(self): sqlalchemy.orm.clear_mappers() pass def set_job(self, session, jg_name, uniqkey, job=(True, True, True), rollback=None, mail=None): jg1 = JobGroup(jg_name.decode('utf-8'), uniqkey) if job[0] is True: j1 = Job(u'file create', '0', '/bin/touch /tmp/test_case1.txt') else: j1 = Job(u'file create', '0', '/bin/touch_dummy /tmp/test_case1.txt') if job[1] is True: j2 = Job(u'file copy', '1', '/bin/cp /tmp/test_case1.txt /tmp/test_case1_rename.txt') else: j2 = Job( u'file copy', '1', '/bin/cp_dummy /tmp/test_case1.txt /tmp/test_case1_rename.txt') if job[2] is True: j3 = Job(u'file delete', '2', '/bin/rm /tmp/test_case1.txt') else: j3 = Job(u'file delete', '2', '/bin/rm_dummy /tmp/test_case1.txt') jg1.jobs.append(j1) jg1.jobs.append(j2) jg1.jobs.append(j3) if rollback is True: j1.rollback_command = u'/bin/echo JOB1 rollback' j2.rollback_command = u'/bin/echo JOB2 rollback' j3.rollback_command = u'/bin/echo JOB3 rollback' elif rollback is False: j1.rollback_command = u'/bin/echo_dummy JOB1 rollback' j2.rollback_command = u'/bin/echo_dummy JOB2 rollback' j3.rollback_command = u'/bin/echo_dummy JOB3 rollback' elif rollback is None: pass if mail is True: jg1.finish_command = ok_f_cmd % (jg1.name, jg1.name) elif mail is False: jg1.finish_command = ng_f_cmd % (jg1.name, jg1.name) elif mail is None: pass session.add_all([jg1]) session.commit() def run_job(self, sess): _m_jgs = jobgroup_findbystatus(sess) for _m_jg in _m_jgs: _w = Worker(self._db, _m_jg.id) _w.process() worker_debug(self._db, _m_jg.id) sess.close() def check_job(self, sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)): sess = self._db.get_session() _m_jg1 = jobgroup_findbyid(sess, 1) self.assertEqual(int(_m_jg1.status), int(jg)) _m_jobs = job_findbyjobgroup_id(sess, 1, False) self.assertEqual(int(_m_jobs[0].status), int(job[0])) self.assertEqual(int(_m_jobs[1].status), int(job[1])) self.assertEqual(int(_m_jobs[2].status), int(job[2])) sess.close() def test_case1(self): """Test Case 1 - Job Group : Normal end - Job : All Normal end - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 1', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) def test_case2(self): """Test Case 2 - Job Group : Normal end - Job : All Normal end - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 2', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case3(self): """Test Case 3 - Job Group : Normal end - Job : All Normal end - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 3', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case4(self): """Test Case 4 - Job Group : Normal end - Job : All Normal end - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 4', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case5(self): """Test Case 5 - Job Group : Normal end - Job : All Normal end - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 5', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, True), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_NORMAL_END, job=(RES_NORMAL_END, RES_NORMAL_END, RES_NORMAL_END)) sess.close() def test_case6(self): """Test Case 6 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 6', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING, RES_PENDING)) sess.close() def test_case7(self): """Test Case 7 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 7', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_PENDING, RES_PENDING)) sess.close() def test_case8(self): """Test Case 8 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 8', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ABNORMAL_TERMINATION, RES_PENDING, RES_PENDING)) sess.close() def test_case9(self): """Test Case 9 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 9', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=True, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING, RES_PENDING)) sess.close() def test_case10(self): """Test Case 10 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 10', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=False, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_PENDING, RES_PENDING)) sess.close() def test_case11(self): """Test Case 11 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback : None - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 11', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ABNORMAL_TERMINATION, RES_PENDING, RES_PENDING)) sess.close() def test_case12(self): """Test Case 12 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Normal end - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 12', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=True, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING, RES_PENDING)) sess.close() def test_case13(self): """Test Case 13 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: Abnormal termination - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 13', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=False, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_PENDING, RES_PENDING)) sess.close() def test_case14(self): """Test Case 14 - Job Group : Abnormal termination - Job : First Job Abnormal termination - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 14', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(False, True, True), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ABNORMAL_TERMINATION, RES_PENDING, RES_PENDING)) sess.close() def test_case15(self): """Test Case 15 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 15', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING)) sess.close() def test_case16(self): """Test Case 16 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 16', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_PENDING)) sess.close() def test_case17(self): """Test Case 17 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 17', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_ABNORMAL_TERMINATION, RES_PENDING)) sess.close() def test_case18(self): """Test Case 9 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 18', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=True, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING)) sess.close() def test_case19(self): """Test Case 19 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 19', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=False, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_PENDING)) sess.close() def test_case20(self): """Test Case 11 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback : None - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 20', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_ABNORMAL_TERMINATION, RES_PENDING)) sess.close() def test_case21(self): """Test Case 21 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Normal end - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 21', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=True, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_PENDING)) sess.close() def test_case22(self): """Test Case 22 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: Abnormal termination - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case ス22', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=False, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_PENDING)) sess.close() def test_case23(self): """Test Case 23 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'テストケース23', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, False, True), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_ABNORMAL_TERMINATION, RES_PENDING)) sess.close() def test_case24(self): """Test Case 24 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Normal end - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 24', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=True, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION)) sess.close() def test_case25(self): """Test Case 25 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 25', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=False, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND)) sess.close() def test_case26(self): """Test Case 26 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback: None - Send Mail : Normal end """ sess = self._db.get_session() self.set_job(sess, 'Test Case 26', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=None, mail=True) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_NORMAL_END, RES_ABNORMAL_TERMINATION)) sess.close() def test_case27(self): """Test Case 27 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Normal end - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 27', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=True, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION)) sess.close() def test_case28(self): """Test Case 28 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Abnormal termination - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 28', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=False, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND)) sess.close() def test_case29(self): """Test Case 29 - Job Group : Abnormal termination - Job : Second Job Abnormal termination - Rollback : None - Send Mail : Abnormal termination """ sess = self._db.get_session() self.set_job(sess, 'Test Case 29', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=None, mail=False) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_NORMAL_END, RES_ABNORMAL_TERMINATION)) sess.close() def test_case30(self): """Test Case 30 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Normal end - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 30', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=True, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION, RES_ROLLBACK_SUCCESSFUL_COMPLETION)) sess.close() def test_case31(self): """Test Case 31 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: Abnormal termination - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 31', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=False, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND, RES_ROLLBACK_ABEND)) sess.close() def test_case32(self): """Test Case 32 - Job Group : Abnormal termination - Job : Third Job Abnormal termination - Rollback: None - Send Mail : None """ sess = self._db.get_session() self.set_job(sess, 'Test Case 32', 'b942f21c-4039-e6e9-09dc-9685985a1b84', job=(True, True, False), rollback=None, mail=None) self.run_job(sess) self.check_job(sess, jg=RES_ABNORMAL_TERMINATION, job=(RES_NORMAL_END, RES_NORMAL_END, RES_ABNORMAL_TERMINATION)) sess.close()