package org.osgi.service.indexer.impl; import static org.osgi.service.indexer.impl.Utils.findCaps; import static org.osgi.service.indexer.impl.Utils.findReqs; import java.io.File; import java.util.LinkedList; import java.util.List; import org.osgi.framework.Version; import org.osgi.service.indexer.Capability; import org.osgi.service.indexer.Requirement; import junit.framework.TestCase; public class TestBundleAnalyzer extends TestCase { public void testContentAndIdentity() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/01-bsn+version.jar")), caps, reqs); assertEquals(4, caps.size()); Capability idcap = caps.get(0); assertEquals("osgi.identity", idcap.getNamespace()); assertEquals("org.example.a", idcap.getAttributes().get("osgi.identity")); assertEquals("osgi.bundle", idcap.getAttributes().get("type")); assertEquals(new Version("0.0.0"), idcap.getAttributes().get("version")); Capability content = caps.get(1); assertEquals("osgi.content", content.getNamespace()); assertEquals("64f661eea43334dc5d38d7f16dbcacd02c799e68332b40e72da8021828e3329c", content.getAttributes().get("osgi.content")); assertEquals("testdata/01-bsn+version.jar", content.getAttributes().get("url")); assertEquals("application/vnd.osgi.bundle", content.getAttributes().get("mime")); assertEquals(1104L, content.getAttributes().get("size")); } public void testPackageExports() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/03-export.jar")), caps, reqs); Capability export = findCaps("osgi.wiring.package", caps).get(0); assertEquals("org.example.a", export.getAttributes().get("osgi.wiring.package")); assertEquals(new Version(1, 0, 0), export.getAttributes().get("version")); } public void testPackageExportUses() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/04-export+uses.jar")), caps, reqs); List<Capability> exports = findCaps("osgi.wiring.package", caps); assertEquals(2, exports.size()); assertEquals("org.example.b", exports.get(0).getAttributes().get("osgi.wiring.package")); assertEquals("org.example.a", exports.get(0).getDirectives().get("uses")); assertEquals("org.example.a", exports.get(1).getAttributes().get("osgi.wiring.package")); } // bundle-symbolic-name and bundle-version must be on package capabilities, // for the idiots // who add this to their imports... public void testPackageExportBundleSymbolicNameAndVersion() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/04-export+uses.jar")), caps, reqs); List<Capability> exports = findCaps("osgi.wiring.package", caps); assertEquals(2, exports.size()); assertEquals("org.example.b", exports.get(0).getAttributes().get("osgi.wiring.package")); assertEquals("org.example.d", exports.get(0).getAttributes().get("bundle-symbolic-name")); assertEquals(new Version(0, 0, 0), exports.get(0).getAttributes().get("bundle-version")); assertEquals("org.example.a", exports.get(1).getAttributes().get("osgi.wiring.package")); assertEquals("org.example.d", exports.get(0).getAttributes().get("bundle-symbolic-name")); assertEquals(new Version(0, 0, 0), exports.get(0).getAttributes().get("bundle-version")); } public void testPackageImports() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/05-import.jar")), caps, reqs); Requirement pkgImport = findReqs("osgi.wiring.package", reqs).get(0); assertEquals("(&(osgi.wiring.package=org.example.a)(version>=1.0.0)(!(version>=2.0.0)))", pkgImport.getDirectives().get("filter")); } public void testRequireBundle() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/06-requirebundle.jar")), caps, reqs); List<Requirement> requires = findReqs("osgi.wiring.bundle", reqs); assertEquals(1, requires.size()); assertEquals("(&(osgi.wiring.bundle=org.example.a)(bundle-version>=3.0.0)(!(bundle-version>=4.0.0)))", requires.get(0).getDirectives().get("filter")); } public void testPackageImportOptional() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/07-optionalimport.jar")), caps, reqs); Requirement pkgImport = findReqs("osgi.wiring.package", reqs).get(0); assertEquals("(&(osgi.wiring.package=org.example.a)(version>=1.0.0)(!(version>=2.0.0)))", pkgImport.getDirectives().get("filter")); assertEquals("optional", pkgImport.getDirectives().get("resolution")); } public void testFragmentHost() throws Exception { BundleAnalyzer a = new BundleAnalyzer(new XNullLogSvc()); LinkedList<Capability> caps = new LinkedList<Capability>(); LinkedList<Requirement> reqs = new LinkedList<Requirement>(); a.analyzeResource(new JarResource(new File("testdata/08-fragmenthost.jar")), caps, reqs); Requirement req = findReqs("osgi.wiring.host", reqs).get(0); assertEquals("(&(osgi.wiring.host=org.example.a)(bundle-version>=0.0.0))", req.getDirectives().get("filter")); } }