package net.windwards.dnsfrontend.util;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.PersistenceConfiguration;
import net.windwards.dnsfrontend.api.Sender;
import net.windwards.dnsfrontend.frontend.Query;
import net.windwards.dnsfrontend.frontend.UDPQuery;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.WriterAppender;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.DClass;
import org.xbill.DNS.Message;
import org.xbill.DNS.Name;
import org.xbill.DNS.Record;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.nio.channels.DatagramChannel;
import java.util.List;
public class TestUtils {
private static int cacheNo = 0;
public static Ehcache getEhcache() {
CacheManager mgr = CacheManager.getInstance();
CacheConfiguration conf = new CacheConfiguration("cache-" + cacheNo++, 0)
.persistence(new PersistenceConfiguration()
.strategy(PersistenceConfiguration.Strategy.NONE));
conf.setTimeToIdleSeconds(10);
Cache cache = new Cache(conf);
mgr.addCache(cache);
return cache;
}
public static Query getQuery(final List<Message> replies) throws TextParseException, UnknownHostException {
Message message = Message.newQuery(Record.newRecord(new Name("foo.example.com."), Type.A, DClass.IN));
return getQuery(replies, message);
}
public static Query getQuery(final List<Message> replies, Message message) throws UnknownHostException {
Sender sender = new Sender() {
@Override
public void send(byte[] data, InetSocketAddress recipient) throws IOException {
replies.add(new Message(data));
}
};
DatagramPacket packet = new DatagramPacket(
message.toWire(), message.toWire().length, InetAddress.getByName("127.0.0.2"), 0);
return new UDPQuery(packet, sender);
}
public static Record getReplyRecord() throws TextParseException, UnknownHostException {
return new ARecord(
new Name("foo.example.com."),
DClass.IN,
1800,
InetAddress.getByName("127.0.0.1"));
}
public static DatagramChannel getDatagramChannel(int port) throws IOException {
SocketAddress local = new InetSocketAddress(0);
SocketAddress remote = new InetSocketAddress("localhost", port);
DatagramChannel channel = DatagramChannel.open();
channel.configureBlocking(false);
DatagramSocket socket = channel.socket();
socket.bind(local);
channel.connect(remote);
return channel;
}
public static void setupLogging() {
Logger root = Logger.getRootLogger();
WriterAppender appender = new ConsoleAppender();
appender.setThreshold(Level.ALL);
root.removeAllAppenders();
root.addAppender(appender);
appender.setName("dns-frontend");
appender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
appender.activateOptions();
}
}