| 
									
										
										
										
											2022-08-29 20:30:48 +00:00
										 |  |  | import boto3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from moto import mock_autoscaling | 
					
						
							|  |  |  | from unittest import TestCase | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @mock_autoscaling | 
					
						
							|  |  |  | class TestAutoScalingScheduledActions(TestCase): | 
					
						
							|  |  |  |     def setUp(self) -> None: | 
					
						
							|  |  |  |         self.client = boto3.client("autoscaling", region_name="us-east-1") | 
					
						
							|  |  |  |         self.asg_name = "tester_group" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_list_many_scheduled_scaling_actions(self): | 
					
						
							|  |  |  |         for i in range(30): | 
					
						
							|  |  |  |             self._create_scheduled_action(name=f"my-scheduled-action-{i}", idx=i) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         response = self.client.describe_scheduled_actions( | 
					
						
							|  |  |  |             AutoScalingGroupName=self.asg_name | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         actions = response["ScheduledUpdateGroupActions"] | 
					
						
							| 
									
										
										
										
											2023-06-09 11:16:59 +00:00
										 |  |  |         assert len(actions) == 30 | 
					
						
							| 
									
										
										
										
											2022-08-29 20:30:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_non_existing_group_name(self): | 
					
						
							|  |  |  |         self._create_scheduled_action(name="my-scheduled-action", idx=1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         response = self.client.describe_scheduled_actions( | 
					
						
							|  |  |  |             AutoScalingGroupName="wrong_group" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         actions = response["ScheduledUpdateGroupActions"] | 
					
						
							|  |  |  |         # since there is no such group name, no actions have been returned | 
					
						
							| 
									
										
										
										
											2023-06-09 11:16:59 +00:00
										 |  |  |         assert len(actions) == 0 | 
					
						
							| 
									
										
										
										
											2022-08-29 20:30:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_describe_scheduled_actions_returns_all_actions_when_no_argument_is_passed( | 
					
						
							|  |  |  |         self, | 
					
						
							|  |  |  |     ): | 
					
						
							|  |  |  |         for i in range(30): | 
					
						
							|  |  |  |             self._create_scheduled_action(name=f"my-scheduled-action-{i}", idx=i) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for i in range(10): | 
					
						
							|  |  |  |             self._create_scheduled_action( | 
					
						
							|  |  |  |                 name=f"my-scheduled-action-4{i}", idx=i, asg_name="test_group-2" | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         response = self.client.describe_scheduled_actions() | 
					
						
							|  |  |  |         actions = response["ScheduledUpdateGroupActions"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Since no argument is passed describe_scheduled_actions, all scheduled actions are returned | 
					
						
							| 
									
										
										
										
											2023-06-09 11:16:59 +00:00
										 |  |  |         assert len(actions) == 40 | 
					
						
							| 
									
										
										
										
											2022-08-29 20:30:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_scheduled_action_delete(self): | 
					
						
							|  |  |  |         for i in range(3): | 
					
						
							|  |  |  |             self._create_scheduled_action(name=f"my-scheduled-action-{i}", idx=i) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         response = self.client.describe_scheduled_actions( | 
					
						
							|  |  |  |             AutoScalingGroupName=self.asg_name | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         actions = response["ScheduledUpdateGroupActions"] | 
					
						
							| 
									
										
										
										
											2023-06-09 11:16:59 +00:00
										 |  |  |         assert len(actions) == 3 | 
					
						
							| 
									
										
										
										
											2022-08-29 20:30:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.client.delete_scheduled_action( | 
					
						
							|  |  |  |             AutoScalingGroupName=self.asg_name, | 
					
						
							|  |  |  |             ScheduledActionName="my-scheduled-action-2", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         self.client.delete_scheduled_action( | 
					
						
							|  |  |  |             AutoScalingGroupName=self.asg_name, | 
					
						
							|  |  |  |             ScheduledActionName="my-scheduled-action-1", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         response = self.client.describe_scheduled_actions( | 
					
						
							|  |  |  |             AutoScalingGroupName=self.asg_name | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         actions = response["ScheduledUpdateGroupActions"] | 
					
						
							| 
									
										
										
										
											2023-06-09 11:16:59 +00:00
										 |  |  |         assert len(actions) == 1 | 
					
						
							| 
									
										
										
										
											2022-08-29 20:30:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _create_scheduled_action(self, name, idx, asg_name=None): | 
					
						
							|  |  |  |         self.client.put_scheduled_update_group_action( | 
					
						
							|  |  |  |             AutoScalingGroupName=asg_name or self.asg_name, | 
					
						
							|  |  |  |             ScheduledActionName=name, | 
					
						
							|  |  |  |             StartTime=f"2022-07-01T00:00:{idx}Z", | 
					
						
							|  |  |  |             EndTime=f"2022-09-01T00:00:{idx}Z", | 
					
						
							|  |  |  |             Recurrence="* * * * *", | 
					
						
							|  |  |  |             MinSize=idx + 1, | 
					
						
							|  |  |  |             MaxSize=idx + 5, | 
					
						
							|  |  |  |             DesiredCapacity=idx + 3, | 
					
						
							|  |  |  |         ) |