package aQute.bnd.deployer.obr;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import aQute.bnd.deployer.repository.providers.ObrUtil;
import aQute.bnd.osgi.Processor;
import aQute.bnd.service.Strategy;
import aQute.bnd.version.Version;
import aQute.lib.io.IO;
import junit.framework.TestCase;
import test.helpers.Sed;
import test.lib.NanoHTTPD;
public class OBRTest extends TestCase {
private static final String obrSrc = "testdata/fullobr.xml";
private static final String obrDst = "testdata/fullobr.tmp.xml";
private static OBR obr;
private static NanoHTTPD httpd;
private static int httpdPort;
private static Processor reporter;
@Override
protected void setUp() throws Exception {
httpd = new NanoHTTPD(0, IO.getFile("testdata/http"));
httpdPort = httpd.getPort();
Sed.file2File(obrSrc, "__httpdPort__", Integer.toString(httpdPort), obrDst);
obr = new OBR();
Map<String,String> config = new HashMap<String,String>();
config.put("location", new File(obrDst).getAbsoluteFile().toURI().toString());
File tmpFile = File.createTempFile("cache", ".tmp");
tmpFile.deleteOnExit();
File cacheDir = new File(tmpFile.getAbsolutePath() + ".dir");
obr.setProperties(config);
obr.setCacheDirectory(cacheDir);
reporter = new Processor();
obr.setReporter(reporter);
}
@Override
protected void tearDown() throws Exception {
httpd.stop();
File[] cachedFiles = obr.getCacheDirectory().listFiles();
if (cachedFiles != null) {
for (File file : cachedFiles) {
file.delete();
}
}
obr.getCacheDirectory().delete();
new File(obrDst).delete();
}
public static void testSetProperties() throws Exception {
OBR obr2 = new OBR();
Map<String,String> props = new HashMap<String,String>();
props.put("location", IO.getFile("testdata/fullobr.xml").toURI().toString());
obr2.setProperties(props);
obr2.setCacheDirectory(obr.getCacheDirectory());
Collection<URI> indexes = obr2.getIndexLocations();
assertEquals(1, indexes.size());
assertEquals(IO.getFile("testdata/fullobr.xml").toURI().toString(), indexes.iterator().next().toString());
assertEquals(obr.getCacheDirectory(), obr2.getCacheDirectory());
}
public static void testCacheDirectoryNotSpecified() {
OBR obr2 = new OBR();
Map<String,String> props = new HashMap<String,String>();
props.put("location", IO.getFile("testdata/fullobr.xml").toURI().toString());
obr2.setProperties(props);
}
public static void testGetLatest() throws Exception {
File[] files = obr.get("name.njbartlett.osgi.emf.minimal", "latest");
assertTrue(reporter.getErrors().isEmpty());
assertNotNull(files);
assertEquals(1, files.length);
assertEquals("name.njbartlett.osgi.emf.minimal-2.7.0.jar", files[0].getName());
}
public static void testGetAll() throws Exception {
File[] files = obr.get("name.njbartlett.osgi.emf.xmi", null);
assertNotNull(files);
assertEquals(2, files.length);
assertEquals("name.njbartlett.osgi.emf.xmi-2.5.0.jar", files[0].getName());
assertEquals("name.njbartlett.osgi.emf.xmi-2.7.0.jar", files[1].getName());
}
public static void testGetHttp() throws Exception {
File[] files = obr.get("org.example.dummy", "latest");
assertNotNull(files);
assertEquals(1, files.length);
assertNotNull(files[0]);
assertEquals("dummybundle.jar", files[0].getName());
}
public static void testGetBsnLowest() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", null, Strategy.LOWEST, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.5.0.jar", result.getName());
}
public static void testGetBsnHighest() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", null, Strategy.HIGHEST, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.7.0.jar", result.getName());
}
public static void testGetBsnLowestWithRange() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", "2.5.1", Strategy.LOWEST, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.7.0.jar", result.getName());
}
public static void testGetBsnHighestWithRange() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", "[2.5,2.7)", Strategy.HIGHEST, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.5.0.jar", result.getName());
}
/*
* public void testGetPackageLowest() throws Exception { Map<String, String>
* props = new HashMap<String, String>(); props.put("package",
* "org.eclipse.emf.common"); File result = obr.get(null, null,
* Strategy.LOWEST, props); assertNotNull(result);
* assertEquals("name.njbartlett.osgi.emf.minimal-2.6.1.jar",
* result.getName()); } public void testGetPackageLowestWithRange() throws
* Exception { Map<String, String> props = new HashMap<String, String>();
* props.put("package", "org.eclipse.emf.common"); File result =
* obr.get(null, "2.6.2", Strategy.LOWEST, props); assertNotNull(result);
* assertEquals("name.njbartlett.osgi.emf.minimal-2.7.0.jar",
* result.getName()); } public void testGetPackageHighest() throws Exception
* { Map<String, String> props = new HashMap<String, String>();
* props.put("package", "org.eclipse.emf.common"); File result =
* obr.get(null, null, Strategy.HIGHEST, props); assertNotNull(result);
* assertEquals("name.njbartlett.osgi.emf.minimal-2.7.0.jar",
* result.getName()); } public void testGetPackageHighestWithRange() throws
* Exception { Map<String, String> props = new HashMap<String, String>();
* props.put("package", "org.eclipse.emf.common"); File result =
* obr.get(null, "[2.6,2.7)", Strategy.HIGHEST, props);
* assertNotNull(result);
* assertEquals("name.njbartlett.osgi.emf.minimal-2.6.1.jar",
* result.getName()); }
*/
public static void testList() throws Exception {
List<String> result = obr.list("name.njbart*");
assertNotNull(result);
assertEquals(2, result.size());
}
public static void testVersions() throws Exception {
SortedSet<Version> result = obr.versions("name.njbartlett.osgi.emf.minimal");
assertEquals(2, result.size());
assertEquals(new Version("2.6.1.v20100914-1218"), result.first());
assertEquals(new Version("2.7.0.201104130744"), result.last());
}
public static void testName() throws MalformedURLException {
assertEquals(new File(obrDst).getAbsoluteFile().toURI().toString(), obr.getName());
OBR obr2 = new OBR();
Map<String,String> config = new HashMap<String,String>();
config.put("location", "http://www.example.com/bundles/dummybundle.jar,file:/Users/neil/bundles/dummy.jar");
obr2.setProperties(config);
assertEquals("http://www.example.com/bundles/dummybundle.jar,file:/Users/neil/bundles/dummy.jar",
obr2.getName());
}
public static void testProcessFilter1() {
String filter = "(&(name=foo)(version<1.0.0))";
String expected = "(&(name=foo)(!(version>=1.0.0)))";
assertEquals(expected, ObrUtil.processFilter(filter, null));
}
public static void testProcessFilter2() {
String filter = "(&(name=foo)(version>1.0.0))";
String expected = "(&(name=foo)(!(version<=1.0.0)))";
assertEquals(expected, ObrUtil.processFilter(filter, null));
}
public static void testProcessFilter3() {
String filter = "(name=foo)(mandatory:<*hello)(version>=1.0.0)(foo<*bar)";
String expected = "(name=foo)(version>=1.0.0)";
assertEquals(expected, ObrUtil.processFilter(filter, null));
}
public static void testProcessFilter4() {
String filter = "(name=foo)(mandatory:<*hello)(mandatory:*>goodbye)(version>=1.0.0)(foo<*bar)";
String expected = "(name=foo)(version>=1.0.0)";
assertEquals(expected, ObrUtil.processFilter(filter, null));
}
}