52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | from tests.test_batch import _get_clients, _setup | ||
|  | from tests.test_batch.test_batch_jobs import prepare_job, _wait_for_job_status | ||
|  | 
 | ||
|  | import sure  # noqa # pylint: disable=unused-import | ||
|  | 
 | ||
|  | from moto import mock_batch, mock_iam, mock_ec2, mock_ecs, mock_logs, settings | ||
|  | from moto.moto_api import state_manager | ||
|  | from unittest import SkipTest | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_logs | ||
|  | @mock_ec2 | ||
|  | @mock_ecs | ||
|  | @mock_iam | ||
|  | @mock_batch | ||
|  | def test_cancel_pending_job(): | ||
|  |     if settings.TEST_SERVER_MODE: | ||
|  |         raise SkipTest("Can't use state_manager in ServerMode directly") | ||
|  | 
 | ||
|  |     ec2_client, iam_client, _, _, batch_client = _get_clients() | ||
|  |     _, _, _, iam_arn = _setup(ec2_client, iam_client) | ||
|  | 
 | ||
|  |     # We need to be able to cancel a job that has not been started yet | ||
|  |     # Locally, our jobs start so fast that we can't cancel them in time | ||
|  |     # So artificially delay the status progression | ||
|  | 
 | ||
|  |     state_manager.set_transition( | ||
|  |         "batch::job", transition={"progression": "time", "seconds": 2} | ||
|  |     ) | ||
|  | 
 | ||
|  |     commands = ["echo", "hello"] | ||
|  |     job_def_arn, queue_arn = prepare_job(batch_client, commands, iam_arn, "test") | ||
|  | 
 | ||
|  |     resp = batch_client.submit_job( | ||
|  |         jobName="test_job_name", | ||
|  |         jobQueue=queue_arn, | ||
|  |         jobDefinition=job_def_arn, | ||
|  |     ) | ||
|  |     job_id = resp["jobId"] | ||
|  | 
 | ||
|  |     batch_client.cancel_job(jobId=job_id, reason="test_cancel") | ||
|  |     _wait_for_job_status(batch_client, job_id, "FAILED", seconds_to_wait=20) | ||
|  | 
 | ||
|  |     resp = batch_client.describe_jobs(jobs=[job_id]) | ||
|  |     resp["jobs"][0]["jobName"].should.equal("test_job_name") | ||
|  |     resp["jobs"][0]["statusReason"].should.equal("test_cancel") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_batch | ||
|  | def test_state_manager_should_return_registered_model(): | ||
|  |     state_manager.get_registered_models().should.contain("batch::job") |