/*
* 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.itests;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.osgi.framework.Filter;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import java.util.Dictionary;
import java.util.Hashtable;
public class ConfigAdminPropsFileContentHandlerTest extends SubsystemTest {
public ConfigAdminPropsFileContentHandlerTest() {
installConfigAdmin = true;
}
@Override
protected void createApplications() throws Exception {
createApplication("cmContent", "org.foo.Bar.cfg", "com.blah.Blah.cfg",
"cmContentBundleZ.jar");
}
@Test
public void testConfigurationContentHandler() throws Exception {
// This test works as follows: it first installs a subsystem (cmContent.esa)
// that contains two configuration files (org.foo.Bar.cfg and com.blah.Blah.cfg)
// These configuration files are marked as 'osgi.config' content type.
// The ConfigAdminContentHandler handles the installation of this content
// and registers them as configuration with the Config Admin Service.
// The .esa file also contains an ordinary bundle that registers two
// Config Admin ManagedServices. Each registerd under one of the PIDs.
// Once they receive the expected configuration they each register a String
// service to mark that they have.
// After starting the subsystem this test waits for these 'String' services
// to appear so that it knows that the whole process worked.
Subsystem subsystem = installSubsystemFromFile("cmContent.esa");
subsystem.start();
// Now check that both Managed Services (Config Admin services) have been configured
// If they are configured correctly they will register a marker String service to
// indicate this.
Filter f = bundleContext.createFilter(
"(&(objectClass=java.lang.String)(test.pid=org.foo.Bar))");
ServiceTracker<String, String> barTracker =
new ServiceTracker<String, String>(bundleContext, f, null);
try {
barTracker.open();
String blahSvc = barTracker.waitForService(2000);
assertEquals("Bar!", blahSvc);
} finally {
barTracker.close();
}
Filter f2 = bundleContext.createFilter(
"(&(objectClass=java.lang.String)(test.pid=com.blah.Blah))");
ServiceTracker<String, String> blahTracker =
new ServiceTracker<String, String>(bundleContext, f2, null);
try {
blahTracker.open();
String blahSvc = blahTracker.waitForService(2000);
assertEquals("Blah!", blahSvc);
} finally {
blahTracker.close();
}
stopAndUninstallSubsystemSilently(subsystem);
}
@Test
public void testAries1352() throws Exception {
// Same test than testConfigurationContentHandler, but an existing
// configuration exists before the subsystem is installed.
// The configuration should not be overwritten by the subsystem
// installation.
ConfigurationAdmin cm = bundleContext.getService(
bundleContext.getServiceReference(ConfigurationAdmin.class));
Configuration blahConf = cm.getConfiguration("com.blah.Blah", "?");
Dictionary<String, Object> blahProps = new Hashtable<String, Object>(1);
blahProps.put("configVal", "Hello");
blahConf.update(blahProps);
Subsystem subsystem = installSubsystemFromFile("cmContent.esa");
subsystem.start();
// No configuration exists for the service Bar: configuration
// values are loaded by the subsystem.
Filter f = bundleContext.createFilter(
"(&(objectClass=java.lang.String)(test.pid=org.foo.Bar))");
ServiceTracker<String, String> barTracker =
new ServiceTracker<String, String>(bundleContext, f, null);
try {
barTracker.open();
String blahSvc = barTracker.waitForService(2000);
assertEquals("Bar!", blahSvc);
} finally {
barTracker.close();
}
// A configuration exists for Blah: the subsystem installation should
// not overwrite it.
Filter f2 = bundleContext.createFilter(
"(&(objectClass=java.lang.String)(test.pid=com.blah.Blah))");
ServiceTracker<String, String> blahTracker =
new ServiceTracker<String, String>(bundleContext, f2, null);
try {
blahTracker.open();
String blahSvc = blahTracker.waitForService(2000);
assertEquals("Hello", blahSvc);
} finally {
blahTracker.close();
}
stopAndUninstallSubsystemSilently(subsystem);
blahConf.delete();
}
}