📄 dnsservertest.java
字号:
/**************************************************************** * Licensed to the Apache Software Foundation (ASF) under one * * or more contributor license agreements. See the NOTICE file * * distributed with this work for additional information * * regarding copyright ownership. The ASF licenses this file * * to you under the Apache License, Version 2.0 (the * * "License"); you may not use this file except in compliance * * with the License. You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, * * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * * KIND, either express or implied. See the License for the * * specific language governing permissions and limitations * * under the License. * ****************************************************************/package org.apache.james.dnsserver;import org.apache.avalon.framework.configuration.Configuration;import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;import org.apache.james.test.mock.avalon.MockLogger;import org.xbill.DNS.Name;import org.xbill.DNS.Record;import org.xbill.DNS.Resolver;import org.xbill.DNS.SetResponse;import org.xbill.DNS.TextParseException;import org.xbill.DNS.Zone;import java.io.ByteArrayInputStream;import java.util.Collection;import java.util.Iterator;import junit.framework.TestCase;public class DNSServerTest extends TestCase { private TestableDNSServer dnsServer; /** * Please note that this is an hardcoded test that works because * www.pippo.com. is an alias to pippo.com and pippo.com has * "pippo.com.inbound.mxlogic.net." as its mx record. * This is the first domain with a record proving a previous james bug. * This test will be invalidated by any change in the pippo.com dns records * * @param args * @throws Exception */ public void testINARecords() throws Exception { Zone z = new Zone(Name.fromString("pippo.com."),getClass().getResource("pippo-com.zone").getFile()); dnsServer.setResolver(null); dnsServer.setLookupper(new ZoneLookupper(z)); Collection records = dnsServer.findMXRecords("www.pippo.com."); assertEquals(1, records.size()); assertEquals("pippo.com.inbound.mxlogic.net.", records.iterator() .next()); } /** * @throws Exception */ public void testMXCatches() throws Exception { Zone z = new Zone(Name.fromString("test-zone.com."),getClass().getResource("test-zone-com.zone").getFile()); dnsServer.setResolver(null); dnsServer.setLookupper(new ZoneLookupper(z)); Collection res = dnsServer.findMXRecords("test-zone.com."); try { res.add(new Object()); fail("MX Collection should not be modifiable"); } catch (UnsupportedOperationException e) { } assertEquals(1,res.size()); assertEquals("mail.test-zone.com.",res.iterator().next()); } /** * Please note that this is an hardcoded test that works because * brandilyncollins.com. has an MX record that point to mxmail.register.com * and this is a CNAME to the real address. * This test will be invalidated by any change in the brandilyncollins.com dns records * * @param args * @throws Exception */ public void testCNAMEasMXrecords() throws Exception { Zone z = new Zone(Name.fromString("brandilyncollins.com."),getClass().getResource("brandilyncollins-com.zone").getFile()); dnsServer.setResolver(null); dnsServer.setLookupper(new ZoneLookupper(z)); Iterator records = dnsServer.getSMTPHostAddresses("brandilyncollins.com."); assertEquals(true, records.hasNext()); } protected void setUp() throws Exception { dnsServer = new TestableDNSServer(); DefaultConfigurationBuilder db = new DefaultConfigurationBuilder(); Configuration c = db.build( new ByteArrayInputStream("<dnsserver><autodiscover>true</autodiscover><authoritative>false</authoritative></dnsserver>".getBytes()), "dnsserver"); dnsServer.enableLogging(new MockLogger()); dnsServer.configure(c); dnsServer.initialize(); } protected void tearDown() throws Exception { dnsServer.setLookupper(null); dnsServer.dispose(); } private class ZoneLookupper implements Lookupper { private final Zone z; private ZoneLookupper(Zone z) { super(); this.z = z; } public SetResponse lookup(Name name, int type) { SetResponse s = z.findRecords(name,type); System.out.println("Zone Lookup: "+name+" "+type+" = "+s); return s; } } private interface Lookupper { SetResponse lookup(Name name, int type); } private final class TestableDNSServer extends DNSServer { private Lookupper lookupper; public void setLookupper(Lookupper l) { this.lookupper = l; } public Record[] lookup(String name, int type) { if (lookupper != null) { try { SetResponse lookup = lookupper.lookup(Name.fromString(name), type); if (lookup != null && lookup.isSuccessful()) { return processSetResponse(lookup); } else { return null; } } catch (TextParseException e) { e.printStackTrace(); return null; } } else { return super.lookup(name, type); } } public void setResolver(Resolver r) { resolver = r; } public Resolver getResolver() { return resolver; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -