2020-11-10 18:14:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  random  
						 
					
						
							
								
									
										
										
										
											2014-08-25 15:09:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 18:14:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  boto3  
						 
					
						
							
								
									
										
										
										
											2013-02-21 23:13:01 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 18:14:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  pytest  
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  sure   # noqa # pylint: disable=unused-import  
						 
					
						
							
								
									
										
										
										
											2021-01-31 04:21:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  botocore . exceptions  import  ClientError  
						 
					
						
							
								
									
										
										
										
											2022-01-18 14:18:57 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  moto  import  mock_ec2 ,  settings  
						 
					
						
							
								
									
										
										
										
											2021-01-13 09:02:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  tests  import  EXAMPLE_AMI_ID  
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  uuid  import  uuid4  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  unittest  import  SkipTest  
						 
					
						
							
								
									
										
										
										
											2013-02-21 23:13:01 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_subnets ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/18 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ours  =  client . describe_subnets ( SubnetIds = [ subnet . id ] ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ours . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . delete_subnet ( SubnetId = subnet . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        client . describe_subnets ( SubnetIds = [ subnet . id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    err  =  ex . value . response [ " Error " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    err [ " Code " ] . should . equal ( " InvalidSubnetID.NotFound " ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        client . delete_subnet ( SubnetId = subnet . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] [ " HTTPStatusCode " ] . should . equal ( 400 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] . should . have . key ( " RequestId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " Error " ] [ " Code " ] . should . equal ( " InvalidSubnetID.NotFound " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_subnet_create_vpc_validation ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ec2 . create_subnet ( VpcId = " vpc-abcd1234 " ,  CidrBlock = " 10.0.0.0/18 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] [ " HTTPStatusCode " ] . should . equal ( 400 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] . should . have . key ( " RequestId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " Error " ] [ " Code " ] . should . equal ( " InvalidVpcID.NotFound " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_subnet_tagging ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/18 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . create_tags ( Tags = [ { " Key " :  " a key " ,  " Value " :  " some value " } ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    tag  =  client . describe_tags ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " resource-id " ,  " Values " :  [ subnet . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Tags " ] [ 0 ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    tag [ " Key " ] . should . equal ( " a key " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    tag [ " Value " ] . should . equal ( " some value " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Refresh the subnet 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  client . describe_subnets ( SubnetIds = [ subnet . id ] ) [ " Subnets " ] [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet [ " Tags " ] . should . equal ( [ { " Key " :  " a key " ,  " Value " :  " some value " } ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_subnet_should_have_proper_availability_zone_set ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpcA  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetA  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpcA . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1b " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetA . availability_zone . should . equal ( " us-west-1b " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-27 21:01:39 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_availability_zone_in_create_subnet ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 172.31.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 172.31.48.0/20 " ,  AvailabilityZoneId = " use1-az6 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . availability_zone_id . should . equal ( " use1-az6 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_default_subnet ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  settings . TEST_SERVER_MODE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        raise  SkipTest ( " ServerMode will have conflicting CidrBlocks " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-11 17:37:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    default_vpc  =  list ( ec2 . vpcs . all ( ) ) [ 0 ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    default_vpc . cidr_block . should . equal ( " 172.31.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    default_vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    default_vpc . is_default . should . equal ( True ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 21:37:43 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = default_vpc . id ,  CidrBlock = " 172.31.48.0/20 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . map_public_ip_on_launch . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-11 17:37:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_non_default_subnet ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Create the non default VPC 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . is_default . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 21:37:43 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . map_public_ip_on_launch . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_modify_subnet_attribute_public_ip_on_launch ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    random_ip  =  " . " . join ( map ( str ,  ( random . randint ( 0 ,  99 )  for  _  in  range ( 4 ) ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = f " { random_ip } /16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    random_subnet_cidr  =  f " { random_ip } /20 "   # Same block as the VPC 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 21:37:43 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = random_subnet_cidr ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-12 22:36:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # 'map_public_ip_on_launch' is set when calling 'DescribeSubnets' action 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # For non default subnet, attribute value should be 'False' 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . map_public_ip_on_launch . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 21:37:43 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    client . modify_subnet_attribute ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        SubnetId = subnet . id ,  MapPublicIpOnLaunch = { " Value " :  False } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . map_public_ip_on_launch . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 21:37:43 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    client . modify_subnet_attribute ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        SubnetId = subnet . id ,  MapPublicIpOnLaunch = { " Value " :  True } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-11 17:37:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . map_public_ip_on_launch . should . equal ( True ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-11 17:37:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_modify_subnet_attribute_assign_ipv6_address_on_creation ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    random_ip  =  " . " . join ( map ( str ,  ( random . randint ( 0 ,  99 )  for  _  in  range ( 4 ) ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = f " { random_ip } /16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    random_subnet_cidr  =  f " { random_ip } /20 "   # Same block as the VPC 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = random_subnet_cidr ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # 'map_public_ip_on_launch' is set when calling 'DescribeSubnets' action 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    client . describe_subnets ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # For non default subnet, attribute value should be 'False' 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . assign_ipv6_address_on_creation . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . modify_subnet_attribute ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        SubnetId = subnet . id ,  AssignIpv6AddressOnCreation = { " Value " :  False } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . assign_ipv6_address_on_creation . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . modify_subnet_attribute ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        SubnetId = subnet . id ,  AssignIpv6AddressOnCreation = { " Value " :  True } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . assign_ipv6_address_on_creation . should . equal ( True ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_modify_subnet_attribute_validation ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # TODO: implement some actual logic 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-05 00:17:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-11 17:37:57 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_subnet_get_by_id ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpcA  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetA  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpcA . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpcB  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetB1  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpcB . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpcB . id ,  CidrBlock = " 10.0.1.0/24 " ,  AvailabilityZone = " us-west-1b " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_id  =  client . describe_subnets ( SubnetIds = [ subnetA . id ,  subnetB1 . id ] ) [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " Subnets " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_id . should . have . length_of ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_id  =  tuple ( map ( lambda  s :  s [ " SubnetId " ] ,  subnets_by_id ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetA . id . should . be . within ( subnets_by_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetB1 . id . should . be . within ( subnets_by_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        client . describe_subnets ( SubnetIds = [ " subnet-does_not_exist " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] [ " HTTPStatusCode " ] . should . equal ( 400 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] . should . have . key ( " RequestId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " Error " ] [ " Code " ] . should . equal ( " InvalidSubnetID.NotFound " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  test_get_subnets_filtering ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpcA  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetA  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpcA . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpcB  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetB1  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpcB . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnetB2  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpcB . id ,  CidrBlock = " 10.0.1.0/24 " ,  AvailabilityZone = " us-west-1b " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    nr_of_a_zones  =  len ( client . describe_availability_zones ( ) [ " AvailabilityZones " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    all_subnets  =  client . describe_subnets ( ) [ " Subnets " ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  settings . TEST_SERVER_MODE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # ServerMode may have other tests running that are creating subnets 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        all_subnet_ids  =  [ s [ " SubnetId " ]  for  s  in  all_subnets ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        all_subnet_ids . should . contain ( subnetA . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        all_subnet_ids . should . contain ( subnetB1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        all_subnet_ids . should . contain ( subnetB2 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        all_subnets . should . have . length_of ( 3  +  nr_of_a_zones ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Filter by VPC ID 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_vpc  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " vpc-id " ,  " Values " :  [ vpcB . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_vpc . should . have . length_of ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set ( [ subnet [ " SubnetId " ]  for  subnet  in  subnets_by_vpc ] ) . should . equal ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        set ( [ subnetB1 . id ,  subnetB2 . id ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Filter by CIDR variations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr1  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " cidr " ,  " Values " :  [ " 10.0.0.0/24 " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnets_by_cidr1  =  [ s [ " SubnetId " ]  for  s  in  subnets_by_cidr1 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr1 . should . contain ( subnetA . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr1 . should . contain ( subnetB1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr1 . shouldnt . contain ( subnetB2 . id ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr2  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " cidr-block " ,  " Values " :  [ " 10.0.0.0/24 " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnets_by_cidr2  =  [ s [ " SubnetId " ]  for  s  in  subnets_by_cidr2 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr2 . should . contain ( subnetA . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr2 . should . contain ( subnetB1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr2 . shouldnt . contain ( subnetB2 . id ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr3  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " cidrBlock " ,  " Values " :  [ " 10.0.0.0/24 " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnets_by_cidr3  =  [ s [ " SubnetId " ]  for  s  in  subnets_by_cidr3 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr3 . should . contain ( subnetA . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr3 . should . contain ( subnetB1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_cidr3 . shouldnt . contain ( subnetB2 . id ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Filter by VPC ID and CIDR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_vpc_and_cidr  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { " Name " :  " vpc-id " ,  " Values " :  [ vpcB . id ] } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { " Name " :  " cidr " ,  " Values " :  [ " 10.0.0.0/24 " ] } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_vpc_and_cidr . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_vpc_and_cidr [ 0 ] [ " SubnetId " ] . should . equal ( subnetB1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Filter by subnet ID 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_id  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " subnet-id " ,  " Values " :  [ subnetA . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_id . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_id [ 0 ] [ " SubnetId " ] . should . equal ( subnetA . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Filter by availabilityZone 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_az  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            { " Name " :  " availabilityZone " ,  " Values " :  [ " us-west-1a " ] } , 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            { " Name " :  " vpc-id " ,  " Values " :  [ vpcB . id ] } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_az . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets_by_az [ 0 ] [ " SubnetId " ] . should . equal ( subnetB1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  settings . TEST_SERVER_MODE : 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Filter by defaultForAz 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnets_by_az  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Filters = [ { " Name " :  " defaultForAz " ,  " Values " :  [ " true " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnets_by_az . should . have . length_of ( nr_of_a_zones ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Unsupported filter 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-25 11:13:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        filters  =  [ { " Name " :  " not-implemented-filter " ,  " Values " :  [ " foobar " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        client . describe_subnets . when . called_with ( Filters = filters ) . should . throw ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            NotImplementedError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnet_response_fields ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet  =  client . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) [ " Subnet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AvailabilityZone " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AvailabilityZoneId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AvailableIpAddressCount " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " CidrBlock " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " State " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " SubnetId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " VpcId " ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-27 13:54:17 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " Tags " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " DefaultForAz " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " MapPublicIpOnLaunch " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " OwnerId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AssignIpv6AddressOnCreation " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 18:51:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " Ipv6Native " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_arn  =  f " arn:aws:ec2: { subnet [ ' AvailabilityZone ' ] [ 0 : - 1 ] } : { subnet [ ' OwnerId ' ] } :subnet/ { subnet [ ' SubnetId ' ] } " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " SubnetArn " ) . which . should . equal ( subnet_arn ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " Ipv6CidrBlockAssociationSet " ) . which . should . equal ( [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_describe_subnet_response_fields ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_object  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( SubnetIds = [ subnet_object . id ] ) [ " Subnets " ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnets . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  subnets [ 0 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AvailabilityZone " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AvailabilityZoneId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AvailableIpAddressCount " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " CidrBlock " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " State " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " SubnetId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " VpcId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . shouldnt . have . key ( " Tags " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " DefaultForAz " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " MapPublicIpOnLaunch " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " OwnerId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " AssignIpv6AddressOnCreation " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-13 18:51:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " Ipv6Native " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_arn  =  f " arn:aws:ec2: { subnet [ ' AvailabilityZone ' ] [ 0 : - 1 ] } : { subnet [ ' OwnerId ' ] } :subnet/ { subnet [ ' SubnetId ' ] } " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet . should . have . key ( " SubnetArn " ) . which . should . equal ( subnet_arn ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet . should . have . key ( " Ipv6CidrBlockAssociationSet " ) . which . should . equal ( [ ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnet_with_invalid_availability_zone ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_availability_zone  =  " asfasfas " 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 07:54:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        client . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            VpcId = vpc . id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            CidrBlock = " 10.0.0.0/24 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            AvailabilityZone = subnet_availability_zone , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 08:04:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert  str ( ex . value ) . startswith ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " An error occurred (InvalidParameterValue) when calling the CreateSubnet  " 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        f " operation: Value ( { subnet_availability_zone } ) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones:  " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-28 17:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnet_with_invalid_cidr_range ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . is_default . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_cidr_block  =  " 10.1.0.0/20 " 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 07:54:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = subnet_cidr_block ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 08:04:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    str ( ex . value ) . should . equal ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " An error occurred (InvalidSubnet.Range) when calling the CreateSubnet  " 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        f " operation: The CIDR  ' { subnet_cidr_block } '  is invalid. " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-16 11:02:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnet_with_invalid_cidr_range_multiple_vpc_cidr_blocks ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2 . meta . client . associate_vpc_cidr_block ( CidrBlock = " 10.1.0.0/16 " ,  VpcId = vpc . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . is_default . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-16 11:02:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_cidr_block  =  " 10.2.0.0/20 " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-10 18:14:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = subnet_cidr_block ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-11 15:54:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    str ( ex . value ) . should . equal ( 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-16 11:02:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " An error occurred (InvalidSubnet.Range) when calling the CreateSubnet  " 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        f " operation: The CIDR  ' { subnet_cidr_block } '  is invalid. " 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-16 11:02:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnet_with_invalid_cidr_block_parameter ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . is_default . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_cidr_block  =  " 1000.1.0.0/20 " 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 07:54:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = subnet_cidr_block ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 08:04:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    str ( ex . value ) . should . equal ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " An error occurred (InvalidParameterValue) when calling the CreateSubnet  " 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        f " operation: Value ( { subnet_cidr_block } ) for parameter cidrBlock is invalid. This is not a valid CIDR block. " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-16 11:02:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnets_with_multiple_vpc_cidr_blocks ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2 . meta . client . associate_vpc_cidr_block ( CidrBlock = " 10.1.0.0/16 " ,  VpcId = vpc . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . is_default . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-16 11:02:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_cidr_block_primary  =  " 10.0.0.0/24 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_primary  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = subnet_cidr_block_primary 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_cidr_block_secondary  =  " 10.1.0.0/24 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_secondary  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = subnet_cidr_block_secondary 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        SubnetIds = [ subnet_primary . id ,  subnet_secondary . id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets . should . have . length_of ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  subnet  in  subnets : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " AvailabilityZone " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " AvailabilityZoneId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " AvailableIpAddressCount " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " CidrBlock " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " State " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " SubnetId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " VpcId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . shouldnt . have . key ( " Tags " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " DefaultForAz " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " MapPublicIpOnLaunch " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " OwnerId " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet . should . have . key ( " AssignIpv6AddressOnCreation " ) . which . should . equal ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnets_with_overlapping_cidr_blocks ( ) :  
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . reload ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-18 20:44:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    vpc . is_default . should . equal ( False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet_cidr_block  =  " 10.0.0.0/24 " 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 07:54:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = subnet_cidr_block ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ec2 . create_subnet ( VpcId = vpc . id ,  CidrBlock = subnet_cidr_block ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-06 08:04:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    str ( ex . value ) . should . equal ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-25 19:35:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " An error occurred (InvalidSubnet.Conflict) when calling the CreateSubnet  " 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-17 21:41:08 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        f " operation: The CIDR  ' { subnet_cidr_block } '  conflicts with another subnet " 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-31 08:44:26 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-27 13:54:17 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_create_subnet_with_tags ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 172.31.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    random_ip  =  " 172.31. "  +  " . " . join ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        map ( str ,  ( random . randint ( 10 ,  40 )  for  _  in  range ( 2 ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    random_cidr  =  f " { random_ip } /20 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-27 13:54:17 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnet  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpc . id , 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        CidrBlock = random_cidr , 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-27 13:54:17 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        AvailabilityZoneId = " use1-az6 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        TagSpecifications = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { " ResourceType " :  " subnet " ,  " Tags " :  [ { " Key " :  " name " ,  " Value " :  " some-vpc " } ] } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  subnet . tags  ==  [ { " Key " :  " name " ,  " Value " :  " some-vpc " } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_available_ip_addresses_in_subnet ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  settings . TEST_SERVER_MODE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        raise  SkipTest ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " ServerMode is not guaranteed to be empty - other subnets will affect the count " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cidr_range_addresses  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/16 " ,  65531 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/17 " ,  32763 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/18 " ,  16379 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/19 " ,  8187 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/20 " ,  4091 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/21 " ,  2043 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/22 " ,  1019 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/23 " ,  507 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/24 " ,  251 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/25 " ,  123 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/26 " ,  59 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/27 " ,  27 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/28 " ,  11 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( cidr ,  expected_count )  in  cidr_range_addresses : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        validate_subnet_details ( client ,  vpc ,  cidr ,  expected_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_available_ip_addresses_in_subnet_with_enis ( ) :  
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  settings . TEST_SERVER_MODE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        raise  SkipTest ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " ServerMode is not guaranteed to be empty - other ENI ' s will affect the count " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Verify behaviour for various CIDR ranges (...) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Don't try to assign ENIs to /27 and /28, as there are not a lot of IP addresses to go around 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cidr_range_addresses  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/16 " ,  65531 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/17 " ,  32763 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/18 " ,  16379 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/19 " ,  8187 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/20 " ,  4091 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/21 " ,  2043 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/22 " ,  1019 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/23 " ,  507 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/24 " ,  251 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/25 " ,  123 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( " 10.0.0.0/26 " ,  59 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( cidr ,  expected_count )  in  cidr_range_addresses : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        validate_subnet_details_after_creating_eni ( client ,  vpc ,  cidr ,  expected_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  validate_subnet_details ( client ,  vpc ,  cidr ,  expected_ip_address_count ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  client . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = cidr ,  AvailabilityZone = " us-west-1b " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet [ " AvailableIpAddressCount " ] . should . equal ( expected_ip_address_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . delete_subnet ( SubnetId = subnet [ " SubnetId " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  validate_subnet_details_after_creating_eni (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client ,  vpc ,  cidr ,  expected_ip_address_count 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet  =  client . create_subnet ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = cidr ,  AvailabilityZone = " us-west-1b " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Create a random number of Elastic Network Interfaces 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    nr_of_eni_to_create  =  random . randint ( 0 ,  5 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ip_addresses_assigned  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    enis_created  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-18 19:44:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  _  in  range ( 0 ,  nr_of_eni_to_create ) : 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Create a random number of IP addresses per ENI 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        nr_of_ip_addresses  =  random . randint ( 1 ,  5 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  nr_of_ip_addresses  ==  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # Pick the first available IP address (First 4 are reserved by AWS) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            private_address  =  " 10.0.0. "  +  str ( ip_addresses_assigned  +  4 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            eni  =  client . create_network_interface ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                SubnetId = subnet [ " SubnetId " ] ,  PrivateIpAddress = private_address 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) [ " NetworkInterface " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            enis_created . append ( eni ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ip_addresses_assigned  =  ip_addresses_assigned  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            # Assign a list of IP addresses 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            private_addresses  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " 10.0.0. "  +  str ( 4  +  ip_addresses_assigned  +  i ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  i  in  range ( 0 ,  nr_of_ip_addresses ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            eni  =  client . create_network_interface ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                SubnetId = subnet [ " SubnetId " ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                PrivateIpAddresses = [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    { " PrivateIpAddress " :  address }  for  address  in  private_addresses 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ) [ " NetworkInterface " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            enis_created . append ( eni ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-17 02:37:18 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ip_addresses_assigned  =  ip_addresses_assigned  +  nr_of_ip_addresses   # 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Verify that the nr of available IP addresses takes these ENIs into account 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    updated_subnet  =  client . describe_subnets ( SubnetIds = [ subnet [ " SubnetId " ] ] ) [ " Subnets " ] [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-17 02:37:18 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    private_addresses  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-08 16:40:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  eni  in  enis_created : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        private_addresses . extend ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            [ address [ " PrivateIpAddress " ]  for  address  in  eni [ " PrivateIpAddresses " ] ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    error_msg  =  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " Nr of IP addresses for Subnet with CIDR  {0}  is incorrect. Expected:  {1} , Actual:  {2} .  " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " Addresses:  {3} " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    with  sure . ensure ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        error_msg , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cidr , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        str ( expected_ip_address_count ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        updated_subnet [ " AvailableIpAddressCount " ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        str ( private_addresses ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        updated_subnet [ " AvailableIpAddressCount " ] . should . equal ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expected_ip_address_count  -  ip_addresses_assigned 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Clean up, as we have to create a few more subnets that shouldn't interfere with each other 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  eni  in  enis_created : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        client . delete_network_interface ( NetworkInterfaceId = eni [ " NetworkInterfaceId " ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . delete_subnet ( SubnetId = subnet [ " SubnetId " ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 13:53:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_run_instances_should_attach_to_default_subnet ( ) :  
						 
					
						
							
								
									
										
										
										
											2023-01-07 11:35:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # https://github.com/getmoto/moto/issues/2877 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " sa-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " sa-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sec_group_name  =  str ( uuid4 ( ) ) [ 0 : 6 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2 . create_security_group ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        GroupName = sec_group_name ,  Description = " Test security group sg01 " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 13:53:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # run_instances 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-13 09:02:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    instances  =  client . run_instances ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-10 13:39:59 -01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ImageId = EXAMPLE_AMI_ID ,  MinCount = 1 ,  MaxCount = 1 ,  SecurityGroups = [ sec_group_name ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-13 09:02:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 14:02:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Assert subnet is created appropriately 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " defaultForAz " ,  " Values " :  [ " true " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Subnets " ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 14:02:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    default_subnet_id  =  subnets [ 0 ] [ " SubnetId " ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-27 21:01:39 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  len ( subnets )  >  1 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        default_subnet_id1  =  subnets [ 1 ] [ " SubnetId " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        instances [ " Instances " ] [ 0 ] [ " NetworkInterfaces " ] [ 0 ] [ " SubnetId " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ==  default_subnet_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        or  instances [ " Instances " ] [ 0 ] [ " NetworkInterfaces " ] [ 0 ] [ " SubnetId " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ==  default_subnet_id1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-05 17:11:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  settings . TEST_SERVER_MODE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # Available IP addresses will depend on other resources that might be created in parallel 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        assert  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            subnets [ 0 ] [ " AvailableIpAddressCount " ]  ==  4090 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            or  subnets [ 1 ] [ " AvailableIpAddressCount " ]  ==  4090 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-16 00:17:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_describe_subnets_by_vpc_id ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc1  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet1  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc1 . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-16 00:17:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc2  =  ec2 . create_vpc ( CidrBlock = " 172.31.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet2  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc2 . id ,  CidrBlock = " 172.31.48.0/20 " ,  AvailabilityZone = " us-west-1b " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-16 00:17:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " vpc-id " ,  " Values " :  [ vpc1 . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) . get ( " Subnets " ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets [ 0 ] [ " SubnetId " ] . should . equal ( subnet1 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " vpc-id " ,  " Values " :  [ vpc2 . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) . get ( " Subnets " ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets [ 0 ] [ " SubnetId " ] . should . equal ( subnet2 . id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Specify multiple VPCs in Filter. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " vpc-id " ,  " Values " :  [ vpc1 . id ,  vpc2 . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) . get ( " Subnets " ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets . should . have . length_of ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Specify mismatched SubnetIds/Filters. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        SubnetIds = [ subnet1 . id ] ,  Filters = [ { " Name " :  " vpc-id " ,  " Values " :  [ vpc2 . id ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) . get ( " Subnets " ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets . should . have . length_of ( 0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_describe_subnets_by_state ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-16 00:17:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Filters = [ { " Name " :  " state " ,  " Values " :  [ " available " ] } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) . get ( " Subnets " ,  [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  subnet  in  subnets : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        subnet [ " State " ] . should . equal ( " available " ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 21:07:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_associate_subnet_cidr_block ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_object  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 21:07:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( SubnetIds = [ subnet_object . id ] ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set  =  subnets [ 0 ] [ " Ipv6CidrBlockAssociationSet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set . should . equal ( [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res  =  client . associate_subnet_cidr_block ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Ipv6CidrBlock = " 1080::1:200C:417A/112 " ,  SubnetId = subnet_object . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . should . have . key ( " Ipv6CidrBlockAssociation " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association  =  res [ " Ipv6CidrBlockAssociation " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association . should . have . key ( " AssociationId " ) . match ( " subnet-cidr-assoc-[a-z0-9]+ " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association . should . have . key ( " Ipv6CidrBlock " ) . equals ( " 1080::1:200C:417A/112 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association . should . have . key ( " Ipv6CidrBlockState " ) . equals ( { " State " :  " associated " } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( SubnetIds = [ subnet_object . id ] ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set  =  subnets [ 0 ] [ " Ipv6CidrBlockAssociationSet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set [ 0 ] . should . have . key ( " AssociationId " ) . equal ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        association [ " AssociationId " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set [ 0 ] . should . have . key ( " Ipv6CidrBlock " ) . equals ( " 1080::1:200C:417A/112 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_disassociate_subnet_cidr_block ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ec2  =  boto3 . resource ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-west-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vpc  =  ec2 . create_vpc ( CidrBlock = " 10.0.0.0/16 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnet_object  =  ec2 . create_subnet ( 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-02 13:03:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        VpcId = vpc . id ,  CidrBlock = " 10.0.0.0/24 " ,  AvailabilityZone = " us-west-1a " 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-15 21:07:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . associate_subnet_cidr_block ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Ipv6CidrBlock = " 1080::1:200C:417A/111 " ,  SubnetId = subnet_object . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_id  =  client . associate_subnet_cidr_block ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Ipv6CidrBlock = " 1080::1:200C:417A/999 " ,  SubnetId = subnet_object . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ) [ " Ipv6CidrBlockAssociation " ] [ " AssociationId " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( SubnetIds = [ subnet_object . id ] ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set  =  subnets [ 0 ] [ " Ipv6CidrBlockAssociationSet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set . should . have . length_of ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client . disassociate_subnet_cidr_block ( AssociationId = association_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subnets  =  client . describe_subnets ( SubnetIds = [ subnet_object . id ] ) [ " Subnets " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set  =  subnets [ 0 ] [ " Ipv6CidrBlockAssociationSet " ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set . should . have . length_of ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    association_set [ 0 ] [ " Ipv6CidrBlock " ] . should . equal ( " 1080::1:200C:417A/111 " ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-15 22:43:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@mock_ec2  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  test_describe_subnets_dryrun ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    client  =  boto3 . client ( " ec2 " ,  region_name = " us-east-1 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    with  pytest . raises ( ClientError )  as  ex : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        client . describe_subnets ( DryRun = True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " ResponseMetadata " ] [ " HTTPStatusCode " ] . should . equal ( 412 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " Error " ] [ " Code " ] . should . equal ( " DryRunOperation " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex . value . response [ " Error " ] [ " Message " ] . should . equal ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " An error occurred (DryRunOperation) when calling the DescribeSubnets operation: Request would have succeeded, but DryRun flag is set " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    )