Exemple #1
0
        public async void GetFirstQueuedJob_ReturnNull()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var job             = await jobQueueService.GetFirstUnassignedQueuedJob("engine01");

            Assert.Null(job);
        }
Exemple #2
0
        public void UpdateJobQueue_JobProcessedByOtherEngineException()
        {
            _jobQueueRepository.Setup(r =>
                                      r.GetSingleBySpec(It.IsAny <JobQueueFilterSpecification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((JobQueueFilterSpecification spec, CancellationToken cancellationToken) =>
                          _data.FirstOrDefault(spec.Criteria.Compile()));

            _data.Add(new JobQueue
            {
                Id               = 2,
                ProjectId        = 1,
                JobType          = JobType.Update,
                Status           = JobStatus.Processing,
                CatapultEngineId = "1",
                Project          = new Project
                {
                    Id = 1
                }
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.UpdateJobQueue(new JobQueue
            {
                Id               = 2,
                ProjectId        = 0,
                JobType          = JobType.Update,
                Status           = JobStatus.Processing,
                CatapultEngineId = "2",
                Project          = new Project()
            }));

            Assert.IsType <JobProcessedByOtherEngineException>(exception?.Result);
        }
Exemple #3
0
        public async void GetFirstQueuedJob_ReturnItem()
        {
            _data.Add(new JobQueue
            {
                Id        = 2,
                ProjectId = 1,
                JobType   = JobType.Update,
                Status    = JobStatus.Queued,
                Created   = DateTime.UtcNow.AddHours(1),
                Project   = new Project
                {
                    Id     = 1,
                    Status = ProjectStatusFilterType.Active
                }
            });

            _data.Add(new JobQueue
            {
                Id        = 3,
                ProjectId = 2,
                JobType   = JobType.Update,
                Status    = JobStatus.Queued,
                Created   = DateTime.UtcNow,
                Project   = new Project
                {
                    Id     = 2,
                    Status = ProjectStatusFilterType.Active
                }
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var job             = await jobQueueService.GetFirstUnassignedQueuedJob("engine01");

            Assert.Equal(3, job.Id);
        }
Exemple #4
0
        public async void GetJobQueueByCode_ReturnNull()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var entity          = await jobQueueService.GetJobQueueByCode(1, "20180817.2");

            Assert.Null(entity);
        }
Exemple #5
0
        public async void CancelJobQueue_ValidItem()
        {
            _jobQueueRepository.Setup(r =>
                                      r.GetSingleBySpec(It.IsAny <JobQueueFilterSpecification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((JobQueueFilterSpecification spec, CancellationToken cancellationToken) =>
                          _data.FirstOrDefault(spec.Criteria.Compile()));

            _data.Add(new JobQueue
            {
                Id        = 2,
                ProjectId = 1,
                JobType   = JobType.Update,
                Status    = JobStatus.Queued,
                Project   = new Project
                {
                    Id = 1
                }
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            await jobQueueService.CancelJobQueue(2);

            var job = _data.First(d => d.Id == 2);

            Assert.Equal(JobStatus.Cancelled, job.Status);
        }
Exemple #6
0
        public async void GetJobQueues_ReturnEmpty()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var jobQueues       = await jobQueueService.GetJobQueues(2, JobQueueFilterType.All);

            Assert.Empty(jobQueues);
        }
Exemple #7
0
        public void GetJobQueues_UnknownFilterType()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.GetJobQueues(1, "unknown"));

            Assert.IsType <FilterTypeNotFoundException>(exception?.Result);
        }
Exemple #8
0
        public async void GetJobQueues_FilterSucceeded_ReturnItems()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var jobQueues       = await jobQueueService.GetJobQueues(1, JobQueueFilterType.Past);

            Assert.NotEmpty(jobQueues);
        }
Exemple #9
0
        public void AddJobQueue_InvalidProject()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.AddJobQueue(2, "localhost", JobType.Create, null));

            Assert.IsType <ProjectNotFoundException>(exception?.Result);
        }
Exemple #10
0
        public async void GetJobQueueByCode_ReturnItem()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var entity          = await jobQueueService.GetJobQueueByCode(1, "20180817.1");

            Assert.NotNull(entity);
            Assert.Equal(1, entity.Id);
        }
Exemple #11
0
        public async void AddJobQueue_ValidItem()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            int newId           = await jobQueueService.AddJobQueue(1, "localhost", JobType.Create, null);

            Assert.True(newId > 1);
            Assert.True(_data.Count > 1);
        }
