| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | from . import _get_clients, _setup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from botocore.exceptions import ClientError | 
					
						
							|  |  |  | import pytest | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  | import sure  # noqa # pylint: disable=unused-import | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | from moto import mock_batch, mock_iam, mock_ec2, mock_ecs | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  | from uuid import uuid4 | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_create_job_queue(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     ec2_client, iam_client, _, _, batch_client = _get_clients() | 
					
						
							|  |  |  |     _, _, _, iam_arn = _setup(ec2_client, iam_client) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     compute_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_compute_environment( | 
					
						
							|  |  |  |         computeEnvironmentName=compute_name, | 
					
						
							|  |  |  |         type="UNMANAGED", | 
					
						
							|  |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         serviceRole=iam_arn, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     arn = resp["computeEnvironmentArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     jq_name = str(uuid4())[0:6] | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |         jobQueueName=jq_name, | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         priority=123, | 
					
						
							|  |  |  |         computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}], | 
					
						
							| 
									
										
										
										
											2023-01-26 14:06:50 -01:00
										 |  |  |         schedulingPolicyArn="policy_arn", | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  |     resp.should.contain("jobQueueArn") | 
					
						
							|  |  |  |     resp.should.contain("jobQueueName") | 
					
						
							|  |  |  |     queue_arn = resp["jobQueueArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     all_queues = batch_client.describe_job_queues()["jobQueues"] | 
					
						
							|  |  |  |     our_queues = [q for q in all_queues if q["jobQueueName"] == jq_name] | 
					
						
							|  |  |  |     our_queues.should.have.length_of(1) | 
					
						
							|  |  |  |     our_queues[0]["jobQueueArn"].should.equal(queue_arn) | 
					
						
							| 
									
										
										
										
											2023-01-26 14:06:50 -01:00
										 |  |  |     our_queues[0]["schedulingPolicyArn"].should.equal("policy_arn") | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_describe_job_queue_unknown_value(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     _, _, _, _, batch_client = _get_clients() | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     resp = batch_client.describe_job_queues(jobQueues=["test_invalid_queue"]) | 
					
						
							|  |  |  |     resp.should.have.key("jobQueues").being.length_of(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_create_job_queue_twice(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     ec2_client, iam_client, _, _, batch_client = _get_clients() | 
					
						
							|  |  |  |     _, _, _, iam_arn = _setup(ec2_client, iam_client) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     compute_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_compute_environment( | 
					
						
							|  |  |  |         computeEnvironmentName=compute_name, | 
					
						
							|  |  |  |         type="UNMANAGED", | 
					
						
							|  |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         serviceRole=iam_arn, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     compute_env_arn = resp["computeEnvironmentArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     jq_name = str(uuid4())[0:6] | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |         jobQueueName=jq_name, | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         priority=123, | 
					
						
							|  |  |  |         computeEnvironmentOrder=[{"order": 123, "computeEnvironment": compute_env_arn}], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     with pytest.raises(ClientError) as ex: | 
					
						
							|  |  |  |         batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |             jobQueueName=jq_name, | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |             state="ENABLED", | 
					
						
							|  |  |  |             priority=123, | 
					
						
							|  |  |  |             computeEnvironmentOrder=[ | 
					
						
							|  |  |  |                 {"order": 123, "computeEnvironment": compute_env_arn} | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     err = ex.value.response["Error"] | 
					
						
							|  |  |  |     err["Code"].should.equal("ClientException") | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     err["Message"].should.equal(f"Job queue {jq_name} already exists") | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_create_job_queue_incorrect_state(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     _, _, _, _, batch_client = _get_clients() | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     with pytest.raises(ClientError) as ex: | 
					
						
							|  |  |  |         batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |             jobQueueName=str(uuid4()), | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |             state="JUNK", | 
					
						
							|  |  |  |             priority=123, | 
					
						
							|  |  |  |             computeEnvironmentOrder=[], | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     err = ex.value.response["Error"] | 
					
						
							|  |  |  |     err["Code"].should.equal("ClientException") | 
					
						
							|  |  |  |     err["Message"].should.equal("state JUNK must be one of ENABLED | DISABLED") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_create_job_queue_without_compute_environment(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     _, _, _, _, batch_client = _get_clients() | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     with pytest.raises(ClientError) as ex: | 
					
						
							|  |  |  |         batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |             jobQueueName=str(uuid4()), | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |             state="ENABLED", | 
					
						
							|  |  |  |             priority=123, | 
					
						
							|  |  |  |             computeEnvironmentOrder=[], | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     err = ex.value.response["Error"] | 
					
						
							|  |  |  |     err["Code"].should.equal("ClientException") | 
					
						
							|  |  |  |     err["Message"].should.equal("At least 1 compute environment must be provided") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_job_queue_bad_arn(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     ec2_client, iam_client, _, _, batch_client = _get_clients() | 
					
						
							|  |  |  |     _, _, _, iam_arn = _setup(ec2_client, iam_client) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     compute_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_compute_environment( | 
					
						
							|  |  |  |         computeEnvironmentName=compute_name, | 
					
						
							|  |  |  |         type="UNMANAGED", | 
					
						
							|  |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         serviceRole=iam_arn, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     arn = resp["computeEnvironmentArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with pytest.raises(ClientError) as ex: | 
					
						
							|  |  |  |         batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |             jobQueueName=str(uuid4()), | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |             state="ENABLED", | 
					
						
							|  |  |  |             priority=123, | 
					
						
							|  |  |  |             computeEnvironmentOrder=[ | 
					
						
							|  |  |  |                 {"order": 123, "computeEnvironment": arn + "LALALA"} | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     err = ex.value.response["Error"] | 
					
						
							|  |  |  |     err["Code"].should.equal("ClientException") | 
					
						
							|  |  |  |     err["Message"].should.equal("computeEnvironmentOrder is malformed") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_update_job_queue(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     ec2_client, iam_client, _, _, batch_client = _get_clients() | 
					
						
							|  |  |  |     _, _, _, iam_arn = _setup(ec2_client, iam_client) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     compute_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_compute_environment( | 
					
						
							|  |  |  |         computeEnvironmentName=compute_name, | 
					
						
							|  |  |  |         type="UNMANAGED", | 
					
						
							|  |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         serviceRole=iam_arn, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     arn = resp["computeEnvironmentArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     jq_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |         jobQueueName=jq_name, | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         priority=123, | 
					
						
							|  |  |  |         computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     queue_arn = resp["jobQueueArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     batch_client.update_job_queue(jobQueue=queue_arn, priority=5) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     all_queues = batch_client.describe_job_queues()["jobQueues"] | 
					
						
							|  |  |  |     our_queues = [q for q in all_queues if q["jobQueueName"] == jq_name] | 
					
						
							|  |  |  |     our_queues[0]["priority"].should.equal(5) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     batch_client.update_job_queue(jobQueue=jq_name, priority=15) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     all_queues = batch_client.describe_job_queues()["jobQueues"] | 
					
						
							|  |  |  |     our_queues = [q for q in all_queues if q["jobQueueName"] == jq_name] | 
					
						
							|  |  |  |     our_queues.should.have.length_of(1) | 
					
						
							|  |  |  |     our_queues[0]["priority"].should.equal(15) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_ec2 | 
					
						
							|  |  |  | @mock_ecs | 
					
						
							|  |  |  | @mock_iam | 
					
						
							|  |  |  | @mock_batch | 
					
						
							|  |  |  | def test_delete_job_queue(): | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  |     ec2_client, iam_client, _, _, batch_client = _get_clients() | 
					
						
							|  |  |  |     _, _, _, iam_arn = _setup(ec2_client, iam_client) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     compute_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_compute_environment( | 
					
						
							|  |  |  |         computeEnvironmentName=compute_name, | 
					
						
							|  |  |  |         type="UNMANAGED", | 
					
						
							|  |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         serviceRole=iam_arn, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     arn = resp["computeEnvironmentArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     jq_name = str(uuid4()) | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |     resp = batch_client.create_job_queue( | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |         jobQueueName=jq_name, | 
					
						
							| 
									
										
										
										
											2021-08-04 13:40:10 +01:00
										 |  |  |         state="ENABLED", | 
					
						
							|  |  |  |         priority=123, | 
					
						
							|  |  |  |         computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     queue_arn = resp["jobQueueArn"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     batch_client.delete_job_queue(jobQueue=queue_arn) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-05 17:11:07 +00:00
										 |  |  |     all_queues = batch_client.describe_job_queues()["jobQueues"] | 
					
						
							|  |  |  |     [q["jobQueueName"] for q in all_queues].shouldnt.contain(jq_name) |