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)); }
public async Task <List <FlatTargetRecord> > ResolveNameAsync(string name, FlatRecordType type) { AddressFamily adressFamily = type.ToAddressFamily(); IPHostEntry addresses = await _localDNS.GetHostEntryAsync(name); return(addresses.ToTargetRecord(adressFamily)); }
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); }
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; }
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"); }
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"); }
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) }); }
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); }
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)); }
private static Mock <IResolver> BuildMockResolver(string name, FlatRecordType recordType, params string[] targetRecords) => BuildMockResolver(name, recordType, targetRecords.Select(x => new FlatTargetRecord(x)).ToList());
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); }
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); }
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); }