package test;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import aQute.bnd.osgi.repository.ResourcesRepository;
import aQute.bnd.osgi.repository.XMLResourceParser;
import aQute.bnd.osgi.resource.RequirementBuilder;
import aQute.bnd.osgi.resource.ResourceUtils;
import junit.framework.TestCase;
/**
* Test the repository classes
*/
public class RepositoryTest extends TestCase {
public void testXMLParserLarge() throws Exception {
URL url = RepositoryTest.class.getResource("larger-repo.xml");
try (XMLResourceParser xrp = new XMLResourceParser(url.toURI());) {
xrp.setTrace(true);
List<Resource> resources = xrp.parse();
assertTrue(xrp.check());
assertNotNull(resources);
assertEquals(61, resources.size());
Requirement requirement = new RequirementBuilder("osgi.extender")
.addDirective("filter", "(osgi.extender=osgi.component)").buildSyntheticRequirement();
Map<Requirement,Collection<Capability>> caps = getResourcesRepository(resources)
.findProviders(Collections.singleton(requirement));
assertEquals(1, caps.get(requirement).size());
Resource res = caps.get(requirement).iterator().next().getResource();
assertEquals("org.apache.felix.scr",
ResourceUtils.getIdentityCapability(res).getAttributes().get("osgi.identity"));
String location = ResourceUtils.getContentCapability(res).getAttributes().get("url").toString();
String base = url.toURI().toString();
assertFalse(location, location.startsWith(base));
}
}
public void testXMLParserSmall() throws Exception {
URL url = RepositoryTest.class.getResource("repoindex-file.xml");
try (XMLResourceParser xrp = new XMLResourceParser(url.toURI());) {
xrp.setTrace(true);
List<Resource> resources = xrp.parse();
assertTrue(xrp.check());
assertNotNull(resources);
assertEquals(21, resources.size());
Requirement requirement = new RequirementBuilder("osgi.extender")
.addDirective("filter", "(osgi.extender=osgi.component)").buildSyntheticRequirement();
Map<Requirement,Collection<Capability>> caps = getResourcesRepository(resources)
.findProviders(Collections.singleton(requirement));
assertEquals(1, caps.get(requirement).size());
Resource res = caps.get(requirement).iterator().next().getResource();
assertEquals("org.apache.felix.scr",
ResourceUtils.getIdentityCapability(res).getAttributes().get("osgi.identity"));
String location = ResourceUtils.getContentCapability(res).getAttributes().get("url").toString();
assertFalse(location, location.contains("file:"));
}
}
public ResourcesRepository getResourcesRepository(List<Resource> resources) throws Exception {
return new ResourcesRepository(resources);
}
}