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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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"); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public void JobQueueService_GetInstance() { var target = JobQueueService.GetInstance(); Assert.IsInstanceOfType(target, typeof(JobQueueService)); }
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)); } } }