Batch - Test rework (#4134)
This commit is contained in:
		
							parent
							
								
									4ae9b0e253
								
							
						
					
					
						commit
						ee6f20e376
					
				@ -1 +1,43 @@
 | 
				
			|||||||
# This file is intentionally left blank.
 | 
					import boto3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEFAULT_REGION = "eu-central-1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _get_clients():
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					        boto3.client("ec2", region_name=DEFAULT_REGION),
 | 
				
			||||||
 | 
					        boto3.client("iam", region_name=DEFAULT_REGION),
 | 
				
			||||||
 | 
					        boto3.client("ecs", region_name=DEFAULT_REGION),
 | 
				
			||||||
 | 
					        boto3.client("logs", region_name=DEFAULT_REGION),
 | 
				
			||||||
 | 
					        boto3.client("batch", region_name=DEFAULT_REGION),
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _setup(ec2_client, iam_client):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Do prerequisite setup
 | 
				
			||||||
 | 
					    :return: VPC ID, Subnet ID, Security group ID, IAM Role ARN
 | 
				
			||||||
 | 
					    :rtype: tuple
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    resp = ec2_client.create_vpc(CidrBlock="172.30.0.0/24")
 | 
				
			||||||
 | 
					    vpc_id = resp["Vpc"]["VpcId"]
 | 
				
			||||||
 | 
					    resp = ec2_client.create_subnet(
 | 
				
			||||||
 | 
					        AvailabilityZone="eu-central-1a", CidrBlock="172.30.0.0/25", VpcId=vpc_id
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    subnet_id = resp["Subnet"]["SubnetId"]
 | 
				
			||||||
 | 
					    resp = ec2_client.create_security_group(
 | 
				
			||||||
 | 
					        Description="test_sg_desc", GroupName="test_sg", VpcId=vpc_id
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    sg_id = resp["GroupId"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = iam_client.create_role(
 | 
				
			||||||
 | 
					        RoleName="TestRole", AssumeRolePolicyDocument="some_policy"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    iam_arn = resp["Role"]["Arn"]
 | 
				
			||||||
 | 
					    iam_client.create_instance_profile(InstanceProfileName="TestRole")
 | 
				
			||||||
 | 
					    iam_client.add_role_to_instance_profile(
 | 
				
			||||||
 | 
					        InstanceProfileName="TestRole", RoleName="TestRole"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return vpc_id, subnet_id, sg_id, iam_arn
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										203
									
								
								tests/test_batch/test_batch_compute_envs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								tests/test_batch/test_batch_compute_envs.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,203 @@
 | 
				
			|||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from . import _get_clients, _setup
 | 
				
			||||||
 | 
					import sure  # noqa
 | 
				
			||||||
 | 
					from moto import mock_batch, mock_iam, mock_ec2, mock_ecs, mock_logs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Yes, yes it talks to all the things
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_create_managed_compute_environment():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    resp = batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="MANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        computeResources={
 | 
				
			||||||
 | 
					            "type": "EC2",
 | 
				
			||||||
 | 
					            "minvCpus": 5,
 | 
				
			||||||
 | 
					            "maxvCpus": 10,
 | 
				
			||||||
 | 
					            "desiredvCpus": 5,
 | 
				
			||||||
 | 
					            "instanceTypes": ["t2.small", "t2.medium"],
 | 
				
			||||||
 | 
					            "imageId": "some_image_id",
 | 
				
			||||||
 | 
					            "subnets": [subnet_id],
 | 
				
			||||||
 | 
					            "securityGroupIds": [sg_id],
 | 
				
			||||||
 | 
					            "ec2KeyPair": "string",
 | 
				
			||||||
 | 
					            "instanceRole": iam_arn.replace("role", "instance-profile"),
 | 
				
			||||||
 | 
					            "tags": {"string": "string"},
 | 
				
			||||||
 | 
					            "bidPercentage": 123,
 | 
				
			||||||
 | 
					            "spotIamFleetRole": "string",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    resp.should.contain("computeEnvironmentArn")
 | 
				
			||||||
 | 
					    resp["computeEnvironmentName"].should.equal(compute_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Given a t2.medium is 2 vcpu and t2.small is 1, therefore 2 mediums and 1 small should be created
 | 
				
			||||||
 | 
					    resp = ec2_client.describe_instances()
 | 
				
			||||||
 | 
					    resp.should.contain("Reservations")
 | 
				
			||||||
 | 
					    len(resp["Reservations"]).should.equal(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Should have created 1 ECS cluster
 | 
				
			||||||
 | 
					    resp = ecs_client.list_clusters()
 | 
				
			||||||
 | 
					    resp.should.contain("clusterArns")
 | 
				
			||||||
 | 
					    len(resp["clusterArns"]).should.equal(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_create_unmanaged_compute_environment():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    resp = batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    resp.should.contain("computeEnvironmentArn")
 | 
				
			||||||
 | 
					    resp["computeEnvironmentName"].should.equal(compute_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Its unmanaged so no instances should be created
 | 
				
			||||||
 | 
					    resp = ec2_client.describe_instances()
 | 
				
			||||||
 | 
					    resp.should.contain("Reservations")
 | 
				
			||||||
 | 
					    len(resp["Reservations"]).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Should have created 1 ECS cluster
 | 
				
			||||||
 | 
					    resp = ecs_client.list_clusters()
 | 
				
			||||||
 | 
					    resp.should.contain("clusterArns")
 | 
				
			||||||
 | 
					    len(resp["clusterArns"]).should.equal(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO create 1000s of tests to test complex option combinations of create environment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_describe_compute_environment():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_compute_environments()
 | 
				
			||||||
 | 
					    len(resp["computeEnvironments"]).should.equal(1)
 | 
				
			||||||
 | 
					    resp["computeEnvironments"][0]["computeEnvironmentName"].should.equal(compute_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Test filtering
 | 
				
			||||||
 | 
					    resp = batch_client.describe_compute_environments(computeEnvironments=["test1"])
 | 
				
			||||||
 | 
					    len(resp["computeEnvironments"]).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_delete_unmanaged_compute_environment():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.delete_compute_environment(computeEnvironment=compute_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_compute_environments()
 | 
				
			||||||
 | 
					    len(resp["computeEnvironments"]).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = ecs_client.list_clusters()
 | 
				
			||||||
 | 
					    len(resp.get("clusterArns", [])).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_delete_managed_compute_environment():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="MANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        computeResources={
 | 
				
			||||||
 | 
					            "type": "EC2",
 | 
				
			||||||
 | 
					            "minvCpus": 5,
 | 
				
			||||||
 | 
					            "maxvCpus": 10,
 | 
				
			||||||
 | 
					            "desiredvCpus": 5,
 | 
				
			||||||
 | 
					            "instanceTypes": ["t2.small", "t2.medium"],
 | 
				
			||||||
 | 
					            "imageId": "some_image_id",
 | 
				
			||||||
 | 
					            "subnets": [subnet_id],
 | 
				
			||||||
 | 
					            "securityGroupIds": [sg_id],
 | 
				
			||||||
 | 
					            "ec2KeyPair": "string",
 | 
				
			||||||
 | 
					            "instanceRole": iam_arn.replace("role", "instance-profile"),
 | 
				
			||||||
 | 
					            "tags": {"string": "string"},
 | 
				
			||||||
 | 
					            "bidPercentage": 123,
 | 
				
			||||||
 | 
					            "spotIamFleetRole": "string",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.delete_compute_environment(computeEnvironment=compute_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_compute_environments()
 | 
				
			||||||
 | 
					    len(resp["computeEnvironments"]).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = ec2_client.describe_instances()
 | 
				
			||||||
 | 
					    resp.should.contain("Reservations")
 | 
				
			||||||
 | 
					    len(resp["Reservations"]).should.equal(3)
 | 
				
			||||||
 | 
					    for reservation in resp["Reservations"]:
 | 
				
			||||||
 | 
					        reservation["Instances"][0]["State"]["Name"].should.equal("terminated")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = ecs_client.list_clusters()
 | 
				
			||||||
 | 
					    len(resp.get("clusterArns", [])).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_update_unmanaged_compute_environment_state():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.update_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironment=compute_name, state="DISABLED"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_compute_environments()
 | 
				
			||||||
 | 
					    len(resp["computeEnvironments"]).should.equal(1)
 | 
				
			||||||
 | 
					    resp["computeEnvironments"][0]["state"].should.equal("DISABLED")
 | 
				
			||||||
							
								
								
									
										225
									
								
								tests/test_batch/test_batch_job_queue.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										225
									
								
								tests/test_batch/test_batch_job_queue.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,225 @@
 | 
				
			|||||||
 | 
					from . import _get_clients, _setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from botocore.exceptions import ClientError
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import sure  # noqa
 | 
				
			||||||
 | 
					from moto import mock_batch, mock_iam, mock_ec2, mock_ecs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_create_job_queue():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    resp = batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    arn = resp["computeEnvironmentArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.create_job_queue(
 | 
				
			||||||
 | 
					        jobQueueName="test_job_queue",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        priority=123,
 | 
				
			||||||
 | 
					        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    resp.should.contain("jobQueueArn")
 | 
				
			||||||
 | 
					    resp.should.contain("jobQueueName")
 | 
				
			||||||
 | 
					    queue_arn = resp["jobQueueArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_queues()
 | 
				
			||||||
 | 
					    resp.should.have.key("jobQueues").being.length_of(1)
 | 
				
			||||||
 | 
					    resp["jobQueues"][0]["jobQueueArn"].should.equal(queue_arn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_describe_job_queue_unknown_value():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    resp = batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    compute_env_arn = resp["computeEnvironmentArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.create_job_queue(
 | 
				
			||||||
 | 
					        jobQueueName="test_job_queue",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        priority=123,
 | 
				
			||||||
 | 
					        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": compute_env_arn}],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    with pytest.raises(ClientError) as ex:
 | 
				
			||||||
 | 
					        batch_client.create_job_queue(
 | 
				
			||||||
 | 
					            jobQueueName="test_job_queue",
 | 
				
			||||||
 | 
					            state="ENABLED",
 | 
				
			||||||
 | 
					            priority=123,
 | 
				
			||||||
 | 
					            computeEnvironmentOrder=[
 | 
				
			||||||
 | 
					                {"order": 123, "computeEnvironment": compute_env_arn}
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    err = ex.value.response["Error"]
 | 
				
			||||||
 | 
					    err["Code"].should.equal("ClientException")
 | 
				
			||||||
 | 
					    err["Message"].should.equal("Job queue test_job_queue already exists")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_create_job_queue_incorrect_state():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with pytest.raises(ClientError) as ex:
 | 
				
			||||||
 | 
					        batch_client.create_job_queue(
 | 
				
			||||||
 | 
					            jobQueueName="test_job_queue2",
 | 
				
			||||||
 | 
					            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():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with pytest.raises(ClientError) as ex:
 | 
				
			||||||
 | 
					        batch_client.create_job_queue(
 | 
				
			||||||
 | 
					            jobQueueName="test_job_queue3",
 | 
				
			||||||
 | 
					            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():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    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(
 | 
				
			||||||
 | 
					            jobQueueName="test_job_queue",
 | 
				
			||||||
 | 
					            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():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    resp = batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    arn = resp["computeEnvironmentArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.create_job_queue(
 | 
				
			||||||
 | 
					        jobQueueName="test_job_queue",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        priority=123,
 | 
				
			||||||
 | 
					        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    queue_arn = resp["jobQueueArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.update_job_queue(jobQueue=queue_arn, priority=5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_queues()
 | 
				
			||||||
 | 
					    resp.should.have.key("jobQueues").being.length_of(1)
 | 
				
			||||||
 | 
					    resp["jobQueues"][0]["priority"].should.equal(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.update_job_queue(jobQueue="test_job_queue", priority=5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_queues()
 | 
				
			||||||
 | 
					    resp.should.have.key("jobQueues").being.length_of(1)
 | 
				
			||||||
 | 
					    resp["jobQueues"][0]["priority"].should.equal(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_delete_job_queue():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compute_name = "test_compute_env"
 | 
				
			||||||
 | 
					    resp = batch_client.create_compute_environment(
 | 
				
			||||||
 | 
					        computeEnvironmentName=compute_name,
 | 
				
			||||||
 | 
					        type="UNMANAGED",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        serviceRole=iam_arn,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    arn = resp["computeEnvironmentArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.create_job_queue(
 | 
				
			||||||
 | 
					        jobQueueName="test_job_queue",
 | 
				
			||||||
 | 
					        state="ENABLED",
 | 
				
			||||||
 | 
					        priority=123,
 | 
				
			||||||
 | 
					        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    queue_arn = resp["jobQueueArn"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.delete_job_queue(jobQueue=queue_arn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_queues()
 | 
				
			||||||
 | 
					    resp.should.have.key("jobQueues").being.length_of(0)
 | 
				
			||||||
@ -1,606 +1,10 @@
 | 
				
			|||||||
from __future__ import unicode_literals
 | 
					from . import _get_clients, _setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import time
 | 
					 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import boto3
 | 
					 | 
				
			||||||
from botocore.exceptions import ClientError
 | 
					 | 
				
			||||||
import sure  # noqa
 | 
					import sure  # noqa
 | 
				
			||||||
from moto import mock_batch, mock_iam, mock_ec2, mock_ecs, mock_logs
 | 
					from moto import mock_batch, mock_iam, mock_ec2, mock_ecs, mock_logs
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
DEFAULT_REGION = "eu-central-1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def _get_clients():
 | 
					 | 
				
			||||||
    return (
 | 
					 | 
				
			||||||
        boto3.client("ec2", region_name=DEFAULT_REGION),
 | 
					 | 
				
			||||||
        boto3.client("iam", region_name=DEFAULT_REGION),
 | 
					 | 
				
			||||||
        boto3.client("ecs", region_name=DEFAULT_REGION),
 | 
					 | 
				
			||||||
        boto3.client("logs", region_name=DEFAULT_REGION),
 | 
					 | 
				
			||||||
        boto3.client("batch", region_name=DEFAULT_REGION),
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def _setup(ec2_client, iam_client):
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    Do prerequisite setup
 | 
					 | 
				
			||||||
    :return: VPC ID, Subnet ID, Security group ID, IAM Role ARN
 | 
					 | 
				
			||||||
    :rtype: tuple
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    resp = ec2_client.create_vpc(CidrBlock="172.30.0.0/24")
 | 
					 | 
				
			||||||
    vpc_id = resp["Vpc"]["VpcId"]
 | 
					 | 
				
			||||||
    resp = ec2_client.create_subnet(
 | 
					 | 
				
			||||||
        AvailabilityZone="eu-central-1a", CidrBlock="172.30.0.0/25", VpcId=vpc_id
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    subnet_id = resp["Subnet"]["SubnetId"]
 | 
					 | 
				
			||||||
    resp = ec2_client.create_security_group(
 | 
					 | 
				
			||||||
        Description="test_sg_desc", GroupName="test_sg", VpcId=vpc_id
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    sg_id = resp["GroupId"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = iam_client.create_role(
 | 
					 | 
				
			||||||
        RoleName="TestRole", AssumeRolePolicyDocument="some_policy"
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    iam_arn = resp["Role"]["Arn"]
 | 
					 | 
				
			||||||
    iam_client.create_instance_profile(InstanceProfileName="TestRole")
 | 
					 | 
				
			||||||
    iam_client.add_role_to_instance_profile(
 | 
					 | 
				
			||||||
        InstanceProfileName="TestRole", RoleName="TestRole"
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return vpc_id, subnet_id, sg_id, iam_arn
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Yes, yes it talks to all the things
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_create_managed_compute_environment():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    resp = batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="MANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        computeResources={
 | 
					 | 
				
			||||||
            "type": "EC2",
 | 
					 | 
				
			||||||
            "minvCpus": 5,
 | 
					 | 
				
			||||||
            "maxvCpus": 10,
 | 
					 | 
				
			||||||
            "desiredvCpus": 5,
 | 
					 | 
				
			||||||
            "instanceTypes": ["t2.small", "t2.medium"],
 | 
					 | 
				
			||||||
            "imageId": "some_image_id",
 | 
					 | 
				
			||||||
            "subnets": [subnet_id],
 | 
					 | 
				
			||||||
            "securityGroupIds": [sg_id],
 | 
					 | 
				
			||||||
            "ec2KeyPair": "string",
 | 
					 | 
				
			||||||
            "instanceRole": iam_arn.replace("role", "instance-profile"),
 | 
					 | 
				
			||||||
            "tags": {"string": "string"},
 | 
					 | 
				
			||||||
            "bidPercentage": 123,
 | 
					 | 
				
			||||||
            "spotIamFleetRole": "string",
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp.should.contain("computeEnvironmentArn")
 | 
					 | 
				
			||||||
    resp["computeEnvironmentName"].should.equal(compute_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Given a t2.medium is 2 vcpu and t2.small is 1, therefore 2 mediums and 1 small should be created
 | 
					 | 
				
			||||||
    resp = ec2_client.describe_instances()
 | 
					 | 
				
			||||||
    resp.should.contain("Reservations")
 | 
					 | 
				
			||||||
    len(resp["Reservations"]).should.equal(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Should have created 1 ECS cluster
 | 
					 | 
				
			||||||
    resp = ecs_client.list_clusters()
 | 
					 | 
				
			||||||
    resp.should.contain("clusterArns")
 | 
					 | 
				
			||||||
    len(resp["clusterArns"]).should.equal(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_create_unmanaged_compute_environment():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    resp = batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp.should.contain("computeEnvironmentArn")
 | 
					 | 
				
			||||||
    resp["computeEnvironmentName"].should.equal(compute_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Its unmanaged so no instances should be created
 | 
					 | 
				
			||||||
    resp = ec2_client.describe_instances()
 | 
					 | 
				
			||||||
    resp.should.contain("Reservations")
 | 
					 | 
				
			||||||
    len(resp["Reservations"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Should have created 1 ECS cluster
 | 
					 | 
				
			||||||
    resp = ecs_client.list_clusters()
 | 
					 | 
				
			||||||
    resp.should.contain("clusterArns")
 | 
					 | 
				
			||||||
    len(resp["clusterArns"]).should.equal(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# TODO create 1000s of tests to test complex option combinations of create environment
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_describe_compute_environment():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_compute_environments()
 | 
					 | 
				
			||||||
    len(resp["computeEnvironments"]).should.equal(1)
 | 
					 | 
				
			||||||
    resp["computeEnvironments"][0]["computeEnvironmentName"].should.equal(compute_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Test filtering
 | 
					 | 
				
			||||||
    resp = batch_client.describe_compute_environments(computeEnvironments=["test1"])
 | 
					 | 
				
			||||||
    len(resp["computeEnvironments"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_delete_unmanaged_compute_environment():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.delete_compute_environment(computeEnvironment=compute_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_compute_environments()
 | 
					 | 
				
			||||||
    len(resp["computeEnvironments"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = ecs_client.list_clusters()
 | 
					 | 
				
			||||||
    len(resp.get("clusterArns", [])).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_delete_managed_compute_environment():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="MANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        computeResources={
 | 
					 | 
				
			||||||
            "type": "EC2",
 | 
					 | 
				
			||||||
            "minvCpus": 5,
 | 
					 | 
				
			||||||
            "maxvCpus": 10,
 | 
					 | 
				
			||||||
            "desiredvCpus": 5,
 | 
					 | 
				
			||||||
            "instanceTypes": ["t2.small", "t2.medium"],
 | 
					 | 
				
			||||||
            "imageId": "some_image_id",
 | 
					 | 
				
			||||||
            "subnets": [subnet_id],
 | 
					 | 
				
			||||||
            "securityGroupIds": [sg_id],
 | 
					 | 
				
			||||||
            "ec2KeyPair": "string",
 | 
					 | 
				
			||||||
            "instanceRole": iam_arn.replace("role", "instance-profile"),
 | 
					 | 
				
			||||||
            "tags": {"string": "string"},
 | 
					 | 
				
			||||||
            "bidPercentage": 123,
 | 
					 | 
				
			||||||
            "spotIamFleetRole": "string",
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.delete_compute_environment(computeEnvironment=compute_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_compute_environments()
 | 
					 | 
				
			||||||
    len(resp["computeEnvironments"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = ec2_client.describe_instances()
 | 
					 | 
				
			||||||
    resp.should.contain("Reservations")
 | 
					 | 
				
			||||||
    len(resp["Reservations"]).should.equal(3)
 | 
					 | 
				
			||||||
    for reservation in resp["Reservations"]:
 | 
					 | 
				
			||||||
        reservation["Instances"][0]["State"]["Name"].should.equal("terminated")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = ecs_client.list_clusters()
 | 
					 | 
				
			||||||
    len(resp.get("clusterArns", [])).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_update_unmanaged_compute_environment_state():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.update_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironment=compute_name, state="DISABLED"
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_compute_environments()
 | 
					 | 
				
			||||||
    len(resp["computeEnvironments"]).should.equal(1)
 | 
					 | 
				
			||||||
    resp["computeEnvironments"][0]["state"].should.equal("DISABLED")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_create_job_queue():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    resp = batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    arn = resp["computeEnvironmentArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.create_job_queue(
 | 
					 | 
				
			||||||
        jobQueueName="test_job_queue",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        priority=123,
 | 
					 | 
				
			||||||
        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueueArn")
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueueName")
 | 
					 | 
				
			||||||
    queue_arn = resp["jobQueueArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_queues()
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueues")
 | 
					 | 
				
			||||||
    len(resp["jobQueues"]).should.equal(1)
 | 
					 | 
				
			||||||
    resp["jobQueues"][0]["jobQueueArn"].should.equal(queue_arn)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_queues(jobQueues=["test_invalid_queue"])
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueues")
 | 
					 | 
				
			||||||
    len(resp["jobQueues"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Create job queue which already exists
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        resp = batch_client.create_job_queue(
 | 
					 | 
				
			||||||
            jobQueueName="test_job_queue",
 | 
					 | 
				
			||||||
            state="ENABLED",
 | 
					 | 
				
			||||||
            priority=123,
 | 
					 | 
				
			||||||
            computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    except ClientError as err:
 | 
					 | 
				
			||||||
        err.response["Error"]["Code"].should.equal("ClientException")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Create job queue with incorrect state
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        resp = batch_client.create_job_queue(
 | 
					 | 
				
			||||||
            jobQueueName="test_job_queue2",
 | 
					 | 
				
			||||||
            state="JUNK",
 | 
					 | 
				
			||||||
            priority=123,
 | 
					 | 
				
			||||||
            computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    except ClientError as err:
 | 
					 | 
				
			||||||
        err.response["Error"]["Code"].should.equal("ClientException")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Create job queue with no compute env
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        resp = batch_client.create_job_queue(
 | 
					 | 
				
			||||||
            jobQueueName="test_job_queue3",
 | 
					 | 
				
			||||||
            state="JUNK",
 | 
					 | 
				
			||||||
            priority=123,
 | 
					 | 
				
			||||||
            computeEnvironmentOrder=[],
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    except ClientError as err:
 | 
					 | 
				
			||||||
        err.response["Error"]["Code"].should.equal("ClientException")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_job_queue_bad_arn():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    resp = batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    arn = resp["computeEnvironmentArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        batch_client.create_job_queue(
 | 
					 | 
				
			||||||
            jobQueueName="test_job_queue",
 | 
					 | 
				
			||||||
            state="ENABLED",
 | 
					 | 
				
			||||||
            priority=123,
 | 
					 | 
				
			||||||
            computeEnvironmentOrder=[
 | 
					 | 
				
			||||||
                {"order": 123, "computeEnvironment": arn + "LALALA"}
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
    except ClientError as err:
 | 
					 | 
				
			||||||
        err.response["Error"]["Code"].should.equal("ClientException")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_update_job_queue():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    resp = batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    arn = resp["computeEnvironmentArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.create_job_queue(
 | 
					 | 
				
			||||||
        jobQueueName="test_job_queue",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        priority=123,
 | 
					 | 
				
			||||||
        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    queue_arn = resp["jobQueueArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.update_job_queue(jobQueue=queue_arn, priority=5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_queues()
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueues")
 | 
					 | 
				
			||||||
    len(resp["jobQueues"]).should.equal(1)
 | 
					 | 
				
			||||||
    resp["jobQueues"][0]["priority"].should.equal(5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.update_job_queue(jobQueue="test_job_queue", priority=5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_queues()
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueues")
 | 
					 | 
				
			||||||
    len(resp["jobQueues"]).should.equal(1)
 | 
					 | 
				
			||||||
    resp["jobQueues"][0]["priority"].should.equal(5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_update_job_queue():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    compute_name = "test_compute_env"
 | 
					 | 
				
			||||||
    resp = batch_client.create_compute_environment(
 | 
					 | 
				
			||||||
        computeEnvironmentName=compute_name,
 | 
					 | 
				
			||||||
        type="UNMANAGED",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        serviceRole=iam_arn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    arn = resp["computeEnvironmentArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.create_job_queue(
 | 
					 | 
				
			||||||
        jobQueueName="test_job_queue",
 | 
					 | 
				
			||||||
        state="ENABLED",
 | 
					 | 
				
			||||||
        priority=123,
 | 
					 | 
				
			||||||
        computeEnvironmentOrder=[{"order": 123, "computeEnvironment": arn}],
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    queue_arn = resp["jobQueueArn"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.delete_job_queue(jobQueue=queue_arn)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_queues()
 | 
					 | 
				
			||||||
    resp.should.contain("jobQueues")
 | 
					 | 
				
			||||||
    len(resp["jobQueues"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_register_task_definition():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 128,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp.should.contain("jobDefinitionArn")
 | 
					 | 
				
			||||||
    resp.should.contain("jobDefinitionName")
 | 
					 | 
				
			||||||
    resp.should.contain("revision")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert resp["jobDefinitionArn"].endswith(
 | 
					 | 
				
			||||||
        "{0}:{1}".format(resp["jobDefinitionName"], resp["revision"])
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_reregister_task_definition():
 | 
					 | 
				
			||||||
    # Reregistering task with the same name bumps the revision number
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp1 = batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 128,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp1.should.contain("jobDefinitionArn")
 | 
					 | 
				
			||||||
    resp1.should.contain("jobDefinitionName")
 | 
					 | 
				
			||||||
    resp1.should.contain("revision")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert resp1["jobDefinitionArn"].endswith(
 | 
					 | 
				
			||||||
        "{0}:{1}".format(resp1["jobDefinitionName"], resp1["revision"])
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp1["revision"].should.equal(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp2 = batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 68,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp2["revision"].should.equal(2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp2["jobDefinitionArn"].should_not.equal(resp1["jobDefinitionArn"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp3 = batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 42,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp3["revision"].should.equal(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp3["jobDefinitionArn"].should_not.equal(resp1["jobDefinitionArn"])
 | 
					 | 
				
			||||||
    resp3["jobDefinitionArn"].should_not.equal(resp2["jobDefinitionArn"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp4 = batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 41,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    resp4["revision"].should.equal(4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp4["jobDefinitionArn"].should_not.equal(resp1["jobDefinitionArn"])
 | 
					 | 
				
			||||||
    resp4["jobDefinitionArn"].should_not.equal(resp2["jobDefinitionArn"])
 | 
					 | 
				
			||||||
    resp4["jobDefinitionArn"].should_not.equal(resp3["jobDefinitionArn"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_delete_task_definition():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 128,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.deregister_job_definition(jobDefinition=resp["jobDefinitionArn"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_definitions()
 | 
					 | 
				
			||||||
    len(resp["jobDefinitions"]).should.equal(0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@mock_ec2
 | 
					 | 
				
			||||||
@mock_ecs
 | 
					 | 
				
			||||||
@mock_iam
 | 
					 | 
				
			||||||
@mock_batch
 | 
					 | 
				
			||||||
def test_describe_task_definition():
 | 
					 | 
				
			||||||
    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
					 | 
				
			||||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 128,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="sleep10",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 64,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    batch_client.register_job_definition(
 | 
					 | 
				
			||||||
        jobDefinitionName="test1",
 | 
					 | 
				
			||||||
        type="container",
 | 
					 | 
				
			||||||
        containerProperties={
 | 
					 | 
				
			||||||
            "image": "busybox",
 | 
					 | 
				
			||||||
            "vcpus": 1,
 | 
					 | 
				
			||||||
            "memory": 64,
 | 
					 | 
				
			||||||
            "command": ["sleep", "10"],
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_definitions(jobDefinitionName="sleep10")
 | 
					 | 
				
			||||||
    len(resp["jobDefinitions"]).should.equal(2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_definitions()
 | 
					 | 
				
			||||||
    len(resp["jobDefinitions"]).should.equal(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    resp = batch_client.describe_job_definitions(jobDefinitions=["sleep10", "test1"])
 | 
					 | 
				
			||||||
    len(resp["jobDefinitions"]).should.equal(3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for job_definition in resp["jobDefinitions"]:
 | 
					 | 
				
			||||||
        job_definition["status"].should.equal("ACTIVE")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@mock_logs
 | 
					@mock_logs
 | 
				
			||||||
@ -730,7 +134,7 @@ def test_submit_job():
 | 
				
			|||||||
    resp = logs_client.describe_log_streams(
 | 
					    resp = logs_client.describe_log_streams(
 | 
				
			||||||
        logGroupName="/aws/batch/job", logStreamNamePrefix="sayhellotomylittlefriend"
 | 
					        logGroupName="/aws/batch/job", logStreamNamePrefix="sayhellotomylittlefriend"
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    len(resp["logStreams"]).should.equal(1)
 | 
					    resp["logStreams"].should.have.length_of(1)
 | 
				
			||||||
    ls_name = resp["logStreams"][0]["logStreamName"]
 | 
					    ls_name = resp["logStreams"][0]["logStreamName"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    resp = logs_client.get_log_events(
 | 
					    resp = logs_client.get_log_events(
 | 
				
			||||||
@ -787,20 +191,17 @@ def test_list_jobs():
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
    job_id2 = resp["jobId"]
 | 
					    job_id2 = resp["jobId"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    resp_finished_jobs = batch_client.list_jobs(
 | 
					    batch_client.list_jobs(jobQueue=queue_arn, jobStatus="SUCCEEDED")[
 | 
				
			||||||
        jobQueue=queue_arn, jobStatus="SUCCEEDED"
 | 
					        "jobSummaryList"
 | 
				
			||||||
    )
 | 
					    ].should.have.length_of(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Wait only as long as it takes to run the jobs
 | 
					    # Wait only as long as it takes to run the jobs
 | 
				
			||||||
    for job_id in [job_id1, job_id2]:
 | 
					    for job_id in [job_id1, job_id2]:
 | 
				
			||||||
        _wait_for_job_status(batch_client, job_id, "SUCCEEDED")
 | 
					        _wait_for_job_status(batch_client, job_id, "SUCCEEDED")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    resp_finished_jobs2 = batch_client.list_jobs(
 | 
					    batch_client.list_jobs(jobQueue=queue_arn, jobStatus="SUCCEEDED")[
 | 
				
			||||||
        jobQueue=queue_arn, jobStatus="SUCCEEDED"
 | 
					        "jobSummaryList"
 | 
				
			||||||
    )
 | 
					    ].should.have.length_of(2)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    len(resp_finished_jobs["jobSummaryList"]).should.equal(0)
 | 
					 | 
				
			||||||
    len(resp_finished_jobs2["jobSummaryList"]).should.equal(2)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@mock_logs
 | 
					@mock_logs
 | 
				
			||||||
@ -860,7 +261,7 @@ def test_terminate_job():
 | 
				
			|||||||
    resp = logs_client.describe_log_streams(
 | 
					    resp = logs_client.describe_log_streams(
 | 
				
			||||||
        logGroupName="/aws/batch/job", logStreamNamePrefix="echo-sleep-echo"
 | 
					        logGroupName="/aws/batch/job", logStreamNamePrefix="echo-sleep-echo"
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    len(resp["logStreams"]).should.equal(1)
 | 
					    resp["logStreams"].should.have.length_of(1)
 | 
				
			||||||
    ls_name = resp["logStreams"][0]["logStreamName"]
 | 
					    ls_name = resp["logStreams"][0]["logStreamName"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    resp = logs_client.get_log_events(
 | 
					    resp = logs_client.get_log_events(
 | 
				
			||||||
							
								
								
									
										116
									
								
								tests/test_batch/test_batch_task_definition.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								tests/test_batch/test_batch_task_definition.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					from . import _get_clients, _setup
 | 
				
			||||||
 | 
					import random
 | 
				
			||||||
 | 
					import sure  # noqa
 | 
				
			||||||
 | 
					from moto import mock_batch, mock_iam, mock_ec2, mock_ecs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_register_task_definition():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = register_job_def(batch_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp.should.contain("jobDefinitionArn")
 | 
				
			||||||
 | 
					    resp.should.contain("jobDefinitionName")
 | 
				
			||||||
 | 
					    resp.should.contain("revision")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert resp["jobDefinitionArn"].endswith(
 | 
				
			||||||
 | 
					        "{0}:{1}".format(resp["jobDefinitionName"], resp["revision"])
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_reregister_task_definition():
 | 
				
			||||||
 | 
					    # Reregistering task with the same name bumps the revision number
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp1 = register_job_def(batch_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp1.should.contain("jobDefinitionArn")
 | 
				
			||||||
 | 
					    resp1.should.contain("jobDefinitionName")
 | 
				
			||||||
 | 
					    resp1.should.contain("revision")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert resp1["jobDefinitionArn"].endswith(
 | 
				
			||||||
 | 
					        "{0}:{1}".format(resp1["jobDefinitionName"], resp1["revision"])
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    resp1["revision"].should.equal(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp2 = register_job_def(batch_client)
 | 
				
			||||||
 | 
					    resp2["revision"].should.equal(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp2["jobDefinitionArn"].should_not.equal(resp1["jobDefinitionArn"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp3 = register_job_def(batch_client)
 | 
				
			||||||
 | 
					    resp3["revision"].should.equal(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp3["jobDefinitionArn"].should_not.equal(resp1["jobDefinitionArn"])
 | 
				
			||||||
 | 
					    resp3["jobDefinitionArn"].should_not.equal(resp2["jobDefinitionArn"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp4 = register_job_def(batch_client)
 | 
				
			||||||
 | 
					    resp4["revision"].should.equal(4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp4["jobDefinitionArn"].should_not.equal(resp1["jobDefinitionArn"])
 | 
				
			||||||
 | 
					    resp4["jobDefinitionArn"].should_not.equal(resp2["jobDefinitionArn"])
 | 
				
			||||||
 | 
					    resp4["jobDefinitionArn"].should_not.equal(resp3["jobDefinitionArn"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_delete_task_definition():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = register_job_def(batch_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    batch_client.deregister_job_definition(jobDefinition=resp["jobDefinitionArn"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_definitions()
 | 
				
			||||||
 | 
					    len(resp["jobDefinitions"]).should.equal(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_ec2
 | 
				
			||||||
 | 
					@mock_ecs
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					@mock_batch
 | 
				
			||||||
 | 
					def test_describe_task_definition():
 | 
				
			||||||
 | 
					    ec2_client, iam_client, ecs_client, logs_client, batch_client = _get_clients()
 | 
				
			||||||
 | 
					    _setup(ec2_client, iam_client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    register_job_def(batch_client, definition_name="sleep10")
 | 
				
			||||||
 | 
					    register_job_def(batch_client, definition_name="sleep10")
 | 
				
			||||||
 | 
					    register_job_def(batch_client, definition_name="test1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_definitions(jobDefinitionName="sleep10")
 | 
				
			||||||
 | 
					    len(resp["jobDefinitions"]).should.equal(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_definitions()
 | 
				
			||||||
 | 
					    len(resp["jobDefinitions"]).should.equal(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resp = batch_client.describe_job_definitions(jobDefinitions=["sleep10", "test1"])
 | 
				
			||||||
 | 
					    len(resp["jobDefinitions"]).should.equal(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for job_definition in resp["jobDefinitions"]:
 | 
				
			||||||
 | 
					        job_definition["status"].should.equal("ACTIVE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def register_job_def(batch_client, definition_name="sleep10"):
 | 
				
			||||||
 | 
					    return batch_client.register_job_definition(
 | 
				
			||||||
 | 
					        jobDefinitionName=definition_name,
 | 
				
			||||||
 | 
					        type="container",
 | 
				
			||||||
 | 
					        containerProperties={
 | 
				
			||||||
 | 
					            "image": "busybox",
 | 
				
			||||||
 | 
					            "vcpus": 1,
 | 
				
			||||||
 | 
					            "memory": random.randint(4, 128),
 | 
				
			||||||
 | 
					            "command": ["sleep", "10"],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user