Search in sources :

Example 1 with Scope

use of org.apache.aries.subsystem.scope.Scope in project aries by apache.

the class ScopeAdminTest method testBundleServiceIsolation.

@Test
public void testBundleServiceIsolation() throws Exception {
    // make sure we are using a framework that provides composite admin service
    assertNotNull("scope admin should not be null", scope);
    System.out.println("able to get scope admin service");
    bt = new BundleTracker(bundleContext, Bundle.INSTALLED | Bundle.UNINSTALLED | Bundle.ACTIVE, new BundleTrackerCustomizer() {

        public synchronized Object addingBundle(Bundle bundle, BundleEvent event) {
            if (event == null) {
                System.out.println("ScopeAdminTest - adding Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("ScopeAdminTest - adding Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
                addEventCount++;
            }
            return bundle;
        }

        public synchronized void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
            if (event == null) {
                System.out.println("ScopeAdminTest - modifying Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("ScopeAdminTest - modifying Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
                modifyEventCount++;
            }
        }

        public synchronized void removedBundle(Bundle bundle, BundleEvent event, Object object) {
            if (event == null) {
                System.out.println("ScopeAdminTest - removing Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("ScopeAdminTest - removing Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
                removeEventCount++;
            }
        }
    });
    bt.open();
    ScopeUpdate su = scope.newScopeUpdate();
    ScopeUpdate childScopeUpdate = su.newChild("scope_test1");
    su.getChildren().add(childScopeUpdate);
    addPackageImportPolicy("org.osgi.framework", childScopeUpdate);
    addPackageImportPolicy("org.osgi.util.tracker", childScopeUpdate);
    // build up installInfo object for the scope
    InstallInfo info1 = new InstallInfo("helloIsolation", new URL("mvn:org.apache.aries.subsystem/org.apache.aries.subsystem.example.helloIsolation/0.1-SNAPSHOT"));
    InstallInfo info2 = new InstallInfo("helloIsolationRef", new URL("mvn:org.apache.aries.subsystem/org.apache.aries.subsystem.example.helloIsolationRef/0.1-SNAPSHOT"));
    List<InstallInfo> bundlesToInstall = childScopeUpdate.getBundlesToInstall();
    bundlesToInstall.add(info1);
    bundlesToInstall.add(info2);
    // add bundles to be installed, based on subsystem content
    su.commit();
    assertEquals("add event count should be 0 since 0 bundles are installed in root scope", 0, addEventCount);
    assertEquals("modify event count should be 0", 0, modifyEventCount);
    assertEquals("remove event count should be 0", 0, removeEventCount);
    // start all bundles in the scope scope_test1
    Collection<Bundle> bundlesToStart = childScopeUpdate.getScope().getBundles();
    for (Bundle b : bundlesToStart) {
        b.start();
    }
    assertEquals("add event count should be 0 since 0 bundles are installed in root scope", 0, addEventCount);
    assertEquals("modify event count should be 0", 0, modifyEventCount);
    assertEquals("remove event count should be 0", 0, removeEventCount);
    try {
        ServiceReference sr = bundleContext.getServiceReference(HelloIsolation.class.getName());
        fail("should not be able to get the sr for HelloIsolation service");
    } catch (Exception ex) {
    // expected
    } catch (Error er) {
    // expected
    }
    // test bundle find hooks
    Bundle[] bundles = bundleContext.getBundles();
    for (Bundle b : bundles) {
        System.out.println("Bundle is " + b.getBundleId() + ": " + b.getSymbolicName());
        if (b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolation") > -1) {
            fail("bundles with name starts with org.apache.aries.subsystem.example.helloIsolation should be in a different scope");
        }
    }
    // test bundle service find hook
    // ServiceReference sr = bundleContext.getServiceReference(HelloIsolation.class.getName());
    // assertNull("sr should be null", sr);
    Collection<Scope> children = scope.getChildren();
    assertEquals(1, children.size());
    for (Scope child : children) {
        if (child.getName().equals("scope_test1")) {
            Collection<Bundle> buns = child.getBundles();
            assertEquals(2, buns.size());
            assertEquals(0, child.getChildren().size());
            for (Bundle b : buns) {
                assertTrue(b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolation") > -1);
            }
        }
    }
    // install a test bundle in the root scope
    URL url = new URL("mvn:org.apache.felix/org.apache.felix.fileinstall/2.0.8");
    bundleContext.installBundle("org.apache.felix.fileinstall-rootScope", url.openStream());
    assertEquals("add event count should be 1 since 1 bundles are installed", 1, addEventCount);
    assertEquals("modify event count should be 0", 0, modifyEventCount);
    assertEquals("remove event count should be 0", 0, removeEventCount);
    // remove child scope
    su = scope.newScopeUpdate();
    // Collection<Scope> scopes = su.getToBeRemovedChildren();
    Collection<ScopeUpdate> scopes = su.getChildren();
    childScopeUpdate = scopes.iterator().next();
    // obtain child scope admin from service registry
    // String filter = "ScopeName=scope_test1";
    // Scope childscope = getOsgiService(Scope.class, filter, DEFAULT_TIMEOUT);
    Scope childScopeAdmin = childScopeUpdate.getScope();
    assertEquals(scope, childScopeAdmin.getParent());
    // scopes.add(childScopeAdmin);
    scopes.remove(childScopeUpdate);
    su.commit();
    assertFalse(scope.getChildren().contains(childScopeAdmin));
    su = scope.newScopeUpdate();
    assertFalse(su.getChildren().contains(childScopeUpdate));
// childScopeAdmin = null;
// try {
// childScopeAdmin = getOsgiService(Scope.class, filter, DEFAULT_TIMEOUT);
// } catch (Exception ex) {
// // ignore
// }
// assertNull("scope admin service for the scope should be unregistered", childScopeAdmin);
}
Also used : InstallInfo(org.apache.aries.subsystem.scope.InstallInfo) Bundle(org.osgi.framework.Bundle) BundleTracker(org.osgi.util.tracker.BundleTracker) ScopeUpdate(org.apache.aries.subsystem.scope.ScopeUpdate) BundleTrackerCustomizer(org.osgi.util.tracker.BundleTrackerCustomizer) URL(java.net.URL) BundleException(org.osgi.framework.BundleException) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) ServiceReference(org.osgi.framework.ServiceReference) HelloIsolation(org.apache.aries.subsystem.example.helloIsolation.HelloIsolation) Scope(org.apache.aries.subsystem.scope.Scope) BundleEvent(org.osgi.framework.BundleEvent) Test(org.junit.Test)

Example 2 with Scope

use of org.apache.aries.subsystem.scope.Scope in project aries by apache.

the class ScopeSecurityTest method testScopeSecurityWithServiceIsolation.

// @Test
public void testScopeSecurityWithServiceIsolation() throws Exception {
    ScopeUpdate su = scope.newScopeUpdate();
    ScopeUpdate childScopeUpdate = su.newChild("scope_test1");
    // build up installInfo object for the scope
    InstallInfo info1 = new InstallInfo("helloIsolation", new URL("mvn:org.apache.aries.subsystem.example/org.apache.aries.subsystem.example.helloIsolation/0.4-SNAPSHOT"));
    InstallInfo info2 = new InstallInfo("helloIsolationRef", new URL("mvn:org.apache.aries.subsystem.example/org.apache.aries.subsystem.example.helloIsolationRef/0.4-SNAPSHOT"));
    List<InstallInfo> bundlesToInstall = childScopeUpdate.getBundlesToInstall();
    bundlesToInstall.add(info1);
    bundlesToInstall.add(info2);
    // add bundles to be installed, based on subsystem content
    su.commit();
    // start all bundles in the scope scope_test1
    Collection<Bundle> bundlesToStart = childScopeUpdate.getBundles();
    for (Bundle b : bundlesToStart) {
        b.start();
    }
    try {
        ServiceReference sr = bundleContext.getServiceReference("org.apache.aries.subsystem.example.helloIsolation.HelloIsolation");
        fail("should not be able to get the sr for HelloIsolation service");
    } catch (Exception ex) {
    // expected
    } catch (Error er) {
    // expected
    }
    // test bundle find hooks
    Bundle[] bundles = bundleContext.getBundles();
    for (Bundle b : bundles) {
        System.out.println("Bundle is " + b.getBundleId() + ": " + b.getSymbolicName());
        if (b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolation") > -1) {
            fail("bundles with name starts with org.apache.aries.subsystem.example.helloIsolation should be in a different scope");
        }
    }
    // test bundle service find hook
    // ServiceReference sr = bundleContext.getServiceReference(HelloIsolation.class.getName());
    // assertNull("sr should be null", sr);
    Collection<Scope> children = scope.getChildren();
    assertEquals(1, children.size());
    for (Scope child : children) {
        if (child.getName().equals("scope_test1")) {
            Collection<Bundle> buns = child.getBundles();
            assertEquals(2, buns.size());
            assertEquals(0, child.getChildren().size());
            BundleContext childScopebundleContext = null;
            for (Bundle b : buns) {
                assertTrue(b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolation") > -1);
                if (b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolationRef") > -1) {
                    childScopebundleContext = b.getBundleContext();
                }
            }
            assertNotNull(childScopebundleContext);
            ServiceReference sr = childScopebundleContext.getServiceReference("org.apache.aries.subsystem.example.helloIsolation.HelloIsolation");
            assertNotNull("sr is not null", sr);
            System.out.println("got the sr, go get service next");
            Object obj = childScopebundleContext.getService(sr);
        // HelloIsolation hi = (HelloIsolation)childScopebundleContext.getService(sr);
        }
    }
    // install a test bundle in the root scope
    URL url = new URL("mvn:org.apache.felix/org.apache.felix.fileinstall/2.0.8");
    bundleContext.installBundle("org.apache.felix.fileinstall-rootScope", url.openStream());
    // remove child scope
    su = scope.newScopeUpdate();
    Collection<ScopeUpdate> scopes = su.getChildren();
    // obtain child scope admin from service registry
    // String filter = "ScopeName=scope_test1";
    Scope childScopeAdmin = childScopeUpdate.getScope();
    assertEquals(scope, childScopeAdmin.getParent());
    scopes.remove(childScopeUpdate);
    su.commit();
    assertFalse(scope.getChildren().contains(childScopeAdmin));
    su = scope.newScopeUpdate();
    assertFalse(su.getChildren().contains(childScopeUpdate));
// childScopeAdmin = null;
// try {
// childScopeAdmin = getOsgiService(Scope.class, filter, DEFAULT_TIMEOUT);
// } catch (Exception ex) {
// // ignore
// }
// assertNull("scope admin service for the scope should be unregistered", childScopeAdmin);
}
Also used : InstallInfo(org.apache.aries.subsystem.scope.InstallInfo) Bundle(org.osgi.framework.Bundle) CoreOptions.mavenBundle(org.ops4j.pax.exam.CoreOptions.mavenBundle) ScopeUpdate(org.apache.aries.subsystem.scope.ScopeUpdate) URL(java.net.URL) ServiceReference(org.osgi.framework.ServiceReference) Scope(org.apache.aries.subsystem.scope.Scope) BundleContext(org.osgi.framework.BundleContext)

Example 3 with Scope

use of org.apache.aries.subsystem.scope.Scope in project aries by apache.

the class BasicTest method testCreateChildScope.

@Test
public void testCreateChildScope() throws Exception {
    Scope scope = getScope();
    String name = "scope1";
    ScopeUpdate parent = scope.newScopeUpdate();
    ScopeUpdate child = parent.newChild(name);
    parent.getChildren().add(child);
    assertTrue(parent.commit());
    Collection<Scope> children = scope.getChildren();
    assertEquals(1, children.size());
    Scope feature1 = null;
    for (Scope s : children) {
        if (name.equals(s.getName())) {
            feature1 = s;
            break;
        }
    }
    assertNotNull(feature1);
    assertEmpty(feature1.getBundles());
    assertEmpty(feature1.getChildren());
    assertEquals(1, feature1.getId());
    assertNull(feature1.getLocation());
    assertEquals(name, feature1.getName());
    assertEquals(scope, feature1.getParent());
    assertEmpty(feature1.getSharePolicies(SharePolicy.TYPE_EXPORT));
    assertEmpty(feature1.getSharePolicies(SharePolicy.TYPE_IMPORT));
}
Also used : Scope(org.apache.aries.subsystem.scope.Scope) ScopeUpdate(org.apache.aries.subsystem.scope.ScopeUpdate) Test(org.junit.Test)

Example 4 with Scope

use of org.apache.aries.subsystem.scope.Scope in project aries by apache.

the class BasicTest method testInstallBundleIntoRootScope.

@Test
public void testInstallBundleIntoRootScope() throws Exception {
    Scope scope = getScope();
    int previousSize = scope.getBundles().size();
    String location = getBundleLocation("tb-2.jar");
    URL url = new URL(location);
    InstallInfo tb2Info = new InstallInfo(location, url.openStream());
    ScopeUpdate scopeUpdate = scope.newScopeUpdate();
    scopeUpdate.getBundlesToInstall().add(tb2Info);
    assertTrue(scopeUpdate.commit());
    Bundle b = bundleContext.getBundle(location);
    assertNotNull(b);
    Collection<Bundle> bundles = scope.getBundles();
    assertEquals(previousSize + 1, bundles.size());
    assertTrue(bundles.contains(b));
}
Also used : InstallInfo(org.apache.aries.subsystem.scope.InstallInfo) Scope(org.apache.aries.subsystem.scope.Scope) Bundle(org.osgi.framework.Bundle) ScopeUpdate(org.apache.aries.subsystem.scope.ScopeUpdate) URL(java.net.URL) Test(org.junit.Test)

Example 5 with Scope

use of org.apache.aries.subsystem.scope.Scope in project aries by apache.

the class Activator method start.

public void start(BundleContext bundleContext) throws Exception {
    ServiceReference<Scope> scopeRef = bundleContext.getServiceReference(Scope.class);
    assertNotNull(scopeRef);
    Scope scope = bundleContext.getService(scopeRef);
    assertNotNull(scope);
    assertEquals(bundleContext.getBundles().length, scope.getBundles().size());
    assertEquals(0, scope.getChildren().size());
    assertEquals(0, scope.getId());
    assertNull(scope.getLocation());
    assertEquals("root", scope.getName());
    assertNull(scope.getParent());
    assertEquals(0, scope.getSharePolicies(SharePolicy.TYPE_EXPORT).size());
    assertEquals(0, scope.getSharePolicies(SharePolicy.TYPE_IMPORT).size());
    assertNotNull(scope.newScopeUpdate());
}
Also used : Scope(org.apache.aries.subsystem.scope.Scope)

Aggregations

Scope (org.apache.aries.subsystem.scope.Scope)29 Bundle (org.osgi.framework.Bundle)22 Test (org.junit.Test)20 ScopeUpdate (org.apache.aries.subsystem.scope.ScopeUpdate)16 URL (java.net.URL)12 InstallInfo (org.apache.aries.subsystem.scope.InstallInfo)12 IOException (java.io.IOException)5 MalformedURLException (java.net.MalformedURLException)5 Ignore (org.junit.Ignore)5 BundleException (org.osgi.framework.BundleException)5 InvalidSyntaxException (org.osgi.framework.InvalidSyntaxException)5 ArrayList (java.util.ArrayList)4 List (java.util.List)4 SharePolicy (org.apache.aries.subsystem.scope.SharePolicy)4 Filter (org.osgi.framework.Filter)4 ServiceReference (org.osgi.framework.ServiceReference)3 HelloIsolation (org.apache.aries.subsystem.example.helloIsolation.HelloIsolation)2 CoreOptions.mavenBundle (org.ops4j.pax.exam.CoreOptions.mavenBundle)2 BundleContext (org.osgi.framework.BundleContext)2 Permission (java.security.Permission)1