Exemple #1
0
    def test_fetch_schedules_by_resource(self, mock_events: mock.Mock):
        mock_resource = mock.Mock()
        mock_resource.resource_id = "i-01234567890"
        mock_resource.get_service_name.return_value = "ec2"
        mock_resource.region = "ap-northeast-1"
        aws = AwsEnvironmentModel.objects.get(name="test_name1")

        list_rules = mock_events.return_value.list_rules
        expected = CloudWatchEvent(name="NARUKO-1",
                                   schedule_expression="TEST",
                                   is_active=True)
        list_rules.return_value = [
            expected,
            CloudWatchEvent(name="NARUKO-2",
                            schedule_expression="TEST",
                            is_active=True),
            CloudWatchEvent(name="NARUKO-3",
                            schedule_expression="TEST",
                            is_active=True)
        ]

        schedules_by_resource = EventRepository.fetch_schedules_by_resource(
            mock_resource, aws)

        list_rules.assert_called_once()
        self.assertEqual(len(schedules_by_resource), 1)
        self.assertEqual(schedules_by_resource[0].cloudwatchevent, expected)
Exemple #2
0
    def test_list_schedule(self, use_case):
        client = APIClient()
        user_model = UserModel.objects.get(email="test_email")
        client.force_authenticate(user=user_model)

        # Company1のIDを取得
        tenant_id = TenantModel.objects.get(tenant_name="test_tenant_users_in_tenant_1").id
        # AWS環境のIDを取得
        aws_id = AwsEnvironmentModel.objects.get(aws_account_id="test_aws1").id

        # mock準備
        fetch_schedules = use_case.return_value.fetch_schedules
        fetch_schedules.return_value = [Schedule(
            ScheduleModel(),
            CloudWatchEvent("test", True)
        )]

        # 検証対象の実行
        response = client.get(
            path=self.api_path.format(tenant_id, aws_id),
            format="json"
        )

        use_case.assert_called_once()
        fetch_schedules.assert_called_once()
        self.assertEqual(response.status_code, 200)
Exemple #3
0
    def test_update_schedule_no_aws(self, use_case):
        client = APIClient()
        user_model = UserModel.objects.get(email="test_email")
        client.force_authenticate(user=user_model)

        # Company1のIDを取得
        tenant_id = TenantModel.objects.get(tenant_name="test_tenant_users_in_tenant_1").id
        # スケジュールのIDを取得
        schedule_id = ScheduleModel.objects.get(name="test_schedule1").id

        # mock準備
        save_schedule = use_case.return_value.save_schedule
        save_schedule.return_value = Schedule(
            ScheduleModel(),
            CloudWatchEvent("test", True)
        )

        # 検証対象の実行
        response = client.put(
            path=self.api_path.format(tenant_id, -1) + str(schedule_id) + "/",
            data={
                "name": "test_schedule",
                "is_active": True,
                "action": "test_action",
                "schedule_expression": "(10 * * * ? *)",
                "params": {"key": "value"},
                "notification": True
            },
            format="json"
        )

        use_case.assert_not_called()
        save_schedule.assert_not_called()
        self.assertEqual(response.status_code, 404)
Exemple #4
0
    def test_create_schedule_no_tenant(self, use_case):
        client = APIClient()
        user_model = UserModel.objects.get(email="test_email")
        client.force_authenticate(user=user_model)

        # AWS環境のIDを取得
        aws_id = AwsEnvironmentModel.objects.get(aws_account_id="test_aws1").id

        # mock準備
        save_schedule = use_case.return_value.save_schedule
        save_schedule.return_value = Schedule(
            ScheduleModel(),
            CloudWatchEvent("test", True)
        )

        # 検証対象の実行
        response = client.post(
            path=self.api_path.format(-1, aws_id),
            data={
                "name": "test_schedule",
                "is_active": True,
                "action": "test_action",
                "schedule_expression": "(10 * * * ? *)",
                "params": {"key": "value"},
                "notification": True
            },
            format="json"
        )

        use_case.assert_not_called()
        save_schedule.assert_not_called()
        self.assertEqual(response.status_code, 404)
Exemple #5
0
 def _build_cloudwatchevent(rules: dict):
     cloudwatchevents = []
     for rule in rules:
         cloudwatchevents.append(CloudWatchEvent(
             name=rule["Name"],
             schedule_expression=rule.get("ScheduleExpression"),
             is_active=rule["State"] == "ENABLED"
         ))
     return cloudwatchevents
Exemple #6
0
    def describe_event(self, event_name):
        response = self.client.describe_rule(
            Name=event_name
        )

        return CloudWatchEvent(
            name=response["Name"],
            schedule_expression=response["ScheduleExpression"],
            is_active=response["State"] == "ENABLED"
        )