109 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import unittest
 | |
| from uuid import uuid4
 | |
| 
 | |
| import boto3
 | |
| 
 | |
| from moto import mock_autoscaling, mock_elbv2
 | |
| from tests import EXAMPLE_AMI_ID
 | |
| 
 | |
| from .utils import setup_networking
 | |
| 
 | |
| 
 | |
| @mock_elbv2
 | |
| @mock_autoscaling
 | |
| class TestAutoscalignELBv2(unittest.TestCase):
 | |
|     def setUp(self) -> None:
 | |
|         self.mocked_networking = setup_networking()
 | |
|         self.instance_count = 2
 | |
|         self.as_client = boto3.client("autoscaling", region_name="us-east-1")
 | |
|         self.elbv2_client = boto3.client("elbv2", region_name="us-east-1")
 | |
| 
 | |
|         self.target_name = str(uuid4())[0:6]
 | |
|         self.lc_name = str(uuid4())[0:6]
 | |
|         self.asg_name = str(uuid4())[0:6]
 | |
|         response = self.elbv2_client.create_target_group(
 | |
|             Name=self.target_name,
 | |
|             Protocol="HTTP",
 | |
|             Port=8080,
 | |
|             VpcId=self.mocked_networking["vpc"],
 | |
|             HealthCheckProtocol="HTTP",
 | |
|             HealthCheckPort="8080",
 | |
|             HealthCheckPath="/",
 | |
|             HealthCheckIntervalSeconds=5,
 | |
|             HealthCheckTimeoutSeconds=3,
 | |
|             HealthyThresholdCount=5,
 | |
|             UnhealthyThresholdCount=2,
 | |
|             Matcher={"HttpCode": "200"},
 | |
|         )
 | |
|         self.target_group_arn = response["TargetGroups"][0]["TargetGroupArn"]
 | |
| 
 | |
|         self.as_client.create_launch_configuration(
 | |
|             LaunchConfigurationName=self.lc_name,
 | |
|             ImageId=EXAMPLE_AMI_ID,
 | |
|             InstanceType="t2.medium",
 | |
|         )
 | |
|         self.as_client.create_auto_scaling_group(
 | |
|             AutoScalingGroupName=self.asg_name,
 | |
|             LaunchConfigurationName=self.lc_name,
 | |
|             MinSize=0,
 | |
|             MaxSize=self.instance_count,
 | |
|             DesiredCapacity=self.instance_count,
 | |
|             TargetGroupARNs=[self.target_group_arn],
 | |
|             VPCZoneIdentifier=self.mocked_networking["subnet1"],
 | |
|         )
 | |
| 
 | |
|         response = self.as_client.describe_load_balancer_target_groups(
 | |
|             AutoScalingGroupName=self.asg_name
 | |
|         )
 | |
|         assert len(list(response["LoadBalancerTargetGroups"])) == 1
 | |
| 
 | |
|         response = self.elbv2_client.describe_target_health(
 | |
|             TargetGroupArn=self.target_group_arn
 | |
|         )
 | |
|         assert len(list(response["TargetHealthDescriptions"])) == self.instance_count
 | |
| 
 | |
|     def test_attach_detach_target_groups(self):
 | |
|         # create asg without attaching to target group
 | |
|         asg_name2 = str(uuid4())
 | |
|         self.as_client.create_auto_scaling_group(
 | |
|             AutoScalingGroupName=asg_name2,
 | |
|             LaunchConfigurationName=self.lc_name,
 | |
|             MinSize=0,
 | |
|             MaxSize=self.instance_count,
 | |
|             DesiredCapacity=self.instance_count,
 | |
|             VPCZoneIdentifier=self.mocked_networking["subnet2"],
 | |
|         )
 | |
| 
 | |
|         self.as_client.attach_load_balancer_target_groups(
 | |
|             AutoScalingGroupName=asg_name2, TargetGroupARNs=[self.target_group_arn]
 | |
|         )
 | |
| 
 | |
|         response = self.elbv2_client.describe_target_health(
 | |
|             TargetGroupArn=self.target_group_arn
 | |
|         )
 | |
|         assert (
 | |
|             len(list(response["TargetHealthDescriptions"])) == self.instance_count * 2
 | |
|         )
 | |
| 
 | |
|         response = self.as_client.detach_load_balancer_target_groups(
 | |
|             AutoScalingGroupName=asg_name2, TargetGroupARNs=[self.target_group_arn]
 | |
|         )
 | |
|         response = self.elbv2_client.describe_target_health(
 | |
|             TargetGroupArn=self.target_group_arn
 | |
|         )
 | |
|         assert len(list(response["TargetHealthDescriptions"])) == self.instance_count
 | |
| 
 | |
|     def test_detach_all_target_groups(self):
 | |
|         response = self.as_client.detach_load_balancer_target_groups(
 | |
|             AutoScalingGroupName=self.asg_name, TargetGroupARNs=[self.target_group_arn]
 | |
|         )
 | |
| 
 | |
|         response = self.elbv2_client.describe_target_health(
 | |
|             TargetGroupArn=self.target_group_arn
 | |
|         )
 | |
|         assert len(list(response["TargetHealthDescriptions"])) == 0
 | |
|         response = self.as_client.describe_load_balancer_target_groups(
 | |
|             AutoScalingGroupName=self.asg_name
 | |
|         )
 | |
|         assert len(list(response["LoadBalancerTargetGroups"])) == 0
 |