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()); }
public async Task ShouldBuildWithIpAddressWhenGettingIpAddressDetails() { string ipAddress = "testIpAddress"; List <IpAddressDetails> resultFromDao = GetDefaultDaoResult(ipAddress); DateTime startDate = DateTime.MinValue; DateTime endDate = DateTime.MaxValue; A.CallTo(() => _ipAddressDetailsApiDao.GetIpAddressDetails(ipAddress, startDate, endDate)).Returns(resultFromDao); await _ipAddressDetailsService.GetIpAddressDetails(ipAddress, startDate, endDate); A.CallTo(() => _ipAddressDateRangeDetailsBuilder.SetIpAddress(ipAddress)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _ipAddressDateRangeDetailsBuilder.SetIpAddress(A <string> ._)) .MustHaveHappenedOnceExactly(); }