annotate commons/core/sql/test/Test_F_TableJobAdaptator.py @ 6:769e306b7933

Change the repository level.
author yufei-luo
date Fri, 18 Jan 2013 04:54:14 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
1 from commons.core.launcher.WriteScript import WriteScript
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
2 from commons.core.sql.Job import Job
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
3 from commons.core.sql.DbFactory import DbFactory
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
4 from commons.core.sql.TableJobAdaptatorFactory import TableJobAdaptatorFactory
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
5 import sys
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
6 import stat
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
7 import os
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
8 import time
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
9 import unittest
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
10 import glob
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
11
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
12 class Test_F_TableJobAdaptator(unittest.TestCase):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
13
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
14 def setUp(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
15 self._jobTableName = "dummyJobTable"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
16 self._db = DbFactory.createInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
17 self._iTJA = TableJobAdaptatorFactory.createInstance(self._db, self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
18
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
19 def tearDown(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
20 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
21 self._db.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
22
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
23 def test_submitJob_with_multiple_jobs(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
24 self._db.createTable(self._jobTableName, "jobs", overwrite = True)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
25 job1 = _createJobInstance("job1")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
26 _createLauncherFile(job1, self._iTJA)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
27 job2 = _createJobInstance("job2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
28 _createLauncherFile(job2, self._iTJA)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
29 job3 = _createJobInstance("job3")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
30 _createLauncherFile(job3, self._iTJA)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
31
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
32 self._iTJA.submitJob( job1, maxNbWaitingJobs=3, checkInterval=5, verbose=0 )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
33 self._iTJA.submitJob( job2, maxNbWaitingJobs=3, checkInterval=5, verbose=0 )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
34 self._iTJA.submitJob( job3, maxNbWaitingJobs=3, checkInterval=5, verbose=0 )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
35
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
36 time.sleep(120)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
37
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
38 expJobStatus = "finished"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
39 obsJobStatus1 = self._iTJA.getJobStatus(job1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
40 obsJobStatus2 = self._iTJA.getJobStatus(job2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
41 obsJobStatus3 = self._iTJA.getJobStatus(job3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
42
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
43 self.assertEquals(expJobStatus, obsJobStatus1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
44 self.assertEquals(expJobStatus, obsJobStatus2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
45 self.assertEquals(expJobStatus, obsJobStatus3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
46
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
47 expErrorFilePrefix1 = job1.jobname + ".e"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
48 expOutputFilePrefix1 = job1.jobname + ".o"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
49 expErrorFilePrefix2 = job2.jobname + ".e"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
50 expOutputFilePrefix2 = job2.jobname + ".o"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
51 expErrorFilePrefix3 = job3.jobname + ".e"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
52 expOutputFilePrefix3 = job3.jobname + ".o"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
53
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
54 lErrorFiles1 = glob.glob(expErrorFilePrefix1 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
55 lOutputFiles1 = glob.glob(expOutputFilePrefix1 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
56 lErrorFiles2 = glob.glob(expErrorFilePrefix2 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
57 lOutputFiles2 = glob.glob(expOutputFilePrefix2 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
58 lErrorFiles3 = glob.glob(expErrorFilePrefix3 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
59 lOutputFiles3 = glob.glob(expOutputFilePrefix3 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
60
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
61 isLErrorFileNotEmpty1 = (len(lErrorFiles1) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
62 isLOutputFileNotEmpty1 = (len(lOutputFiles1) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
63 isLErrorFileNotEmpty2 = (len(lErrorFiles2) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
64 isLOutputFileNotEmpty2 = (len(lOutputFiles2) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
65 isLErrorFileNotEmpty3 = (len(lErrorFiles3) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
66 isLOutputFileNotEmpty3 = (len(lOutputFiles3) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
67
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
68 os.system("rm launcherFileTest*.py *.e* *.o*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
69 self.assertTrue(isLErrorFileNotEmpty1 and isLOutputFileNotEmpty1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
70 self.assertTrue(isLErrorFileNotEmpty2 and isLOutputFileNotEmpty2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
71 self.assertTrue(isLErrorFileNotEmpty3 and isLOutputFileNotEmpty3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
72
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
73 def test_submitJob_job_already_submitted(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
74 self._db.createTable(self._jobTableName, "jobs", overwrite = True)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
75 iJob = _createJobInstance("job")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
76 self._iTJA.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
77
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
78 isSysExitRaised = False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
79 try:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
80 self._iTJA.submitJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
81 except SystemExit:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
82 isSysExitRaised = True
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
83 self.assertTrue(isSysExitRaised)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
84
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
85 def test_waitJobGroup_with_error_job_maxRelaunch_two(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
86 self._db.createTable(self._jobTableName, "jobs", overwrite = True)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
87 iJob = _createJobInstance("job")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
88 _createLauncherFile(iJob, self._iTJA)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
89
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
90 self._iTJA.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
91 self._iTJA.changeJobStatus(iJob, "error")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
92
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
93 self._iTJA.waitJobGroup(iJob.groupid, 0, 2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
94
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
95 time.sleep(120)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
96
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
97 expJobStatus = "finished"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
98 obsJobStatus1 = self._iTJA.getJobStatus(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
99
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
100 self.assertEquals(expJobStatus, obsJobStatus1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
101
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
102 expErrorFilePrefix1 = iJob.jobname + ".e"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
103 expOutputFilePrefix1 = iJob.jobname + ".o"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
104
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
105 lErrorFiles1 = glob.glob(expErrorFilePrefix1 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
106 lOutputFiles1 = glob.glob(expOutputFilePrefix1 + "*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
107
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
108 isLErrorFileNotEmpty1 = (len(lErrorFiles1) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
109 isLOutputFileNotEmpty1 = (len(lOutputFiles1) != 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
110
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
111 self._iTJA.removeJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
112 os.system("rm launcherFileTest*.py *.e* *.o*")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
113 self.assertTrue(isLErrorFileNotEmpty1 and isLOutputFileNotEmpty1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
114
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
115 class Test_F_TableJobAdaptator_SGE(unittest.TestCase):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
116
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
117 def setUp(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
118 if os.environ["REPET_JOB_MANAGER"].lower() != "sge":
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
119 print "ERROR: jobs manager is not SGE: REPET_JOB_MANAGER = %s." % os.environ["REPET_JOB_MANAGER"]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
120 sys.exit(0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
121 self._jobTableName = "dummyJobTable"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
122 self._db = DbFactory.createInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
123 self._db.createTable(self._jobTableName, "jobs", overwrite = True)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
124 self._iTJA = TableJobAdaptatorFactory.createInstance(self._db, self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
125 self._iJob = _createJobInstance("job")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
126 _createLauncherFile(self._iJob, self._iTJA)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
127
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
128 def tearDown(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
129 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
130 self._db.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
131
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
132 def test_waitJobGroup_with_several_nbTimeOut_waiting(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
133 self._iTJA.recordJob(self._iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
134 self._iTJA.changeJobStatus(self._iJob, "running")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
135
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
136 expMsg = "ERROR: job '%s', supposedly still running, is not handled by SGE anymore\n" % self._iJob.jobid
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
137
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
138 obsError = "obsError.txt"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
139 obsErrorHandler = open(obsError, "w")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
140 stderrRef = sys.stderr
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
141 sys.stderr = obsErrorHandler
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
142
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
143 isSysExitRaised = False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
144 try:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
145 self._iTJA.waitJobGroup(self._iJob.groupid, timeOutPerJob = 3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
146 except SystemExit:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
147 isSysExitRaised = True
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
148
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
149 obsErrorHandler.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
150
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
151 obsErrorHandler = open(obsError, "r")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
152 obsMsg = obsErrorHandler.readline()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
153 obsErrorHandler.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
154
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
155 sys.stderr = stderrRef
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
156 os.remove(obsError)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
157 os.system("rm launcherFileTest*.py")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
158 self.assertTrue(isSysExitRaised)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
159 self.assertEquals(expMsg, obsMsg)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
160
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
161 def test_isJobStillHandledBySge_True(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
162 self._iTJA.submitJob(self._iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
163 isJobHandledBySge = self._iTJA.isJobStillHandledBySge(self._iJob.jobid, self._iJob.jobname)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
164 os.system("rm launcherFileTest*.py")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
165 self.assertTrue(isJobHandledBySge)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
166
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
167 def test_isJobStillHandledBySge_False(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
168 self._iTJA.recordJob(self._iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
169 isJobHandledBySge = self._iTJA.isJobStillHandledBySge(self._iJob.jobid, self._iJob.jobname)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
170 os.system("rm launcherFileTest*.py")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
171 self.assertFalse(isJobHandledBySge)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
172
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
173 def _createJobInstance(name):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
174 lResources = []
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
175 if os.environ.get("HOSTNAME") == "compute-2-46.local":
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
176 lResources.append("test=TRUE")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
177 return Job(0, name, "test", "", "log = os.system(\"date;sleep 5;date\")", "%s/launcherFileTest_%s.py" % (os.getcwd(), name), lResources=lResources)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
178
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
179 def _createLauncherFile(iJob, iTJA):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
180 iWriteScript = WriteScript(iJob, iTJA, os.getcwd(), os.getcwd())
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
181 iWriteScript.run(iJob.command, "", iJob.launcher)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
182 os.chmod(iJob.launcher, stat.S_IRWXU+stat.S_IRWXG+stat.S_IRWXO)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
183
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
184 if __name__ == "__main__":
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
185 unittest.main()