示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }