def test_retry_failed_logs_in_archive(self, admin_client):
        failed_logs = TriggerLogArchive.objects.bulk_create([
            make_trigger_log(
                is_archived=True,
                state=TRIGGER_LOG_STATE['FAILED'],
                record_id=i,
                action=action,
            ) for i, action in enumerate(TRIGGER_LOG_ACTION.values())
        ])
        succeeded = make_trigger_log(is_archived=True,
                                     state=TRIGGER_LOG_STATE['SUCCESS'])
        succeeded.save()

        admin_client.post(
            self.admin_changelist_url(TriggerLogArchive),
            data=self.action_post_data(
                admin.TriggerLogAdmin.retry_failed_logs_action,
                TriggerLogArchive.objects.all()),
        )

        for failed_log in failed_logs:
            failed_log.refresh_from_db()
            assert failed_log.state == TRIGGER_LOG_STATE['REQUEUED']
            new_trigger_log = TriggerLog.objects.get(
                table_name=failed_log.table_name,
                record_id=failed_log.record_id,
                action=failed_log.action,
            )
            assert new_trigger_log.state == TRIGGER_LOG_STATE['NEW']
        succeeded.refresh_from_db()
        assert succeeded.state == TRIGGER_LOG_STATE['SUCCESS']
Beispiel #2
0
    def test_retry_failed_logs_ordered_write(
        self,
        log_action,
        admin_client,
        set_write_mode_ordered,
        hc_capture_stored_procedures,
    ):

        assert get_unique_connection_write_mode(
        ) == WriteAlgorithm.ORDERED_WRITES

        testrecord = NumberModel.objects.create()

        failed_log = make_trigger_log(
            state=TRIGGER_LOG_STATE["FAILED"],
            table_name="number_object__c",
            record_id=testrecord.id,
            action=log_action,
        )
        failed_log.save()

        succeeded = make_trigger_log(state=TRIGGER_LOG_STATE["SUCCESS"])
        succeeded.save()

        qs = TriggerLog.objects.all()
        assert qs.count() == 2
        assert set(qs.values_list("state", flat=True)) == {
            TRIGGER_LOG_STATE["SUCCESS"],
            TRIGGER_LOG_STATE["FAILED"],
        }

        admin_client.post(
            self.admin_changelist_url(TriggerLog),
            data=self.action_post_data(
                admin.TriggerLogAdmin.retry_failed_logs_action,
                TriggerLog.objects.all()),
        )

        if log_action == "DELETE":
            assert qs.count() == 2
            assert set(qs.values_list("state", flat=True)) == {
                TRIGGER_LOG_STATE["SUCCESS"],
                TRIGGER_LOG_STATE["NEW"],
            }
        else:
            assert qs.count() == 3
            assert set(qs.values_list("state", flat=True)) == {
                TRIGGER_LOG_STATE["SUCCESS"],
                TRIGGER_LOG_STATE["REQUEUED"],
                TRIGGER_LOG_STATE["NEW"],
            }

        succeeded.refresh_from_db()
        assert succeeded.state == TRIGGER_LOG_STATE["SUCCESS"]
Beispiel #3
0
    def test_retry_failed_logs_in_archive_ordered_write(
            self, log_action, admin_client, set_write_mode_ordered,
            hc_capture_stored_procedures):

        assert get_unique_connection_write_mode(
        ) == WriteAlgorithm.ORDERED_WRITES

        testrecord = NumberModel.objects.create()

        failed_log = make_trigger_log(
            is_archived=True,
            state=TRIGGER_LOG_STATE['FAILED'],
            table_name='number_object__c',
            record_id=testrecord.id,
            action=log_action,
        )
        failed_log.save()

        succeeded = make_trigger_log(is_archived=True,
                                     state=TRIGGER_LOG_STATE['SUCCESS'])
        succeeded.save()

        assert TriggerLog.objects.count() == 0
        assert TriggerLogArchive.objects.count() == 2
        assert set(TriggerLogArchive.objects.values_list(
            'state', flat=True)) == {
                TRIGGER_LOG_STATE['SUCCESS'],
                TRIGGER_LOG_STATE['FAILED'],
            }

        admin_client.post(
            self.admin_changelist_url(TriggerLogArchive),
            data=self.action_post_data(
                admin.TriggerLogAdmin.retry_failed_logs_action,
                TriggerLogArchive.objects.all()),
        )

        assert TriggerLog.objects.get().state == TRIGGER_LOG_STATE['NEW']

        assert TriggerLogArchive.objects.count() == 2
        assert set(TriggerLogArchive.objects.values_list(
            'state', flat=True)) == {
                TRIGGER_LOG_STATE['SUCCESS'],
                TRIGGER_LOG_STATE['REQUEUED'],
            }

        succeeded.refresh_from_db()
        assert succeeded.state == TRIGGER_LOG_STATE['SUCCESS']
