diff options
| author | Markus Alexander Kuppe | 2010-07-14 16:22:11 +0000 |
|---|---|---|
| committer | Markus Alexander Kuppe | 2010-07-14 16:22:11 +0000 |
| commit | 5b8d512eced688c6cf1b1517d8b07e1e2b1a0e92 (patch) | |
| tree | c7279e32da85e64671f3fdbf117ba732a5990aea | |
| parent | b3cedceb7767b6c09cbe5a087895df48ae529af5 (diff) | |
| download | org.eclipse.ecf-5b8d512eced688c6cf1b1517d8b07e1e2b1a0e92.tar.gz org.eclipse.ecf-5b8d512eced688c6cf1b1517d8b07e1e2b1a0e92.tar.xz org.eclipse.ecf-5b8d512eced688c6cf1b1517d8b07e1e2b1a0e92.zip | |
NEW - bug 314999: [Discovery][DNS-SD] Implement IDiscoveryAdvertiser
https://bugs.eclipse.org/bugs/show_bug.cgi?id=314999
2 files changed, 83 insertions, 29 deletions
diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserComparator.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserComparator.java index 2f0637ea1..0a1dffac7 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserComparator.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserComparator.java @@ -26,36 +26,48 @@ public class DnsSdAdvertiserComparator implements Comparator { */ public int compare(final Object arg0, final Object arg1) { int result = -1; - if (arg0 instanceof IServiceInfo && arg1 instanceof List) { + if (arg0 instanceof IServiceInfo) { final IServiceInfo serviceInfo = (IServiceInfo) arg0; - result = (serviceInfo.getServiceProperties().size() + 5) * -1; - - final List records = (List) arg1; - for (final Iterator itr = records.iterator(); itr.hasNext();) { - final Record record = (Record) itr.next(); - if(record instanceof SRVRecord) { - final SRVRecord srvRec = (SRVRecord) record; - final String name = srvRec.getName().toString(); - if(name.startsWith("_" + DnsSdTestHelper.REG_SCHEME + "._" + DnsSdTestHelper.PROTO)) { - final String target = srvRec.getTarget().toString(); - result += serviceInfo.getPriority() == srvRec.getPriority() ? 1 : -1; - result += serviceInfo.getWeight() == srvRec.getWeight() ? 1 : -1; - result += 3600 == srvRec.getTTL() ? 1 : -1; - result += serviceInfo.getLocation().getHost().equals(target.substring(0, target.length() - 1)) ? 1 : -1; - result += serviceInfo.getLocation().getPort() == srvRec.getPort() ? 1 : -1; - } - } else if(record instanceof TXTRecord) { - final String[] str = record.rdataToString().split("="); - final String key = str[0].substring(1); - final String value = str[1].substring(0, str[1].length() - 1); - final Object property = serviceInfo.getServiceProperties().getProperty(key); - if(property != null) { - result += value.equals(property.toString()) ? 1 : -1; - } else { - result += -1; + + if (arg1 instanceof List) { + result = (serviceInfo.getServiceProperties().size() + 5) * -1; + + final List records = (List) arg1; + for (final Iterator itr = records.iterator(); itr.hasNext();) { + final Record record = (Record) itr.next(); + if(record instanceof SRVRecord) { + result = compareSrvRecord(result, serviceInfo, record); + } else if(record instanceof TXTRecord) { + final String[] str = record.rdataToString().split("="); + final String key = str[0].substring(1); + final String value = str[1].substring(0, str[1].length() - 1); + final Object property = serviceInfo.getServiceProperties().getProperty(key); + if(property != null) { + result += value.equals(property.toString()) ? 1 : -1; + } else { + result += -1; + } } } + } else if(arg1 instanceof SRVRecord) { + result = compareSrvRecord(-5, serviceInfo, (SRVRecord) arg1); } + } + return result; + } + + private int compareSrvRecord(int result, final IServiceInfo serviceInfo, + final Record record) { + final SRVRecord srvRec = (SRVRecord) record; + final String name = srvRec.getName().toString(); + final String string = "_" + DnsSdTestHelper.REG_SCHEME + "._" + DnsSdTestHelper.PROTO; + if(name.startsWith(string)) { + final String target = srvRec.getTarget().toString(); + result += serviceInfo.getPriority() == srvRec.getPriority() ? 1 : -1; + result += serviceInfo.getWeight() == srvRec.getWeight() ? 1 : -1; + result += 3600 == srvRec.getTTL() ? 1 : -1; + result += serviceInfo.getLocation().getHost().equals(target.substring(0, target.length() - 1)) ? 1 : -1; + result += serviceInfo.getLocation().getPort() == srvRec.getPort() ? 1 : -1; } return result; } diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java index 8f76c3c83..dcd69c02c 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java @@ -10,6 +10,7 @@ ******************************************************************************/ package org.eclipse.ecf.tests.provider.dnssd; +import java.io.IOException; import java.util.Iterator; import java.util.List; @@ -17,12 +18,16 @@ import org.eclipse.ecf.core.ContainerConnectException; import org.eclipse.ecf.discovery.IDiscoveryAdvertiser; import org.eclipse.ecf.discovery.IDiscoveryLocator; import org.eclipse.ecf.tests.discovery.AbstractDiscoveryTest; +import org.xbill.DNS.DClass; import org.xbill.DNS.Message; import org.xbill.DNS.Name; import org.xbill.DNS.Record; +import org.xbill.DNS.SRVRecord; import org.xbill.DNS.SimpleResolver; import org.xbill.DNS.TSIG; +import org.xbill.DNS.Type; import org.xbill.DNS.Update; +import org.xbill.DNS.ZoneTransferException; import org.xbill.DNS.ZoneTransferIn; public class DnsSdAdvertiserServiceTest extends AbstractDiscoveryTest { @@ -95,7 +100,6 @@ public class DnsSdAdvertiserServiceTest extends AbstractDiscoveryTest { assertTrue("Mismatch between DNS response and IServiceInfo", comparator.compare(serviceInfo, xfr.run()) == 0); } - /** * Tests that a register is handled correctly when no key is present * for that domain and the underlying ddns call fails @@ -107,7 +111,45 @@ public class DnsSdAdvertiserServiceTest extends AbstractDiscoveryTest { /* (non-Javadoc) * @see org.eclipse.ecf.tests.provider.dnssd.DnsSdDiscoveryServiceTest#testUnregisterService() */ - public void testUnregisterService() throws ContainerConnectException { + public void testUnregisterService() throws ContainerConnectException, IOException, ZoneTransferException { + + // create a service manually + Name origin = Name.fromString(DnsSdTestHelper.REG_DOMAIN + "."); + Name type = Name.fromString("_" + DnsSdTestHelper.REG_SCHEME + "._" + DnsSdTestHelper.PROTO, origin); + String s = serviceInfo.getPriority() + " " + + serviceInfo.getWeight() + " " + + serviceInfo.getLocation().getPort() + " " + + serviceInfo.getLocation().getHost() + "."; + Record record = Record.fromString(type, Type.SRV, DClass.IN, 3600, s, origin); + Update update = new Update(origin); + update.add(record); + SimpleResolver resolver = new SimpleResolver(DnsSdTestHelper.DNS_SERVER); + resolver.setTCP(true); + resolver.setTSIGKey(new TSIG(DnsSdTestHelper.TSIG_KEY_NAME, DnsSdTestHelper.TSIG_KEY)); + Message response = resolver.send(update); + int rcode = response.getRcode(); + assertTrue("", rcode == 0); + + // unregister via ECF discovery + discoveryAdvertiser.unregisterService(serviceInfo); + + // check SRV record is gone + ZoneTransferIn xfr = ZoneTransferIn.newAXFR(new Name(DnsSdTestHelper.REG_DOMAIN), DnsSdTestHelper.DNS_SERVER, null); + List records = xfr.run(); + for (Iterator itr = records.iterator(); itr.hasNext();) { + record = (Record) itr.next(); + if(record instanceof SRVRecord) { + if(comparator.compare(serviceInfo, record) >= 0) { + fail("Service not removed/unregisterd"); + } + } + } + } + + /** + * Test that all service properties are removed along with the service + */ + public void testUnregisterServiceWithProperties() { fail("Not yet implemented"); } @@ -115,7 +157,7 @@ public class DnsSdAdvertiserServiceTest extends AbstractDiscoveryTest { * @see org.eclipse.ecf.tests.provider.dnssd.DnsSdDiscoveryServiceTest#testUnregisterAllServices() */ public void testUnregisterAllServices() throws ContainerConnectException { - //TODO make sure not to accidentally remove preexisting SRV records + //TODO make sure not to accidentally remove pre existing SRV records fail("Not yet implemented"); } } |
