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"); }
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)); }