Beispiel #4
0
    def test_retry_failed_logs_ordered_write_field_subset(
            self, admin_client, set_write_mode_ordered,
            hc_capture_stored_procedures):
        assert get_unique_connection_write_mode(
        ) == WriteAlgorithm.ORDERED_WRITES

        testrecord = NumberModel.objects.create()

        failed_log = make_trigger_log(
            state=TRIGGER_LOG_STATE["FAILED"],
            table_name="number_object__c",
            record_id=testrecord.id,
            action="UPDATE",
            values='"a_number__c"=>"333"',
        )
        failed_log.save()

        admin_client.post(
            self.admin_changelist_url(TriggerLog),
            data=self.action_post_data(
                admin.TriggerLogAdmin.retry_failed_logs_action,
                TriggerLog.objects.all()),
        )

        qs = TriggerLog.objects.all()
        assert qs.count() == 2
        assert set(qs.values_list("state", flat=True)) == {
            TRIGGER_LOG_STATE["REQUEUED"],
            TRIGGER_LOG_STATE["NEW"],
        }

        new_log = qs.exclude(id=failed_log.id).get()

        assert set(new_log.values_as_dict.keys()) == {"a_number__c"}
Beispiel #5
0
    def test_capture_insert_without_record(self, hc_capture_stored_procedures):
        failed_log = make_trigger_log(
            state=TRIGGER_LOG_STATE["FAILED"],
            table_name="number_object__c",
            record_id=666,
            action="INSERT",
        )
        failed_log.save()

        with pytest.raises(TriggerLog.DoesNotExist):
            failed_log.capture_insert()
Beispiel #6
0
    def test_capture_update_without_record(self, hc_capture_stored_procedures):
        failed_log = make_trigger_log(
            state=TRIGGER_LOG_STATE['FAILED'],
            table_name='number_object__c',
            record_id=666,
            action='UPDATE',
        )
        failed_log.save()

        with pytest.raises(TriggerLog.DoesNotExist):
            failed_log.capture_update()
    def test_ignore_failed_logs(self, admin_client):
        failed_logs = TriggerLog.objects.bulk_create([
            make_trigger_log(
                state=TRIGGER_LOG_STATE['FAILED'],
                record_id=i,
                action=action,
            ) for i, action in enumerate(TRIGGER_LOG_ACTION.values())
        ])
        succeeded = make_trigger_log(state=TRIGGER_LOG_STATE['SUCCESS'])
        succeeded.save()

        admin_client.post(
            self.admin_changelist_url(TriggerLog),
            data=self.action_post_data(
                admin.TriggerLogAdmin.ignore_failed_logs_action,
                TriggerLog.objects.all()),
        )

        for failed_log in failed_logs:
            failed_log.refresh_from_db()
            assert failed_log.state == TRIGGER_LOG_STATE['IGNORED']
        succeeded.refresh_from_db()
        assert succeeded.state == TRIGGER_LOG_STATE['SUCCESS']
Beispiel #8
0
    def test_retry_failed_logs(self, admin_client, set_write_mode_merge):
        failed_logs = TriggerLog.objects.bulk_create([
            make_trigger_log(
                state=TRIGGER_LOG_STATE["FAILED"],
                record_id=i,
                action=action,
            ) for i, action in enumerate(TRIGGER_LOG_ACTION.values())
        ])
        succeeded = make_trigger_log(state=TRIGGER_LOG_STATE["SUCCESS"])
        succeeded.save()

        admin_client.post(
            self.admin_changelist_url(TriggerLog),
            data=self.action_post_data(
                admin.TriggerLogAdmin.retry_failed_logs_action,
                TriggerLog.objects.all()),
        )

        for failed_log in failed_logs:
            failed_log.refresh_from_db()
            assert failed_log.state == TRIGGER_LOG_STATE["NEW"]
        succeeded.refresh_from_db()
        assert succeeded.state == TRIGGER_LOG_STATE["SUCCESS"]