Example #1
0
        public async Task ShouldReturnResultOfBuilderWhenGettingDetails()
        {
            string   ipAddress = "testIpAddress";
            DateTime startDate = DateTime.MinValue;
            DateTime endDate   = DateTime.MaxValue;

            List <IpAddressDetails> resultFromDao = GetDefaultDaoResult(ipAddress);

            A.CallTo(() => _ipAddressDetailsApiDao.GetIpAddressDetails(ipAddress, startDate, endDate)).Returns(resultFromDao);

            IpAddressDateRangeDetails resultFromBuilder = new IpAddressDateRangeDetails();

            A.CallTo(() => _ipAddressDateRangeDetailsBuilder.GetDetails()).Returns(resultFromBuilder);

            IpAddressDateRangeDetails result = await _ipAddressDetailsService.GetIpAddressDetails(ipAddress, startDate, endDate);

            Assert.AreSame(resultFromBuilder, result);
        }
        public async Task <IpAddressDateRangeDetails> GetIpAddressDetails(string ipAddress, DateTime startDate, DateTime endDate)
        {
            List <IpAddressDetails> ipAddressDetailsList = await _ipAddressDetailsApiDao.GetIpAddressDetails(ipAddress, startDate, endDate);

            _ipAddressDateRangeDetailsBuilder.SetIpAddress(ipAddress);

            foreach (IpAddressDetails ipAddressDetails in ipAddressDetailsList.OrderBy(x => x.Date))
            {
                // Add this date's AS Info
                _ipAddressDateRangeDetailsBuilder.AddAsInfo(ipAddressDetails.Date, ipAddressDetails.AsNumber.GetValueOrDefault(0), ipAddressDetails.Description, ipAddressDetails.CountryCode);

                // Add this date's BlockList info
                ipAddressDetails.BlockListOccurrences
                .GroupBy(x => x.Source)
                .Select(sourceGroup => new
                {
                    Source = sourceGroup.Key,
                    Flags  = sourceGroup.Select(x => new Flag(x.Flag, x.Description)).ToList()
                })
                .ToList()
                .ForEach(source => _ipAddressDateRangeDetailsBuilder.AddBlockListDetail(ipAddressDetails.Date, source.Source, source.Flags));

                // Add this date's ReverseDNS info (using forwardMatch if available)
                if (ipAddressDetails.ReverseDnsResponses.Any())
                {
                    List <ReverseDnsResponse> orderedByHost = ipAddressDetails.ReverseDnsResponses
                                                              .OrderBy(x => x.Host)
                                                              .ToList();

                    List <ReverseDnsResponse> matchingHosts = orderedByHost
                                                              .Where(x => x.IpAddresses.Contains(ipAddress))
                                                              .ToList();

                    ReverseDnsResponse bestHost = matchingHosts
                                                  .Concat(orderedByHost)
                                                  .First();

                    _ipAddressDateRangeDetailsBuilder.AddReverseDnsDetail(ipAddressDetails.Date, bestHost.Host, bestHost.OrganisationalDomain, matchingHosts.Any());
                }
            }

            return(_ipAddressDateRangeDetailsBuilder.GetDetails());
        }