public void HandleEnqueueJobCommandEventStoreSavesJob()
        {
            // Arrange
            List <ISchedulerTask> tasks = new List <ISchedulerTask>();
            ISchedulerTask        task  = MockRepository.GenerateMock <ISchedulerTask>();

            tasks.Add(task);

            EnqueueJob command = new EnqueueJob(Guid.NewGuid(), tasks);

            // Act
            schedulerJobCommandHandlers.Handle(command);

            // Assert
            eventStore.AssertWasCalled(x => x.SaveEvents(
                                           Arg <Guid> .Matches(s => s.Equals(command.JobId)),

                                           Arg <IEnumerable <Event> > .Matches(s =>
                                                                               s.Count() == 1 &&
                                                                               ((JobCreated)s.ElementAt(0)).JobId.Equals(command.JobId) &&
                                                                               ((JobCreated)s.ElementAt(0)).Tasks.Equals(tasks)),

                                           Arg <int> .Matches(s => s == 1)
                                           ));
        }
Esempio n. 2
0
        public IActionResult Post([FromBody] EnqueueJob jobDetails)
        {
            this.logger.LogDebug(1001, "Adding new job to the queue.");
            var newJobUuid = Guid.NewGuid();
            var col        = this.dbFactory.GetCollection <JobSpec <string> >(CollectionNames.Jobs);

            var messages = VerifyJobType(jobDetails.JobType);

            if (messages.Count() > 0)
            {
                var details = new ApiResponse <JobCreated>();
                details.Messages.AddRange(messages);
                return(this.BadRequest(details));
            }

            // TODO: Make Job expirary configurable via the settings db.
            col.InsertOne(new JobSpec <string>
            {
                Uuid     = newJobUuid.ToString(),
                Type     = jobDetails.JobType,
                Data     = JsonConvert.SerializeObject(jobDetails.Data),
                Status   = JobStatuses.New,
                ExpireAt = DateTime.Now.AddDays(3)
            });

            // TODO: Make base URL configurable. -- CORPHQ_API_URL
            var baseUrl = new Uri("/api/v1/job/");
            var jobUrl  = new Uri(baseUrl, newJobUuid.ToString());

            return(this.Created(jobUrl, new ApiResponse <JobCreated> {
                Result = new JobCreated {
                    Uuid = newJobUuid
                }
            }));
        }
Esempio n. 3
0
        public IActionResult Post([FromBody] EnqueueJob jobDetails)
        {
            this.logger.LogDebug(1001, "Adding new job to the queue.");
            var newJobUuid = Guid.NewGuid();
            var col        = this.dbFactory.GetCollection <JobSpec <string> >(CollectionNames.Jobs);

            var messages = VerifyJobType(jobDetails.JobType);

            if (messages.Count() > 0)
            {
                var details = new ApiResponse <JobCreated>();
                details.Messages.AddRange(messages);
                return(this.BadRequest(details));
            }

            // TODO: Make Job expirary configurable via the settings db.
            col.InsertOne(new JobSpec <string>
            {
                Uuid     = newJobUuid.ToString(),
                Type     = jobDetails.JobType,
                Data     = JsonConvert.SerializeObject(jobDetails.Data),
                Status   = JobStatuses.New,
                ExpireAt = DateTime.Now.AddDays(3)
            });

            using (var connection = this.connectionFactory.CreateConfiguredConnection())
                using (var channel = connection.CreateModel())
                {
                    // TODO: Move channel queue declare to startup.
                    channel.QueueDeclare(
                        queue: "jobs",
                        durable: true,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

                    channel.BasicPublish(
                        exchange: string.Empty,
                        routingKey: "jobs",
                        basicProperties: null,
                        body: newJobUuid.ToByteArray());
                }

            // TODO: Make base URL configurable. -- CORPHQ_API_URL
            var baseUrl = new Uri("http://127.0.0.1:5000/api/v1/job/");
            var jobUrl  = new Uri(baseUrl, newJobUuid.ToString());

            return(this.Created(jobUrl, new ApiResponse <JobCreated> {
                Result = new JobCreated {
                    Uuid = newJobUuid
                }
            }));
        }
Esempio n. 4
0
        public void CorrectNewJob(EnqueueJob job, int expectedStatus)
        {
            // Arrange
            var mockCollection = new Mock <IMongoCollection <JobSpec <string> > >();

            this.dbFactoryMock.Setup(x => x.GetCollection <JobSpec <string> >(CollectionNames.Jobs, null, null)).Returns(mockCollection.Object);

            // Act
            var result = (ObjectResult)this.Controller.Post(job);
            var data   = (ApiResponse <JobCreated>)result.Value;

            // Assert
            Assert.Equal(expectedStatus, result.StatusCode);
        }
Esempio n. 5
0
        public void CorrectNewJob(EnqueueJob job, int expectedStatus)
        {
            // Arrange
            var mockCollection       = new Mock <IMongoCollection <JobSpec <string> > >();
            var mockRabbitConnection = new Mock <IConnection>();
            var mockRabbitChannel    = new Mock <IModel>();

            this.dbFactoryMock.Setup(x => x.GetCollection <JobSpec <string> >(CollectionNames.Jobs, null, null)).Returns(mockCollection.Object);
            this.connectionFactoryMock.Setup(x => x.CreateConfiguredConnection()).Returns(mockRabbitConnection.Object);
            mockRabbitConnection.Setup(x => x.CreateModel()).Returns(mockRabbitChannel.Object);

            // Act
            var result = (ObjectResult)this.Controller.Post(job);
            var data   = (ApiResponse <JobCreated>)result.Value;

            // Assert
            Assert.Equal(expectedStatus, result.StatusCode);
            if (result.StatusCode < 300)
            {
                mockRabbitChannel.Verify(x => x.BasicPublish(string.Empty, "jobs", false, null, It.IsAny <byte[]>()));
            }
        }
        public void HandleEnqueueJobCommandEventStoreSavesJob()
        {
            // Arrange
            List<ISchedulerTask> tasks = new List<ISchedulerTask>();
            ISchedulerTask task = MockRepository.GenerateMock<ISchedulerTask>();
            tasks.Add(task);

            EnqueueJob command = new EnqueueJob(Guid.NewGuid(), tasks);

            // Act
            schedulerJobCommandHandlers.Handle(command);

            // Assert
            eventStore.AssertWasCalled(x => x.SaveEvents(
                Arg<Guid>.Matches(s => s.Equals(command.JobId)),

                Arg<IEnumerable<Event>>.Matches(s =>
                    s.Count() == 1 &&
                    ((JobCreated)s.ElementAt(0)).JobId.Equals(command.JobId) &&
                    ((JobCreated)s.ElementAt(0)).Tasks.Equals(tasks)),

                Arg<int>.Matches(s => s == 1)
            ));
        }