blob: 2500de4bcfc96ffd27c9c5a463b9fb8583d2a98c [file] [log] [blame]
/**
* 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.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.Dictionary;
import java.util.Hashtable;
import org.apache.aries.mocks.BundleMock;
import org.apache.aries.unittest.mocks.Skeleton;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
public class FragmentUtilsTest {
private Bundle hostBundle;
@Before
public void setUp() throws Exception {
hostBundle = Skeleton.newMock(new BundleMock("scooby.doo",
new Hashtable<String, Object>()), Bundle.class);
}
@SuppressWarnings("unchecked")
@Test
public void testFragmentCreation() throws Exception {
Bundle exportBundle = makeBundleWithExports("export.bundle", "1.2.3",
"export.package;version=\"1.0.0\";uses:=\"foo.jar,bar.jar\";singleton:=true");
Dictionary fragmentHeaders = makeFragmentFromExportBundle(exportBundle)
.getHeaders();
assertNotNull("No headers in the fragment", fragmentHeaders);
assertEquals("Wrong symbolicName", "scooby.doo.test.fragment",
fragmentHeaders.get(Constants.BUNDLE_SYMBOLICNAME));
assertEquals("Wrong version", "0.0.0",
fragmentHeaders.get(Constants.BUNDLE_VERSION));
assertEquals("Wrong Bundle manifest version", "2",
fragmentHeaders.get(Constants.BUNDLE_MANIFESTVERSION));
assertEquals("Wrong Fragment host", "scooby.doo;bundle-version=\"0.0.0\"",
fragmentHeaders.get(Constants.FRAGMENT_HOST));
assertEquals("Wrong Bundle Name", "Test Fragment bundle",
fragmentHeaders.get(Constants.BUNDLE_NAME));
assertEquals(
"Wrong Imports",
"export.package;version=\"1.0.0\";bundle-symbolic-name=\"export.bundle\";bundle-version=\"[1.2.3,1.2.3]\"",
fragmentHeaders.get(Constants.IMPORT_PACKAGE));
}
private Bundle makeBundleWithExports(String symbolicName, String version,
String exports) {
Hashtable<String, Object> headers = new Hashtable<String, Object>();
headers.put(Constants.BUNDLE_VERSION, version);
headers.put(Constants.EXPORT_PACKAGE, exports);
Bundle exportBundle = Skeleton.newMock(new BundleMock(symbolicName,
headers), Bundle.class);
return exportBundle;
}
private Bundle makeFragmentFromExportBundle(Bundle exportBundle)
throws Exception {
FragmentBuilder builder = new FragmentBuilder(hostBundle, "test.fragment", "fragment");
builder.setName("Test Fragment bundle");
builder.addImportsFromExports(exportBundle);
return builder.install(hostBundle.getBundleContext());
}
@Test
public void testManifestAttributes() throws Exception {
String fakeExportsListNoExtras = "no.such.export,no.such.export2";
String fakeExportsListAttrOnly = "no.such.export;version=\"1.1.1\",no.such.export2;version=\"2.2.2\"";
String fakeExportsListDirOnly = "no.such.export;uses:=\"some.other.thing\",no.such.export2;include:=\"some.thing\"";
String fakeExportsListMixed = "no.such.export;version=\"1.1.1\";uses:=\"some.other.thing\",no.such.export2;include:=\"some.thing\"";
String fakeExportsListFunkyAttr = "no.such.export;attribute=\"a:=\",no.such.export2;attributeTwo=\"b:=\";include:=\"some.thing\"";
String expectedImportsListNoExtras = "no.such.export;bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\",no.such.export2;bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\"";
String expectedImportsListAttrOnly = "no.such.export;version=\"1.1.1\";bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\",no.such.export2;version=\"2.2.2\";bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\"";
String expectedImportsListDirOnly = "no.such.export;bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\",no.such.export2;bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\"";
String expectedImportsListMixed = "no.such.export;version=\"1.1.1\";bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\",no.such.export2;bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\"";
String expectedImportsListFunkyAttr = "no.such.export;attribute=\"a:=\";bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\",no.such.export2;attributeTwo=\"b:=\";bundle-symbolic-name=\"no.such.provider\";bundle-version=\"[1.1.1,1.1.1]\"";
Bundle exportBundle = makeBundleWithExports("no.such.provider",
"1.1.1", fakeExportsListNoExtras);
Dictionary headers = makeFragmentFromExportBundle(exportBundle)
.getHeaders();
assertEquals(
"Import list did not match expected value, expectedImportsListNoExtras",
expectedImportsListNoExtras, headers
.get(Constants.IMPORT_PACKAGE));
exportBundle = makeBundleWithExports("no.such.provider", "1.1.1",
fakeExportsListAttrOnly);
headers = makeFragmentFromExportBundle(exportBundle).getHeaders();
assertEquals(
"Import list did not match expected value, expectedImportsListAttrOnly",
expectedImportsListAttrOnly, headers
.get(Constants.IMPORT_PACKAGE));
exportBundle = makeBundleWithExports("no.such.provider", "1.1.1",
fakeExportsListDirOnly);
headers = makeFragmentFromExportBundle(exportBundle).getHeaders();
assertEquals(
"Import list did not match expected value, expectedImportsListDirOnly",
expectedImportsListDirOnly, headers
.get(Constants.IMPORT_PACKAGE));
exportBundle = makeBundleWithExports("no.such.provider", "1.1.1",
fakeExportsListMixed);
headers = makeFragmentFromExportBundle(exportBundle).getHeaders();
assertEquals(
"Import list did not match expected value, expectedImportsListMixed",
expectedImportsListMixed, headers.get(Constants.IMPORT_PACKAGE));
exportBundle = makeBundleWithExports("no.such.provider", "1.1.1",
fakeExportsListFunkyAttr);
headers = makeFragmentFromExportBundle(exportBundle).getHeaders();
assertEquals(
"Import list did not match expected value, expectedImportsListFunkyAttr",
expectedImportsListFunkyAttr, headers
.get(Constants.IMPORT_PACKAGE));
}
}