Exemple #12
0
        public void AddJobQueue_TaskValidationException()
        {
            _jobDefinitionService.Setup(s => s.ValidateJobTaskDefinition(It.IsAny <JobDefinition>(), It.IsAny <JobTaskDefinition>(), It.IsAny <CancellationToken>()))
            .Throws(new ExternalServiceNotFoundException("GitHub"));

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.AddJobQueue(1, "localhost", JobType.Create, 1));

            Assert.IsType <TaskValidationException>(exception.Result);
            Assert.IsType <ExternalServiceNotFoundException>(exception.Result.InnerException);
        }
Exemple #13
0
        public async void GetJobQueueById_ReturnNull()
        {
            _jobQueueRepository.Setup(r =>
                                      r.GetSingleBySpec(It.IsAny <JobQueueFilterSpecification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((JobQueueFilterSpecification spec, CancellationToken cancellationToken) =>
                          _data.FirstOrDefault(spec.Criteria.Compile()));

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var jobQueue        = await jobQueueService.GetJobQueueById(1, 2);

            Assert.Null(jobQueue);
        }
Exemple #14
0
        public void CancelJobQueue_JobCompletedException()
        {
            _jobQueueRepository.Setup(r =>
                                      r.GetSingleBySpec(It.IsAny <JobQueueFilterSpecification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((JobQueueFilterSpecification spec, CancellationToken cancellationToken) =>
                          _data.FirstOrDefault(spec.Criteria.Compile()));

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.CancelJobQueue(1));

            Assert.IsType <CancelCompletedJobException>(exception?.Result);
        }
Exemple #15
0
        public async void GetJobQueueById_ReturnItem()
        {
            _jobQueueRepository.Setup(r =>
                                      r.GetSingleBySpec(It.IsAny <JobQueueFilterSpecification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((JobQueueFilterSpecification spec, CancellationToken cancellationToken) =>
                          _data.FirstOrDefault(spec.Criteria.Compile()));

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var entity          = await jobQueueService.GetJobQueueById(1);

            Assert.NotNull(entity);
            Assert.Equal(1, entity.Id);
        }
Exemple #16
0
        public async void UpdateJobQueue_ValidItem()
        {
            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            await jobQueueService.UpdateJobQueue(new JobQueue
            {
                Id               = 1,
                ProjectId        = 1,
                CatapultEngineId = "1"
            });

            var jobQueue = _data.First(d => d.Id == 1);

            Assert.Equal("1", jobQueue.CatapultEngineId);
        }
Exemple #17
0
        public async void SendNotification_Success()
        {
            _userRepository.Setup(s => s.GetUsersByIds(It.IsAny <int[]>(), It.IsAny <CancellationToken>())).ReturnsAsync(new List <User>
            {
                new User
                {
                    Id    = 1,
                    Email = "*****@*****.**"
                }
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            await jobQueueService.SendNotification(1, "http://web");
        }
Exemple #18
0
        public async void GetJobQueues_FilterCurrent_ReturnItems()
        {
            _data.Add(new JobQueue
            {
                Id        = 2,
                ProjectId = 1,
                JobType   = JobType.Update,
                Status    = JobStatus.Queued,
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var jobQueues       = await jobQueueService.GetJobQueues(1, JobQueueFilterType.Current);

            Assert.NotEmpty(jobQueues);
        }
Exemple #19
0
        public async void GetJobQueues_FilterFailed_ReturnItems()
        {
            _data.Add(new JobQueue
            {
                Id        = 2,
                ProjectId = 1,
                JobType   = JobType.Create,
                Status    = JobStatus.Error,
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var jobQueues       = await jobQueueService.GetJobQueues(1, JobQueueFilterType.Past);

            Assert.NotEmpty(jobQueues);
        }
Exemple #20
0
        public void AddJobQueue_QueueInProgressException()
        {
            _data.Add(new JobQueue
            {
                Id        = 2,
                ProjectId = 1,
                JobType   = JobType.Update,
                Status    = JobStatus.Queued,
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.AddJobQueue(1, "localhost", JobType.Create, null));

            Assert.IsType <JobQueueInProgressException>(exception?.Result);
        }
Exemple #21
0
        public void GetJobTaskStatus_FilterTypeNotFoundException()
        {
            _data.Add(new JobQueue
            {
                Id             = 2,
                ProjectId      = 1,
                JobType        = JobType.Create,
                Status         = JobStatus.Completed,
                JobTasksStatus = "[{\"Sequence\":1,\"TaskName\":\"Generate\",\"Status\":\"NotExecuted\",\"Remarks\":\"\"}]"
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.GetJobTaskStatus(2, "unknown"));

            Assert.IsType <FilterTypeNotFoundException>(exception?.Result);
        }
Exemple #22
0
        public async void GetJobTaskStatus_FilterAll_ReturnItems()
        {
            _data.Add(new JobQueue
            {
                Id             = 2,
                ProjectId      = 1,
                JobType        = JobType.Create,
                Status         = JobStatus.Completed,
                JobTasksStatus = "[{\"Sequence\":1,\"TaskName\":\"Generate\",\"Status\":\"NotExecuted\",\"Remarks\":\"\"}]"
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            var jobQueues       = await jobQueueService.GetJobTaskStatus(2, JobTaskStatusFilterType.All);

            Assert.NotEmpty(jobQueues);
        }
Exemple #23
0
        public async void CancelJobQueue_ValidItem()
        {
            _data.Add(new JobQueue
            {
                Id        = 2,
                ProjectId = 1,
                JobType   = JobType.Update,
                Status    = JobStatus.Queued,
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            await jobQueueService.CancelJobQueue(2);

            var job = _data.First(d => d.Id == 2);

            Assert.Equal(JobStatus.Cancelled, job.Status);
        }
Exemple #24
0
        public async void GetJobTaskStatus_FilterLatest_ReturnItems()
        {
            _data.Add(new JobQueue
            {
                Id             = 2,
                ProjectId      = 1,
                JobType        = JobType.Create,
                Status         = JobStatus.Completed,
                JobTasksStatus = "[{\"Sequence\":1,\"TaskName\":\"Generate\",\"Status\":\"Pending\",\"Remarks\":\"\"}, {\"Sequence\":1,\"TaskName\":\"Generate\",\"Status\":\"NotExecuted\",\"Remarks\":\"\"}]"
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var jobQueues       = await jobQueueService.GetJobTaskStatus(2, JobTaskStatusFilterType.Latest);

            Assert.Single(jobQueues);
            Assert.Equal(JobTaskStatusType.Pending, jobQueues[0].Status);
        }
Exemple #25
0
        public async void UpdateJobQueue_ValidItem()
        {
            _jobQueueRepository.Setup(r =>
                                      r.GetSingleBySpec(It.IsAny <JobQueueFilterSpecification>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((JobQueueFilterSpecification spec, CancellationToken cancellationToken) =>
                          _data.FirstOrDefault(spec.Criteria.Compile()));

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _userRepository.Object, _jobCounterService.Object, _jobDefinitionService.Object, _textWriter.Object, _notificationProvider.Object);
            await jobQueueService.UpdateJobQueue(new JobQueue
            {
                Id               = 1,
                ProjectId        = 1,
                CatapultEngineId = "1"
            });

            var jobQueue = _data.First(d => d.Id == 1);

            Assert.Equal("1", jobQueue.CatapultEngineId);
        }
Exemple #26
0
        public void JobQueueService_Enqueue_MultipleItems_AllDifferentProprity()
        {
            //AAA - Arrange   ACT Assert


            //Arrange
            var job = new Job
            {
                JobId          = 1,
                JobDescription = "Cotton Candy Making",
                JobPriority    = PriorityLevel.Low
            };
            var job1 = new Job
            {
                JobId          = 1,
                JobDescription = "Cotton Candy Making",
                JobPriority    = PriorityLevel.Medium
            };
            var job2 = new Job
            {
                JobId          = 1,
                JobDescription = "Cotton Candy Making",
                JobPriority    = PriorityLevel.High
            };
            var target = JobQueueService.GetInstance();

            //Act
            target.Enqueue(job);
            target.Enqueue(job2);
            target.Enqueue(job1);
            var result = target.PriorityQue.Dequeue();

            //Assert
            Assert.AreEqual(job2, result);

            var secondndResult = target.PriorityQue.Dequeue();

            Assert.AreEqual(job1, secondndResult);

            var thridResult = target.PriorityQue.Dequeue();

            Assert.AreEqual(job, thridResult);
        }
Exemple #27
0
        public void JobQueueService_Enqueue_OneItem()
        {
            //AAA - Arrange   ACT Assert


            //Arrange
            var job = new Job
            {
                JobId          = 1,
                JobDescription = "Cotton Candy Making",
                JobPriority    = PriorityLevel.Low
            };
            var target = JobQueueService.GetInstance();

            //Act
            target.Enqueue(job);
            var result = target.PriorityQue.Peek();

            //Assert
            Assert.AreEqual(job, result);
        }
Exemple #28
0
        public void UpdateJobQueue_JobProcessedByOtherEngineException()
        {
            _data.Add(new JobQueue
            {
                Id               = 2,
                ProjectId        = 1,
                JobType          = JobType.Update,
                Status           = JobStatus.Processing,
                CatapultEngineId = "1"
            });

            var jobQueueService = new JobQueueService(_jobQueueRepository.Object, _projectRepository.Object, _jobCounterService.Object, _textWriter.Object);
            var exception       = Record.ExceptionAsync(() => jobQueueService.UpdateJobQueue(new JobQueue
            {
                Id               = 2,
                ProjectId        = 1,
                JobType          = JobType.Update,
                Status           = JobStatus.Processing,
                CatapultEngineId = "2"
            }));

            Assert.IsType <JobProcessedByOtherEngineException>(exception?.Result);
        }
Exemple #29
0
        public void JobQueueService_GetInstance()
        {
            var target = JobQueueService.GetInstance();

            Assert.IsInstanceOfType(target, typeof(JobQueueService));
        }
Exemple #30
0
        public static void Main(string[] args)
        {
            _queueService            = new JobQueueService();
            _runnerService           = new RunnerService();
            _runnerPermissionService = new RunnerPermissionService();

            var i = 1;

            AddRunnerInfo();

            while (true)
            {
                if (!_runnerPermissionService.HasPermissions(_runnerId))
                {
                    Console.WriteLine(string.Format("Запуск запрещён"));
                    Thread.Sleep(Delay);
                    continue;
                }
                try
                {
                    Console.WriteLine(string.Format("{0} запуск", i));

                    var accounts    = new HomeService(new JobService(), new BackgroundJobService()).GetAccounts();
                    var spyAccounts = new SpyService(new JobService()).GetSpyAccounts();

                    var overdueQueues = _queueService.RemoveOverdueQueue(OverdueMin);
                    if (overdueQueues != 0)
                    {
                        Console.WriteLine(string.Format("Из очереди исключено {0} задач с превышением времени выполнения ({1} min.)", overdueQueues, OverdueMin));
                    }

                    var queues = _queueService.GetGroupedQueue();

                    Console.WriteLine(string.Format("{0} аккаунтов в очереди", queues.Count));
                    foreach (var queue in queues)
                    {
                        var firstElement = queue.FirstOrDefault();
                        if (firstElement == null)
                        {
                            continue;
                        }

                        Console.WriteLine(string.Format("{0} задач в очереди для аккаунта {1}", queue.Count,
                                                        firstElement.AccountId));

                        AccountViewModel account;
                        if (firstElement.IsForSpy)
                        {
                            var spyAccount = spyAccounts.FirstOrDefault(model => model.Id == firstElement.AccountId);
                            if (spyAccount == null)
                            {
                                continue;
                            }

                            account = new AccountViewModel
                            {
                                Id                        = spyAccount.Id,
                                Login                     = spyAccount.Login,
                                Proxy                     = spyAccount.Proxy,
                                FacebookId                = spyAccount.FacebookId,
                                ProxyLogin                = spyAccount.ProxyLogin,
                                Name                      = spyAccount.Name,
                                ProxyPassword             = spyAccount.ProxyPassword,
                                ConformationDataIsFailed  = spyAccount.ConformationIsFailed,
                                AuthorizationDataIsFailed = spyAccount.AuthorizationDataIsFailed,
                                ProxyDataIsFailed         = spyAccount.ProxyDataIsFailed,
                                Cookie                    = spyAccount.Cookie,
                                PageUrl                   = spyAccount.PageUrl,
                                Password                  = spyAccount.Password
                            };
                        }
                        else
                        {
                            account = accounts.FirstOrDefault(model => model.Id == firstElement.AccountId);
                        }

                        foreach (var currentQueue in queue)
                        {
                            _queueService.MarkIsProcessedQueue(currentQueue); // помечаем задачу как "в процессе"
                        }

                        var queueData  = queue;
                        var runnerTask = new Task(() => RunnerTask(queueData, account));

                        runnerTask.Start();
                    }

                    Console.WriteLine($"ждем {Delay / 1000} сек. для следующего запуска");
                    Thread.Sleep(Delay);
                    i++;

                    _runnerService.UpdateRunnerActivityDate(_runnerId);
                }
                catch (Exception ex)
                {
                    LogWriter.LogWriter.AddToLog(string.Format("{0} ({1})", ex.Message, ex.InnerException));
                }
            }
        }