示例#1
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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();
        }
示例#7
0
        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();
        }
示例#8
0
        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();
        }
示例#9
0
        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();
        }
示例#10
0
        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();
        }
示例#11
0
        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);
        }