168 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Unit tests for scheduler-supported APIs."""
 | |
| import boto3
 | |
| import pytest
 | |
| 
 | |
| from botocore.client import ClientError
 | |
| from moto import mock_scheduler
 | |
| from moto.core import DEFAULT_ACCOUNT_ID
 | |
| 
 | |
| # See our Development Tips on writing tests for hints on how to write good tests:
 | |
| # http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html
 | |
| 
 | |
| 
 | |
| @mock_scheduler
 | |
| def test_create_get_schedule():
 | |
|     client = boto3.client("scheduler", region_name="eu-west-1")
 | |
|     arn = client.create_schedule(
 | |
|         Name="my-schedule",
 | |
|         ScheduleExpression="some cron",
 | |
|         FlexibleTimeWindow={
 | |
|             "MaximumWindowInMinutes": 4,
 | |
|             "Mode": "OFF",
 | |
|         },
 | |
|         Target={
 | |
|             "Arn": "not supported yet",
 | |
|             "RoleArn": "n/a",
 | |
|         },
 | |
|     )["ScheduleArn"]
 | |
| 
 | |
|     assert (
 | |
|         arn
 | |
|         == f"arn:aws:scheduler:eu-west-1:{DEFAULT_ACCOUNT_ID}:schedule/default/my-schedule"
 | |
|     )
 | |
| 
 | |
|     resp = client.get_schedule(Name="my-schedule")
 | |
|     assert resp["Arn"] == arn
 | |
|     assert resp["Name"] == "my-schedule"
 | |
|     assert resp["ScheduleExpression"] == "some cron"
 | |
|     assert resp["FlexibleTimeWindow"] == {
 | |
|         "MaximumWindowInMinutes": 4,
 | |
|         "Mode": "OFF",
 | |
|     }
 | |
|     assert resp["Target"] == {
 | |
|         "Arn": "not supported yet",
 | |
|         "RoleArn": "n/a",
 | |
|         "RetryPolicy": {"MaximumEventAgeInSeconds": 86400, "MaximumRetryAttempts": 185},
 | |
|     }
 | |
| 
 | |
| 
 | |
| @mock_scheduler
 | |
| def test_create_get_delete__in_different_group():
 | |
|     client = boto3.client("scheduler", region_name="eu-west-1")
 | |
| 
 | |
|     client.create_schedule_group(Name="sg")
 | |
|     schedule_arn = client.create_schedule(
 | |
|         Name="my-schedule",
 | |
|         GroupName="sg",
 | |
|         ScheduleExpression="some cron",
 | |
|         FlexibleTimeWindow={
 | |
|             "MaximumWindowInMinutes": 4,
 | |
|             "Mode": "OFF",
 | |
|         },
 | |
|         Target={
 | |
|             "Arn": "not supported yet",
 | |
|             "RoleArn": "n/a",
 | |
|         },
 | |
|     )["ScheduleArn"]
 | |
| 
 | |
|     assert (
 | |
|         schedule_arn
 | |
|         == "arn:aws:scheduler:eu-west-1:123456789012:schedule/sg/my-schedule"
 | |
|     )
 | |
| 
 | |
|     schedule = client.get_schedule(GroupName="sg", Name="my-schedule")
 | |
|     assert schedule["Arn"] == schedule_arn
 | |
| 
 | |
|     client.delete_schedule(GroupName="sg", Name="my-schedule")
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_schedule(GroupName="sg", Name="my-schedule")
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "ResourceNotFoundException"
 | |
| 
 | |
| 
 | |
| @mock_scheduler
 | |
| def test_update_schedule():
 | |
|     client = boto3.client("scheduler", region_name="eu-west-1")
 | |
| 
 | |
|     client.create_schedule(
 | |
|         Name="my-schedule",
 | |
|         ScheduleExpression="some cron",
 | |
|         FlexibleTimeWindow={
 | |
|             "MaximumWindowInMinutes": 4,
 | |
|             "Mode": "OFF",
 | |
|         },
 | |
|         Target={
 | |
|             "Arn": "not supported yet",
 | |
|             "RoleArn": "n/a",
 | |
|         },
 | |
|     )
 | |
| 
 | |
|     client.update_schedule(
 | |
|         Name="my-schedule",
 | |
|         Description="new desc",
 | |
|         ScheduleExpression="new cron",
 | |
|         FlexibleTimeWindow={
 | |
|             "MaximumWindowInMinutes": 4,
 | |
|             "Mode": "OFF",
 | |
|         },
 | |
|         State="DISABLED",
 | |
|         Target={
 | |
|             "Arn": "different arn",
 | |
|             "RoleArn": "n/a",
 | |
|         },
 | |
|     )
 | |
| 
 | |
|     schedule = client.get_schedule(Name="my-schedule")
 | |
|     assert schedule["Description"] == "new desc"
 | |
|     assert schedule["ScheduleExpression"] == "new cron"
 | |
|     assert schedule["State"] == "DISABLED"
 | |
|     assert schedule["Target"] == {
 | |
|         "Arn": "different arn",
 | |
|         "RoleArn": "n/a",
 | |
|         "RetryPolicy": {"MaximumEventAgeInSeconds": 86400, "MaximumRetryAttempts": 185},
 | |
|     }
 | |
| 
 | |
| 
 | |
| @mock_scheduler
 | |
| def test_get_schedule_for_unknown_group():
 | |
|     client = boto3.client("scheduler", region_name="eu-west-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.get_schedule(GroupName="unknown", Name="my-schedule")
 | |
|     err = exc.value.response["Error"]
 | |
|     assert err["Code"] == "ResourceNotFoundException"
 | |
| 
 | |
| 
 | |
| @mock_scheduler
 | |
| def test_list_schedules():
 | |
|     client = boto3.client("scheduler", region_name="eu-west-1")
 | |
| 
 | |
|     schedules = client.list_schedules()["Schedules"]
 | |
|     assert schedules == []
 | |
| 
 | |
|     client.create_schedule_group(Name="group2")
 | |
| 
 | |
|     for group in ["default", "group2"]:
 | |
|         for schedule in ["sch1", "sch2"]:
 | |
|             for state in ["ENABLED", "DISABLED"]:
 | |
|                 client.create_schedule(
 | |
|                     Name=f"{schedule}_{state}",
 | |
|                     GroupName=group,
 | |
|                     State=state,
 | |
|                     ScheduleExpression="some cron",
 | |
|                     FlexibleTimeWindow={"MaximumWindowInMinutes": 4, "Mode": "OFF"},
 | |
|                     Target={"Arn": "not supported yet", "RoleArn": "n/a"},
 | |
|                 )
 | |
| 
 | |
|     schedules = client.list_schedules()["Schedules"]
 | |
|     assert len(schedules) == 8
 | |
|     # The ListSchedules command should not return the entire Target-dictionary
 | |
|     assert schedules[0]["Target"] == {"Arn": "not supported yet"}
 | |
| 
 | |
|     schedules = client.list_schedules(GroupName="group2")["Schedules"]
 | |
|     assert len(schedules) == 4
 | |
| 
 | |
|     schedules = client.list_schedules(State="ENABLED")["Schedules"]
 | |
|     assert len(schedules) == 4
 |