package org.jgroups.protocols.dns;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jgroups.Address;
public class MockDNSResolverBuilder {
private Map<DNSResolverKey, List<Address>> resolutionMap = new HashMap<>();
private MockDNSResolverBuilder() {
}
public static MockDNSResolverBuilder newDefault() {
return new MockDNSResolverBuilder();
}
public MockDNSResolverBuilder add(String dnsRecord, DNSResolver.DNSRecordType recordType, Address address) {
List<Address> physicalAddresses = resolutionMap.computeIfAbsent(new DNSResolverKey(dnsRecord, recordType), k -> new ArrayList<>());
physicalAddresses.add(address);
return this;
}
public DNSResolver build() {
return (dnsQuery, recordType) -> resolutionMap.get(new DNSResolverKey(dnsQuery, recordType));
}
private static class DNSResolverKey {
final String hostName;
final DNSResolver.DNSRecordType recordType;
public DNSResolverKey(String hostName, DNSResolver.DNSRecordType recordType) {
this.hostName = hostName;
this.recordType = recordType;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DNSResolverKey that = (DNSResolverKey) o;
if (hostName != null ? !hostName.equals(that.hostName) : that.hostName != null) return false;
return recordType == that.recordType;
}
@Override
public int hashCode() {
int result = hostName != null ? hostName.hashCode() : 0;
result = 31 * result + (recordType != null ? recordType.hashCode() : 0);
return result;
}
}
}