public void FetchNextJob_ReturnsNull_WhenNoJobAvailableInSpecifiedQueue_AndCancellationRequested() { // GIVEN const string queue = "queue-1"; var jobData = new JobDataDto { Id = "job-1", Queue = "queue-2", CreatedAt = new DateTime(2017, 11, 22) }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); var cancellationToken = new CancellationTokenSource(); // WHEN var task = TaskHelper.RunTimedTask(() => _elasticConnection.FetchNextJob(new[] { queue }, cancellationToken.Token)); var timeToWait = TimeSpan.FromSeconds(5); cancellationToken.CancelAfter(timeToWait); task.Wait(); // THEN var executionTime = task.Result.ExecutionDuration; var fetchedJob = task.Result.Result; fetchedJob.Should().BeNull(); executionTime.Should().BeGreaterOrEqualTo(timeToWait); }
public async Task <Result <QuartzDto> > Post([FromBody] JobDataDto jobDataDto) { Guid guid = Guid.NewGuid(); string jobName = $"{typeof(SimpleTestProcess).FullName}-{guid}"; jobDataDto.Name = jobName; JobDto jobDto = new JobDto() { Guid = guid, IsActive = true, IsRunning = false, JobDataDtoList = new List <JobDataDto>() { jobDataDto }, LastEndTime = null, LastRunTime = null, }; Result <QuartzDto> result = await _scheduleJob.AddJob <SimpleTestProcess>(jobDto, "", true); if (result.IsSuccess) { jobDto.IsRunning = true; result.Data.Guid = guid.ToString(); await _jobService.AddJob(jobDto); } return(result); }
public void SetJobParameter_GivenExistingJobDataWithExistingParameterName_UpdatesValue() { // GIVEN const string key = "key-1"; const string parameterName = "parameter-1"; var jobData = new JobDataDto { Id = key, JobParameters = new Dictionary <string, string> { { parameterName, "value" } } }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); // WHEN const string newParameterValue = "new value"; _elasticConnection.SetJobParameter(key, parameterName, newParameterValue); // THEN var jobDataResponse = _elasticClient.Get <JobDataDto>(key).ThrowIfInvalid(); var jobDataDto = jobDataResponse.Source; jobDataDto.JobParameters.Should().HaveCount(1); jobDataDto.JobParameters.Should().ContainKey(parameterName); jobDataDto.JobParameters[parameterName].Should().Be(newParameterValue); }
public void FetchNextJob_FetchesNextJobWhenAvailable() { // GIVEN const string queue = "default"; var jobData = new JobDataDto { Id = "job-1", Queue = queue, CreatedAt = new DateTime(2017, 11, 22) }; // WHEN var task = TaskHelper.RunTimedTask(() => _elasticConnection.FetchNextJob(new[] { queue }, CancellationToken.None)); var timeToWait = TimeSpan.FromSeconds(5); Thread.Sleep(timeToWait); _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); task.Wait(); // THEN var executionTime = task.Result.ExecutionDuration; var fetchedJob = task.Result.Result; fetchedJob.Should().NotBeNull(); var hfFetchedJob = fetchedJob as FetchedJob; hfFetchedJob.Should().NotBeNull(); hfFetchedJob.JobId.Should().Be(jobData.Id); executionTime.Should().BeGreaterOrEqualTo(timeToWait); }
public void GetStateData_GivenExistingJobStateData_ReturnsExpectedResults() { // GIVEN const string key = "key-1"; var jobStateData = new StateDataDto { Name = "Name-1", Reason = "Reason-1", Data = new Dictionary <string, string> { { "data-1", "value-1" }, { "data-2", "value-2" }, { "data-3", "value-3" } } }; var jobData = new JobDataDto { Id = key, StateDataDto = jobStateData }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); // WHEN var actualStateData = _elasticConnection.GetStateData(key); // THEN actualStateData.Should().NotBeNull(); actualStateData.ShouldBeEquivalentTo(jobStateData.ToStateData()); }
public override async Task StartAsync(IJobExecutionContext context) { //Logic : HttpRequests will be sent this section , Job Data will be getting this section _result = await _jobService.GetJobByName(context.JobDetail.Key.Name.ToString()); if (_result.IsSuccess) { _jobDataDto = _result.Data?.JobDataDtoList?.FirstOrDefault(); if (_jobDataDto != null) { switch (_jobDataDto.Method.ToLower()) { case HttpMethodCodes.GET: await _httpHelper.Get(_jobDataDto.Url, _jobDataDto.Header, _jobDataDto.Body); break; case HttpMethodCodes.HEAD: break; case HttpMethodCodes.DELETE: break; case HttpMethodCodes.OPTIONS: break; case HttpMethodCodes.PATCH: break; case HttpMethodCodes.POST: await _httpHelper.PostAsync(_jobDataDto.Url, _jobDataDto.Header, _jobDataDto.Body); break; case HttpMethodCodes.PUT: break; case HttpMethodCodes.TRACE: break; default: //Handle Invalid Method Code break; } } } GC.Collect(); }
public void GetStateData_GivenNullJobStateDto_ReturnsExpectedResults() { // GIVEN const string key = "key-1"; var jobData = new JobDataDto { Id = key, StateDataDto = null }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); // WHEN var actualStateData = _elasticConnection.GetStateData(key); // THEN actualStateData.Should().BeNull(); }
public void GetJobParameter_GivenExistingJobDataAndNonExistingParameterName_ReturnsNull() { // GIVEN const string key = "key-1"; var jobData = new JobDataDto { Id = key, JobParameters = new Dictionary <string, string>() }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); // WHEN var actualJobParameter = _elasticConnection.GetJobParameter(key, "parameter-1"); // THEN actualJobParameter.Should().BeNull(); }
public override string CreateExpiredJob(Job job, IDictionary <string, string> parameters, DateTime createdAt, TimeSpan expireIn) { if (job == null) { throw new ArgumentNullException(nameof(job)); } if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } var invocationData = InvocationData.Serialize(job); var jobData = new JobDataDto() { Id = Guid.NewGuid().ToString(), CreatedAt = createdAt, ExpireAt = DateTime.UtcNow.Add(expireIn), InvocationDataDto = InvocationDataDto.Create(invocationData) }; throw new NotImplementedException(); }
public void GetJobData_GivenExistingJobData_ReturnsExpectedObject() { // GIVEN const string key = "key-1"; var jobData = new JobDataDto { Id = key, StateName = "StateName-1", CreatedAt = new DateTime(2017, 11, 1), InvocationDataDto = new InvocationDataDto() }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); // WHEN var actualJobData = _elasticConnection.GetJobData(key); // THEN actualJobData.Should().NotBeNull(); actualJobData.CreatedAt.Should().Be(jobData.CreatedAt); actualJobData.State.Should().Be(jobData.StateName); actualJobData.LoadException.Should().NotBeNull(); }
public void FetchNextJob_FetchesNextJobInQueue() { // GIVEN const string queue = "default"; var jobData = new JobDataDto { Id = "job-1", Queue = queue, CreatedAt = new DateTime(2017, 11, 22) }; _elasticClient.Index(jobData, desc => desc.Refresh(Refresh.True)).ThrowIfInvalid(); // WHEN var job = _elasticConnection.FetchNextJob(new[] { queue }, CancellationToken.None); // THEN job.Should().NotBeNull(); var fetchedJob = job as FetchedJob; fetchedJob.Should().NotBeNull(); fetchedJob.JobId.Should().Be(jobData.Id); }