public string StartCalculation(MethodIdNumberPairContainer methodIdNumberPairContainer) { if (methodIdNumberPairContainer == null || methodIdNumberPairContainer.MethodIdNumberPairs == null || methodIdNumberPairContainer.MethodIdNumberPairs.Count() == 0) { return(null); } var validationResult = _methodIdNumberPairContainerValidator.Validate(methodIdNumberPairContainer); if (!validationResult.IsValid) { throw new ArgumentException(string.Join("\n", validationResult.Errors)); } var taskId = Guid.NewGuid().ToString("N"); var selectedMethods = (from method in _resolver.MethodSets join pair in methodIdNumberPairContainer.MethodIdNumberPairs on method.Id equals pair.Id select new MethodSetTopNumberPair { MethodSet = method, TopNumber = pair.TopNumber }) .ToList(); if (selectedMethods.Count == 0) { return(null); } var tasksToRun = selectedMethods.Select(item => { return(new PrimeCalculationTask { Task = _taskQueue.Enqueue(() => { var performanceRunner = _resolver.GetPerformanceRunner(item.MethodSet.MethodType, item.MethodSet.RunnerType); performanceRunner.GetAllNumbers(item.TopNumber); return performanceRunner.Result; }), MethodSet = item.MethodSet, StartTime = DateTime.UtcNow }); }).ToArray(); if (!_tasks.TryAdd(taskId, new List <PrimeCalculationTask>(tasksToRun))) { _logger.Warn($"Coudn't add the task with id:'{taskId}'."); } return(taskId); }
public void StartCalculationShouldReturnNullForEmptyMethodIdNumberPairs() { var resolver = new Mock <IPrimeFacilitiesResolver>(); var logger = new Mock <ILog>(); var methodIdNumberPairs = new MethodIdNumberPairContainer { MethodIdNumberPairs = new List <MethodIdNumberPair>() }; var validator = new Mock <IValidator <MethodIdNumberPairContainer> >(); var primeService = new PrimeService(resolver.Object, logger.Object, validator.Object); var result = primeService.StartCalculation(methodIdNumberPairs); Assert.IsNull(result); }
public void GevenProperSidGetStatusShouldReturnProperStatus() { var anyMethodSetId = 0; var anyTopNumber = int.MaxValue; var primeService = GetPrimeServiceMock(anyMethodSetId); var methodIdNumberPairs = new MethodIdNumberPairContainer { MethodIdNumberPairs = new List <MethodIdNumberPair> { new MethodIdNumberPair(anyMethodSetId, anyTopNumber) } }; var sid = primeService.StartCalculation(methodIdNumberPairs); var result = primeService.GetStatus(sid); Assert.IsInstanceOfType(result, typeof(PrimeCalculationStatus)); }
public void GevenProperMethodIdNumberPairsStartCalculationShouldReturnSid() { // Arrange var anyMethodSetId = 0; var anyTopNumber = int.MaxValue; var primeService = GetPrimeServiceMock(anyMethodSetId); var methodIdNumberPairs = new MethodIdNumberPairContainer { MethodIdNumberPairs = new List <MethodIdNumberPair> { new MethodIdNumberPair(anyMethodSetId, anyTopNumber) } }; // Act var sid = primeService.StartCalculation(methodIdNumberPairs); // Assert Assert.IsNotNull(sid); }
public void EvenOneInvalidPairInContainerFailsValidation() { var anyMethodSetIdOne = 0; var invalidMethodSetIdTwo = int.MaxValue; var anyTopNumber = PrimeNumber.FIRST_PRIME_NUMBER; var methodIdNumberPairs = new MethodIdNumberPairContainer { MethodIdNumberPairs = new[] { new MethodIdNumberPair(anyMethodSetIdOne, anyTopNumber), new MethodIdNumberPair(invalidMethodSetIdTwo, anyTopNumber) } }; var validator = new MethodIdNumberPairContainerValidator(); var result = validator.Validate(methodIdNumberPairs); Assert.IsFalse(result.IsValid); }
public void ValidContainerPassesValidation() { var anyMethodSetIdOne = 0; var anyMethodSetIdTwo = 1; var anyTopNumber = PrimeNumber.FIRST_PRIME_NUMBER; var methodIdNumberPairs = new MethodIdNumberPairContainer { MethodIdNumberPairs = new[] { new MethodIdNumberPair(anyMethodSetIdOne, anyTopNumber), new MethodIdNumberPair(anyMethodSetIdTwo, anyTopNumber) } }; var validator = new MethodIdNumberPairContainerValidator(); var result = validator.Validate(methodIdNumberPairs); Assert.IsTrue(result.IsValid); }
public void StartCalculationShouldReturnNullIfNoMantchFoundForMethodIdNumberPairs() { var notExistingMethodId = int.MaxValue; var anyTopNumber = int.MaxValue; var resolver = new Mock <IPrimeFacilitiesResolver>(); var logger = new Mock <ILog>(); var validator = new Mock <IValidator <MethodIdNumberPairContainer> >(); validator.Setup(x => x.Validate(It.IsAny <MethodIdNumberPairContainer>())).Returns(new ValidationResultTest { IsValidEx = true }); var methodIdNumberPairs = new MethodIdNumberPairContainer { MethodIdNumberPairs = new List <MethodIdNumberPair> { new MethodIdNumberPair(notExistingMethodId, anyTopNumber) } }; var primeService = new PrimeService(resolver.Object, logger.Object, validator.Object); var result = primeService.StartCalculation(methodIdNumberPairs); Assert.IsNull(result); }