Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.ds.tests/src/org/eclipse/equinox/ds/tests/tbc/DSTest.java')
-rw-r--r--bundles/org.eclipse.equinox.ds.tests/src/org/eclipse/equinox/ds/tests/tbc/DSTest.java2636
1 files changed, 0 insertions, 2636 deletions
diff --git a/bundles/org.eclipse.equinox.ds.tests/src/org/eclipse/equinox/ds/tests/tbc/DSTest.java b/bundles/org.eclipse.equinox.ds.tests/src/org/eclipse/equinox/ds/tests/tbc/DSTest.java
deleted file mode 100644
index f561073dd..000000000
--- a/bundles/org.eclipse.equinox.ds.tests/src/org/eclipse/equinox/ds/tests/tbc/DSTest.java
+++ /dev/null
@@ -1,2636 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1997-2009 by ProSyst Software GmbH
- * http://www.prosyst.com
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * ProSyst Software GmbH - initial API and implementation
- *******************************************************************************/
-package org.eclipse.equinox.ds.tests.tbc;
-
-import java.io.IOException;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import junit.framework.TestCase;
-
-import org.eclipse.equinox.ds.tests.BundleInstaller;
-import org.eclipse.equinox.ds.tests.DSTestsActivator;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.PackagePermission;
-import org.osgi.framework.ServicePermission;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.component.ComponentConstants;
-import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.ComponentFactory;
-import org.osgi.service.component.ComponentInstance;
-import org.osgi.service.permissionadmin.PermissionAdmin;
-import org.osgi.service.permissionadmin.PermissionInfo;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class DSTest extends TestCase {
-
- private static final String NAMED_CLASS = "org.eclipse.equinox.ds.tests.tb4.NamedService";
-
- private static final String EXTENDED_CLASS = "org.eclipse.equinox.ds.tests.tb1.BindUnbindSuccessor";
-
- private static final String SAC_CLASS = "org.eclipse.equinox.ds.tests.tb1.impl.AnotherComponent";
-
- private static final String SC_CLASS = "org.eclipse.equinox.ds.tests.tb1.impl.BaseComp";
-
- private static final String DYN_SERVICE_CLASS = "org.eclipse.equinox.ds.tests.tb4.DynamicService";
-
- private static final String BSRC_CLASS = "org.eclipse.equinox.ds.tests.tb4.BoundReplacer";
-
- private static final String MBSRC_CLASS = "org.eclipse.equinox.ds.tests.tb4.AdvancedBounder";
-
- private static final String SECURITY_CLASS = "org.eclipse.equinox.ds.tests.tb5.impl.SecurityTester";
-
- private static final String BLOCK_ACTIVE_CLASS = "org.eclipse.equinox.ds.tests.tb2.impl.Blocker";
-
- private static final String BLOCK_BIND_CLASS = "org.eclipse.equinox.ds.tests.tb3.impl.BindBlocker";
-
- private static final String STATIC_CLASS = "org.eclipse.equinox.ds.tests.tb6.StaticComp";
-
- private static final String REFERENCED_CLASS = "org.eclipse.equinox.ds.tests.tb6.ReferencedComp";
-
- private static final String NS_CLASS = "org.eclipse.equinox.ds.tests.tbc.NamespaceProvider";
-
- private static final String COMP_OPTIONAL_100 = "org.eclipse.equinox.ds.tests.tb11.optionalNS100";
-
- private static final String COMP_OPTIONAL_110 = "org.eclipse.equinox.ds.tests.tb11.optionalNS110";
-
- private static final String COMP_REQUIRE_100 = "org.eclipse.equinox.ds.tests.tb11.requireNS100";
-
- private static final String COMP_REQUIRE_110 = "org.eclipse.equinox.ds.tests.tb11.requireNS110";
-
- private static final String COMP_IGNORE_100 = "org.eclipse.equinox.ds.tests.tb11.ignoreNS100";
-
- private static final String COMP_IGNORE_110 = "org.eclipse.equinox.ds.tests.tb11.ignoreNS110";
-
- private static final String COMP_NOTSET_100 = "org.eclipse.equinox.ds.tests.tb11.notsetNS100";
-
- private static final String COMP_NOTSET_110 = "org.eclipse.equinox.ds.tests.tb11.notsetNS110";
-
- private static final String MOD_NOTSET_NS100 = "org.eclipse.equinox.ds.tests.tb21.notsetNS100";
-
- private static final String MOD_NOTSET_NS110 = "org.eclipse.equinox.ds.tests.tb21.notsetNS110";
-
- private static final String MOD_NOARGS_NS100 = "org.eclipse.equinox.ds.tests.tb21.NoArgs100";
-
- private static final String MOD_NOARGS_NS110 = "org.eclipse.equinox.ds.tests.tb21.NoArgs110";
-
- private static final String MOD_CC_NS100 = "org.eclipse.equinox.ds.tests.tb21.CcNS100";
-
- private static final String MOD_CC_NS110 = "org.eclipse.equinox.ds.tests.tb21.CcNS110";
-
- private static final String MOD_BC_NS100 = "org.eclipse.equinox.ds.tests.tb21.BcNS100";
-
- private static final String MOD_BC_NS110 = "org.eclipse.equinox.ds.tests.tb21.BcNS110";
-
- private static final String MOD_MAP_NS100 = "org.eclipse.equinox.ds.tests.tb21.MapNS100";
-
- private static final String MOD_MAP_NS110 = "org.eclipse.equinox.ds.tests.tb21.MapNS110";
-
- private static final String MOD_CC_BC_MAP_NS100 = "org.eclipse.equinox.ds.tests.tb21.CcBcMapNS100";
-
- private static final String MOD_CC_BC_MAP_NS110 = "org.eclipse.equinox.ds.tests.tb21.CcBcMapNS110";
-
- private static final String MOD_NOT_EXIST_NS110 = "org.eclipse.equinox.ds.tests.tb21.NotExistNS110";
-
- private static final String MOD_THROW_EX_NS110 = "org.eclipse.equinox.ds.tests.tb21.ThrowExNS110";
-
- private static final String COMP_OPTIONAL = "org.eclipse.equinox.ds.tests.tb24.optional";
-
- private static final String COMP_REQUIRE = "org.eclipse.equinox.ds.tests.tb24.require";
-
- private static final String COMP_IGNORE = "org.eclipse.equinox.ds.tests.tb24.ignore";
-
-
- private static int timeout = 1000;
-
- private Bundle tb1;
-
- private ServiceTracker trackerNamedService;
-
- private ServiceTracker trackerNamedServiceFactory;
-
- private ServiceTracker trackerCM;
-
- private ServiceTracker trackerExtendedClass;
-
- private ServiceTracker trackerSAC;
-
- private ServiceTracker trackerSC;
-
- private ServiceTracker trackerDynService;
-
- private ServiceTracker trackerDynServiceFactory;
-
- private ServiceTracker trackerBSRC;
-
- private ServiceTracker trackerMBSRC;
-
- private ServiceTracker trackerSecurity;
-
- private ServiceTracker trackerBAS;
-
- private ServiceTracker trackerBBS;
-
- private ServiceTracker trackerStatic;
-
- private ServiceTracker trackerReferenced;
-
- private ServiceTracker trackerNS;
-
- private ServiceTracker trackerBoundServiceCounterFactory;
-
- private ServiceTracker trackerBoundServiceCounterHelperFactory;
-
- private ServiceTracker trackerStaticServiceCounterFactory;
-
- private ServiceTracker trackerBaseService;
-
- private Hashtable registeredServices = new Hashtable();
-
- private int scr_restart_timeout = 33000;
-
- private boolean synchronousBuild = false;
-
- private BundleInstaller installer;
-
- public void setUp() throws Exception {
- DSTestsActivator.activateSCR();
-
- timeout = getSystemProperty("scr.test.timeout", timeout);
- scr_restart_timeout = getSystemProperty("scr.restart.timeout", scr_restart_timeout);
-
- String synchronousBuildProp = System.getProperty("equinox.ds.synchronous_build");
- synchronousBuild = (synchronousBuildProp == null) || !synchronousBuildProp.equalsIgnoreCase("false");
-
- clearConfigurations();
- // init trackers
- BundleContext bc = getContext();
-
- installer = new BundleInstaller("/scr_test/", bc);
-
- // install test bundles
- tb1 = installBundle("tb1");
-
- // start them
- tb1.start();
- waitBundleStart();
-
- trackerNamedService = new ServiceTracker(bc, NAMED_CLASS, null);
- Filter filter = bc.createFilter("(&(" + ComponentConstants.COMPONENT_FACTORY + '=' + NAMED_CLASS + ")("
- + Constants.OBJECTCLASS + '=' + ComponentFactory.class.getName() + "))");
- trackerNamedServiceFactory = new ServiceTracker(bc, filter, null);
- trackerCM = new ServiceTracker(bc, ConfigurationAdmin.class.getName(), null);
- trackerExtendedClass = new ServiceTracker(bc, EXTENDED_CLASS, null);
- trackerSAC = new ServiceTracker(bc, SAC_CLASS, null);
- trackerSC = new ServiceTracker(bc, SC_CLASS, null);
- trackerDynService = new ServiceTracker(bc, DYN_SERVICE_CLASS, null);
- filter = bc.createFilter("(&(" + ComponentConstants.COMPONENT_FACTORY + '=' + DYN_SERVICE_CLASS + ")("
- + Constants.OBJECTCLASS + '=' + ComponentFactory.class.getName() + "))");
- trackerDynServiceFactory = new ServiceTracker(bc, filter, null);
- trackerBSRC = new ServiceTracker(bc, BSRC_CLASS, null);
- trackerMBSRC = new ServiceTracker(bc, MBSRC_CLASS, null);
- trackerSecurity = new ServiceTracker(bc, SECURITY_CLASS, null);
- trackerBAS = new ServiceTracker(bc, BLOCK_ACTIVE_CLASS, null);
- trackerBBS = new ServiceTracker(bc, BLOCK_BIND_CLASS, null);
- trackerStatic = new ServiceTracker(bc, STATIC_CLASS, null);
- trackerReferenced = new ServiceTracker(bc, REFERENCED_CLASS, null);
- trackerNS = new ServiceTracker(bc, NS_CLASS, null);
- filter = bc.createFilter("(&(" + ComponentConstants.COMPONENT_FACTORY + '=' + "CountFactory" + ")("
- + Constants.OBJECTCLASS + '=' + ComponentFactory.class.getName() + "))");
- trackerBoundServiceCounterFactory = new ServiceTracker(bc, filter, null);
- filter = bc.createFilter("(&(" + ComponentConstants.COMPONENT_FACTORY + '=' + "CountHelperFactory" + ")("
- + Constants.OBJECTCLASS + '=' + ComponentFactory.class.getName() + "))");
- trackerBoundServiceCounterHelperFactory = new ServiceTracker(bc, filter, null);
- filter = bc.createFilter("(&(" + ComponentConstants.COMPONENT_FACTORY + '=' + "StaticServiceCountFactory" + ")("
- + Constants.OBJECTCLASS + '=' + ComponentFactory.class.getName() + "))");
- trackerStaticServiceCounterFactory = new ServiceTracker(bc, filter, null);
- trackerBaseService = new ServiceTracker(bc, PropertiesProvider.class.getName(), null);
-
- // start listening
- trackerNamedService.open();
- trackerNamedServiceFactory.open();
- trackerCM.open();
- trackerExtendedClass.open();
- trackerSAC.open();
- trackerSC.open();
- trackerDynService.open();
- trackerDynServiceFactory.open();
- trackerBSRC.open();
- trackerMBSRC.open();
- trackerSecurity.open();
- trackerBAS.open();
- trackerBBS.open();
- trackerStatic.open();
- trackerReferenced.open();
- trackerNS.open();
- trackerBoundServiceCounterFactory.open();
- trackerBoundServiceCounterHelperFactory.open();
- trackerStaticServiceCounterFactory.open();
- trackerBaseService.open();
- }
-
- /**
- * This methods takes care of the configurations related to this test
- *
- * @throws IOException
- * @throws InvalidSyntaxException
- * @throws InterruptedException
- */
- private void clearConfigurations() throws IOException, InvalidSyntaxException {
- ServiceReference cmSR = getContext().getServiceReference(ConfigurationAdmin.class.getName());
- if (cmSR == null)
- return;
- ConfigurationAdmin cm = (ConfigurationAdmin) getContext().getService(cmSR);
- // clean configurations from previous tests
- // clean factory configs for named service
- clearConfiguration(cm, "(service.factoryPid=" + NAMED_CLASS + ")");
- // clean configs for named service
- clearConfiguration(cm, "(service.pid=" + NAMED_CLASS + ")");
- // clean configs for stand alone component
- clearConfiguration(cm, "(service.pid=" + SAC_CLASS + ")");
- // clean configs for optionalNS100
- clearConfiguration(cm, "(service.pid=" + COMP_OPTIONAL_100 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_OPTIONAL_100 + ")");
- // clean configs for optionalNS110
- clearConfiguration(cm, "(service.pid=" + COMP_OPTIONAL_110 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_OPTIONAL_110 + ")");
- // clean configs for requireNS100
- clearConfiguration(cm, "(service.pid=" + COMP_REQUIRE_100 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_REQUIRE_100 + ")");
- // clean configs for requireNS110
- clearConfiguration(cm, "(service.pid=" + COMP_REQUIRE_110 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_REQUIRE_110 + ")");
- // clean configs for ignoreNS100
- clearConfiguration(cm, "(service.pid=" + COMP_IGNORE_100 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_IGNORE_100 + ")");
- // clean configs for ignoreNS110
- clearConfiguration(cm, "(service.pid=" + COMP_IGNORE_110 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_IGNORE_110 + ")");
- // clean configs for notsetNS100
- clearConfiguration(cm, "(service.pid=" + COMP_NOTSET_100 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_NOTSET_100 + ")");
- // clean configs for notsetNS110
- clearConfiguration(cm, "(service.pid=" + COMP_NOTSET_110 + ")");
- clearConfiguration(cm, "(service.factoryPid=" + COMP_NOTSET_110 + ")");
-
- clearConfiguration(cm, "(service.pid=" + MOD_NOTSET_NS100 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_NOTSET_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_NOARGS_NS100 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_NOARGS_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_CC_NS100 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_CC_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_BC_NS100 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_BC_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_MAP_NS100 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_MAP_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_CC_BC_MAP_NS100 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_CC_BC_MAP_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_NOT_EXIST_NS110 + ")");
- clearConfiguration(cm, "(service.pid=" + MOD_THROW_EX_NS110 + ")");
-
- clearConfiguration(cm, "(service.pid=" + COMP_IGNORE + ")");
- clearConfiguration(cm, "(service.pid=" + COMP_OPTIONAL + ")");
- clearConfiguration(cm, "(service.pid=" + COMP_REQUIRE + ")");
- getContext().ungetService(cmSR);
- }
-
- private void clearConfiguration(ConfigurationAdmin cm, String filter) throws IOException, InvalidSyntaxException {
- Configuration[] configs = cm.listConfigurations(filter);
- for (int i = 0; configs != null && i < configs.length; i++) {
- Configuration configuration = configs[i];
- configuration.delete();
- }
- }
-
- /**
- * @param propertyKey
- */
- private int getSystemProperty(String propertyKey, int defaultValue) {
- String propertyString = System.getProperty(propertyKey);
- int sleepTime = defaultValue;
- if (propertyString != null) {
- try {
- sleepTime = Integer.parseInt(propertyString);
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("Error while parsing sleep value! The default one will be used : " + defaultValue);
- }
- if (sleepTime < 100) {
- log("The sleep value is too low : " + sleepTime + " ! The default one will be used : " + defaultValue);
- return defaultValue;
- }
- return sleepTime;
- }
- return defaultValue;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.equinox.ds.tests.tbc.DSTest.#tearDown()
- */
- public void tearDown() throws Exception {
- unregisterAllServices();
-
- trackerNamedService.close();
- trackerNamedServiceFactory.close();
- trackerExtendedClass.close();
- trackerSAC.close();
- trackerSC.close();
- trackerDynService.close();
- trackerDynServiceFactory.close();
- trackerBSRC.close();
- trackerMBSRC.close();
- trackerSecurity.close();
- trackerBAS.close();
- trackerBBS.close();
- trackerStatic.close();
- trackerReferenced.close();
- trackerNS.close();
- trackerBoundServiceCounterFactory.close();
- trackerBoundServiceCounterHelperFactory.close();
- trackerBaseService.close();
-
- if (installer != null) {
- BundleInstaller bi = installer;
- installer = null;
- bi.shutdown();
- }
-
- clearConfigurations();
- }
-
- public void testBindUnbind() throws Exception {
-
- assertEquals("TestBundle1 must be running.", Bundle.ACTIVE, tb1.getState());
-
- Bundle tb1a = installBundle("tb1a");
- tb1a.start();
- waitBundleStart();
- ServiceReference sr1 = getContext().getServiceReference("org.eclipse.equinox.ds.tests.tb1a.Comp1");
- assertNotNull("Incorrect components should be ignored and the component Comp1 should be available", sr1);
- getContext().ungetService(sr1);
- uninstallBundle(tb1a);
-
- Object s = trackerExtendedClass.getService();
- assertNotNull("The BindUnbindSuccessor component should be available", s);
-
- assertTrue("The bind method on BindUnbindSuccessor component should be called to save the service reference",
- ((BoundTester) s).getBoundObjectsCount() > 0);
-
- // disable the referenced component to trigger unbind event
- ComponentManager enabler = (ComponentManager) s;
- enabler.enableComponent(SAC_CLASS, false);
- Thread.sleep(timeout);
-
- assertNull("The SAC component should be disabled (unavailable)", trackerSAC.getServiceReference());
-
- assertTrue("The unbind method on BindUnbindSuccessor component should be called to reset the service reference",
- ((BoundTester) s).getBoundObjectsCount() < 1);
-
- // enable the referenced component
- enabler = (ComponentManager) trackerExtendedClass.getService();
- enabler.enableComponent(SAC_CLASS, true);
- Thread.sleep(timeout);
- assertNotNull("The SAC component should be available", trackerSAC.getServiceReference());
- }
-
- public void testUniqueComponentContext() throws Exception {
- Bundle bundle = installBundle("tb4");
- bundle.start();
- waitBundleStart();
-
- Hashtable props;
- ComponentFactory factory = (ComponentFactory) trackerNamedServiceFactory.getService();
- assertNotNull("The NamedService component factory should be available", factory);
-
- // create the first service
- props = new Hashtable();
- props.put("name", "hello");
-
- ComponentInstance ci1 = factory.newInstance(props);
- ComponentInstance ci2 = factory.newInstance(props);
-
- ComponentContextProvider cce1 = (ComponentContextProvider) ci1.getInstance();
- ComponentContextProvider cce2 = (ComponentContextProvider) ci2.getInstance();
-
- assertNotSame("The two instances created must be different", cce1, cce2);
-
- ComponentContext cc1 = cce1.getComponentContext();
- ComponentContext cc2 = cce2.getComponentContext();
-
- assertNotSame("The two component contexts must be not the same", cc1, cc2);
-
- uninstallBundle(bundle);
- }
-
- public void testComponentContextMethods() throws Exception {
-
- Object extendedClass = trackerExtendedClass.getService();
- // check that the BindUnbindSuccessor component is available
- assertNotNull("BindUnbindSuccessor component should be available", extendedClass);
-
- ComponentContext ctxt = ((ComponentContextProvider) extendedClass).getComponentContext();
- assertNotNull("The BindUnbindSuccessor component should be activated properly", ctxt);
-
- assertNotNull("The AnotherComponent should be available before we disable it", trackerSAC.getServiceReferences());
- assertTrue("The AnotherComponent should be available before we disable it",
- trackerSAC.getServiceReferences().length > 0);
- assertNotNull("The Worker should be available before we disable it", trackerSC.getServiceReferences());
- assertTrue("The Worker should be available before we disable it", trackerSC.getServiceReferences().length > 0);
-
- // *** test disableComponent() method
- boolean exceptionThrown = false;
- try {
- ((ComponentManager) extendedClass).enableComponent("InvalidParameter", true); // test
- // for
- // disabling
- // unexistent
- } catch (IllegalArgumentException iae) {
- // expected exception
- exceptionThrown = true;
- } catch (Exception e) {
- // unexpected exception
- fail("Unexpected exception " + e.getMessage());
- }
- if (!exceptionThrown) {
- fail("Expected IllegalArgumentException but not thrown");
- }
-
- ((ComponentManager) extendedClass).enableComponent(SAC_CLASS, false);
- Thread.sleep(timeout); // let the SCR to unregister the service
- assertNull("The service must not be available after we had disabled the component (AnotherComponent)", trackerSAC
- .getServiceReferences());
-
- ((ComponentManager) extendedClass).enableComponent(SC_CLASS, false);
- Thread.sleep(timeout); // let the SCR to unregister the service
- assertNull("The service must not be available after we had disabled the component (Worker)", trackerSC
- .getServiceReferences());
-
- // *** test enableComponent() method
- ((ComponentManager) extendedClass).enableComponent(SAC_CLASS, true);
- Thread.sleep(timeout); // let the SCR to register the service
- assertNotNull("The service must be available after we had enabled the component", trackerSAC.getServiceReferences());
- assertTrue("The service must be available after we had enabled the component",
- trackerSAC.getServiceReferences().length > 0);
-
- ((ComponentManager) extendedClass).enableComponent(null, true);
- Thread.sleep(timeout);
- assertNotNull("The enableComponent() with passed null parameter, must enable the remaining disabled components",
- trackerSC.getServiceReferences());
- assertTrue("The enableComponent() with passed null parameter, must enable the remaining disabled components",
- trackerSC.getServiceReferences().length > 0);
-
- // *** test getBundleContext()
- BundleContextProvider sacBCE = (BundleContextProvider) trackerSAC.getService();
- assertNotNull("AnotherComponent should be available", sacBCE);
- assertSame("The two bundle context (this from the activator and from the ComponentContext object must be the same",
- sacBCE.getBundleContext(), ((ComponentContextProvider) extendedClass).getComponentContext().getBundleContext());
-
- // *** test getComponentInstance()
- Bundle bundle = installBundle("tb4");
- assertNotNull("Installing tb4.jar should succeed", bundle);
- bundle.start();
- waitBundleStart();
-
- Hashtable props;
- ComponentFactory factory = (ComponentFactory) trackerNamedServiceFactory.getService();
- assertNotNull("NamedService component factory should be available", factory);
-
- props = new Hashtable();
- props.put("name", "hello");
-
- ComponentInstance ci = factory.newInstance(props);
- assertNotNull("newInstance() should not return null", ci);
- ComponentContextProvider cce = (ComponentContextProvider) ci.getInstance();
- assertNotNull("getInstance() should not return null if we haven't disposed the component", cce);
- assertNotNull("the component instance should be initialized correctly", cce.getComponentContext());
- ComponentInstance ctxtInstance = cce.getComponentContext().getComponentInstance();
- assertSame(
- "The ComponentInstance object retrieved from the factory and from the ComponentContext must be the same", ci,
- ctxtInstance);
- // dispose the instance
- ci.dispose();
- assertNull("getInstance() should return null when disposed", ci.getInstance());
-
- // *** test getUsingBundle()
- ComponentContextProvider simpleComponentCCE = (ComponentContextProvider) trackerSC.getService();
- assertNotNull("Worker should be available", simpleComponentCCE);
- assertNotNull("Worker's context should be not null", simpleComponentCCE.getComponentContext());
- assertNotNull("At least this bundle (TBC) must be using the Worker service", simpleComponentCCE
- .getComponentContext().getUsingBundle());
-
- // *** test getProperties()
- Dictionary p = simpleComponentCCE.getComponentContext().getProperties();
- assertNotNull("Worker properties must be not null", p);
- assertEquals("The properties must contain the custom property defined in the component description", p
- .get("custom"), "customvalue");
- assertEquals("The properties must contain the component.name property", p.get(ComponentConstants.COMPONENT_NAME),
- SC_CLASS);
- assertNotNull("The properties must contain the component.id property", p.get(ComponentConstants.COMPONENT_ID));
- assertEquals("The component.id property must be of type java.lang.Long", p.get(ComponentConstants.COMPONENT_ID)
- .getClass().getName(), Long.class.getName());
-
- // *** test getServiceReference()
- ServiceReference ctxtServiceReference = ctxt.getServiceReference();
- ServiceReference bcServiceReference = trackerExtendedClass.getServiceReference();
- assertEquals("The two ServiceReference should be equal", ctxtServiceReference, bcServiceReference);
-
- // *** test locateService(String)
- Object locateSac = ctxt.locateService("StandAloneComp");
- assertNotNull("The locateService() method should return non-null object", locateSac);
- assertEquals("The object must implement " + SAC_CLASS, locateSac.getClass().getName(), SAC_CLASS);
-
- // test illegal call
- assertNull("Trying to get invalid reference should return null", ctxt.locateService("InvalidReference"));
-
- ((ComponentManager) extendedClass).enableComponent(SAC_CLASS, false); // disable
- // component
- // to
- // test
- // that
- // the
- // locateService()
- // don't
- // return
- // disabled
- // components
- Thread.sleep(timeout);
-
- assertEquals("Check that the component is correctly disabled", 0, countAvailableServices(trackerSAC));
-
- locateSac = ctxt.locateService("StandAloneComp");
- assertNull("The reference shouldn't be available with optional cardinality and disabled component", locateSac);
-
- ((ComponentManager) extendedClass).enableComponent(SAC_CLASS, true);
- Thread.sleep(timeout);
- assertTrue("Check that the component is correctly enabled", countAvailableServices(trackerSAC) > 0);
-
- // *** test locateServices(String)
- Object[] boundObjects = ctxt.locateServices("StandAloneComp");
- int boundCount = ((BoundTester) extendedClass).getBoundObjectsCount();
- assertNotNull("The returned array of bound services should not be null", boundObjects);
- assertEquals("The returned array of bound services should have the length equal to the internal count", boundCount,
- boundObjects.length);
- for (int i = 0; i < boundObjects.length; i++) {
- assertNotNull("There shouldn't be null element in the bound objects array (" + i + ")", boundObjects[i]);
- }
-
- assertNull("The locateServices() method should return null on invalid reference name", ctxt
- .locateServices("InvalidReference"));
-
- // *** test locateService(String, ServiceReference)
- assertTrue("There must be at least one bound element", ((BoundTester) extendedClass).getBoundObjectsCount() > 0);
-
- ServiceReference sr1 = ((BoundTester) extendedClass).getBoundServiceRef(0);
- assertNotNull("The ServiceReference bound to the BindUnbindSuccessor components should not be null", sr1);
- Object fromSR1 = ctxt.getBundleContext().getService(sr1);
- Object fromCtxt = ctxt.locateService("StandAloneComp", sr1);
- try {
- assertNotNull("The service object from BundleContext must not be null", fromSR1);
- assertNotNull("The service object from locateService() must not be null", fromCtxt);
- assertSame(
- "The two objects retrieved from BundleContext and from locateService(String, ServiceReference) method must be the same",
- fromSR1, fromCtxt);
- } finally {
- ctxt.getBundleContext().ungetService(sr1);
- }
-
- assertNull("locateService() must return null when passed ServiceReference is null", ctxt.locateService(
- "StandAloneComp", null));
-
- assertNull("locateService() must return null when passed ServiceReference isn't bound to the component", ctxt
- .locateService("StandAloneComp", trackerExtendedClass.getServiceReference()));
-
- assertNull(
- "locateService() must return null when the referenceName isn't correct even if the service reference is correct",
- ctxt.locateService("InvalidReference", sr1));
-
- uninstallBundle(bundle);
- }
-
- public void testPropertiesHandling() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- ServiceReference ref;
-
- // update the properties
- Hashtable props = new Hashtable(10);
- props.put("test.property.value", "setFromCM");
- props.put("test.property.list", "setFromCM");
- props.put("component.name", "setFromCM");
- props.put("component.id", new Long(-1));
- // the line below will create the configuration if it doesn't exists!
- // see CM api for details
- assertNotNull("The ConfigurationAdmin should be available", cm);
- Configuration config = cm.getConfiguration(SAC_CLASS);
- assertNotNull("The Configuration object should be created if don't exist", config);
- config.update(props);
-
- // let SCR & CM to complete it's job
- Thread.sleep(timeout * 2);
-
- ref = trackerSAC.getServiceReference();
- // check the correctness of the properties
- assertNotNull("The AnotherComponent's reference should be available", ref);
- assertEquals("Properties not overriden from later ones should not be lost", "setFromFile", ref
- .getProperty("test.property.array"));
- assertEquals("Properties set through the CM should take precedence before those set from file", "setFromCM", ref
- .getProperty("test.property.value"));
- assertEquals("Properties overriden from later ones in definition should take precedence", "setFromDefinition", ref
- .getProperty("test.property.name"));
- assertEquals("Properties set through the CM should take precedence before those set from definition", "setFromCM",
- ref.getProperty("test.property.list"));
- assertEquals("Properties not overriden from later ones should not be lost", "setFromDefinition", ref
- .getProperty("test.property.cont"));
- assertEquals("Must not allow overriding the component.name property", SAC_CLASS, ref.getProperty("component.name"));
- assertNotNull("component.id property should be present", ref.getProperty(ComponentConstants.COMPONENT_ID));
- assertTrue("Must not allow overriding the component.id property", ((Long) ref.getProperty("component.id"))
- .longValue() > 0);
-
- Bundle bundle = installBundle("tb4");
- bundle.start();
- waitBundleStart();
-
- Configuration c = cm.getConfiguration(NAMED_CLASS);
- assertNotNull("The Configuration should be created properly", c);
- Hashtable cmProps = new Hashtable();
- cmProps.put("override.property.3", "setFromCM");
- c.update(cmProps);
-
- // let the config update reach the SCR
- Thread.sleep(timeout * 2);
-
- ComponentFactory factory = (ComponentFactory) trackerNamedServiceFactory.getService();
- assertNotNull("The NamedService ComponentFactory should be available", factory);
-
- Hashtable newProps = new Hashtable();
- newProps.put("override.property.1", "setFromMethod");
- newProps.put("override.property.2", "setFromMethod");
- newProps.put("override.property.3", "setFromMethod");
- newProps.put(ComponentConstants.COMPONENT_NAME, "setFromMethod");
- newProps.put(ComponentConstants.COMPONENT_ID, new Long(-1));
- newProps.put("name", "test");
-
- ComponentInstance ci = factory.newInstance(newProps);
- assertNotNull("newInstance() method shouldn't return null", ci);
-
- ServiceReference[] refs = trackerNamedService.getServiceReferences();
- boolean serviceFound = false;
- for (int i = 0; refs != null && i < refs.length; i++) {
- ServiceReference current = refs[i];
- if ("test".equals(current.getProperty("name"))) {
- serviceFound = true;
- assertEquals("Properties set through newInstance method must override those from definition", "setFromMethod",
- current.getProperty("override.property.1"));
- assertEquals("Properties set through newInstance method must override those from file", "setFromMethod",
- current.getProperty("override.property.2"));
- assertEquals("Properties set through newInstance method must override those from ConfigurationAdmin",
- "setFromMethod", current.getProperty("override.property.3"));
- assertEquals("Must not override " + ComponentConstants.COMPONENT_NAME, current
- .getProperty(ComponentConstants.COMPONENT_NAME), NAMED_CLASS);
- assertTrue("Must not override " + ComponentConstants.COMPONENT_ID, ((Long) current
- .getProperty(ComponentConstants.COMPONENT_ID)).longValue() > 0);
- }
- }
- assertTrue("Must have found service", serviceFound);
-
- ci.dispose();
- c.delete();
- bundle.stop();
-
- // test the conflict between factory and factoryPID
- c = cm.createFactoryConfiguration(NAMED_CLASS);
- assertNotNull("CM should not return null Configuration from createFactoryConfiguration()", c);
- c.update(cmProps);
- Thread.sleep(timeout);
-
- bundle.start();
- waitBundleStart();
-
- assertNull("The named service shouldn't be available when there is factory configuration for it",
- trackerNamedServiceFactory.getService());
-
- c.delete();
- Thread.sleep(timeout * 2);
-
- // create factory configs for Worker
- Configuration scConfig1 = cm.createFactoryConfiguration(SC_CLASS);
- Hashtable scProps1 = new Hashtable();
- scProps1.put("name", "instance1");
- scConfig1.update(scProps1);
-
- Configuration scConfig2 = cm.createFactoryConfiguration(SC_CLASS);
- Hashtable scProps2 = new Hashtable();
- scProps2.put("name", "instance2");
- scConfig2.update(scProps2);
-
- Thread.sleep(timeout * 2);
-
- try {// test factory configuration for normal component
- assertEquals("The Worker should have two instances", 2, countAvailableServices(trackerSC));
- } finally {
- scConfig1.delete();
- scConfig2.delete();
- }
- Thread.sleep(timeout * 2);
-
- assertEquals("The Worker should have one instance", 1, countAvailableServices(trackerSC));
- ServiceReference scRef = trackerSC.getServiceReference();
- assertNull("The Worker only instance shouldn't have \"name\" property", scRef.getProperty("name"));
-
- uninstallBundle(bundle);
- }
-
- public void testBoundServiceReplacement() throws Exception {
- int beforeCount, afterCount;
- Hashtable mandatoryProperty = new Hashtable();
- mandatoryProperty.put("mandatory.property", "true");
-
- Bundle tb4 = installBundle("tb4");
- tb4.start();
- waitBundleStart();
- assertEquals("tb4.jar should be ACTIVE", Bundle.ACTIVE, tb4.getState());
-
- ComponentFactory namedFactory = (ComponentFactory) trackerNamedServiceFactory.getService();
- assertNotNull("NamedService component factory should be available", namedFactory);
- ComponentFactory dynFactory = (ComponentFactory) trackerDynServiceFactory.getService();
- assertNotNull("DynamicWorker component factory should be available", dynFactory);
-
- // create the mandatory elements
- ComponentInstance namedServiceInstance = namedFactory.newInstance((Dictionary) mandatoryProperty.clone());
- assertNotNull("NamedService component instance should not be null", namedServiceInstance);
- Object namedService = namedServiceInstance.getInstance();
- assertNotNull("NamedService should be created properly", namedService);
- ComponentInstance dynServiceInstance = dynFactory.newInstance((Dictionary) mandatoryProperty.clone());
- assertNotNull("DynamicWorker component instance should not be null", dynServiceInstance);
- Object dynService = dynServiceInstance.getInstance();
- assertNotNull("DynamicWorker should be created properly", dynService);
-
- Object bsrc = trackerBSRC.getService();
- assertNotNull("BoundReplacer should be available", bsrc);
- assertSame("NamedService bound should be our first instance", ((BoundMainProvider) bsrc)
- .getBoundService(BoundMainProvider.NAMED_SERVICE), namedService);
- assertSame("DynamicWorker bound should be our first instance", ((BoundMainProvider) bsrc)
- .getBoundService(BoundMainProvider.DYNAMIC_SERVICE), dynService);
-
- // provide second dynamic service
- ComponentInstance dynServiceInstance2 = dynFactory.newInstance((Dictionary) mandatoryProperty.clone());
- assertNotNull("Second DynamicWorker component instance should not be null", dynServiceInstance2);
- Object dynService2 = dynServiceInstance2.getInstance();
- assertNotNull("Second DynamicWorker instance should be available", dynService2);
-
- // reset the events
- ((DSEventsProvider) bsrc).resetEvents();
- // destroy the first instance of dynamic service
- dynServiceInstance.dispose();
-
- // check that service is replaced
- assertNotSame("The bound dynamic service shouldn't be our first instance", ((BoundMainProvider) bsrc)
- .getBoundService(BoundMainProvider.DYNAMIC_SERVICE), dynService);
- assertSame("The bound dynamic service should be our second instance", ((BoundMainProvider) bsrc)
- .getBoundService(BoundMainProvider.DYNAMIC_SERVICE), dynService2);
-
- // check the correct order of replacing
- DSEvent[] replacedBoundDynamicServicesEvents = ((DSEventsProvider) bsrc).getEvents();
- assertEquals("There should two events after we have disposed the bound service", 2,
- replacedBoundDynamicServicesEvents.length);
- assertEquals("The first event should be bind event", DSEvent.ACT_BOUND, replacedBoundDynamicServicesEvents[0]
- .getAction());
- assertSame("The first event should have associated object the second instance", dynService2,
- replacedBoundDynamicServicesEvents[0].getObject());
-
- assertEquals("The second event should be unbind event", DSEvent.ACT_UNBOUND, replacedBoundDynamicServicesEvents[1]
- .getAction());
- assertSame("The second event should have associated object the first instance", dynService,
- replacedBoundDynamicServicesEvents[1].getObject());
-
- // destroy and the second service
- dynServiceInstance2.dispose();
-
- // check that the inspected service is deactivated
- assertNull("The BoundReplacer should not be available as the destroyed service hasn't replacement", trackerBSRC
- .getService());
-
- // restore the BSRC
- assertNotNull("The DynamicWorker component instance should be created properly", dynFactory
- .newInstance((Dictionary) mandatoryProperty.clone()));
-
- Object bsrcObject = trackerBSRC.getService();
- assertNotNull("The BoundReplacer should be available again", bsrcObject);
- ComponentContext bsrcCtxt1 = ((ComponentContextProvider) bsrcObject).getComponentContext();
- assertNotNull("The BoundReplacer should be activated and ComponentContext available", bsrcCtxt1);
-
- // prepare second static service instance
- ComponentInstance namedServiceInstance2 = namedFactory.newInstance((Dictionary) mandatoryProperty.clone());
- assertNotNull("Second NamedService instance should be created properly", namedServiceInstance2);
- Object namedService2 = namedServiceInstance2.getInstance();
- assertNotNull("Second NamedService instance should be created properly", namedService2);
-
- // destroy the first instance
- beforeCount = countAvailableServices(trackerNamedService);
- namedServiceInstance.dispose();
- afterCount = countAvailableServices(trackerNamedService);
- assertEquals("The NamedService instance should be removed from the registry", beforeCount - 1, afterCount);
-
- // check that the BSRC has been reactivated
- Object bsrcObject2 = trackerBSRC.getService(); // the BSRC object can be
- // recreated
- assertNotNull("The BoundReplacer should not be null", bsrcObject2);
- ComponentContext bsrcCtxt2 = ((ComponentContextProvider) bsrcObject2).getComponentContext();
- assertNotNull("The second ComponentContext should not be null", bsrcCtxt2);
- assertNotSame("The second ComponentContext should be different than the first one", bsrcCtxt1, bsrcCtxt2);
-
- // destroy the second instance
- namedServiceInstance2.dispose();
-
- assertNull("The BSRC should be disabled", trackerBSRC.getService());
-
- uninstallBundle(tb4);
- }
-
- /**
- * Returns the number of available services for the passed tracker
- *
- * @param tracker
- * @return
- */
- private int countAvailableServices(ServiceTracker tracker) {
- if (tracker == null)
- return -1;
- ServiceReference[] refs = tracker.getServiceReferences();
- return refs != null ? refs.length : 0;
- }
-
- public void testBoundServiceReplacementOnModification() throws Exception {
- BundleContext bc = getContext();
- Hashtable initialProps = new Hashtable();
- Hashtable modifiedProps = new Hashtable();
- initialProps.put("mandatory.property", "true");
- modifiedProps.put("mandatory.property", "false");
-
- ServiceRegistration dynRegistration1 = registerService(DynamicWorker.class.getName(), new DynamicWorker(),
- (Dictionary) initialProps.clone());
-
- ServiceRegistration staticRegistration1 = registerService(StaticWorker.class.getName(), new StaticWorker(),
- (Dictionary) initialProps.clone());
-
- Bundle tb4 = installBundle("tb4");
- tb4.start();
- waitBundleStart();
- assertEquals("tb4.jar should be ACTIVE", Bundle.ACTIVE, tb4.getState());
-
- // assure the MBSRC is available
- assertTrue("The AdvancedBounder must be available", countAvailableServices(trackerMBSRC) > 0);
- Object bsrc = trackerMBSRC.getService();
- assertNotNull("MBSRC isntance should be not null", bsrc);
-
- // register the second instances
- ServiceRegistration dynRegistration2 = registerService(DynamicWorker.class.getName(), new DynamicWorker(),
- (Dictionary) initialProps.clone());
-
- // reset the bound services events
- ((DSEventsProvider) bsrc).resetEvents();
- // change the first instance of dynamic service
- dynRegistration1.setProperties(modifiedProps);
-
- Object instance1 = bc.getService(dynRegistration1.getReference());
- Object instance2 = bc.getService(dynRegistration2.getReference());
- try {
- // check that service is replaced
- assertNotSame("The bound dynamic service shouldn't be our first instance", ((BoundMainProvider) bsrc)
- .getBoundService(BoundMainProvider.DYNAMIC_SERVICE), instance1);
- assertSame("The bound dynamic service should be our second instance", ((BoundMainProvider) bsrc)
- .getBoundService(BoundMainProvider.DYNAMIC_SERVICE), instance2);
-
- // check the correct order of replacing
- DSEvent[] replacedBoundDynamicServicesEvents = ((DSEventsProvider) bsrc).getEvents();
- assertEquals("There should two events after we have disposed the bound service", 2,
- replacedBoundDynamicServicesEvents.length);
-
- assertEquals("The first event should be bind event", DSEvent.ACT_BOUND, replacedBoundDynamicServicesEvents[0]
- .getAction());
- assertSame("The first event should have associated object the second instance", instance2,
- replacedBoundDynamicServicesEvents[0].getObject());
-
- assertEquals("The second event should be unbind event", DSEvent.ACT_UNBOUND,
- replacedBoundDynamicServicesEvents[1].getAction());
- assertSame("The second event should have associated object the first instance", instance1,
- replacedBoundDynamicServicesEvents[1].getObject());
-
- } finally {
- bc.ungetService(dynRegistration1.getReference());
- bc.ungetService(dynRegistration2.getReference());
- }
- instance1 = instance2 = null;
-
- ComponentContext bsrcCtxt1 = ((ComponentContextProvider) bsrc).getComponentContext();
- assertNotNull("ComponentContext object should be available", bsrcCtxt1);
-
- ServiceRegistration staticRegistration2 = registerService(StaticWorker.class.getName(), new StaticWorker(),
- (Dictionary) initialProps.clone());
- // change the first instance
- staticRegistration1.setProperties((Dictionary) modifiedProps.clone());
-
- Object bsrcObject2 = trackerMBSRC.getService(); // the BSRC object can be
- // recreated
- assertNotNull("The BoundReplacer should not be null", bsrcObject2);
- ComponentContext bsrcCtxt2 = ((ComponentContextProvider) bsrcObject2).getComponentContext();
- assertNotNull("The second ComponentContext should not be null", bsrcCtxt2);
- assertNotSame("The second ComponentContext should be different than the first one", bsrcCtxt1, bsrcCtxt2);
-
- //test the modification of static service reference which is not bound
- unregisterService(staticRegistration1);
- unregisterService(staticRegistration2);
- assertTrue("The AdvancedBounder must not be available", countAvailableServices(trackerMBSRC) == 0);
- staticRegistration1 = registerService(StaticWorker.class.getName(), new StaticWorker(),
- (Dictionary) initialProps.clone());
- // assure the MBSRC is available
- assertTrue("The AdvancedBounder must be available", countAvailableServices(trackerMBSRC) > 0);
- staticRegistration2 = registerService(StaticWorker.class.getName(), new StaticWorker(),
- (Dictionary) initialProps.clone());
- bsrcCtxt2 = ((ComponentContextProvider)trackerMBSRC.getService()).getComponentContext();
- //modify the service which is not bound
- staticRegistration2.setProperties((Dictionary) modifiedProps.clone());
- bsrcCtxt1 = ((ComponentContextProvider)trackerMBSRC.getService()).getComponentContext();
- //check if the component is reactivated when a service is modified but it is not bound to the component
- assertEquals("The component context must not be changed", bsrcCtxt2, bsrcCtxt1);
-
- // test the modification of static service reference which is bound.
- // The service reference does still satisfy the component reference after the
- // modification
- unregisterService(staticRegistration1);
- unregisterService(staticRegistration2);
- assertTrue("The AdvancedBounder must not be available", countAvailableServices(trackerMBSRC) == 0);
- staticRegistration1 = registerService(StaticWorker.class.getName(), new StaticWorker(),
- (Dictionary) initialProps.clone());
- // assure the MBSRC is available
- assertTrue("The AdvancedBounder must be available", countAvailableServices(trackerMBSRC) > 0);
- bsrcCtxt1 = ((ComponentContextProvider)trackerMBSRC.getService()).getComponentContext();
- //modify the service which is bound
- Hashtable modified = (Hashtable) initialProps.clone();
- modified.put("a", "a");
- staticRegistration1.setProperties(modified);
- bsrcCtxt2 = ((ComponentContextProvider)trackerMBSRC.getService()).getComponentContext();
- //check if the component is reactivated when a bound service is modified but still satisfies the component reference
- assertEquals("The component context must not be changed", bsrcCtxt1, bsrcCtxt2);
-
- // test the modification of dynamic service reference which is bound.
- // The service reference does still satisfy the component reference after the
- // modification
- unregisterService(dynRegistration1);
- unregisterService(dynRegistration2);
- assertTrue("The AdvancedBounder must not be available", countAvailableServices(trackerMBSRC) == 0);
- dynRegistration1 = registerService(DynamicWorker.class.getName(), new DynamicWorker(),
- (Dictionary) initialProps.clone());
- // assure the MBSRC is available
- assertTrue("The AdvancedBounder must be available", countAvailableServices(trackerMBSRC) > 0);
- bsrc = trackerMBSRC.getService();
- // reset the bound services events
- ((DSEventsProvider) bsrc).resetEvents();
- //modify the service which is bound
- modified = (Hashtable) initialProps.clone();
- modified.put("a", "a");
- dynRegistration1.setProperties(modified);
- assertEquals(
- "There must be no unbind/bind activity when modifying reference which still satsfies the component reference",
- 0, ((DSEventsProvider) bsrc).getEvents().length);
-
- uninstallBundle(tb4);
-
- unregisterService(dynRegistration1);
- unregisterService(dynRegistration2);
- unregisterService(staticRegistration1);
- unregisterService(staticRegistration2);
- }
-
- public void testSecurity() throws Exception {
- // the method below sets the permissions of a bundle before installing it
- // to simplify the test case
- if (System.getSecurityManager() == null) {
- // the security is off
- return;
- }
- BundleContext bc = getContext();
- ServiceReference padmRef = bc.getServiceReference(PermissionAdmin.class.getName());
- assertNotNull("Permission Admin service not available.", padmRef);
-
- PermissionAdmin padm = (PermissionAdmin) bc.getService(padmRef);
- assertNotNull("Permission Admin service should be available", padm);
-
- assertEquals("TestBundle1 must be running.", Bundle.ACTIVE, tb1.getState());
-
- PermissionInfo registerServiceInfo = new PermissionInfo(ServicePermission.class.getName(),
- "org.eclipse.equinox.ds.tests.tb5.impl.SecurityTester", ServicePermission.REGISTER);
- PermissionInfo getServiceInfo = new PermissionInfo(ServicePermission.class.getName(),
- "org.eclipse.equinox.ds.tests.tb1.impl.AnotherComponent", ServicePermission.GET);
-
- PermissionInfo importPackage = new PermissionInfo(PackagePermission.class.getName(),
- "org.eclipse.equinox.ds.tests.tb1.impl", PackagePermission.IMPORT);
-
- // install the bundle to get the location
- Bundle tb5 = installBundle("tb5");
- tb5.start();
- waitBundleStart();
- final String bundleLocation = tb5.getLocation();
-
- uninstallBundle(tb5);
-
- // do the test
-
- // set all permission needed for correct operation
- padm.setPermissions(bundleLocation, new PermissionInfo[] { registerServiceInfo, getServiceInfo, importPackage });
-
- // install
- tb5 = installBundle("tb5");
- tb5.start();
- waitBundleStart();
- assertEquals("The bundle location should be the same as the first one registered", bundleLocation, tb5
- .getLocation());
-
- // check that the component is available
- assertTrue("The SecurityTester should be present because all needed permissions are set",
- countAvailableServices(trackerSecurity) > 0);
-
- // uninstall
- uninstallBundle(tb5);
-
- // remove the register permission - the service shouldn't be available
- padm.setPermissions(bundleLocation, new PermissionInfo[] { importPackage, getServiceInfo });
-
- // install
- tb5 = installBundle("tb5");
- tb5.start();
- waitBundleStart();
- assertEquals("The bundle location should be the same as the first one registered", bundleLocation, tb5
- .getLocation());
-
- // check that the service is unavailable
- assertEquals("The SecurityTester shouldn't be present due to missing ServicePermission.REGISTER", 0,
- countAvailableServices(trackerSecurity));
-
- // uninstall
- uninstallBundle(tb5);
-
- // remove the get permission and bring back the register permission
- padm.setPermissions(bundleLocation, new PermissionInfo[] { importPackage, registerServiceInfo });
-
- // install
- tb5 = installBundle("tb5");
- tb5.start();
- waitBundleStart();
- assertEquals("The bundle location should be the same as the first one registered", bundleLocation, tb5
- .getLocation());
-
- // check that the component is unavailable
- assertEquals("The SecurityTester shouldn't be present due to missing ServicePermission.GET", 0,
- countAvailableServices(trackerSecurity));
-
- // uninstall
- uninstallBundle(tb5);
-
- // reset the permissions
- padm.setPermissions(bundleLocation, null);
- // release the PermissionAdmin service
- bc.ungetService(padmRef);
- padm = null;
- }
-
- public void testImmediateComponents() throws Exception {
- Bundle tb4 = installBundle("tb4");
- tb4.start();
- waitBundleStart();
-
- // check that the ServiceProvider is registered
- assertNotNull("The ServiceProvider should be registered as service", getContext().getServiceReference(
- "org.eclipse.equinox.ds.tests.tb4.ServiceProvider"));
- // check that the ServiceProvider is activated
- assertTrue("The ServiceProvider should be activated", TestHelper.isActivatedServiceProvider());
-
- // check that the Stand Alone Component is activated
- assertTrue("The AnotherComponent should be activated", TestHelper.isActivatedStandAlone());
-
- uninstallBundle(tb4);
- }
-
- public void testRowReference() throws Exception {
- final String TAIL_CLASS = "org.eclipse.equinox.ds.tests.tb4.Component3";
- final String MIDDLE_CLASS = "org.eclipse.equinox.ds.tests.tb4.Component2";
- final String HEAD_CLASS = "org.eclipse.equinox.ds.tests.tb4.Component1";
-
- Bundle tb4 = installBundle("tb4");
- tb4.start();
- waitBundleStart();
-
- // check that all the components are present
- assertTrue("The Component3 should be available", checkAvailability(TAIL_CLASS));
- assertTrue("The Component2 should be available", checkAvailability(MIDDLE_CLASS));
- assertTrue("The Component1 should be available", checkAvailability(HEAD_CLASS));
-
- BundleContext bc = getContext();
- // get ComponentContext
- ServiceReference cceRef = bc.getServiceReference("org.eclipse.equinox.ds.tests.tbc.ComponentContextProvider");
- assertNotNull("The GiveMeContext should be available", cceRef);
- assertEquals("The GiveMeContext should be the implementation present in tb4.jar",
- "org.eclipse.equinox.ds.tests.tb4.GiveMeContext", cceRef.getProperty("component.name"));
-
- ComponentContextProvider cce = (ComponentContextProvider) bc.getService(cceRef);
- assertNotNull("The service object should be retrieved correctly", cce);
- ComponentContext ctxt = cce.getComponentContext();
- assertNotNull("The ComponentContext object should not be null", ctxt);
-
- // disable the tail component
- ctxt.disableComponent(TAIL_CLASS);
- Thread.sleep(timeout);
-
- // check that no component is available
- assertTrue("The Component3 shouldn't be available", !checkAvailability(TAIL_CLASS));
- assertTrue("The Component2 shouldn't be available", !checkAvailability(MIDDLE_CLASS));
- assertTrue("The Component1 shouldn't be available", !checkAvailability(HEAD_CLASS));
-
- // enable the tail component
- ctxt.enableComponent(TAIL_CLASS);
- Thread.sleep(timeout);
-
- // check that the components are back online
- assertTrue("The Component3 should be available", checkAvailability(TAIL_CLASS));
- assertTrue("The Component2 should be available", checkAvailability(MIDDLE_CLASS));
- assertTrue("The Component1 should be available", checkAvailability(HEAD_CLASS));
-
- // release the GiveMeContext
- bc.ungetService(cceRef);
-
- // remove the bundle
- uninstallBundle(tb4);
- }
-
- private boolean checkAvailability(String service) {
- BundleContext bc = getContext();
- ServiceReference ref = bc.getServiceReference(service);
- return ref != null;
- }
-
- private boolean checkFactoryAvailability(String factory) throws InvalidSyntaxException {
- BundleContext bc = getContext();
- ServiceReference[] refs = bc.getServiceReferences(ComponentFactory.class.getName(), "("
- + ComponentConstants.COMPONENT_FACTORY + "=" + factory + ")");
- return refs != null && refs.length > 0;
- }
-
- public void testBlockingComponents() throws Exception {
- final Bundle tb2 = installBundle("tb2");
- final Bundle tb3 = installBundle("tb3");
- final Bundle tb4 = installBundle("tb4");
-
- new Thread() {
- public void run() {
- try {
- tb2.start(); // start the blocking service
- } catch (BundleException e) {
- }
- }
- }.start();
- sleep0(scr_restart_timeout + timeout * 2);
-
- new Thread() {
- public void run() {
- try {
- tb4.start(); // start the other
- } catch (BundleException e) {
- }
- }
- }.start();
-
- sleep0(timeout * 2); // sleep until the services are activated
-
- // check that the first service is missing, and the second is available
- assertEquals("The blocking service should not be available", 0, countAvailableServices(trackerBAS));
- assertTrue("The service in the bundle should be available",
- checkAvailability("org.eclipse.equinox.ds.tests.tbc.ComponentContextProvider"));
-
- tb2.stop();
- tb4.stop();
-
- // check that AnotherComponent is available
- assertTrue("The AnotherComponent should be available",
- checkAvailability("org.eclipse.equinox.ds.tests.tb1.impl.AnotherComponent"));
-
- // start the other blocking bundle
- new Thread() {
- public void run() {
- try {
- tb3.start();
- } catch (BundleException e) {
- }
- }
- }.start();
-
- sleep0(scr_restart_timeout + timeout * 2);
-
- // start the non-blocking bundle
- new Thread() {
- public void run() {
- try {
- tb4.start(); // start the other
- } catch (BundleException e) {
- }
- }
- }.start();
-
- sleep0(timeout * 2); // sleep until the services are activated
-
- assertEquals("The blocking service should not be available", 0, countAvailableServices(trackerBBS));
- assertTrue("The service in the bundle should be available",
- checkAvailability("org.eclipse.equinox.ds.tests.tbc.ComponentContextProvider"));
-
- uninstallBundle(tb2);
- uninstallBundle(tb3);
- uninstallBundle(tb4);
- }
-
- public void testStaticPolicyBinding() throws Exception {
- Bundle tb6 = installBundle("tb6");
- tb6.start();
- waitBundleStart();
-
- // check initial conditions
- assertTrue("The StaticComp should be available", checkAvailability(STATIC_CLASS));
- assertTrue("The ReferencedComp shouldn't be available (disabled)", !checkAvailability(REFERENCED_CLASS));
-
- // reset the events list
- Object initialStatic = trackerStatic.getService();
- assertNotNull(STATIC_CLASS + " component should be non-null", initialStatic);
- ComponentContext initialCtxt = ((ComponentContextProvider) initialStatic).getComponentContext();
- ((DSEventsProvider) initialStatic).resetEvents();
- assertEquals("There shouldn't be bound service to StaticComp", 0, ((BoundTester) initialStatic)
- .getBoundObjectsCount());
-
- // enable the ReferencedComp
- initialCtxt.enableComponent(REFERENCED_CLASS);
- Thread.sleep(timeout);
-
- // check the availability after enablement
- assertTrue("The StaticComp should be available", checkAvailability(STATIC_CLASS));
- assertTrue("The ReferencedComp should be available", checkAvailability(REFERENCED_CLASS));
-
- Object enabledStatic = trackerStatic.getService();
- assertNotNull(STATIC_CLASS + " component should be non-null", enabledStatic);
- ComponentContext enabledCtxt = ((ComponentContextProvider) enabledStatic).getComponentContext();
- assertSame("The StaticComp must not have been restarted", initialCtxt, enabledCtxt);
- assertEquals("There should be no bound service to StaticComp", 0, ((BoundTester) enabledStatic)
- .getBoundObjectsCount());
-
- // disable the referenced component
- enabledCtxt.disableComponent(REFERENCED_CLASS);
- Thread.sleep(timeout);
-
- // check the availability
- assertTrue("The StaticComp should be available", checkAvailability(STATIC_CLASS));
- assertTrue("The ReferencedComp shouldn't be available", !checkAvailability(REFERENCED_CLASS));
-
- // check that the SCR did not restarted the component with static reference
- Object staticRefComp = trackerStatic.getService();
- assertNotNull(STATIC_CLASS + " component should be non-null", staticRefComp);
- ComponentContext ctxt = ((ComponentContextProvider) staticRefComp).getComponentContext();
- assertSame("The StaticComp must not have been restarted", enabledCtxt, ctxt);
- assertEquals("There should be none bound service to StaticComp", 0, ((BoundTester) staticRefComp)
- .getBoundObjectsCount());
-
- uninstallBundle(tb6);
- }
-
- public void testCircularityHandling() throws Exception {
- Bundle tb7 = installBundle("tb7");
- tb7.start();
- waitBundleStart();
-
- final String UNBREAKABLE = "org.eclipse.equinox.ds.tests.tb7.UnbreakableCircuit";
- final String DYN_BREAKABLE = "org.eclipse.equinox.ds.tests.tb7.DynamicCircuit";
- final String STATIC_BREAKABLE = "org.eclipse.equinox.ds.tests.tb7.StaticCircuit";
-
- // check that the unbreakable circuit isn't available
- assertTrue("The first service from the unbreakable circularity shouldn't be available",
- !checkAvailability(UNBREAKABLE + "1"));
- assertTrue("The second service from the unbreakable circularity shouldn't be available",
- !checkAvailability(UNBREAKABLE + "2"));
-
- // check that the breakable circuit with dynamic optional reference is
- // available
- assertTrue("The first service from the breakable circularity with dynamic optional reference should be available",
- checkAvailability(DYN_BREAKABLE + "1"));
- assertTrue("The second service from the breakable circularity with dynamic optional reference should be available",
- checkAvailability(DYN_BREAKABLE + "2"));
-
- // check that the breakable circuit with dynamic optional reference has
- // bound correctly
- ServiceReference dynBreak2Ref = getContext().getServiceReference(DYN_BREAKABLE + "2");
- Object dynBreak2 = getContext().getService(dynBreak2Ref);
- try {
- assertEquals("The DynamicCircuit2 component should have one bound object", 1, ((BoundTester) dynBreak2)
- .getBoundObjectsCount());
- assertNotNull("The DynamicCircuit2 component should have one non-null bound object", ((BoundTester) dynBreak2)
- .getBoundService(0));
- } finally {
- getContext().ungetService(dynBreak2Ref);
- }
- // check that the breakable circuit with static optional reference isn't
- // available
- assertTrue("The first service from the breakable circularity with static optional reference should be available",
- checkAvailability(STATIC_BREAKABLE + "1"));
- assertTrue("The second service from the breakable circularity with static optional reference should be available",
- checkAvailability(STATIC_BREAKABLE + "2"));
-
- // check that the optional reference isn't satisfied
- ServiceReference staticBreak2Ref = getContext().getServiceReference(STATIC_BREAKABLE + "2");
- Object staticBreak2 = getContext().getService(staticBreak2Ref);
- try {
- assertEquals("The StaticCircuit2 component shouldn't have bound objects", 0, ((BoundTester) staticBreak2)
- .getBoundObjectsCount());
- } finally {
- getContext().ungetService(staticBreak2Ref);
- }
-
- // check that the worker hasn't been blocked
- Bundle tb5 = installBundle("tb5");
- tb5.start();
- waitBundleStart();
-
- // check that the AnotherComponent service is available
- assertTrue("The AnotherComponent should be available",
- checkAvailability("org.eclipse.equinox.ds.tests.tb1.impl.AnotherComponent"));
- assertTrue("The service in TB5 should be available which means that the working thread of the SCR isn't blocked",
- checkAvailability("org.eclipse.equinox.ds.tests.tb5.impl.SecurityTester"));
-
- uninstallBundle(tb5);
- uninstallBundle(tb7);
- }
-
- // tests namespace handling in xml component description parser
- public void testNamespaceHandling() throws Exception {
- Bundle tb8 = installBundle("tb8");
- tb8.start();
- waitBundleStart();
-
- // check the root component handling
- assertTrue("The root1 component should be available", isNSComponentAvailable(101));
- assertTrue("The root2 component should be available", isNSComponentAvailable(102));
- assertTrue("The root3 component should not be available", !isNSComponentAvailable(103));
- assertTrue("The root4 component should be available", isNSComponentAvailable(104));
- assertTrue("The root5 component should not be available", !isNSComponentAvailable(105));
- // check the non root component handling
- assertTrue("The nonroot1 component should not be available", !isNSComponentAvailable(111));
- assertTrue("The nonroot2 component should be available", isNSComponentAvailable(112));
- assertTrue("The nonroot3 component should not be available", !isNSComponentAvailable(113));
- assertTrue("The nonroot4 component should be available", isNSComponentAvailable(114));
- assertTrue("The nonroot5 component should not be available", !isNSComponentAvailable(115));
- assertTrue("The nonroot6 component should be available", isNSComponentAvailable(116));
- assertTrue("The nonroot7 component should not be available", !isNSComponentAvailable(117));
- assertTrue("The nonroot8 component should not be available", !isNSComponentAvailable(118));
- assertTrue("The nonroot9 component should not be available", !isNSComponentAvailable(119));
- assertTrue("The nonroot10 component should not be available", !isNSComponentAvailable(120));
- assertTrue("The nonroot11 component should be available", isNSComponentAvailable(121));
- assertTrue("The nonroot12 component should not be available", !isNSComponentAvailable(122));
- assertTrue("The nonroot13 component should not be available", !isNSComponentAvailable(123));
- assertTrue("The nonroot14 component should be available", isNSComponentAvailable(124));
- assertTrue("The nonroot15 component should be available", isNSComponentAvailable(125));
- assertTrue("The nonroot16 component should be available", isNSComponentAvailable(126));
- assertTrue("The nonroot17 component should be available", isNSComponentAvailable(127));
-
- uninstallBundle(tb8);
- }
-
- private boolean isNSComponentAvailable(int nsid) {
- Object[] services = trackerNS.getServices();
- if (services == null) {
- return false;
- }
- for (int i = 0; i < services.length; i++) {
- if (services[i] instanceof NamespaceProvider) {
- NamespaceProvider s = (NamespaceProvider) services[i];
- if (s.getComponentNSID() == nsid) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- // tests wildcard handling in mf (e.g. Service-Component: OSGI-INF/*.xml)
- public void testWildcardHandling() throws Exception {
- Bundle tb9 = installBundle("tb9");
- tb9.start();
- waitBundleStart();
-
- final String WILD = "org.eclipse.equinox.ds.tests.tb9.Wildcard";
-
- // check that the both components are available
- assertTrue("The first Wildcard component should be available", checkAvailability(WILD + "1"));
- assertTrue("The second Wildcard component should be available", checkAvailability(WILD + "2"));
-
- uninstallBundle(tb9);
- }
-
- public void testDynamicComponentFactoryServiceBinding() throws Exception {
- Bundle tb10 = installBundle("tb10");
- assertNotNull("Failed to install test bundle tb10.jar", tb10);
- tb10.start();
- waitBundleStart();
-
- // assert that the required components are available
- assertTrue("The referenced simple component should be available", checkAvailability(SC_CLASS));
- assertTrue("The referenced factory component should be available", checkFactoryAvailability("CountHelperFactory"));
- assertTrue("The dependent dynamic factory component should be available", checkFactoryAvailability("CountFactory"));
-
- // retrieve the helper factory
- ComponentFactory helperFactory = (ComponentFactory) trackerBoundServiceCounterHelperFactory.getService();
- assertNotNull("The helper factory must be retrievable", helperFactory);
-
- // retrieve the observed factory
- ComponentFactory observedFactory = (ComponentFactory) trackerBoundServiceCounterFactory.getService();
- assertNotNull("The observed factory must be retrievable", observedFactory);
-
- // instantiate observed components
- ComponentInstance observedInstance1 = observedFactory.newInstance(null);
- assertNotNull("Cannot instantiate component from observed factory [1]", observedInstance1);
- ComponentInstance observedInstance2 = observedFactory.newInstance(null);
- assertNotNull("Cannot instantiate component from observed factory [2]", observedInstance2);
-
- BoundCountProvider observedComponent1 = (BoundCountProvider) observedInstance1.getInstance();
- BoundCountProvider observedComponent2 = (BoundCountProvider) observedInstance2.getInstance();
- assertNotNull("The observed component must be non-null [1]", observedComponent1);
- assertNotNull("The observed component must be non-null [2]", observedComponent2);
-
- // check the bound services before instantiating helper factory components -
- // both components must have 1 service bound
- assertEquals("The bound service count must be 1 - only the simple component is available [1]", 1,
- observedComponent1.getBoundServiceCount(null));
- assertEquals("The bound service count must be 1 - only the simple component is available [2]", 1,
- observedComponent2.getBoundServiceCount(null));
-
- // instantiate three helper components and check the service count again
- for (int i = 0; i < 3; i++) {
- helperFactory.newInstance(null); // don't keep track of the created
- // instances, they will be disposed when
- // the bundle is stopped and uninstalled
- }
-
- // check the bound services count again - both components must have 4
- // services bound -> 1 simple component and 3 helper factory
- assertEquals("The bound service count must be 4 - 1 simple component, 3 helper factory components [1]", 4,
- observedComponent1.getBoundServiceCount(null));
- assertEquals("The bound service count must be 4 - 1 simple component, 3 helper factory components [2]", 4,
- observedComponent2.getBoundServiceCount(null));
-
- uninstallBundle(tb10);
- }
-
- public void testStaticComponentFactoryServiceBinding() throws Exception {
- Bundle tb10 = installBundle("tb10");
- assertNotNull("Failed to install test bundle tb10.jar", tb10);
- tb10.start();
- waitBundleStart();
-
- // assert that the required components are available
- assertTrue("The referenced simple component should be available", checkAvailability(SC_CLASS));
- assertTrue("The referenced factory component should be available", checkFactoryAvailability("CountHelperFactory"));
- assertTrue("The dependent static factory component should be available",
- checkFactoryAvailability("StaticServiceCountFactory"));
-
- // retrieve the helper and observer factories
- ComponentFactory helperFactory = (ComponentFactory) trackerBoundServiceCounterHelperFactory.getService();
- ComponentFactory observedFactory = (ComponentFactory) trackerStaticServiceCounterFactory.getService();
- assertNotNull("The helper factory must be retrievable", helperFactory);
- assertNotNull("The observed factory must be retrievable", observedFactory);
-
- // instantiate observed components
- ComponentInstance observedInstance1 = observedFactory.newInstance(null);
- ComponentInstance observedInstance2 = observedFactory.newInstance(null);
- assertNotNull("Cannot instantiate component from observed factory [1]", observedInstance1);
- assertNotNull("Cannot instantiate component from observed factory [2]", observedInstance2);
-
- BoundCountProvider observedComponent1 = (BoundCountProvider) observedInstance1.getInstance();
- BoundCountProvider observedComponent2 = (BoundCountProvider) observedInstance2.getInstance();
- assertNotNull("The observed component must be non-null [1]", observedComponent1);
- assertNotNull("The observed component must be non-null [2]", observedComponent2);
-
- // check the bound services before instantiating helper factory components -
- // both components must have 1 service bound
- assertEquals("The bound service count must be 1 - only the simple component is available [1]", 1,
- observedComponent1.getBoundServiceCount(null));
- assertEquals("The bound service count must be 1 - only the simple component is available [2]", 1,
- observedComponent2.getBoundServiceCount(null));
-
- // instantiate three helper components and check the service count again
- for (int i = 0; i < 3; i++) {
- helperFactory.newInstance(null); // don't keep track of the created
- // instances, they will be disposed when
- // the bundle is stopped and uninstalled
- }
-
- // check whether the factory is the same, it shouldn't be disposed
- assertSame(observedFactory, trackerStaticServiceCounterFactory.getService());
- observedFactory = (ComponentFactory) trackerStaticServiceCounterFactory.getService();
-
- // check that the components are reinstantiated
- observedInstance1 = observedFactory.newInstance(null);
- observedInstance2 = observedFactory.newInstance(null);
- assertNotNull("Cannot instantiate new observed component instance [1]", observedInstance1);
- assertNotNull("Cannot instantiate new observed component instance [2]", observedInstance2);
-
- // get the new instances
- observedComponent1 = (BoundCountProvider) observedInstance1.getInstance();
- observedComponent2 = (BoundCountProvider) observedInstance2.getInstance();
- assertNotNull("The observed component instance must be non-null [1]", observedComponent1);
- assertNotNull("The observed component instance must be non-null [2]", observedComponent2);
-
- // check the bound services count again - both components must have 4
- // services bound -> 1 simple component and 3 helper factory
- assertEquals("The bound service count must be 4 - 1 simple component, 3 helper factory components [1]", 4,
- observedComponent1.getBoundServiceCount(null));
- assertEquals("The bound service count must be 4 - 1 simple component, 3 helper factory components [2]", 4,
- observedComponent2.getBoundServiceCount(null));
-
- uninstallBundle(tb10);
- }
-
- public void testConfigurationPolicy() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- Bundle tb11 = installBundle("tb11");
- tb11.start();
- waitBundleStart();
-
- Hashtable props = new Hashtable(10);
- props.put("config.base.data", new Integer(1));
-
- // component notsetNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0
- assertEquals("Configuration data should not be available for notsetNS100", 0, getBaseConfigData(COMP_NOTSET_100));
- // component notsetNS100 - property set by Configuration Admin; XML NS 1.0.0
- Configuration config = cm.getConfiguration(COMP_NOTSET_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for notsetNS100 and equal to 1", 1,
- getBaseConfigData(COMP_NOTSET_100));
-
- // component notsetNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for notsetNS110", 0, getBaseConfigData(COMP_NOTSET_110));
- // component notsetNS110 - property set by Configuration Admin; XML NS 1.1.0
- config = cm.getConfiguration(COMP_NOTSET_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for notsetNS110 and equal to 1", 1,
- getBaseConfigData(COMP_NOTSET_110));
-
- // component optionalNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- assertEquals("Component optionalNS100 should not be activated", -1, getBaseConfigData(COMP_OPTIONAL_100));
- // component optionalNS100 - property set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- config = cm.getConfiguration(COMP_OPTIONAL_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Component optionalNS100 should not be activated", -1, getBaseConfigData(COMP_OPTIONAL_100));
-
- // component optionalNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for optionalNS110", 0,
- getBaseConfigData(COMP_OPTIONAL_110));
- // component optionalNS110 - property set by Configuration Admin; XML NS
- // 1.1.0
- config = cm.getConfiguration(COMP_OPTIONAL_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for optionalNS110 and equal to 1", 1,
- getBaseConfigData(COMP_OPTIONAL_110));
-
- // component requireNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- assertEquals("Component requireNS100 should not be activated", -1, getBaseConfigData(COMP_REQUIRE_100));
- // component requireNS100 - property set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- config = cm.getConfiguration(COMP_REQUIRE_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Component requireNS100 should not be activated", -1, getBaseConfigData(COMP_REQUIRE_100));
-
- // component requireNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for requireNS110, and it should not be satisfied", -1,
- getBaseConfigData(COMP_REQUIRE_110));
- // component requireNS110 - property set by Configuration Admin; XML NS
- // 1.1.0
- config = cm.getConfiguration(COMP_REQUIRE_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for requireNS110 and equal to 1", 1,
- getBaseConfigData(COMP_REQUIRE_110));
-
- // component ignoreNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- assertEquals("Component ignoreNS100 should not be activated", -1, getBaseConfigData(COMP_IGNORE_100));
- // component ignoreNS100 - property set by Configuration Admin; XML NS 1.0.0
- // - INVALID COMPONENT
- config = cm.getConfiguration(COMP_IGNORE_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Component ignoreNS100 should not be activated", -1, getBaseConfigData(COMP_IGNORE_100));
-
- // component ignoreNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for ignoreNS110, but it should be satisfied", 0,
- getBaseConfigData(COMP_IGNORE_110));
- // component ignoreNS110 - property set by Configuration Admin; XML NS 1.1.0
- config = cm.getConfiguration(COMP_IGNORE_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should not be available for ignoreNS110, but it should be satisfied", 0,
- getBaseConfigData(COMP_IGNORE_110));
-
- uninstallBundle(tb11);
- }
-
- // tests configuration-policy for factory configuration objects
- public void testConfigurationPolicyFactoryConf() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- Bundle tb11 = installBundle("tb11");
- tb11.start();
- waitBundleStart();
-
- Hashtable props = new Hashtable(10);
- props.put("config.base.data", new Integer(1));
-
- // component notsetNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0
- assertEquals("Configuration data should not be available for notsetNS100", 0, getBaseConfigData(COMP_NOTSET_100));
- // component notsetNS100 - property set by Configuration Admin; XML NS 1.0.0
- Configuration config = cm.createFactoryConfiguration(COMP_NOTSET_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for notsetNS100 and equal to 1", 1,
- getBaseConfigData(COMP_NOTSET_100));
-
- // component notsetNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for notsetNS110", 0, getBaseConfigData(COMP_NOTSET_110));
- // component notsetNS110 - property set by Configuration Admin; XML NS 1.1.0
- config = cm.createFactoryConfiguration(COMP_NOTSET_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for notsetNS110 and equal to 1", 1,
- getBaseConfigData(COMP_NOTSET_110));
-
- // component optionalNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- assertEquals("Component optionalNS100 should not be activated", -1, getBaseConfigData(COMP_OPTIONAL_100));
- // component optionalNS100 - property set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- config = cm.createFactoryConfiguration(COMP_OPTIONAL_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Component optionalNS100 should not be activated", -1, getBaseConfigData(COMP_OPTIONAL_100));
-
- // component optionalNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for optionalNS110", 0,
- getBaseConfigData(COMP_OPTIONAL_110));
- // component optionalNS110 - property set by Configuration Admin; XML NS
- // 1.1.0
- config = cm.createFactoryConfiguration(COMP_OPTIONAL_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for optionalNS110 and equal to 1", 1,
- getBaseConfigData(COMP_OPTIONAL_110));
-
- // component requireNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- assertEquals("Component requireNS100 should not be activated", -1, getBaseConfigData(COMP_REQUIRE_100));
- // component requireNS100 - property set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- config = cm.createFactoryConfiguration(COMP_REQUIRE_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Component requireNS100 should not be activated", -1, getBaseConfigData(COMP_REQUIRE_100));
-
- // component requireNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for requireNS110, and it should not be satisfied", -1,
- getBaseConfigData(COMP_REQUIRE_110));
- // component requireNS110 - property set by Configuration Admin; XML NS
- // 1.1.0
- config = cm.createFactoryConfiguration(COMP_REQUIRE_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should be available for requireNS110 and equal to 1", 1,
- getBaseConfigData(COMP_REQUIRE_110));
-
- // component ignoreNS100 - property not set by Configuration Admin; XML NS
- // 1.0.0 - INVALID COMPONENT
- assertEquals("Component ignoreNS100 should not be activated", -1, getBaseConfigData(COMP_IGNORE_100));
- // component ignoreNS100 - property set by Configuration Admin; XML NS 1.0.0
- // - INVALID COMPONENT
- config = cm.createFactoryConfiguration(COMP_IGNORE_100);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Component ignoreNS100 should not be activated", -1, getBaseConfigData(COMP_IGNORE_100));
-
- // component ignoreNS110 - property not set by Configuration Admin; XML NS
- // 1.1.0
- assertEquals("Configuration data should not be available for ignoreNS110, but it should be satisfied", 0,
- getBaseConfigData(COMP_IGNORE_110));
- // component ignoreNS110 - property set by Configuration Admin; XML NS 1.1.0
- config = cm.createFactoryConfiguration(COMP_IGNORE_110);
- config.update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Configuration data should not be available for ignoreNS110, but it should be satisfied", 0,
- getBaseConfigData(COMP_IGNORE_110));
-
- uninstallBundle(tb11);
- }
-
- public void testActivateDeactivate() throws Exception {
- Bundle tb12 = installBundle("tb12");
- tb12.start();
- waitBundleStart();
-
- final String NOTSET_NS100 = "org.eclipse.equinox.ds.tests.tb12.notsetNS100";
- final String NOTSET_NS110 = "org.eclipse.equinox.ds.tests.tb12.notsetNS110";
- final String NOARGS_NS100 = "org.eclipse.equinox.ds.tests.tb12.NoArgs100";
- final String NOARGS_NS110 = "org.eclipse.equinox.ds.tests.tb12.NoArgs110";
- final String CC_NS100 = "org.eclipse.equinox.ds.tests.tb12.CcNS100";
- final String CC_NS110 = "org.eclipse.equinox.ds.tests.tb12.CcNS110";
- final String BC_NS100 = "org.eclipse.equinox.ds.tests.tb12.Bc100";
- final String BC_NS110 = "org.eclipse.equinox.ds.tests.tb12.Bc110";
- final String MAP_NS100 = "org.eclipse.equinox.ds.tests.tb12.MapNS100";
- final String MAP_NS110 = "org.eclipse.equinox.ds.tests.tb12.MapNS110";
- final String CC_BC_MAP_NS100 = "org.eclipse.equinox.ds.tests.tb12.CcBcMapNS100";
- final String CC_BC_MAP_NS110 = "org.eclipse.equinox.ds.tests.tb12.CcBcMapNS110";
- final String INT_NS110 = "org.eclipse.equinox.ds.tests.tb12.IntNS110";
- final String CC_BC_MAP_INT_NS110 = "org.eclipse.equinox.ds.tests.tb12.CcBcMapIntNS110";
-
- PropertiesProvider bs = getBaseService(NOTSET_NS100);
- ComponentContext cc = (bs instanceof ComponentContextProvider) ? ((ComponentContextProvider) bs)
- .getComponentContext() : null;
- assertNotNull("Component context should be available", cc);
-
- assertEquals("Activate method of " + NOTSET_NS100 + " should be called", 1 << 0, (1 << 0) & getBaseConfigData(bs));
- cc.disableComponent(NOTSET_NS100);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + NOTSET_NS100 + " should be called", 1 << 1, (1 << 1) & getBaseConfigData(bs));
-
- bs = getBaseService(NOTSET_NS110);
- assertNotNull(bs);
- assertEquals("Activate method of " + NOTSET_NS110 + " should be called", 1 << 0, (1 << 0) & getBaseConfigData(bs));
- cc.disableComponent(NOTSET_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + NOTSET_NS110 + " should be called", 1 << 1, (1 << 1) & getBaseConfigData(bs));
-
- bs = getBaseService(NOARGS_NS100); // INVALID COMPONENT FOR XML NS 1.0.0
- assertEquals("Component " + NOARGS_NS100 + " should not be activated", -1, getBaseConfigData(bs));
-
- bs = getBaseService(NOARGS_NS110);
- assertNotNull(bs);
- assertEquals("Activate method of " + NOARGS_NS110 + " should be called", 1 << 2, (1 << 2) & getBaseConfigData(bs));
- cc.disableComponent(NOARGS_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + NOARGS_NS110 + " should be called", 1 << 3, (1 << 3) & getBaseConfigData(bs));
-
- bs = getBaseService(CC_NS100); // INVALID COMPONENT FOR XML NS 1.0.0
- assertEquals("Component " + CC_NS100 + " should not be activated", -1, getBaseConfigData(bs));
-
- bs = getBaseService(CC_NS110);
- assertNotNull(bs);
- assertEquals("Activate method of " + CC_NS110 + " should be called", 1 << 4, (1 << 4) & getBaseConfigData(bs));
- cc.disableComponent(CC_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + CC_NS110 + " should be called", 1 << 5, (1 << 5) & getBaseConfigData(bs));
-
- bs = getBaseService(BC_NS100); // INVALID COMPONENT FOR XML NS 1.0.0
- assertEquals("Component " + BC_NS100 + " should not be activated", -1, getBaseConfigData(bs));
-
- bs = getBaseService(BC_NS110);
- assertNotNull(bs);
- assertEquals("Activate method of " + BC_NS110 + " should be called", 1 << 6, (1 << 6) & getBaseConfigData(bs));
- cc.disableComponent(BC_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + BC_NS110 + " should be called", 1 << 7, (1 << 7) & getBaseConfigData(bs));
-
- bs = getBaseService(MAP_NS100); // INVALID COMPONENT FOR XML NS 1.0.0
- assertEquals("Component " + MAP_NS100 + " should not be activated", -1, getBaseConfigData(bs));
-
- bs = getBaseService(MAP_NS110);
- assertNotNull(bs);
- assertEquals("Activate method of " + MAP_NS110 + " should be called", 1 << 8, (1 << 8) & getBaseConfigData(bs));
- cc.disableComponent(MAP_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + MAP_NS110 + " should be called", 1 << 9, (1 << 9) & getBaseConfigData(bs));
-
- bs = getBaseService(CC_BC_MAP_NS100); // INVALID COMPONENT FOR XML NS 1.0.0
- assertEquals("Component " + CC_BC_MAP_NS100 + " should not be activated", -1, getBaseConfigData(bs));
-
- bs = getBaseService(CC_BC_MAP_NS110);
- assertNotNull(bs);
- assertEquals("Activate method of " + CC_BC_MAP_NS110 + " should be called", 1 << 10, (1 << 10)
- & getBaseConfigData(bs));
- cc.disableComponent(CC_BC_MAP_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + CC_BC_MAP_NS110 + " should be called", 1 << 11, (1 << 11)
- & getBaseConfigData(bs));
-
- bs = getBaseService(INT_NS110);
- assertNotNull(bs);
- cc.disableComponent(INT_NS110);
- Thread.sleep(timeout);
- assertEquals("Deactivate method of " + INT_NS110 + " should be called", 1 << 12, (1 << 12) & getBaseConfigData(bs));
-
- bs = getBaseService(CC_BC_MAP_INT_NS110);
- assertNotNull(bs);
- cc.disableComponent(CC_BC_MAP_INT_NS110);
- Thread.sleep(timeout);
- int data = getBaseConfigData(bs);
- assertEquals("Deactivate method of " + CC_BC_MAP_INT_NS110 + " should be called", 1 << 13, (1 << 13) & data);
-
- // // Testing Deactivation reasons ////
- assertEquals("Deactivation reason shall be DEACTIVATION_REASON_DISABLED", 1, 0xFF & (data >> 16));
-
- final String CONT_EXP = "org.eclipse.equinox.ds.tests.tb12.ContextExp";
-
- cc.enableComponent(CC_BC_MAP_INT_NS110);
- Thread.sleep(timeout);
- bs = getBaseService(CC_BC_MAP_INT_NS110);
- assertNotNull(bs);
- cc.disableComponent(CONT_EXP);
- Thread.sleep(timeout);
- assertEquals("Deactivation reason shall be DEACTIVATION_REASON_REFERENCE", 2, 0xFF & (getBaseConfigData(bs) >> 16));
-
- cc.enableComponent(CONT_EXP);
- Thread.sleep(timeout);
-
- bs = getBaseService(CC_BC_MAP_INT_NS110);
- assertNotNull(bs);
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
- Configuration config = cm.getConfiguration(CC_BC_MAP_INT_NS110);
- Dictionary properties = config.getProperties();
- if (properties == null) {
- properties = new Hashtable();
- }
- properties.put("configuration.dummy", "dummy");
- config.update(properties);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivation reason shall be DEACTIVATION_REASON_CONFIGURATION_MODIFIED", 3,
- 0xFF & (getBaseConfigData(bs) >> 16));
-
- cc.enableComponent(CC_BC_MAP_INT_NS110);
- Thread.sleep(timeout );
-
- bs = getBaseService(CC_BC_MAP_INT_NS110);
- assertNotNull(bs);
- config = cm.getConfiguration(CC_BC_MAP_INT_NS110);
- config.delete();
- Thread.sleep(timeout * 2);
- assertEquals("Deactivation reason shall be DEACTIVATION_REASON_CONFIGURATION_DELETED", 4,
- 0xFF & (getBaseConfigData(bs) >> 16));
-
- cc.enableComponent(CC_BC_MAP_INT_NS110);
- Thread.sleep(timeout);
-
- cc.enableComponent(INT_NS110);
- Thread.sleep(timeout);
-
- bs = getBaseService(INT_NS110);
- assertNotNull(bs);
- ComponentContext ccIntNS110 = (bs instanceof ComponentContextProvider) ? ((ComponentContextProvider) bs)
- .getComponentContext() : null;
- assertNotNull("Component context should be available for " + INT_NS110, ccIntNS110);
- ccIntNS110.getComponentInstance().dispose();
- assertEquals("Deactivation reason shall be DEACTIVATION_REASON_DISPOSED", 5, 0xFF & (getBaseConfigData(bs) >> 16));
-
- bs = getBaseService(CC_BC_MAP_INT_NS110);
- assertNotNull(bs);
- tb12.stop();
- assertEquals("Deactivation reason shall be DEACTIVATION_REASON_BUNDLE_STOPPED", 6,
- 0xFF & (getBaseConfigData(bs) >> 16));
-
- uninstallBundle(tb12);
- }
-
- public void testBindUnbindParams() throws Exception {
- Bundle tb13 = installBundle("tb13");
- tb13.start();
- waitBundleStart();
-
- final String SR_NS100 = "org.eclipse.equinox.ds.tests.tb13.SrNS100";
- final String SR_NS110 = "org.eclipse.equinox.ds.tests.tb13.SrNS110";
- final String CE_NS100 = "org.eclipse.equinox.ds.tests.tb13.CeNS100";
- final String CE_NS110 = "org.eclipse.equinox.ds.tests.tb13.CeNS110";
- final String CE_MAP_NS100 = "org.eclipse.equinox.ds.tests.tb13.CeMapNS100";
- final String CE_MAP_NS110 = "org.eclipse.equinox.ds.tests.tb13.CeMapNS110";
-
- ServiceReference ref = getContext().getServiceReference(ComponentManager.class.getName());
- assertNotNull("Component Enabler Service Reference should be available", ref);
- ComponentManager enabler = (ComponentManager) getContext().getService(ref);
- assertNotNull("Component Enabler Service should be available", enabler);
-
- PropertiesProvider bs = getBaseService(SR_NS100);
- assertNotNull("Component " + SR_NS100 + " should be activated", bs);
- assertEquals("Bind method of " + SR_NS100 + " should be called", 1 << 0, (1 << 0) & getBaseConfigData(bs));
- enabler.enableComponent(SR_NS100, false);
- Thread.sleep(timeout);
- assertEquals("Unbind method of " + SR_NS100 + " should be called", 1 << 1, (1 << 1) & getBaseConfigData(bs));
-
- bs = getBaseService(SR_NS110);
- assertNotNull("Component " + SR_NS110 + " should be activated", bs);
- assertEquals("Bind method of " + SR_NS110 + " should be called", 1 << 0, (1 << 0) & getBaseConfigData(bs));
- enabler.enableComponent(SR_NS110, false);
- Thread.sleep(timeout);
- assertEquals("Unbind method of " + SR_NS110 + " should be called", 1 << 5, (1 << 5) & getBaseConfigData(bs));
-
- bs = getBaseService(CE_NS100);
- assertNotNull("Component " + CE_NS100 + " should be activated", bs);
- assertEquals("Bind method of " + CE_NS100 + " should be called", 1 << 2, (1 << 2) & getBaseConfigData(bs));
- enabler.enableComponent(CE_NS100, false);
- Thread.sleep(timeout);
- assertEquals("Unbind method of " + CE_NS100 + " should be called", 1 << 3, (1 << 3) & getBaseConfigData(bs));
-
- bs = getBaseService(CE_NS110);
- assertNotNull("Component " + CE_NS110 + " should be activated", bs);
- assertEquals("Bind method of " + CE_NS110 + " should be called", 1 << 2, (1 << 2) & getBaseConfigData(bs));
- enabler.enableComponent(CE_NS110, false);
- Thread.sleep(timeout);
- assertEquals("Unbind method of " + CE_NS110 + " should be called", 1 << 3, (1 << 3) & getBaseConfigData(bs));
-
- bs = getBaseService(CE_MAP_NS100);
- assertNull("Component " + CE_MAP_NS100 + " should not be activated", bs);
-
- bs = getBaseService(CE_MAP_NS110);
- assertNotNull("Component " + CE_MAP_NS110 + " should be activated", bs);
- assertEquals("Bind method of " + CE_MAP_NS110 + " should be called", 1 << 4, (1 << 4) & getBaseConfigData(bs));
- enabler.enableComponent(CE_MAP_NS110, false);
- Thread.sleep(timeout);
- assertEquals("Unbind method of " + CE_MAP_NS110 + " should be called", 1 << 5, (1 << 5) & getBaseConfigData(bs));
-
- getContext().ungetService(ref);
- uninstallBundle(tb13);
- }
-
- public void testOptionalNames() throws Exception {
- Bundle tb14 = installBundle("tb14");
- tb14.start();
- waitBundleStart();
- PropertiesProvider bs;
-
- final String OPT_NAME_100 = "org.eclipse.equinox.ds.tests.tb14.Optional";
- final String OPT_NAME_110 = "org.eclipse.equinox.ds.tests.tb14.Optional2";
- final String OPT_REF_100 = "org.eclipse.equinox.ds.tests.tb14.OptRef100";
- final String OPT_REF_110 = "org.eclipse.equinox.ds.tests.tb14.OptRef110";
-
- assertNull("Component " + OPT_NAME_100 + " should not be activated", getBaseService(OPT_NAME_100));
- assertNotNull("Component " + OPT_NAME_110 + " should be activated", getBaseService(OPT_NAME_110));
-
- assertNull("Component " + OPT_REF_100 + " should not be activated", getBaseService(OPT_REF_100));
- assertNotNull("Component " + OPT_REF_110 + " should be activated", bs = getBaseService(OPT_REF_110));
-
- ComponentContext cc = (bs instanceof ComponentContextProvider) ? ((ComponentContextProvider) bs)
- .getComponentContext() : null;
- assertNotNull("Component context should be available", cc);
- assertNotNull("Optional reference name should be set to interface attribute", cc
- .locateService(ComponentContextProvider.class.getName()));
-
- uninstallBundle(tb14);
- }
-
- public void testDisposingMultipleDependencies() throws Exception {
- Bundle tb15 = installBundle("tb15");
- tb15.start();
- waitBundleStart();
-
- final String C1 = "org.eclipse.equinox.ds.tests.tb15.Component1";
- final String C2 = "org.eclipse.equinox.ds.tests.tb15.Component2";
- final String C3 = "org.eclipse.equinox.ds.tests.tb15.Component3";
-
- PropertiesProvider serviceC1 = getBaseService(C1);
- assertNotNull("Component " + C1 + " should be activated", serviceC1);
- PropertiesProvider serviceC2 = getBaseService(C2);
- assertNotNull("Component " + C2 + " should be activated", serviceC2);
- PropertiesProvider serviceC3 = getBaseService(C3);
- assertNotNull("Component " + C3 + " should be activated", serviceC3);
-
- ComponentContext cc = (serviceC1 instanceof ComponentContextProvider) ? ((ComponentContextProvider) serviceC1)
- .getComponentContext() : null;
- assertNotNull("Component context should be available", cc);
-
- cc.disableComponent(C1);
- Thread.sleep(timeout);
-
- assertEquals("Component " + C3 + " should be deactivated first", 0, getBaseConfigData(serviceC3));
- assertEquals("Component " + C2 + " should be deactivated second", 1, getBaseConfigData(serviceC2));
- assertEquals("Component " + C1 + " should be deactivated third", 2, getBaseConfigData(serviceC1));
-
- uninstallBundle(tb15);
- }
-
- public void testReferenceTargetProperty() throws Exception {
- Bundle tb16 = installBundle("tb16");
- tb16.start();
- waitBundleStart();
-
- final String EXPOSER = "org.eclipse.equinox.ds.tests.tb16.Exposer";
- final String C1 = "org.eclipse.equinox.ds.tests.tb16.C1";
- final String C2 = "org.eclipse.equinox.ds.tests.tb16.C2";
-
- PropertiesProvider bs = getBaseService(EXPOSER);
- ComponentContext cc = (bs instanceof ComponentContextProvider) ? ((ComponentContextProvider) bs)
- .getComponentContext() : null;
- assertNotNull("Component context should be available", cc);
-
- PropertiesProvider serviceC2 = getBaseService(C2);
- // target property of referenced service of component Component2 should not
- // be satisfied
- assertNull("Component " + C2 + " should not be activated because of unsatisfied reference", serviceC2);
-
- cc.enableComponent(C1);
- Thread.sleep(timeout);
- assertNotNull("Component " + C1 + " should be available", getBaseService(C1));
-
- serviceC2 = getBaseService(C2);
- // target property of referenced service of component Component2 should now
- // be satisfied
- assertNotNull("Component " + C2 + " should be activated", serviceC2);
-
- uninstallBundle(tb16);
- }
-
- class OverloadManager extends Thread {
- private String compPrefix;
- private int firstComp;
- private int lastComp;
-
- public OverloadManager(String compPrefix, int first, int last) {
- this.compPrefix = compPrefix;
- this.firstComp = first;
- this.lastComp = last;
- }
-
- public void run() {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- try {
- for (int i = firstComp; i <= lastComp; i++) {
- Configuration config = cm.getConfiguration(compPrefix + i);
- Dictionary properties = config.getProperties();
- if (properties == null) {
- properties = new Hashtable();
- }
- properties.put("component.index", new Integer(i));
- config.update(properties);
-
- sleep0(100);
- }
- } catch (IOException e) {
- return;
- }
- }
-
- public boolean isAllComponentsRunning() {
- for (int i = firstComp; i <= lastComp; i++) {
- if (getBaseService(compPrefix + i) == null) {
- return false;
- }
- }
- return true;
- }
- }
-
- public void testOverload() throws Exception {
- Bundle tb17 = installBundle("tb17");
- Bundle tb18 = installBundle("tb18");
- Bundle tb19 = installBundle("tb19");
- tb17.start();
- tb18.start();
- tb19.start();
- waitBundleStart();
-
- final String SCR = "org.eclipse.equinox.ds.tests";
- final int startComp = 1;
- final int lastComp = 10;
- final int OVERLOAD_TIMEOUT = 60000; // max time allowed for processing in ms
-
- OverloadManager manager17 = new OverloadManager(SCR + ".tb17.C", startComp, lastComp);
- OverloadManager manager18 = new OverloadManager(SCR + ".tb18.C", startComp, lastComp);
- OverloadManager manager19 = new OverloadManager(SCR + ".tb19.C", startComp, lastComp);
-
- long startTime = System.currentTimeMillis();
- manager17.start();
- manager18.start();
- manager19.start();
-
- manager17.join();
- manager18.join();
- manager19.join();
-
- // waiting SCR to process events
- int successCount = 0;
- while ((successCount < 5) && (System.currentTimeMillis() - startTime < OVERLOAD_TIMEOUT)) {
- Thread.sleep(100);
- if (!manager17.isAllComponentsRunning() || !manager18.isAllComponentsRunning()
- || !manager19.isAllComponentsRunning()) {
- successCount = 0;
- continue;
- }
- successCount++;
- }
-
- long elapsed = System.currentTimeMillis() - startTime;
- log("testOverload(): Overload processing finished for " + elapsed + " ms.");
-
- assertTrue("All components of tb17 should be activated", manager17.isAllComponentsRunning());
- assertTrue("All components of tb18 should be activated", manager18.isAllComponentsRunning());
- assertTrue("All components of tb19 should be activated", manager19.isAllComponentsRunning());
-
- uninstallBundle(tb17);
- uninstallBundle(tb18);
- uninstallBundle(tb19);
- }
-
- public void testLazyBundles() throws Exception {
- Bundle tb20 = installBundle("tb20");
- // lazy bundle
- tb20.start(Bundle.START_ACTIVATION_POLICY);
- waitBundleStart();
-
- final String COMP = "org.eclipse.equinox.ds.tests.tb20.component";
- assertTrue("Provided service of Component " + COMP + " should be available.", trackerBaseService.size() > 0);
- uninstallBundle(tb20);
- }
-
- // Testing modified attribute for XML NS 1.0.0
- public void testModified100() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- Bundle tb21 = installBundle("tb21");
-
- Hashtable props = new Hashtable(10);
- props.put("config.dummy.data", new Integer(1));
- cm.getConfiguration(MOD_NOTSET_NS100).update(props);
- cm.getConfiguration(MOD_NOARGS_NS100).update(props);
- cm.getConfiguration(MOD_CC_NS100).update(props);
- cm.getConfiguration(MOD_BC_NS100).update(props);
- cm.getConfiguration(MOD_MAP_NS100).update(props);
- cm.getConfiguration(MOD_CC_BC_MAP_NS100).update(props);
-
- Thread.sleep(timeout * 2);
-
- tb21.start();
- waitBundleStart();
-
- props.put("config.dummy.data", new Integer(2));
- Hashtable unsatisfyingProps = new Hashtable(10);
- unsatisfyingProps.put("ref.target", "(component.name=org.eclipse.equinox.ds.tests.tb21.unexisting.provider)");
-
- PropertiesProvider bs = getBaseService(MOD_NOTSET_NS100);
- assertNotNull(bs);
- cm.getConfiguration(MOD_NOTSET_NS100).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_NOTSET_NS100 + " should not be called", 0, (1 << 0)
- & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_NOTSET_NS100 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- bs = getBaseService(MOD_NOTSET_NS100);
- cm.getConfiguration(MOD_NOTSET_NS100).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_NOTSET_NS100 + " should not be called", 0, (1 << 0)
- & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_NOTSET_NS100 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
-
- // INVALID COMPONENTS for XML NS 1.0.0 - modified attribute is set
- bs = getBaseService(MOD_NOARGS_NS100);
- assertEquals("Component " + MOD_NOARGS_NS100 + " should not be activated", null, bs);
- bs = getBaseService(MOD_CC_NS100);
- assertEquals("Component " + MOD_CC_NS100 + " should not be activated", null, bs);
- bs = getBaseService(MOD_BC_NS100);
- assertEquals("Component " + MOD_BC_NS100 + " should not be activated", null, bs);
- bs = getBaseService(MOD_MAP_NS100);
- assertEquals("Component " + MOD_MAP_NS100 + " should not be activated", null, bs);
- bs = getBaseService(MOD_CC_BC_MAP_NS100);
- assertEquals("Component " + MOD_CC_BC_MAP_NS100 + " should not be activated", null, bs);
-
- uninstallBundle(tb21);
- }
-
- // Testing modified attribute for XML NS 1.1.0
- public void testModified110() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- Bundle tb21a = installBundle("tb21a");
-
- Hashtable props = new Hashtable(10);
- props.put("config.dummy.data", new Integer(1));
- cm.getConfiguration(MOD_NOTSET_NS110).update(props);
- cm.getConfiguration(MOD_NOARGS_NS110).update(props);
- cm.getConfiguration(MOD_CC_NS110).update(props);
- cm.getConfiguration(MOD_BC_NS110).update(props);
- cm.getConfiguration(MOD_MAP_NS110).update(props);
- cm.getConfiguration(MOD_CC_BC_MAP_NS110).update(props);
-
- Thread.sleep(timeout * 2);
-
- tb21a.start();
- waitBundleStart();
-
- props.put("config.dummy.data", new Integer(2));
- Hashtable unsatisfyingProps = new Hashtable(10);
- unsatisfyingProps.put("ref.target", "(component.name=org.eclipse.equinox.ds.tests.tb21.unexisting.provider)");
-
- PropertiesProvider bs = getBaseService(MOD_NOTSET_NS110);
- cm.getConfiguration(MOD_NOTSET_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_NOTSET_NS110 + " should not be called", 0, (1 << 0)
- & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_NOTSET_NS110 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- bs = getBaseService(MOD_NOTSET_NS110);
- cm.getConfiguration(MOD_NOTSET_NS110).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_NOTSET_NS110 + " should not be called", 0, (1 << 0)
- & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_NOTSET_NS110 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_NOTSET_NS110);
- assertEquals("Activate method of " + MOD_NOTSET_NS110 + " should be called", 1 << 6, (1 << 6)
- & getBaseConfigData(bs));
-
- bs = getBaseService(MOD_NOARGS_NS110);
- cm.getConfiguration(MOD_NOARGS_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_NOARGS_NS110 + " should be called", 1 << 1, (1 << 1)
- & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_NOARGS_NS110 + " should not be called", 0, (1 << 7)
- & getBaseConfigData(bs));
- cm.getConfiguration(MOD_NOARGS_NS110).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_NOARGS_NS110 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_NOARGS_NS110);
- assertEquals("Activate method of " + MOD_NOARGS_NS110 + " should be called", 1 << 6, (1 << 6)
- & getBaseConfigData(bs));
-
- bs = getBaseService(MOD_CC_NS110);
- cm.getConfiguration(MOD_CC_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_CC_NS110 + " should be called", 1 << 2, (1 << 2) & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_CC_NS110 + " should not be called", 0, (1 << 7) & getBaseConfigData(bs));
- cm.getConfiguration(MOD_CC_NS110).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_CC_NS110 + " should be called", 1 << 7, (1 << 7) & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_CC_NS110);
- assertEquals("Activate method of " + MOD_CC_NS110 + " should be called", 1 << 6, (1 << 6) & getBaseConfigData(bs));
-
- bs = getBaseService(MOD_BC_NS110);
- cm.getConfiguration(MOD_BC_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_BC_NS110 + " should be called", 1 << 3, (1 << 3) & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_BC_NS110 + " should not be called", 0, (1 << 7) & getBaseConfigData(bs));
- cm.getConfiguration(MOD_BC_NS110).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_BC_NS110 + " should be called", 1 << 7, (1 << 7) & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_BC_NS110);
- assertEquals("Activate method of " + MOD_BC_NS110 + " should be called", 1 << 6, (1 << 6) & getBaseConfigData(bs));
-
- bs = getBaseService(MOD_MAP_NS110);
- cm.getConfiguration(MOD_MAP_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_MAP_NS110 + " should be called", 1 << 4, (1 << 4) & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_MAP_NS110 + " should not be called", 0, (1 << 7) & getBaseConfigData(bs));
- cm.getConfiguration(MOD_MAP_NS110).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_MAP_NS110 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_MAP_NS110);
- assertEquals("Activate method of " + MOD_MAP_NS110 + " should be called", 1 << 6, (1 << 6) & getBaseConfigData(bs));
-
- bs = getBaseService(MOD_CC_BC_MAP_NS110);
- cm.getConfiguration(MOD_CC_BC_MAP_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_CC_BC_MAP_NS110 + " should be called", 1 << 5, (1 << 5)
- & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_CC_BC_MAP_NS110 + " should not be called", 0, (1 << 7)
- & getBaseConfigData(bs));
- cm.getConfiguration(MOD_CC_BC_MAP_NS110).update(unsatisfyingProps);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_CC_BC_MAP_NS110 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_CC_BC_MAP_NS110);
- assertEquals("Activate method of " + MOD_CC_BC_MAP_NS110 + " should be called", 1 << 6, (1 << 6)
- & getBaseConfigData(bs));
-
- uninstallBundle(tb21a);
- }
-
- // Testing modified attribute - special cases
- public void testModifiedSpecialCases() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- Bundle tb21a = installBundle("tb21a");
-
- Hashtable props = new Hashtable(10);
- props.put("config.dummy.data", new Integer(1));
- cm.getConfiguration(MOD_CC_NS110).update(props);
- cm.getConfiguration(MOD_NOT_EXIST_NS110).update(props);
- cm.getConfiguration(MOD_THROW_EX_NS110).update(props);
- cm.getConfiguration(MOD_BC_NS110).update(props);
- Thread.sleep(timeout * 2);
-
- tb21a.start();
- waitBundleStart();
-
- // Verifying correctness of updated component properties
- PropertiesProvider bs = getBaseService(MOD_CC_NS110);
- props.put("config.dummy.data", new Integer(2));
- cm.getConfiguration(MOD_CC_NS110).update(props);
- Thread.sleep(timeout * 2);
- Object val = ((ComponentContextProvider) bs).getComponentContext().getProperties().get("config.dummy.data");
- assertEquals("Modified method of " + MOD_CC_NS110 + " should be called", 1 << 2, (1 << 2) & getBaseConfigData(bs));
- assertTrue("Component properties should be updated properly for " + MOD_CC_NS110, (new Integer(2)).equals(val));
-
- // Specified modified method doesn't exist, deactivate() should be called
- // instead of modified
- bs = getBaseService(MOD_NOT_EXIST_NS110);
- cm.getConfiguration(MOD_NOT_EXIST_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_NOT_EXIST_NS110 + " should be called", 1 << 7, (1 << 7)
- & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_NOT_EXIST_NS110);
- assertEquals("Activate method of " + MOD_NOT_EXIST_NS110 + " should be called", 1 << 6, (1 << 6)
- & getBaseConfigData(bs));
-
- // Specified modified method throws exception. Normal workflow should
- // continue, deactivate() should not be called
- bs = getBaseService(MOD_THROW_EX_NS110);
- cm.getConfiguration(MOD_THROW_EX_NS110).update(props);
- Thread.sleep(timeout * 2);
- assertEquals("Deactivate method of " + MOD_THROW_EX_NS110 + " should not be called", 0, (1 << 7)
- & getBaseConfigData(bs));
-
- // Deleting component configuration
- bs = getBaseService(MOD_BC_NS110);
- cm.getConfiguration(MOD_BC_NS110).delete();
- Thread.sleep(timeout * 2);
- assertEquals("Modified method of " + MOD_BC_NS110 + " should not be called", 0, (1 << 5) & getBaseConfigData(bs));
- assertEquals("Deactivate method of " + MOD_BC_NS110 + " should be called", 1 << 7, (1 << 7) & getBaseConfigData(bs));
- // Re-activating
- bs = getBaseService(MOD_BC_NS110);
- assertEquals("Activate method of " + MOD_BC_NS110 + " should be called", 1 << 6, (1 << 6) & getBaseConfigData(bs));
-
- uninstallBundle(tb21a);
- }
-
- public void testPrivateProperties() throws Exception {
- Bundle tb22 = installBundle("tb22");
- tb22.start();
- waitBundleStart();
-
- final String COMP = "org.eclipse.equinox.ds.tests.tb22.component";
-
- ServiceReference ref = trackerBaseService.getServiceReference();
- assertNotNull("Provided service of " + COMP + " should be available", ref);
- String[] keys = ref.getPropertyKeys();
- for (int i = 0; i < keys.length; i++) {
- assertTrue("Private properties should not be propagated", !keys[i].startsWith("."));
- }
-
- uninstallBundle(tb22);
- }
-
- // Testing situation when bind method throws exception
- public void testBindException() throws Exception {
- Bundle tb23 = installBundle("tb23");
-
- final String MANDATORY_REF_COMP = "org.eclipse.equinox.ds.tests.tb23.mandatory";
- final String OPTIONAL_REF_COMP = "org.eclipse.equinox.ds.tests.tb23.optional";
- tb23.start();
- waitBundleStart();
-
- PropertiesProvider bs = getBaseService(MANDATORY_REF_COMP);
- assertEquals("Component " + MANDATORY_REF_COMP + " should not be activated", null, bs);
- bs = getBaseService(OPTIONAL_REF_COMP);
- assertEquals("Component " + OPTIONAL_REF_COMP + " should be activated", 1 << 2, (1 << 2) & getBaseConfigData(bs));
-
- uninstallBundle(tb23);
- }
-
- // Testing config admin appear/disappear situations
- public void testConfigAdminOnOff() throws Exception {
- ConfigurationAdmin cm = (ConfigurationAdmin) trackerCM.getService();
- assertNotNull("The ConfigurationAdmin should be available", cm);
-
- Hashtable props = new Hashtable(11);
- props.put("config.base.data", new Integer(1));
- //create the configurations for the test DS components
- Configuration config = cm.getConfiguration(COMP_OPTIONAL);
- config.update(props);
- config = cm.getConfiguration(COMP_REQUIRE);
- config.update(props);
- config = cm.getConfiguration(COMP_IGNORE);
- config.update(props);
- //wait for CM to process the configuration updates
- Thread.sleep(timeout * 2);
-
- //stop the config admin bundle
- Bundle cmBundle = trackerCM.getServiceReference().getBundle();
- cmBundle.stop();
- Bundle tb24 = installBundle("tb24");
- try {
- tb24.start();
- waitBundleStart();
-
- // component with optional configuration should be available and not initialized by configuration
- assertEquals("Component with optional configuration should be activated", 0, getBaseConfigData(COMP_OPTIONAL));
- // component with ignored configuration should be available and not initialized by configuration
- assertEquals("Component with ignored configuration should be activated", 0, getBaseConfigData(COMP_IGNORE));
- // component with required configuration should NOT be available
- assertEquals("Component with required configuration should NOT be activated", -1, getBaseConfigData(COMP_REQUIRE));
-
- //start again the config admin
- cmBundle.start();
-
- // component with optional configuration should be available and initialized by configuration
- assertEquals("Component with optional configuration should be activated and inited by configuration", 1, getBaseConfigData(COMP_OPTIONAL));
- // component with ignored configuration should be available and not initialized by configuration
- assertEquals("Component with ignored configuration should be activated", 0, getBaseConfigData(COMP_IGNORE));
- // component with required configuration should be available
- assertEquals("Component with required configuration should be activated", 1, getBaseConfigData(COMP_REQUIRE));
-
- //stop again the config admin
- cmBundle.stop();
-
- /*The components should remain activated when Configuration Admin service disappears*/
- // component with optional configuration should be available and initialized by configuration
- assertEquals("Component with optional configuration should be activated", 1, getBaseConfigData(COMP_OPTIONAL));
- // component with ignored configuration should be available and not initialized by configuration
- assertEquals("Component with ignored configuration should be activated", 0, getBaseConfigData(COMP_IGNORE));
- // component with required configuration should be available
- assertEquals("Component with required configuration should be activated", 1, getBaseConfigData(COMP_REQUIRE));
-
- } finally {
- uninstallBundle(tb24);
- cmBundle.start();
- }
- }
-
- /**
- * Searches for component with name componentName which provides
- * PropertiesProvider. Returns value of its "config.base.data" property.
- *
- * @param componentName
- * - the name of the component to get data
- * @return the value of property "config.base.data", provided by
- * PropertiesProvider.getProperties(). Returned value is -1 when
- * component which provides PropertiesProvider and has specified name
- * is not activated. Returned value is 0 when component with specified
- * name is active but doesn't have property "config.base.data".
- */
- private int getBaseConfigData(String componentName) {
- PropertiesProvider s = getBaseService(componentName);
- return getBaseConfigData(s);
- }
-
- private int getBaseConfigData(PropertiesProvider s) {
- Dictionary props = null;
- int value = -1;
- if (s != null) {
- value = 0;
- if ((props = s.getProperties()) != null) {
- Object prop = props.get("config.base.data");
- if (prop instanceof Integer) {
- value = ((Integer) prop).intValue();
- }
- }
- }
- return value;
- }
-
- private PropertiesProvider getBaseService(String componentName) {
- Object[] services = trackerBaseService.getServices();
- if (services == null) {
- return null;
- }
- for (int i = 0; i < services.length; i++) {
- if (services[i] instanceof PropertiesProvider) {
- PropertiesProvider s = (PropertiesProvider) services[i];
- Dictionary props = s.getProperties();
- if (props != null && ((String) props.get(ComponentConstants.COMPONENT_NAME)).equals(componentName)) {
- return s;
- }
- }
- }
- return null;
- }
-
- private BundleContext getContext() {
- return DSTestsActivator.getContext();
- }
-
- private Bundle installBundle(String bundle) throws BundleException {
- Bundle b = installer.installBundle(bundle);
- return b;
- }
-
- private void uninstallBundle(Bundle bundle) throws BundleException {
- installer.uninstallBundle(bundle);
- }
-
- private ServiceRegistration registerService(String className, Object service, Dictionary props) {
- ServiceRegistration sr = getContext().registerService(className, service, props);
-
- registeredServices.put(service, sr);
-
- return sr;
- }
-
- private void unregisterService(Object service) {
- ServiceRegistration sr = (ServiceRegistration) registeredServices.get(service);
- if (sr != null) {
- sr.unregister();
- registeredServices.remove(service);
- }
- }
-
- private void unregisterService(ServiceRegistration reg) {
- Enumeration e = registeredServices.keys();
- while (e.hasMoreElements()) {
- Object service = e.nextElement();
- if (reg == null || registeredServices.get(service) == reg) {
- unregisterService(service);
- }
- }
- }
-
- private void unregisterAllServices() {
- Enumeration e = registeredServices.keys();
- while (e.hasMoreElements()) {
- Object service = e.nextElement();
- unregisterService(service);
- }
- }
-
- private void log(String msg) {
- // System.out.println("[Declarative Service TC] " + msg);
- }
-
- public void sleep0(long millisToSleep) {
- long start = System.currentTimeMillis();
- do {
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- }
- } while (System.currentTimeMillis() - start < millisToSleep);
- }
-
- /**
- * Waits for the processing of the bundle declarative components by SCR. In
- * case the building of the DS components is synchronous the method does not
- * wait
- */
- private void waitBundleStart() {
- if (!synchronousBuild) {
- sleep0(2 * timeout);
- }
- }
-
-}

Back to the top