Search in sources :

Example 21 with Scope

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

the class PersistenceTest method test3.

/**
	 * A scope's persisted bundle data will become stale if bundles are 
	 * installed or uninstalled while Scope Admin is not connected to the 
	 * environment. This should be detected and dealt with.
	 * 
	 * @throws Exception
	 */
@Test
@Ignore
public void test3() throws Exception {
    Scope scope = getScope();
    Bundle tb1 = findBundle("org.apache.aries.subsystem.scope.itests.tb1", scope);
    assertNull(tb1);
    tb1 = installBundle("tb-1.jar");
    assertTrue(scope.getBundles().contains(tb1));
    Bundle scopeAdmin = findBundle("org.apache.aries.subsystem.scope.impl");
    assertNotNull(scopeAdmin);
    scopeAdmin.stop();
    scopeAdmin.start();
    scope = getScope();
    assertTrue(scope.getBundles().contains(tb1));
    scopeAdmin.stop();
    tb1.uninstall();
    Bundle tb2 = findBundle("org.apache.aries.subsystem.scope.itests.tb2", scope);
    assertNull(tb2);
    tb2 = installBundle("tb-2.jar");
    scopeAdmin.start();
    scope = getScope();
    assertFalse(scope.getBundles().contains(tb1));
    assertTrue(scope.getBundles().contains(tb2));
    tb2.uninstall();
    assertFalse(scope.getBundles().contains(tb2));
}
Also used : Scope(org.apache.aries.subsystem.scope.Scope) Bundle(org.osgi.framework.Bundle) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 22 with Scope

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

the class PersistenceTest method test1.

/**
	 * When starting from a clean slate (i.e. nothing was persisted), only the 
	 * root scope with its default configuration should exist.
	 * 
	 * @throws Exception
	 */
@Test
public void test1() throws Exception {
    Scope scope = getScope();
    assertEquals(0, scope.getId());
    assertEquals("root", scope.getName());
    assertEquals(null, scope.getLocation());
    assertEquals(null, scope.getParent());
    assertEquals(0, scope.getChildren().size());
    assertCollectionEquals(Arrays.asList(bundleContext.getBundles()), scope.getBundles());
    assertEquals(0, scope.getSharePolicies(SharePolicy.TYPE_EXPORT).size());
    assertEquals(0, scope.getSharePolicies(SharePolicy.TYPE_IMPORT).size());
}
Also used : Scope(org.apache.aries.subsystem.scope.Scope) Test(org.junit.Test)

Example 23 with Scope

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

the class Activator method start.

@SuppressWarnings("unchecked")
public void start(BundleContext bundleContext) throws Exception {
    Activator.bundleContext = bundleContext;
    scopeManager = new ScopeManager(bundleContext);
    scopeManagerReg = bundleContext.registerService(new String[] { EventHook.class.getName(), EventListenerHook.class.getName(), org.osgi.framework.hooks.bundle.FindHook.class.getName(), org.osgi.framework.hooks.service.FindHook.class.getName(), ResolverHookFactory.class.getName() }, scopeManager, null);
    scopeFactoryReg = (ServiceRegistration<Scope>) bundleContext.registerService(Scope.class.getName(), this, null);
}
Also used : ScopeManager(org.apache.aries.subsystem.scope.impl.ScopeManager) Scope(org.apache.aries.subsystem.scope.Scope)

Example 24 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 {
    scopeRef = bundleContext.getServiceReference(Scope.class);
    final Scope scope = bundleContext.getService(scopeRef);
    scopeProviderReg = bundleContext.registerService(ScopeProvider.class, new ScopeProvider() {

        public Scope getScope() {
            return scope;
        }
    }, null);
}
Also used : ScopeProvider(org.apache.aries.subsystem.scope.itests.ScopeProvider) Scope(org.apache.aries.subsystem.scope.Scope)

Example 25 with Scope

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

the class ScopeSecurityTest method testScopeSecurityWithServiceShared.

