/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.aries.subsystem.itests.defect; import static org.junit.Assert.assertEquals; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import org.apache.aries.subsystem.core.internal.Activator; import org.apache.aries.subsystem.core.internal.SystemRepository; import org.apache.aries.subsystem.itests.SubsystemTest; import org.apache.aries.subsystem.itests.util.BundleArchiveBuilder; import org.apache.aries.subsystem.itests.util.SubsystemArchiveBuilder; import org.apache.aries.subsystem.itests.util.TestRequirement; import org.junit.Test; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerMethod; import org.osgi.framework.namespace.IdentityNamespace; import org.osgi.resource.Capability; import org.osgi.resource.Requirement; import org.osgi.resource.Resource; import org.osgi.service.subsystem.Subsystem; import org.osgi.service.subsystem.SubsystemConstants; @ExamReactorStrategy(PerMethod.class) public class Aries1442Test extends SubsystemTest { @Test public void testNewlyInstalledFeature() throws Exception { assertFeature(createFeature()); } @Test public void testPersistedFeature() throws Exception { createFeature(); restartSubsystemsImplBundle(); Subsystem root = getRootSubsystem(); Subsystem feature = getChild(root, "feature", null, SubsystemConstants.SUBSYSTEM_TYPE_FEATURE); assertFeature(feature); } private Subsystem createFeature() throws Exception { Subsystem root = getRootSubsystem(); Subsystem feature = installSubsystem( root, "feature", new SubsystemArchiveBuilder() .symbolicName("feature") .type(SubsystemConstants.SUBSYSTEM_TYPE_FEATURE) .bundle( "a", new BundleArchiveBuilder() .symbolicName("a") .exportPackage("a") .build()) .build(), true ); uninstallableSubsystems.add(feature); startSubsystem(feature, true); stoppableSubsystems.add(feature); return feature; } private void assertFeature(Subsystem feature) { Resource resource = (Resource)feature; List<Capability> identityCapabilities = resource.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE); String message = "Wrong number of osgi.identity capabilities"; assertEquals(message, 1, identityCapabilities.size()); Collection<Capability> capabilities = resource.getCapabilities(null); int count = 0; for (Capability capability : capabilities) { if (IdentityNamespace.IDENTITY_NAMESPACE.equals(capability.getNamespace())) { count++; } } assertEquals(message, 1, count); SystemRepository repository = Activator.getInstance().getSystemRepository(); Requirement requirement = new TestRequirement.Builder() .namespace("osgi.identity") .directive("filter", "(osgi.identity=a)") .build(); Map<Requirement, Collection<Capability>> providers = repository.findProviders( Collections.singleton(requirement)); capabilities = providers.get(requirement); assertEquals(message, 1, capabilities.size()); } }