/* * Licensed 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.core.archive; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; import org.apache.aries.subsystem.core.archive.BundleRequiredExecutionEnvironmentHeader.Clause.ExecutionEnvironment; import org.apache.aries.subsystem.core.archive.BundleRequiredExecutionEnvironmentHeader.Clause.ExecutionEnvironment.Parser; import org.apache.aries.subsystem.core.internal.BasicRequirement; import org.easymock.EasyMock; import org.junit.Test; import org.osgi.framework.Constants; import org.osgi.framework.Version; import org.osgi.framework.namespace.ExecutionEnvironmentNamespace; import org.osgi.resource.Requirement; import org.osgi.resource.Resource; public class BundleRequiredExecutionEnvironmentHeaderTest { @Test public void testClause() { String clauseStr = "CDC-1.0/Foundation-1.0"; BundleRequiredExecutionEnvironmentHeader.Clause clause = new BundleRequiredExecutionEnvironmentHeader.Clause(clauseStr); assertClause(clause, clauseStr, "CDC/Foundation", "1.0", "(&(osgi.ee=CDC/Foundation)(version=1.0.0))"); } @Test public void testExecutionEnvironment1() { String name = "foo"; ExecutionEnvironment ee = new ExecutionEnvironment(name); assertExecutionEnvironmentName(ee, name); assertExecutionEnvironmentVersion(ee, (Version)null); } @Test public void testExecutionEnvironment2() { String name = "bar"; Version version = Version.parseVersion("2.0.0.qualifier"); ExecutionEnvironment ee = new ExecutionEnvironment(name, version); assertExecutionEnvironmentName(ee, name); assertExecutionEnvironmentVersion(ee, version); } @SuppressWarnings("deprecation") @Test public void testHeaderWithOneClause() { String value = "OSGi/Minimum-1.2"; String filter = "(&(osgi.ee=OSGi/Minimum)(version=1.2.0))"; BundleRequiredExecutionEnvironmentHeader header = new BundleRequiredExecutionEnvironmentHeader(value); assertEquals("Wrong number of clauses", 1, header.getClauses().size()); assertClause(header.getClauses().iterator().next(), value, "OSGi/Minimum", "1.2", filter); assertEquals("Wrong name", Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT, header.getName()); assertEquals("Wrong value", value, header.getValue()); Resource resource = EasyMock.createNiceMock(Resource.class); List<? extends Requirement> requirements = header.toRequirements(resource); assertEquals("Wrong number of requirements", 1, requirements.size()); assertRequirement(requirements.get(0), filter, resource); } @Test @SuppressWarnings("deprecation") public void testHeaderWithMultipleClauses() { String value = "CDC-1.0/Foundation-1.0,OSGi/Minimum-1.2,J2SE-1.4,JavaSE-1.6,AA/BB-1.7,V1-1.5/V2-1.6,MyEE-badVersion"; String filter = "(|" + "(&(osgi.ee=CDC/Foundation)(version=1.0.0))" + "(&(osgi.ee=OSGi/Minimum)(version=1.2.0))" + "(&(osgi.ee=JavaSE)(version=1.4.0))" + "(&(osgi.ee=JavaSE)(version=1.6.0))" + "(&(osgi.ee=AA/BB)(version=1.7.0))" + "(osgi.ee=V1-1.5/V2-1.6)" + "(osgi.ee=MyEE-badVersion))"; BundleRequiredExecutionEnvironmentHeader header = new BundleRequiredExecutionEnvironmentHeader(value); assertEquals("Wrong number of clauses", 7, header.getClauses().size()); assertClause(header.getClauses().iterator().next(), "CDC-1.0/Foundation-1.0", "CDC/Foundation", "1.0", "(&(osgi.ee=CDC/Foundation)(version=1.0.0))"); assertEquals("Wrong name", Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT, header.getName()); assertEquals("Wrong value", value, header.getValue()); Resource resource = EasyMock.createNiceMock(Resource.class); List<? extends Requirement> requirements = header.toRequirements(resource); assertEquals("Wrong number of requirements", 1, requirements.size()); assertRequirement(requirements.get(0), filter, resource); } @Test public void testParser1() { doTestParser("CDC-1.0/Foundation-1.0", "CDC/Foundation", "1.0"); } @Test public void testParser2() { doTestParser("OSGi/Minimum-1.2", "OSGi/Minimum", "1.2"); } @Test public void testParser3() { doTestParser("J2SE-1.4", "JavaSE", "1.4"); } @Test public void testParser4() { doTestParser("JavaSE-1.6", "JavaSE", "1.6"); } @Test public void testParser5() { doTestParser("AA/BB-1.7", "AA/BB", "1.7"); } @Test public void testParser6() { doTestParser("V1-1.5/V2-1.6", "V1-1.5/V2-1.6", (Version)null); } @Test public void testParser7() { doTestParser("MyEE-badVersion", "MyEE-badVersion", (Version)null); } private void assertClause(BundleRequiredExecutionEnvironmentHeader.Clause clause, String clauseStr, String name, String version, String filter) { assertClause(clause, clauseStr, name, Version.parseVersion(version), filter); } private void assertClause(BundleRequiredExecutionEnvironmentHeader.Clause clause, String clauseStr, String name, Version version, String filter) { assertNull("Attribute should not exist", clause.getAttribute(ExecutionEnvironmentNamespace.CAPABILITY_VERSION_ATTRIBUTE)); assertTrue("Should have no attributes", clause.getAttributes().isEmpty()); assertNull("Directive should not exist", clause.getDirective(ExecutionEnvironmentNamespace.REQUIREMENT_FILTER_DIRECTIVE)); assertExecutionEnvironmentName(clause.getExecutionEnvironment(), name); assertExecutionEnvironmentVersion(clause.getExecutionEnvironment(), version); assertNull("Parameter should not exist", clause.getAttribute(ExecutionEnvironmentNamespace.CAPABILITY_VERSION_ATTRIBUTE)); assertTrue("Should have no parameters", clause.getParameters().isEmpty()); assertEquals("Wrong path", clauseStr, clause.getPath()); assertRequirement(clause, filter); } private void assertExecutionEnvironmentName(ExecutionEnvironment ee, String name) { assertEquals("Wrong name", name, ee.getName()); } private void assertExecutionEnvironmentVersion(ExecutionEnvironment ee, Version version) { assertEquals("Wrong version", version, ee.getVersion()); } private void assertRequirement(BundleRequiredExecutionEnvironmentHeader.Clause clause, String filter) { Resource resource = EasyMock.createNiceMock(Resource.class); assertRequirement(clause.toRequirement(resource), filter, resource); } private void assertRequirement(Requirement requirement, String filter, Resource resource) { Requirement r = new BasicRequirement.Builder() .namespace(ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE) .directive(ExecutionEnvironmentNamespace.REQUIREMENT_FILTER_DIRECTIVE, filter) .resource(resource) .build(); assertEquals("Wrong requirement", r, requirement); } private void doTestParser(String clause, String name, String version) { doTestParser(clause, name, Version.parseVersion(version)); } private void doTestParser(String clause, String name, Version version) { ExecutionEnvironment ee = null; try { ee = new Parser().parse(clause); } catch (Exception e) { fail("Unable to parse execution environment from clause " + clause); } assertExecutionEnvironmentName(ee, name); assertExecutionEnvironmentVersion(ee, version); } }