public async Task Create_ShallReturnAJob()
        {
            var mockClient = new Mock <IJobsClient>();
            var mockLogger = new Mock <ILogger <ClaraJobsApi> >();

            JobId.TryParse("jobid", out JobId jobId);
            PayloadId.TryParse("payloadid", out PayloadId payloadId);
            PipelineId.TryParse("pipelineid", out PipelineId pipelineId);

            mockClient.Setup(p => p.CreateJob(It.IsAny <PipelineId>(), It.IsAny <string>(), It.IsAny <JobPriority>()))
            .ReturnsAsync(new JobInfo
            {
                Name       = "bla bla job",
                JobId      = jobId,
                PayloadId  = payloadId,
                PipelineId = pipelineId
            });

            var service = new ClaraJobsApi(
                mockClient.Object, mockLogger.Object);

            var job = await service.Create(Guid.NewGuid().ToString(), "bla bla", JobPriority.Higher);

            Assert.Equal(jobId.ToString(), job.JobId);
            Assert.Equal(payloadId.ToString(), job.PayloadId);

            mockClient.Verify(
                p => p.CreateJob(It.IsAny <PipelineId>(), It.IsAny <string>(), JobPriority.Higher),
                Times.Exactly(1));

            mockLogger.VerifyLogging(LogLevel.Information, Times.Once());
            mockLogger.VerifyLogging(LogLevel.Error, Times.Never());
        }
Ejemplo n.º 2
0
        public async Task <Job> Create(string pipeline, string jobName, JobPriority jobPriority)
        {
            return(await Policy.Handle <Exception>()
                   .WaitAndRetryAsync(
                       3,
                       retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
                       (exception, retryCount, context) =>
            {
                _logger.Log(LogLevel.Error, "Exception while creating a new job: {exception}", exception);
            })
                   .ExecuteAsync(async() =>
            {
                if (!PipelineId.TryParse(pipeline, out PipelineId pipelineId))
                {
                    throw new ConfigurationException($"Invalid Pipeline ID configured: {pipeline}");
                }

                var response = await _jobsClient.CreateJob(pipelineId, jobName, jobPriority);
                var job = ConvertResponseToJob(response);
                _logger.Log(LogLevel.Information, "Clara Job.Create API called successfully, Pipeline={0}, JobId={1}, JobName={2}", pipeline, job.JobId, jobName);
                return job;
            }).ConfigureAwait(false));
        }