Exemplo n.º 1
0
        public async Task ExecuteAsync_NewResolvedRecords_UpdateDNSZone(FlatRecordType recordType, string[] address1, string[] address2)
        {
            // Arrange

            List <FlatTargetRecord> targetRecords = address2.Select(x => new FlatTargetRecord(x)).ToList();

            Mock <IZone> zone = BuildZoneResolver(new FlatRecordSet
            {
                Adresses   = address1,
                Target     = HostName,
                RecordType = recordType
            });

            Mock <IResolver> resolver = BuildMockResolver(HostName, recordType, targetRecords);

            DNSFlattener flattener = new DNSFlattener(zone.Object, resolver.Object);

            // Act

            await flattener.ExecuteAsync();

            // Assert

            zone.Verify(x => x.UpdateRecordSetAsync(It.IsAny <FlatRecordSet>(), targetRecords), Times.Once());
        }
        private async Task <Response> ResolveAsync(string name, FlatRecordType type)
        {
            string endpoint = string.Format(GoogleAPI, name, type);

            string json = await _httpClient.GetStringAsync(endpoint);

            return(JsonConvert.DeserializeObject <Response>(json));
        }
Exemplo n.º 3
0
        public async Task <List <FlatTargetRecord> > ResolveNameAsync(string name, FlatRecordType type)
        {
            AddressFamily adressFamily = type.ToAddressFamily();

            IPHostEntry addresses = await _localDNS.GetHostEntryAsync(name);

            return(addresses.ToTargetRecord(adressFamily));
        }
Exemplo n.º 4
0
        private static Mock <IResolver> BuildMockResolver(string name, FlatRecordType recordType, List <FlatTargetRecord> targetRecords)
        {
            Mock <IResolver> resolver = new Mock <IResolver>();

            resolver.Setup(x => x.ResolveNameAsync(name, recordType))
            .ReturnsAsync(targetRecords);

            return(resolver);
        }
Exemplo n.º 5
0
 private string[] ParseAdresses(RecordSet set, FlatRecordType type)
 {
     if (type == FlatRecordType.A)
     {
         return(set.ARecords.Select(x => x.Ipv4Address).ToArray());
     }
     if (type == FlatRecordType.AAAA)
     {
         return(set.AaaaRecords.Select(x => x.Ipv6Address).ToArray());
     }
     throw null;
 }
Exemplo n.º 6
0
        public static RecordType ToAzureDnsRecordSet(this FlatRecordType recordType)
        {
            if (recordType == FlatRecordType.A)
            {
                return(RecordType.A);
            }
            if (recordType == FlatRecordType.AAAA)
            {
                return(RecordType.AAAA);
            }

            // TODO: Custom exception, as we have matched all known types.
            throw new Exception("Unknown " + nameof(FlatRecordType) + " " + recordType + " no matching Azure DNS Record Type");
        }
Exemplo n.º 7
0
        public static AddressFamily ToAddressFamily(this FlatRecordType recordType)
        {
            if (recordType == FlatRecordType.A)
            {
                return(AddressFamily.InterNetwork);
            }
            if (recordType == FlatRecordType.AAAA)
            {
                return(AddressFamily.InterNetworkV6);
            }

            // TODO: Custom exception, as we have matched all known types.
            throw new Exception("Unknown " + nameof(FlatRecordType) + " " + recordType + " no matching AddressFamily");
        }
Exemplo n.º 8
0
        private FlatRecordSet ParseAzureRecordSet(RecordSet set)
        {
            FlatRecordType type = ParseType(set.Type);

            return(new FlatRecordSet
            {
                ID = set.Id,
                ETag = set.Etag,
                Target = set.Metadata[RecordTargetTag].TrimEnd('.'),
                RecordType = type,
                TTL = set.TTL ?? -1,
                Adresses = ParseAdresses(set, type)
            });
        }
Exemplo n.º 9
0
        public List <FlatTargetRecord> ToFlatTargetRecord(FlatRecordType type)
        {
            List <FlatTargetRecord> records = new List <FlatTargetRecord>(Answer.Length);

            foreach (Answer answer in Answer)
            {
                if (answer.Type == (int)type)
                {
                    records.Add(new FlatTargetRecord(answer.Data, answer.TTL));
                }
            }

            return(records);
        }
Exemplo n.º 10
0
        public async Task ExecuteAsync_SameResolvedRecords_DoNotUpdateDNSZone(FlatRecordType recordType, params string[] address)
        {
            // Arrange

            Mock <IZone> zone = BuildZoneResolver(new FlatRecordSet
            {
                Adresses   = address,
                Target     = HostName,
                RecordType = recordType
            });

            Mock <IResolver> resolver = BuildMockResolver(HostName, recordType, address);

            DNSFlattener flattener = new DNSFlattener(zone.Object, resolver.Object);

            // Act

            await flattener.ExecuteAsync();

            // Assert

            zone.Verify(x => x.UpdateRecordSetAsync(It.IsAny <FlatRecordSet>(), It.IsAny <List <FlatTargetRecord> >()), Times.Never());
        }
        public async Task <List <FlatTargetRecord> > ResolveNameAsync(string name, FlatRecordType type)
        {
            Response response = await ResolveAsync(name, type);

            return(response.ToFlatTargetRecord(type));
        }
Exemplo n.º 12
0
 private static Mock <IResolver> BuildMockResolver(string name, FlatRecordType recordType, params string[] targetRecords) =>
 BuildMockResolver(name, recordType, targetRecords.Select(x => new FlatTargetRecord(x)).ToList());
Exemplo n.º 13
0
        public async Task ResolveNameAsync_MixedAddressAndRecordTypes_OnlyIncludesVaildRecords(string address, FlatRecordType recordType)
        {
            // Arrange
            Mock <ILocalDNS> mockLocalDNS = BuildMockLocalDNS(IPv4Address, IPv6Address);

            SystemDNSResolver resolver = new SystemDNSResolver(mockLocalDNS.Object);

            // Act

            List <FlatTargetRecord> result = await resolver.ResolveNameAsync(It.IsAny <string>(), recordType);

            // Assert

            Assert.Equal(address, result.Single().Address);
        }
Exemplo n.º 14
0
        public async Task ResolveNameAsync_SingleAddressIncorrectRecordType_DoesNotIncludeIncorrectRecords(string address, FlatRecordType recordType)
        {
            // Arrange

            Mock <ILocalDNS> mockLocalDNS = BuildMockLocalDNS(address);

            SystemDNSResolver resolver = new SystemDNSResolver(mockLocalDNS.Object);

            // Act

            List <FlatTargetRecord> result = await resolver.ResolveNameAsync(It.IsAny <string>(), recordType);

            // Assert

            Assert.Empty(result);
        }
Exemplo n.º 15
0
        public async Task ResolveNameAsync_SingleAddressCorrectRecordType_HasAdress(string address, FlatRecordType recordType)
        {
            // Arrange

            Mock <ILocalDNS> mockLocalDNS = BuildMockLocalDNS(address);

            SystemDNSResolver resolver = new SystemDNSResolver(mockLocalDNS.Object);

            // Act

            List <FlatTargetRecord> result = await resolver.ResolveNameAsync(It.IsAny <string>(), recordType);

            // Assert

            Assert.Equal(address, result.Single().Address);
        }