Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Alexander Kuppe2010-07-14 16:22:11 +0000
committerMarkus Alexander Kuppe2010-07-14 16:22:11 +0000
commit5b8d512eced688c6cf1b1517d8b07e1e2b1a0e92 (patch)
treec7279e32da85e64671f3fdbf117ba732a5990aea
parentb3cedceb7767b6c09cbe5a087895df48ae529af5 (diff)
downloadorg.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
-rw-r--r--tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserComparator.java64
-rw-r--r--tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java48
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");
}
}

Back to the top