def testGetStatus( self ): running = Status( string='running' ) StatusManager.create( self.jobDir, running ) sm = StatusManager() recieved_status = sm.getStatus( self.jobDir ) self.assertEqual( recieved_status , running ) os.unlink( self.filename ) killed = Status( string='killed' , message= "your job has been canceled" ) StatusManager.create( self.jobDir, killed ) sm = StatusManager() recieved_status = sm.getStatus( self.jobDir ) self.assertEqual( recieved_status , killed ) os.unlink( self.filename )
def testCreation(self): #create( filename , status ) unknown = Status( code = -1 ) StatusManager.create( self.jobDir , unknown ) doc = etree.parse( self.filename ) root = doc.getroot() self.assertEqual( root.tag , 'status' ) children = list(root) self.assertEqual( len( children ) , 2 ) self.assertEqual( children[0].tag , 'value') self.assertEqual( children[0].text , 'unknown' ) self.assertEqual( children[1].tag , 'message') self.assertEqual( children[1].text , None ) os.unlink( self.filename ) building = Status( code = 0 ) StatusManager.create( self.jobDir, building ) doc = etree.parse( self.filename ) root = doc.getroot() self.assertEqual( root.tag , 'status' ) children = list(root) self.assertEqual( len( children ) , 2 ) self.assertEqual( children[0].tag , 'value') self.assertEqual( children[0].text , 'building' ) self.assertEqual( children[1].tag , 'message') self.assertEqual( children[1].text , None ) os.unlink( self.filename ) submitted = Status( code = 1, message= 'test message' ) StatusManager.create( self.jobDir, submitted ) doc = etree.parse( self.filename ) root = doc.getroot() self.assertEqual( root.tag , 'status' ) children = list(root) self.assertEqual( len( children ) , 2 ) self.assertEqual( children[0].tag , 'value') self.assertEqual( children[0].text , 'submitted' ) self.assertEqual( children[1].tag , 'message') self.assertEqual( children[1].text , 'test message' ) os.unlink( self.filename ) running = Status( string='running' ) StatusManager.create( self.jobDir, running ) doc = etree.parse( self.filename ) root = doc.getroot() self.assertEqual( root.tag , 'status' ) children = list(root) self.assertEqual( len( children ) , 2 ) self.assertEqual( children[0].tag , 'value') self.assertEqual( children[0].text , 'running' ) self.assertEqual( children[1].tag , 'message') self.assertEqual( children[1].text , None ) os.unlink( self.filename )
def testConcurency(self): status = Status( string='submitted' ) StatusManager.create( self.jobDir, status ) ## sub-process start childPid = os.fork() if childPid: #father sleep(1) sm = StatusManager() self.assertEqual( status , sm.getStatus( self.jobDir ) ) self.assertRaises( IOError , sm.setStatus , self.jobDir, status ) os.kill( childPid , signal.SIGALRM ) os.wait() else: #child signal.signal(signal.SIGALRM, handler) File = open( self.filename , 'r' ) fcntl.lockf( File , fcntl.LOCK_SH | fcntl.LOCK_NB ) signal.pause() fcntl.lockf( File , fcntl.LOCK_UN ) File.close() os._exit(0) ## sub-process end ## sub-process start childPid = os.fork() if childPid: #father sleep(1) sm = StatusManager() recieved_status = sm.getStatus( self.jobDir ) self.assertEqual( recieved_status , Status( string= "unknown" ) ) self.assertRaises( IOError , sm.setStatus , self.jobDir, status ) os.kill( childPid , signal.SIGALRM ) os.wait() else: #child signal.signal(signal.SIGALRM, handler) File = open( self.filename , 'r+' ) fcntl.lockf( File , fcntl.LOCK_EX | fcntl.LOCK_NB ) signal.pause() fcntl.lockf( File , fcntl.LOCK_UN ) File.close() os._exit(0)
def testSetstatus( self): StatusManager.create( self.jobDir, Status( string='submitted' ) ) pending = Status( string= 'pending' ) sm = StatusManager() sm.setStatus( self.jobDir , pending ) recieved_status = sm.getStatus( self.jobDir ) self.assertEqual( recieved_status , pending ) finished = Status( string='finished' , message = 'your job finnished with an unusual status code, check youre results carefully') sm.setStatus( self.jobDir , finished ) recieved_status = sm.getStatus( self.jobDir ) self.assertEqual( recieved_status , finished ) #an ended status cannot be changed anymore running = Status( string= 'running') sm.setStatus( self.jobDir , running ) recieved_status = sm.getStatus( self.jobDir ) self.assertNotEqual( recieved_status , running ) self.assertEqual( recieved_status , finished ) os.unlink( self.filename )