169 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			169 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import boto3 | ||
|  | 
 | ||
|  | from moto import mock_ec2 | ||
|  | from uuid import uuid4 | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_allocate_hosts(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     resp = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", | ||
|  |         InstanceType="a1.small", | ||
|  |         HostRecovery="off", | ||
|  |         AutoPlacement="on", | ||
|  |         Quantity=3, | ||
|  |     ) | ||
|  |     resp["HostIds"].should.have.length_of(3) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_describe_hosts_with_instancefamily(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     host_ids = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", InstanceFamily="c5", Quantity=1 | ||
|  |     )["HostIds"] | ||
|  | 
 | ||
|  |     host = client.describe_hosts(HostIds=host_ids)["Hosts"][0] | ||
|  | 
 | ||
|  |     host.should.have.key("HostProperties").should.have.key("InstanceFamily").equals( | ||
|  |         "c5" | ||
|  |     ) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_describe_hosts(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     host_ids = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1c", | ||
|  |         InstanceType="a1.large", | ||
|  |         HostRecovery="on", | ||
|  |         AutoPlacement="off", | ||
|  |         Quantity=2, | ||
|  |     )["HostIds"] | ||
|  | 
 | ||
|  |     hosts = client.describe_hosts(HostIds=host_ids)["Hosts"] | ||
|  |     hosts.should.have.length_of(2) | ||
|  | 
 | ||
|  |     hosts[0].should.have.key("State").equals("available") | ||
|  |     hosts[0].should.have.key("AvailabilityZone").equals("us-west-1c") | ||
|  |     hosts[0].should.have.key("HostRecovery").equals("on") | ||
|  |     hosts[0].should.have.key("HostProperties").should.have.key("InstanceType").equals( | ||
|  |         "a1.large" | ||
|  |     ) | ||
|  |     hosts[0].should.have.key("AutoPlacement").equals("off") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_describe_hosts_with_tags(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     tagkey = str(uuid4()) | ||
|  |     host_ids = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1b", | ||
|  |         InstanceType="b1.large", | ||
|  |         Quantity=1, | ||
|  |         TagSpecifications=[ | ||
|  |             {"ResourceType": "dedicated-host", "Tags": [{"Key": tagkey, "Value": "v1"}]} | ||
|  |         ], | ||
|  |     )["HostIds"] | ||
|  | 
 | ||
|  |     host = client.describe_hosts(HostIds=host_ids)["Hosts"][0] | ||
|  |     host.should.have.key("Tags").equals([{"Key": tagkey, "Value": "v1"}]) | ||
|  | 
 | ||
|  |     client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", InstanceType="b1.large", Quantity=1 | ||
|  |     ) | ||
|  |     hosts = client.describe_hosts(Filters=[{"Name": "tag-key", "Values": [tagkey]}])[ | ||
|  |         "Hosts" | ||
|  |     ] | ||
|  |     hosts.should.have.length_of(1) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_describe_hosts_using_filters(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     host_id1 = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", InstanceType="b1.large", Quantity=1 | ||
|  |     )["HostIds"][0] | ||
|  |     host_id2 = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1b", InstanceType="b1.large", Quantity=1 | ||
|  |     )["HostIds"][0] | ||
|  | 
 | ||
|  |     hosts = client.describe_hosts( | ||
|  |         Filters=[{"Name": "availability-zone", "Values": ["us-west-1b"]}] | ||
|  |     )["Hosts"] | ||
|  |     [h["HostId"] for h in hosts].should.contain(host_id2) | ||
|  | 
 | ||
|  |     hosts = client.describe_hosts( | ||
|  |         Filters=[{"Name": "availability-zone", "Values": ["us-west-1d"]}] | ||
|  |     )["Hosts"] | ||
|  |     hosts.should.have.length_of(0) | ||
|  | 
 | ||
|  |     client.release_hosts(HostIds=[host_id1]) | ||
|  |     hosts = client.describe_hosts(Filters=[{"Name": "state", "Values": ["released"]}])[ | ||
|  |         "Hosts" | ||
|  |     ] | ||
|  |     [h["HostId"] for h in hosts].should.contain(host_id1) | ||
|  | 
 | ||
|  |     hosts = client.describe_hosts( | ||
|  |         Filters=[{"Name": "state", "Values": ["under-assessment"]}] | ||
|  |     )["Hosts"] | ||
|  |     hosts.should.have.length_of(0) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_modify_hosts(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     host_ids = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", InstanceFamily="c5", Quantity=1 | ||
|  |     )["HostIds"] | ||
|  | 
 | ||
|  |     client.modify_hosts( | ||
|  |         HostIds=host_ids, | ||
|  |         AutoPlacement="off", | ||
|  |         HostRecovery="on", | ||
|  |         InstanceType="c5.medium", | ||
|  |     ) | ||
|  | 
 | ||
|  |     host = client.describe_hosts(HostIds=host_ids)["Hosts"][0] | ||
|  | 
 | ||
|  |     host.should.have.key("AutoPlacement").equals("off") | ||
|  |     host.should.have.key("HostRecovery").equals("on") | ||
|  |     host.should.have.key("HostProperties").shouldnt.have.key("InstanceFamily") | ||
|  |     host.should.have.key("HostProperties").should.have.key("InstanceType").equals( | ||
|  |         "c5.medium" | ||
|  |     ) | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_release_hosts(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     host_ids = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", | ||
|  |         InstanceType="a1.small", | ||
|  |         HostRecovery="off", | ||
|  |         AutoPlacement="on", | ||
|  |         Quantity=2, | ||
|  |     )["HostIds"] | ||
|  | 
 | ||
|  |     resp = client.release_hosts(HostIds=[host_ids[0]]) | ||
|  |     resp.should.have.key("Successful").equals([host_ids[0]]) | ||
|  | 
 | ||
|  |     host = client.describe_hosts(HostIds=[host_ids[0]])["Hosts"][0] | ||
|  | 
 | ||
|  |     host.should.have.key("State").equals("released") | ||
|  | 
 | ||
|  | 
 | ||
|  | @mock_ec2 | ||
|  | def test_add_tags_to_dedicated_hosts(): | ||
|  |     client = boto3.client("ec2", "us-west-1") | ||
|  |     resp = client.allocate_hosts( | ||
|  |         AvailabilityZone="us-west-1a", InstanceType="a1.small", Quantity=1 | ||
|  |     ) | ||
|  |     host_id = resp["HostIds"][0] | ||
|  | 
 | ||
|  |     client.create_tags(Resources=[host_id], Tags=[{"Key": "k1", "Value": "v1"}]) | ||
|  | 
 | ||
|  |     host = client.describe_hosts(HostIds=[host_id])["Hosts"][0] | ||
|  |     host.should.have.key("Tags").equals([{"Key": "k1", "Value": "v1"}]) |