package aQute.bnd.deployer.repository;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
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 TestObrRepo extends TestCase {
private static final String obrSrc = "testdata/fullobr.xml";
private static final String obrDst = "testdata/fullobr.tmp.xml";
private static FixedIndexedRepo 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);
reporter = new Processor();
obr = new FixedIndexedRepo();
Map<String,String> config = new HashMap<String,String>();
config.put("name", "obr");
config.put("locations", new File(obrDst).toURI().toString());
config.put("type", "OBR");
obr.setProperties(config);
obr.setReporter(reporter);
File tmpFile = File.createTempFile("cache", ".tmp");
tmpFile.deleteOnExit();
obr.setCacheDirectory(new File(tmpFile.getAbsolutePath() + ".dir"));
}
@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();
assertEquals(0, reporter.getErrors().size());
assertEquals(0, reporter.getWarnings().size());
}
public static void testGetLatest() throws Exception {
File[] files = obr.get("name.njbartlett.osgi.emf.minimal", "latest");
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 testGetBsnExcactNoMatch() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", "2.4.0", Strategy.EXACT, null);
assertNull(result);
}
public static void testGetBsnExcactWithQualifier() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", "2.7.0.201104130744", Strategy.EXACT, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.7.0.jar", result.getName());
}
public static void testGetBsnExcact() throws Exception {
File result = obr.get("name.njbartlett.osgi.emf.xmi", "2.7.0", Strategy.EXACT, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.7.0.jar", result.getName());
result = obr.get("name.njbartlett.osgi.emf.xmi", "2.5.0", Strategy.EXACT, null);
assertNotNull(result);
assertEquals("name.njbartlett.osgi.emf.xmi-2.5.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 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());
}
}