package aQute.bnd.jpm; import java.io.File; import java.net.URI; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.SortedSet; import org.osgi.service.indexer.impl.util.Hex; import aQute.bnd.service.repository.SearchableRepository.ResourceDescriptor; import aQute.bnd.version.Version; import aQute.lib.io.IO; import aQute.service.library.Library.RevisionRef; import junit.framework.TestCase; public class JPMTest extends TestCase { File tmp; private Repository repo; @Override public void setUp() { System.setProperty("jpm4j.in.test", "true"); tmp = IO.getFile("generated/tmp/test/" + getName()); IO.delete(tmp); tmp.mkdirs(); repo = new Repository(); Map<String,String> props = new HashMap<String,String>(); props.put("location", new File(tmp, "loc").getAbsolutePath()); props.put("index", new File(tmp, "index").getAbsolutePath()); repo.setProperties(props); } @Override protected void tearDown() throws Exception { repo.close(); IO.delete(tmp); super.tearDown(); } public void testJpm() throws Exception { File file = IO.getFile("testdata/ws/cnf/jar/biz.aQute.bnd.annotation-2.3.0.jar"); boolean dropTarget = repo.dropTarget(file.toURI()); assertTrue(dropTarget); File f = repo.get("biz.aQute.bnd.annotation", new Version("2.3.0.201404170725"), null); assertNotNull(f); ResourceDescriptor descriptor = repo.getDescriptor("biz.aQute.bnd.annotation", new Version("2.3.0.201404170725")); assertNotNull(descriptor); assertEquals("230ae22893a124cdda8910e240d9c12edbacbbe13d8d080610adfc12b06623ff", Hex.toHexString(descriptor.sha256)); assertEquals(file.toURI().toString(), descriptor.url.toString()); SortedSet<Version> versions = repo.versions("biz.aQute.bnd.annotation"); assertEquals(1, versions.size()); assertEquals(new Version("2.3.0.201404170725"), versions.iterator().next()); } public void testDropUrl() throws Exception { repo.dropTarget(IO.getFile("testdata/ws/cnf/jar/biz.aQute.bnd.annotation-2.3.0.jar").toURI()); assertFalse("index should not be dirty after drop", repo.index.isDirty()); // Read the index, check only one resource with one mirror URL is listed List<RevisionRef> refs = new Index(IO.getFile(tmp, "index")).getRevisionRefs(); assertEquals(1, refs.size()); assertEquals(1, refs.get(0).urls.size()); } public void testAddMirrorURL() throws Exception { // Drop two URIs for an identical resource URI uri1 = IO.getFile("testdata/ws/cnf/jar/biz.aQute.bnd.annotation-2.3.0.jar").toURI(); repo.dropTarget(uri1); URI uri2 = IO.getFile("testdata/ws/cnf/jar/biz.aQute.bnd.annotation-2.3.0-duplicate.jar").toURI(); repo.dropTarget(uri2); // Read the index, there should be one resource but two mirror URLs List<RevisionRef> refs = new Index(IO.getFile(tmp, "index")).getRevisionRefs(); assertEquals(1, refs.size()); assertEquals(2, refs.get(0).urls.size()); assertTrue(refs.get(0).urls.contains(uri1)); assertTrue(refs.get(0).urls.contains(uri2)); } }