public async Task Can_process_with_failed_jobs()
        {
            await _jobStorage.Enqueue <TestJob, TestJobData>(new TestJobData
            {
                Throw   = true,
                Message = "testt"
            });

            var            cancelToken = new CancellationTokenSource();
            JobFailedEvent failedEvent = null;

            _jobStorage.JobFailed.Subscribe(async(o, e) =>
            {
                failedEvent = e;
                cancelToken.Cancel();
                await Task.Yield();
            });
            _jobStorage.JobSucceeded.Subscribe((o, e) => throw new Exception("Shouldn't happen..."));

            cancelToken.CancelAfter(TimeSpan.FromSeconds(5)); // just in case
            await _jobProcessor.Process(cancelToken.Token);

            failedEvent.Should().NotBeNull();
            failedEvent.Exception.Message.Should().Be("testt");
        }
Example #2
0
        public override Task <Void> JobFailedHandler(JobFailedEvent request, ServerCallContext context)
        {
            if (IsDone)
            {
                return(Task.FromResult(Void));
            }
            Log.Log(Level.Info, "Job id {0} failed on {1}", request.JobId, request.Exception.Name);
            var jobFailedEvent = new FailedJob(request.JobId,
                                               request.Exception.Message,
                                               request.Exception.Data.ToByteArray());

            UpdateStatusAndNotify(LauncherStatus.Failed(jobFailedEvent.AsError()));
            _failedJobHandler.OnNext(jobFailedEvent);
            return(Task.FromResult(Void));
        }