blob: b24550cbee7e82709b212900a07c2cb4d502e811 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Versant Corp.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Kuppe (mkuppe <at> versant <dot> com) - initial API and implementation
******************************************************************************/
package ch.ethz.iks.slp.test;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;
import junit.framework.Assert;
import junit.framework.TestCase;
import ch.ethz.iks.slp.ServiceLocationEnumeration;
import ch.ethz.iks.slp.ServiceLocationException;
import ch.ethz.iks.slp.ServiceType;
import ch.ethz.iks.slp.ServiceURL;
public class SelfDiscoveryTest extends TestCase {
private final String HOST_AND_PORT = System.getProperty("net.slp.tests.hostAndPort", "gantenbein:123");
private ServiceURL service;
private Dictionary properties;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
public void setUp() throws InterruptedException {
try {
service = new ServiceURL("service:osgi://" + HOST_AND_PORT, 10800);
int i = 0;
properties = new Hashtable();
properties.put("attr", Boolean.FALSE);
properties.put("attr" + i++, "value");
properties.put("attr" + i++, "foo,bar");
properties.put("attr" + i++, "foo:bar");
properties.put("attr" + i++, "foo bar");
TestActivator.advertiser.register(service, properties);
} catch (ServiceLocationException e) {
Assert.fail(e.getMessage());
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
public void tearDown() throws InterruptedException {
try {
TestActivator.advertiser.deregister(service);
} catch (ServiceLocationException e) {
Assert.fail(e.getMessage());
e.printStackTrace();
}
}
/**
* Test method for
* {@link ch.ethz.iks.slp.Locator}.
*/
public void testService() throws Exception {
int count = 0;
for (ServiceLocationEnumeration services = TestActivator.locator
.findServices(new ServiceType("service:osgi"), null, null); services
.hasMoreElements();) {
assertEquals(services.next().toString(),
"service:osgi://" + HOST_AND_PORT);
count++;
}
assertEquals(1, count);
}
/**
* Test method for
* {@link ch.ethz.iks.slp.Locator}.
*/
public void testAttributes() throws Exception {
int count = 0;
// not fast but DRY
outter:
for (ServiceLocationEnumeration attributes = TestActivator.locator
.findAttributes(new ServiceType("service:osgi"), null, null); attributes
.hasMoreElements();) {
final String attribute = attributes.next().toString();
// inner loop over the dict
Enumeration elements = properties.keys();
for(;elements.hasMoreElements();) {
String key= elements.nextElement().toString();
String value = properties.get(key).toString();
if(attribute.equals(("(" + key + "=" + value + ")"))) {
count++;
continue outter;
}
}
fail(attribute + " not found in reference " + properties.toString());
}
assertEquals(properties.size(), count);
}
/**
* Test method for
* {@link ch.ethz.iks.slp.Locator}.
*/
public void testFilter() throws Exception {
int count = 0;
for (ServiceLocationEnumeration services = TestActivator.locator
.findServices(new ServiceType("service:osgi"), null,
"(attr=false)"); services.hasMoreElements();) {
assertEquals(services.next().toString(),
"service:osgi://" + HOST_AND_PORT);
count++;
}
assertEquals(1, count);
}
/**
* Test method for
* {@link ch.ethz.iks.slp.Locator}.
*/
public void testFilterWithWildcard() throws Exception {
int count = 0;
for (ServiceLocationEnumeration services = TestActivator.locator
.findServices(new ServiceType("service:osgi"), null, "(attr=*)"); services
.hasMoreElements();) {
assertEquals(services.next().toString(),
"service:osgi://" + HOST_AND_PORT);
count++;
}
assertEquals(1, count);
}
/**
* Test method for
* {@link ch.ethz.iks.slp.Locator}.
*
* [1] http://www.faqs.org/rfcs/rfc1960.html
* Cite: If a <value> must contain one of the characters '*' or '(' or ')', these
* characters should be escaped by preceding them with the backslash '\' character.
*/
public void testFilterWithBrokenParenthesis() throws Exception {
try {
// correct filter is (service-type=\(service:osgi\))
TestActivator.locator.findServices(new ServiceType("service:osgi"), null,
"(service-type=(service:osgi))");
} catch (ServiceLocationException e) {
if(e.getErrorCode() == 20) {
return;
}
}
fail();
}
}