annotate commons/core/sql/test/Tst_RepetJob.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 import unittest
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
2 import sys
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
3 import os
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
4 import time
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
5 from commons.core.sql.DbMySql import DbMySql
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
6 from commons.core.sql.Job import Job
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
7 from commons.core.sql.RepetJob import RepetJob
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
8 from commons.core.utils.FileUtils import FileUtils
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
9
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
10 #TODO: to remove... => replace all RepetJob() by TableJobAdaptator()...
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
11 class Test_RepetJob( unittest.TestCase ):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
12
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
13 def setUp(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
14 self._jobTableName = "dummyJobTable"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
15 self._db = DbMySql()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
16 self._iRepetJob = RepetJob()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
17
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
18 def tearDown(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
19 self._iRepetJob = None
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
20 self._db.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
21
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
22 def _createJobInstance(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
23 return Job( self._jobTableName, 0, "job1", "groupid", "queue", "command", "launcherFile", "node", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
24
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
25 def test_createJobTable_is_table_created(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
26 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
27
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
28 isTableCreated = self._db.doesTableExist(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
29 self.assertTrue(isTableCreated)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
30
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
31 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
32
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
33 def test_createJobTable_field_list(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
34 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
35
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
36 obsLFiled = self._db.getFieldList(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
37 expLField = ["jobid", "jobname", "groupid", "command", "launcher", "queue", "status", "time", "node"]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
38
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
39 self.assertEquals(expLField, obsLFiled)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
40
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
41 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
42
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
43 def test_recordJob(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
44 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
45 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
46 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
47
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
48 qryParams = "SELECT jobid, groupid, command, launcher, queue, status, node FROM " + self._jobTableName + " WHERE jobid = %s"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
49 params = (iJob.jobid)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
50
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
51 self._db.execute(qryParams, params)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
52
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
53 tObs = self._db.fetchall()[0]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
54 tExp =(iJob.jobid, iJob.groupid, iJob.command, iJob.launcher, iJob.queue, "waiting", "?")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
55
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
56 self.assertEquals(tExp,tObs)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
57
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
58 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
59
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
60 def test_removeJob(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
61 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
62 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
63 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
64
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
65 self._iRepetJob.removeJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
66
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
67 isTableEmpty = self._db.isEmpty(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
68
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
69 self.assertTrue(isTableEmpty)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
70
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
71 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
72
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
73 def test_getJobStatus(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
74 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
75 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
76 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
77
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
78 expStatus = "waiting"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
79 obsStatus = self._iRepetJob.getJobStatus(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
80
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
81 self.assertEquals(expStatus, obsStatus)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
82 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
83
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
84 def test_getJobStatus_unknown(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
85 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
86 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
87
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
88 expStatus = "unknown"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
89 obsStatus = self._iRepetJob.getJobStatus(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
90
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
91 self.assertEquals(expStatus, obsStatus)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
92 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
93
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
94 def test_getJobStatus_no_name(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
95 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
96 iJob = Job( self._jobTableName, 20, "", "groupid", "queue", "command", "launcherFile", "node", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
97
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
98 expStatus = "unknown"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
99 obsStatus = self._iRepetJob.getJobStatus(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
100
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
101 self.assertEquals(expStatus, obsStatus)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
102 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
103
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
104 def test_getJobStatus_non_unique_job(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
105 # Warning : this case will not append, because recordJob() begin by removeJob()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
106 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
107 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
108 sqlCmd = "INSERT INTO %s" % ( iJob.tablename )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
109 sqlCmd += " VALUES ("
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
110 sqlCmd += " \"%s\"," % ( iJob.jobid )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
111 sqlCmd += " \"%s\"," % ( iJob.jobname )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
112 sqlCmd += " \"%s\"," % ( iJob.groupid )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
113 sqlCmd += " \"%s\"," % ( iJob.command.replace("\"","\'") )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
114 sqlCmd += " \"%s\"," % ( iJob.launcher )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
115 sqlCmd += " \"%s\"," % ( iJob.queue )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
116 sqlCmd += " \"waiting\","
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
117 sqlCmd += " \"%s\"," % ( time.strftime( "%Y-%m-%d %H:%M:%S" ) )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
118 sqlCmd += " \"?\" );"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
119 self._db.execute( sqlCmd )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
120 self._db.execute( sqlCmd )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
121
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
122 expError = "expError.txt"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
123 expErrorHandler = open(expError, "w")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
124 expErrorHandler.write("ERROR while getting job status: non-unique jobs\n")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
125 expErrorHandler.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
126
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
127 obsError = "obsError.txt"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
128 obsErrorHandler = open(obsError, "w")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
129 stderrRef = sys.stderr
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
130 sys.stderr = obsErrorHandler
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
131
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
132 isSysExitRaised = False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
133 try:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
134 self._iRepetJob.getJobStatus(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
135 except SystemExit:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
136 isSysExitRaised = True
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
137
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
138 obsErrorHandler.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
139
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
140 self.assertTrue(isSysExitRaised)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
141 self.assertTrue(FileUtils.are2FilesIdentical(expError, obsError))
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
142
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
143 sys.stderr = stderrRef
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
144 os.remove(obsError)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
145 os.remove(expError)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
146
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
147 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
148
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
149 def test_updateInfoTable(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
150 self._iRepetJob.updateInfoTable(self._jobTableName, "dummyInfo")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
151
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
152 qryParams = "SELECT name, file FROM info_tables WHERE name=%s AND file=%s"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
153 params = (self._jobTableName, "dummyInfo")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
154
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
155 self._db.execute(qryParams, params)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
156 tObs = self._db.fetchall()[0]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
157 tExp = (self._jobTableName, "dummyInfo")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
158
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
159 self.assertEquals(tExp, tObs)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
160
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
161 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
162
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
163 def test_changeJobStatus(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
164 expStatus = "finished"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
165
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
166 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
167 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
168 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
169 self._iRepetJob.changeJobStatus(iJob, expStatus, "method")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
170
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
171 qryParams = "SELECT status FROM " + self._jobTableName + " WHERE jobid =%s AND groupid=%s AND queue=%s"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
172 params = (iJob.jobid, iJob.groupid, iJob.queue)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
173 self._db.execute(qryParams, params)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
174
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
175 obsStatus = self._db.fetchall()[0][0]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
176 self.assertEquals(expStatus, obsStatus)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
177 self._iRepetJob.removeJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
178 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
179
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
180 def test_getCountStatus(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
181 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
182
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
183 iJob1 = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
184 iJob2 = Job(self._jobTableName, 1, "job2", "groupid", "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
185
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
186 self._iRepetJob.recordJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
187 self._iRepetJob.recordJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
188
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
189 expCount = 2
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
190 obsCount = self._iRepetJob.getCountStatus(self._jobTableName, iJob1.groupid, "waiting")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
191
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
192 self.assertEquals(expCount, obsCount)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
193
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
194 def test_getCountStatus_without_res(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
195 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
196 expCount = 0
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
197
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
198 obsCount = self._iRepetJob.getCountStatus(self._jobTableName, "groupid", "waiting")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
199
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
200 self.assertEquals(expCount, obsCount)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
201
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
202 def test_cleanJobGroup(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
203 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
204 iJob1 = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
205 iJob2 = Job(self._jobTableName, "jobid2", iJob1.groupid, "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
206 iJob3 = Job(self._jobTableName, "jobid2", "groupid3", "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
207
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
208 self._iRepetJob.recordJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
209 self._iRepetJob.recordJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
210 self._iRepetJob.recordJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
211
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
212 self._iRepetJob.cleanJobGroup(self._jobTableName, iJob1.groupid)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
213
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
214 qryParams = "SELECT count(*) FROM " + self._jobTableName
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
215
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
216 self._db.execute(qryParams)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
217
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
218 expCount = 1
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
219 obsCount = self._db.fetchall()[0][0]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
220
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
221 self.assertEquals(expCount, obsCount)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
222
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
223 self._iRepetJob.removeJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
224 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
225
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
226 def test_hasUnfinishedJob(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
227 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
228 iJob1 = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
229 iJob2 = Job(self._jobTableName, 0, "jobname2", iJob1.groupid, "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
230 iJob3 = Job(self._jobTableName, 0, "jobname3", "groupid3", "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
231
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
232 self._iRepetJob.recordJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
233 self._iRepetJob.recordJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
234 self._iRepetJob.recordJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
235
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
236 self._iRepetJob.changeJobStatus(iJob2, "finished", "method")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
237
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
238 expHasGrpIdFinished = True
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
239 obsHasGrpIdFinished = self._iRepetJob.hasUnfinishedJob(self._jobTableName, iJob1.groupid)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
240
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
241 self.assertEquals(expHasGrpIdFinished, obsHasGrpIdFinished)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
242
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
243 self._iRepetJob.removeJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
244 self._iRepetJob.removeJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
245 self._iRepetJob.removeJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
246 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
247
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
248 def test_hasUnfinishedJob_JobTableNotExists(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
249 iJob1 = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
250
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
251 expHasGrpIdFinished = False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
252 obsHasGrpIdFinished = self._iRepetJob.hasUnfinishedJob(self._jobTableName, iJob1.groupid)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
253
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
254 self.assertEquals(expHasGrpIdFinished, obsHasGrpIdFinished)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
255
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
256 def test_hasUnfinishedJob_AllJobsFinished(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
257 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
258 iJob1 = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
259 iJob2 = Job(self._jobTableName, "jobid2", iJob1.groupid, "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
260 iJob3 = Job(self._jobTableName, "jobid2", "groupid3", "queue2", "command2", "launcherFile2", "node2", "lResources2")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
261
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
262 self._iRepetJob.recordJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
263 self._iRepetJob.recordJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
264 self._iRepetJob.recordJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
265
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
266 self._iRepetJob.changeJobStatus(iJob1, "finished", "method")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
267 self._iRepetJob.changeJobStatus(iJob2, "finished", "method")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
268
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
269 expHasGrpIdFinished = False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
270 obsHasGrpIdFinished = self._iRepetJob.hasUnfinishedJob(self._jobTableName, iJob1.groupid)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
271
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
272 self.assertEquals(expHasGrpIdFinished, obsHasGrpIdFinished)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
273
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
274 self._iRepetJob.removeJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
275 self._iRepetJob.removeJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
276 self._iRepetJob.removeJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
277 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
278
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
279 def test_waitJobGroup_with_finished_job(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
280 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
281 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
282 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
283 self._iRepetJob.changeJobStatus(iJob, "finished", "method")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
284
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
285 Obs = self._iRepetJob.waitJobGroup(self._jobTableName ,iJob.groupid, 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
286 Exp = None
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
287
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
288 self.assertEquals(Exp, Obs)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
289 self._iRepetJob.removeJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
290
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
291 def test_waitJobGroup_with_error_job_maxRelaunch_zero(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
292 Obs = False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
293 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
294 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
295 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
296 self._iRepetJob.changeJobStatus(iJob, "error", "method")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
297
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
298 try:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
299 self._iRepetJob.waitJobGroup(self._jobTableName ,iJob.groupid, 0, 0)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
300 except SystemExit:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
301 Obs = True
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
302
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
303 self.assertTrue(Obs)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
304 self._iRepetJob.removeJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
305
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
306 def test_setJobIdFromSge(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
307 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
308 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
309 self._iRepetJob.recordJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
310 self._iRepetJob.setJobIdFromSge(iJob, 1000)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
311
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
312 qryParams = "SELECT jobid FROM " + self._jobTableName + " WHERE jobname = %s AND queue = %s AND groupid = %s"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
313 params = (iJob.jobname, iJob.queue, iJob.groupid)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
314
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
315 self._db.execute(qryParams, params)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
316
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
317 tObs = self._db.fetchall()[0]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
318 tExp =(1000,)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
319
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
320 self.assertEquals(tExp,tObs)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
321
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
322 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
323
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
324 def test_submitJob_8_fields_for_job_table(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
325 iJob = self._createJobInstance()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
326 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
327 sqlCmd = "CREATE TABLE " + self._jobTableName
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
328 sqlCmd += " ( jobid INT UNSIGNED"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
329 sqlCmd += ", groupid VARCHAR(255)"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
330 sqlCmd += ", command TEXT"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
331 sqlCmd += ", launcher VARCHAR(1024)"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
332 sqlCmd += ", queue VARCHAR(255)"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
333 sqlCmd += ", status VARCHAR(255)"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
334 sqlCmd += ", time DATETIME"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
335 sqlCmd += ", node VARCHAR(255) )"
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
336 self._db.execute(sqlCmd)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
337
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
338 self._iRepetJob.submitJob(iJob)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
339
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
340 expFieldsNb = 9
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
341 obsFieldsNb = len(self._iRepetJob.getFieldList(self._jobTableName))
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
342
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
343 self.assertEquals(expFieldsNb, obsFieldsNb)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
344
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
345 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
346
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
347 def test_getNodesListByGroupId(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
348 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
349 iJob1 = Job( self._jobTableName, 0, "job1", "groupid", "queue", "command", "launcherFile", "node1", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
350 iJob2 = Job( self._jobTableName, 1, "job2", "groupid", "queue", "command", "launcherFile", "node2", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
351 iJob3 = Job( self._jobTableName, 2, "job3", "groupid2", "queue", "command", "launcherFile", "node3", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
352
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
353 self._insertJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
354 self._insertJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
355 self._insertJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
356
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
357 expNodeList = ["node1", "node2"]
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
358 obsNodeList = self._iRepetJob.getNodesListByGroupId(self._jobTableName, "groupid")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
359 self.assertEquals(expNodeList, obsNodeList)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
360
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
361 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
362
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
363 def test_getNodesListByGroupId_empty_list(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
364 self._iRepetJob.createTable(self._jobTableName, "jobs")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
365 iJob1 = Job( self._jobTableName, 0, "job1", "groupid", "queue", "command", "launcherFile", "node1", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
366 iJob2 = Job( self._jobTableName, 1, "job2", "groupid", "queue", "command", "launcherFile", "node2", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
367 iJob3 = Job( self._jobTableName, 2, "job3", "groupid32", "queue", "command", "launcherFile", "node3", "lResources" )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
368
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
369 self._insertJob(iJob1)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
370 self._insertJob(iJob2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
371 self._insertJob(iJob3)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
372
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
373 expNodeList = []
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
374 obsNodeList = self._iRepetJob.getNodesListByGroupId(self._jobTableName, "groupid3")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
375 self.assertEquals(expNodeList, obsNodeList)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
376
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
377 self._db.dropTable(self._jobTableName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
378
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
379 def _insertJob(self, iJob):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
380 self._iRepetJob.removeJob( iJob )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
381 sqlCmd = "INSERT INTO %s" % ( iJob.tablename )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
382 sqlCmd += " VALUES ("
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
383 sqlCmd += " \"%s\"," % ( iJob.jobid )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
384 sqlCmd += " \"%s\"," % ( iJob.jobname )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
385 sqlCmd += " \"%s\"," % ( iJob.groupid )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
386 sqlCmd += " \"%s\"," % ( iJob.command.replace("\"","\'") )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
387 sqlCmd += " \"%s\"," % ( iJob.launcher )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
388 sqlCmd += " \"%s\"," % ( iJob.queue )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
389 sqlCmd += " \"waiting\","
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
390 sqlCmd += " \"%s\"," % ( time.strftime( "%Y-%m-%d %H:%M:%S" ) )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
391 sqlCmd += " \"%s\" );" % ( iJob.node )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
392 self._iRepetJob.execute( sqlCmd )
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
393
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
394 if __name__ == "__main__":
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
395 unittest.main()