//@Test
public void testScopeSecurityWithServiceShared() throws Exception {
    SecurityManager security = System.getSecurityManager();
    assertNotNull("Security manager should not be null", security);
    Bundle[] bundles = bundleContext.getBundles();
    for (Bundle b : bundles) {
        // set up condition permission for scope
        if (b.getSymbolicName().indexOf("subsystem.scope.impl") > -1) {
            ServiceReference permRef = bundleContext.getServiceReference(ConditionalPermissionAdmin.class.getName());
            ConditionalPermissionAdmin permAdmin = (ConditionalPermissionAdmin) bundleContext.getService(permRef);
            ConditionalPermissionUpdate update = permAdmin.newConditionalPermissionUpdate();
            List<ConditionalPermissionInfo> infos = update.getConditionalPermissionInfos();
            //infos.clear();
            // set up the conditionInfo
            ConditionInfo[] conditionInfo = new ConditionInfo[] { new ConditionInfo("org.osgi.service.condpermadmin.BundleLocationCondition", new String[] { b.getLocation() }) };
            // Set up permissions which are common to all applications
            infos.add(permAdmin.newConditionalPermissionInfo(null, conditionInfo, adminAllowInfo, "allow"));
            update.commit();
        }
    }
    ScopeUpdate su = scope.newScopeUpdate();
    ScopeUpdate childScopeUpdate = su.newChild("scope_test1");
    Map<String, List<SharePolicy>> sharePolicies = childScopeUpdate.getSharePolicies(SharePolicy.TYPE_EXPORT);
    final Filter filter1 = FrameworkUtil.createFilter("(&" + "(osgi.package=org.apache.aries.subsystem.example.helloIsolation)" + ")");
    final Filter filter2 = FrameworkUtil.createFilter("(&" + "(osgi.service=org.apache.aries.subsystem.example.helloIsolation.HelloIsolation)" + ")");
    List<SharePolicy> packagePolicies = sharePolicies.get(BundleRevision.PACKAGE_NAMESPACE);
    if (packagePolicies == null) {
        packagePolicies = new ArrayList<SharePolicy>();
        sharePolicies.put(BundleRevision.PACKAGE_NAMESPACE, packagePolicies);
    }
    packagePolicies.add(new SharePolicy(SharePolicy.TYPE_EXPORT, BundleRevision.PACKAGE_NAMESPACE, filter1));
    List<SharePolicy> servicePolicies = sharePolicies.get("scope.share.service");
    if (servicePolicies == null) {
        servicePolicies = new ArrayList<SharePolicy>();
        sharePolicies.put("scope.share.service", servicePolicies);
    }
    servicePolicies.add(new SharePolicy(SharePolicy.TYPE_EXPORT, "scope.share.service", filter2));
    // 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
    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");
            HelloIsolation hi = (HelloIsolation) childScopebundleContext.getService(sr);
            hi.hello();
            Permission permission = new PackagePermission("*", PackagePermission.IMPORT);
            hi.checkPermission(permission);
        }
    }
    // 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 : SharePolicy(org.apache.aries.subsystem.scope.SharePolicy) URL(java.net.URL) HelloIsolation(org.apache.aries.subsystem.example.helloIsolation.HelloIsolation) ConditionalPermissionInfo(org.osgi.service.condpermadmin.ConditionalPermissionInfo) PackagePermission(org.osgi.framework.PackagePermission) Permission(java.security.Permission) ArrayList(java.util.ArrayList) List(java.util.List) ConditionalPermissionUpdate(org.osgi.service.condpermadmin.ConditionalPermissionUpdate) ConditionInfo(org.osgi.service.condpermadmin.ConditionInfo) ConditionalPermissionAdmin(org.osgi.service.condpermadmin.ConditionalPermissionAdmin) 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) PackagePermission(org.osgi.framework.PackagePermission) ServiceReference(org.osgi.framework.ServiceReference) Scope(org.apache.aries.subsystem.scope.Scope) Filter(org.osgi.framework.Filter) BundleContext(org.osgi.framework.BundleContext)

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