class test_mpi4casa_log_level(unittest.TestCase): def setUp(self): self.vis = "Four_ants_3C286.mms" setUpFile(self.vis,'vis') self.client = MPICommandClient() self.client.set_log_mode('redirect') self.client.start_services() # Prepare list of servers self.server_list = [] server_list = self.client.get_server_status() for server in server_list: if not server_list[server]['timeout']: self.server_list.append(server_list[server]['rank']) self.client.push_command_request("import os",True,self.server_list) def tearDown(self): os.system('rm -rf ' + self.vis) # Restore log file and level self.client.push_command_request("casalog.setlogfile(casa['files']['logfile'])",True,self.server_list) self.client.set_log_level("INFO") def test_mpi4casa_log_level_default_to_debug(self): """Test changing globally log level from default to debug """ # Change log level globally (test via MPIInterface as it internally uses MPICommandClient so both are tested) mpi_interface = MPIInterface() mpi_interface.set_log_level("DEBUG") # Use a separated log file per server to facilitate analysis for server in self.server_list: logfile = 'test_mpi4casa_log_level_debug-server-%s.log' % str(server) self.client.push_command_request("casalog.setlogfile('%s')" % (logfile),True,server) # Run flagdata flagdata(vis=self.vis, mode='summary') # Iterate trough log files to see if we find command handling msgs for server in self.server_list: # Get current working directory (we might be in the 'nosedir' subdirectory) cwd = self.client.push_command_request("os.getcwd()",True,server)[0]['ret'] logfile = '%s/test_mpi4casa_log_level_debug-server-%s.log' % (cwd,str(server)) content = open(logfile, 'r').read() if content.find('flagdata')>0: # Check only server with processed a flagdata sub-job self.assertEqual(content.find("MPICommandServer")<0, True, "MPICommandServer msgs should be filtered out")
class test_mpi4casa_plotms(unittest.TestCase): def setUp(self): self.vis = 'Four_ants_3C286.mms' setUpFile(self.vis,'vis') self.client = MPICommandClient() self.client.set_log_mode('redirect') self.client.start_services() # Prepare list of servers self.server_list = [] server_list = self.client.get_server_status() for server in server_list: if not server_list[server]['timeout']: self.server_list.append(server_list[server]['rank']) def tearDown(self): os.system('rm -rf ' + self.vis) def test_mpi4casa_plotms_concurrent(self): """Run plotms on the same MS from each server simulateneously""" # Change current working directory self.client.push_command_request("os.chdir('%s')" % os.getcwd(),True,self.server_list) # Farm plotms jobs command_request_id_list = [] for server in self.server_list: plotfile = 'test_mpi4casa_plotms_concurrent-%s.png' % str(server) cmd = "plotms('%s', avgchannel='8',avgtime='60',plotfile='%s',showgui=False)" % (self.vis,plotfile) command_request_id = self.client.push_command_request(cmd,False,server) command_request_id_list.append(command_request_id[0]) # Get response in block mode command_response_list = self.client.get_command_response(command_request_id_list,True,True) # Compare files for server_idx in range(0,len(self.server_list)): for server_idy in range(server_idx+1,len(self.server_list)): server_x = self.server_list[server_idx] server_y = self.server_list[server_idy] plotfile_server_idx = 'test_mpi4casa_plotms_concurrent-%s.png' % str(server_x) plotfile_server_idy = 'test_mpi4casa_plotms_concurrent-%s.png' % str(server_y) areEqual = filecmp.cmp(plotfile_server_idx,plotfile_server_idy) self.assertTrue(areEqual,"Plotfile generated by server %s is different from plotfile generated by server %s" % (str(server_x),str(server_y)))
class test_mpi4casa_NullSelection(unittest.TestCase): def setUp(self): self.vis = "Four_ants_3C286.mms" setUpFile(self.vis,'vis') self.client = MPICommandClient() self.client.set_log_mode('redirect') self.client.start_services() # Prepare list of servers self.server_list = [] server_list = self.client.get_server_status() for server in server_list: if not server_list[server]['timeout']: self.server_list.append(server_list[server]['rank']) self.client.push_command_request("import os",True,self.server_list) def tearDown(self): os.system('rm -rf ' + self.vis) # Restore log file and filter self.client.push_command_request("casalog.setlogfile(casa['files']['logfile'])",True,self.server_list) def test_mpi4casa_NullSelection_entire_mms(self): """Test filter out NullSelection exceptions""" # First clear list of filter out msgs. and make sure that the MSSelectionNullSelection shows up for server in self.server_list: logfile = 'MSSelectionNullSelection-Not-Filtered.log-server-%s' % str(server) self.client.push_command_request("casalog.setlogfile('%s'); casalog.clearFilterMsgList()" % (logfile),True,server) # Run flagdata selecting a non-existing scan flagdata(vis=self.vis, scan='99') # Iterate trough log files to see if we find the exception for server in self.server_list: # Get current working directory (we might be in the 'nosedir' subdirectory) cwd = self.client.push_command_request("os.getcwd()",True,server)[0]['ret'] logfile = '%s/MSSelectionNullSelection-Not-Filtered.log-server-%s' % (cwd,str(server)) content = open(logfile, 'r').read() if content.find('flagdata')>0: # Check only server with processed a flagdata sub-job self.assertEqual(content.find("MSSelectionNullSelection")>0, True, "MSSelectionNullSelection should not be filtered out") # Now populate the list of msg to be filter out including MSSelectionNullSelection text = ['MSSelectionNullSelection','NeverHappens'] for server in self.server_list: logfile = 'MSSelectionNullSelection-Filtered.log-server-%s' % str(server) self.client.push_command_request("casalog.setlogfile('%s'); casalog.filterMsg(%s)" % (logfile,str(text)),True,server) # Run flagdata selecting a non-existing scan flagdata(vis=self.vis, scan='99') # Iterate trough log files to see if we find the exception for server in self.server_list: # Get current working directory (we might be in the 'nosedir' subdirectory) cwd = self.client.push_command_request("os.getcwd()",True,server)[0]['ret'] logfile = '%s/MSSelectionNullSelection-Filtered.log-server-%s' % (cwd,str(server)) content = open(logfile, 'r').read() if content.find('flagdata')>0: # Check only server with processed a flagdata sub-job self.assertEqual(content.find("MSSelectionNullSelection")<0, True, "MSSelectionNullSelection should be filtered out")