def _connect_and_create_actor(cluster_addr): parl.connect(cluster_addr) for _ in range(2): actor = Actor() ret = actor.add_one(1) assert ret == 2 disconnect()
def test_log_server(self): master_port = 8401 # start the master master = Master(port=master_port) th = threading.Thread(target=master.run) th.start() time.sleep(1) cluster_addr = 'localhost:{}'.format(master_port) log_server_port = 8402 worker = Worker(cluster_addr, 4, log_server_port=log_server_port) outputs = self._connect_and_create_actor(cluster_addr) # Get status status = master._get_status() client_jobs = pickle.loads(status).get('client_jobs') self.assertIsNotNone(client_jobs) # Get job id client = get_global_client() jobs = client_jobs.get(client.client_id) self.assertIsNotNone(jobs) for job_id, log_server_addr in jobs.items(): log_url = "http://{}/get-log".format(log_server_addr) # Test response without job_id r = requests.get(log_url) self.assertEqual(r.status_code, 400) # Test normal response r = requests.get(log_url, params={'job_id': job_id}) self.assertEqual(r.status_code, 200) log_content = json.loads(r.text).get('log') self.assertIsNotNone(log_content) log_content = log_content.replace('\r\n', '\n') self.assertIn(log_content, outputs) # Test download download_url = "http://{}/download-log".format(log_server_addr) r = requests.get(download_url, params={'job_id': job_id}) self.assertEqual(r.status_code, 200) log_content = r.text.replace('\r\n', '\n') self.assertIn(log_content, outputs) disconnect() worker.exit() master.exit()
def test_acor_exit_exceptionally(self): port = 1337 master = Master(port) th = threading.Thread(target=master.run) th.start() time.sleep(1) worker1 = Worker('localhost:{}'.format(port), 1) file_path = __file__.replace('reset_job_test', 'simulate_client') command = [sys.executable, file_path] proc = subprocess.Popen(command) for _ in range(6): if master.cpu_num == 0: break else: time.sleep(10) self.assertEqual(master.cpu_num, 0) proc.kill() parl.connect('localhost:{}'.format(port)) actor = Actor() master.exit() worker1.exit() disconnect()
def tearDown(self): disconnect()
def test_monitor_query_log_server(self): master_port = 8403 monitor_port = 8404 # start the master master = Master(port=master_port, monitor_port=monitor_port) th = threading.Thread(target=master.run) th.start() time.sleep(1) # start the cluster monitor monitor_file = __file__.replace( os.path.join('tests', 'log_server_test.pyc'), 'monitor.py') monitor_file = monitor_file.replace( os.path.join('tests', 'log_server_test.py'), 'monitor.py') command = [ sys.executable, monitor_file, "--monitor_port", str(monitor_port), "--address", "localhost:" + str(master_port) ] if _IS_WINDOWS: FNULL = tempfile.TemporaryFile() else: FNULL = open(os.devnull, 'w') monitor_proc = subprocess.Popen( command, stdout=FNULL, stderr=subprocess.STDOUT, ) # Start worker cluster_addr = 'localhost:{}'.format(master_port) log_server_port = 8405 worker = Worker(cluster_addr, 4, log_server_port=log_server_port) # Test monitor API outputs = self._connect_and_create_actor(cluster_addr) time.sleep(5) # Wait for the status update client = get_global_client() jobs_url = "{}/get-jobs?client_id={}".format(master.monitor_url, client.client_id) r = requests.get(jobs_url) self.assertEqual(r.status_code, 200) data = json.loads(r.text) for job in data: log_url = job.get('log_url') self.assertIsNotNone(log_url) r = requests.get(log_url) self.assertEqual(r.status_code, 200) log_content = json.loads(r.text).get('log') self.assertIsNotNone(log_content) log_content = log_content.replace('\r\n', '\n') self.assertIn(log_content, outputs) # Test download download_url = job.get('download_url') r = requests.get(download_url) self.assertEqual(r.status_code, 200) log_content = r.text.replace('\r\n', '\n') self.assertIn(log_content, outputs) # Clean context monitor_proc.kill() monitor_proc.wait() disconnect() worker.exit() master.exit()