You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by jc...@apache.org on 2007/01/29 21:38:29 UTC
svn commit: r501176 [6/6] - in
/directory/sandbox/jconlon/osgi-services/configuration-service: ./ src/
src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/configuration/
src/main/java/org/apache/configuration/...
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/RegistrationChangeIntegrationTest.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/RegistrationChangeIntegrationTest.java?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/RegistrationChangeIntegrationTest.java (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/RegistrationChangeIntegrationTest.java Mon Jan 29 12:38:25 2007
@@ -0,0 +1,509 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.configuration.event;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import junit.framework.TestCase;
+
+import org.apache.configuration.dao.ConfigurationDao;
+import org.apache.configuration.dao.jndi.ContextMapping;
+import org.apache.configuration.impl.ConfigurationAdminServiceFactory;
+import org.apache.configuration.impl.ConfigurationDictionary;
+import org.apache.configuration.impl.ConfigurationStoreImpl;
+import org.apache.configuration.util.ApacheDSUtil;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationEvent;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ConfigurationListener;
+import org.osgi.service.cm.ManagedService;
+import org.osgi.service.cm.ManagedServiceFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.osgi.mock.MockBundle;
+import org.springframework.osgi.mock.MockServiceReference;
+import org.springframework.osgi.mock.MockServiceRegistration;
+
+
+/**
+ * ConfigurationImplTest tests the ConfigurationImpl with an embeded JNDI ConfigurationDao infrastructure.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class RegistrationChangeIntegrationTest extends TestCase implements ConfigurationListener
+{
+
+ private static final String SOME_FACTORY = "some.factory.pid";
+ private static final String SOME_PID = "some.pid";
+ private static final String SOME_CN = "someCn";
+ /** the log for this class */
+ private static final Logger log = LoggerFactory.getLogger( RegistrationChangeIntegrationTest.class );
+
+ static
+ {
+ File file = new File( "server-work" );
+ if ( file.exists() )
+ {
+ log.debug( "Removing the server-work directory. " );
+ ApacheDSUtil.deleteDir(file);
+ }
+ }
+
+
+ private CyclicBarrier listenerReceivedEventBarrier;
+ private CyclicBarrier registrationReceivedEventBarrier;
+ private ConfigurationStoreImpl configurationStore;
+ private ConfigurationDao configurationDao;
+ private ConfigurationChangeManager configurationDaoEventListener;
+
+
+
+ private MockServiceReference mockServiceReference;
+ private MockManagedServiceTrackingDelegate mockManagedServiceTrackingDelegate;
+ private ManagedServiceTrackerCustomizer managedServiceTrackerCustomizer;
+// private MyManagedService myManagedService ;
+
+ private MockServiceReference mockServiceFactoryReference;
+ private MockManagedServiceFactoryTrackingDelegate mockManagedServiceFactoryTrackingDelegate;
+ private ManagedServiceFactoryTrackerCustomizer managedServiceFactoryTrackerCustomizer;
+// private MyManagedServiceFactory myManagedServiceFactory ;
+
+ private ConfigurationAdminServiceFactory configurationAdminServiceFactory;
+ private Dictionary updatedManagedServiceDictionary;
+ private Dictionary updatedManagedServiceFactoryDictionary;
+ ConfigurationEvent event = null;
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ listenerReceivedEventBarrier = new CyclicBarrier(2);
+
+ ApplicationContext ctx = new ClassPathXmlApplicationContext(
+ new String[]{
+ "mockInitialContextFactory.xml",
+ "META-INF/spring/daoJndi.xml",
+ "META-INF/spring/event.xml",
+ "META-INF/spring/configuration.xml",
+ "event.xml"});
+
+ configurationStore = ( ConfigurationStoreImpl ) ctx.getBean( "configurationStore" );
+ configurationDao = ( ConfigurationDao ) ctx.getBean( "configurationDao" );
+ configurationAdminServiceFactory=
+ ( ConfigurationAdminServiceFactory ) ctx.getBean( "configurationAdminServiceFactory" );
+
+ configurationDaoEventListener=
+ ( ConfigurationChangeManager ) ctx.getBean( "configurationDaoEventListener" );
+ configurationDaoEventListener.setConfigurationListener( this );
+
+ mockServiceReference = ( MockServiceReference ) ctx.getBean( "mockServiceReference");
+ mockManagedServiceTrackingDelegate= ( MockManagedServiceTrackingDelegate ) ctx.getBean( "mockManagedServiceTrackingDelegate");
+ mockManagedServiceTrackingDelegate.setService( new MyManagedService() );
+ managedServiceTrackerCustomizer= ( ManagedServiceTrackerCustomizer ) ctx.getBean( "managedServiceTrackerCustomizer");
+
+
+ mockServiceFactoryReference = ( MockServiceReference ) ctx.getBean( "mockServiceFactoryReference");
+ mockManagedServiceFactoryTrackingDelegate= ( MockManagedServiceFactoryTrackingDelegate ) ctx.getBean( "mockManagedServiceFactoryTrackingDelegate");
+ mockManagedServiceFactoryTrackingDelegate.setService( new MyManagedServiceFactory() );
+ managedServiceFactoryTrackerCustomizer= ( ManagedServiceFactoryTrackerCustomizer ) ctx.getBean( "managedServiceFactoryTrackerCustomizer");
+
+ }
+
+
+ /* (non-Javadoc)
+ *
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+
+ configurationDao=null;
+
+ mockManagedServiceTrackingDelegate=null;
+ managedServiceTrackerCustomizer = null;
+ mockManagedServiceFactoryTrackingDelegate=null;
+ configurationStore = null;
+ updatedManagedServiceDictionary=null;
+ updatedManagedServiceFactoryDictionary = null;
+ configurationAdminServiceFactory=null;
+ event = null;
+
+ updatedManagedServiceDictionary = null;
+ updatedManagedServiceFactoryDictionary = null;
+ configurationDaoEventListener=null;
+ super.tearDown();
+ }
+
+ public void testEnvironment(){
+ assertNotNull( configurationDao);
+ assertNotNull( configurationStore);
+ assertNotNull( mockManagedServiceTrackingDelegate);
+ assertNotNull( mockManagedServiceFactoryTrackingDelegate);
+ assertNotNull( configurationAdminServiceFactory);
+ assertNotNull(configurationDaoEventListener);
+ assertNotNull(managedServiceTrackerCustomizer);
+ assertNotNull(mockServiceReference);
+
+ }
+
+ public void testWithACleanEnvironment(){
+ List<ConfigurationDictionary> configs = configurationDao.findAll();
+ if(configs==null || configs.isEmpty()){
+ return;
+ }
+
+ log.debug( "Deleting {} configurationDictionary entries {}.", configs.size(),configs );
+ for ( ConfigurationDictionary configurationDictionary : configs )
+ {
+
+ log.debug( "Deleting configurationDictionary entry {}.", configurationDictionary );
+ configurationDao.delete( configurationDictionary );
+ }
+
+ assertTrue( configurationDao.findAll().isEmpty());
+ assertTrue( configurationStore.listPids().isEmpty());
+ }
+
+
+
+ /**
+ *
+ * Register a ManagedService by adding a ServiceReference
+ * to the managedServiceTrackerCustomizer.
+ *
+ * The serviceReference must be in the MockBundleContext and it
+ * must reference the
+ *
+ * The mockBundleContext must be able to resolve:
+ * ManagedService managedService = (ManagedService) bundleContext.getService( serviceReference );
+
+ * addingService( final ServiceReference serviceReference )
+ *
+ */
+ public void testRegisterManagedService(){
+
+ ConfigurationAdmin configurationAdmin = getConfigAdmin();
+ Configuration configuration = null;
+ try
+ {
+ configuration =configurationAdmin.getConfiguration( SOME_PID );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to getConfiguration.",e );
+ fail(e.toString());
+ }
+ assertNotNull(configuration);
+ ConfigurationDictionary configurationDictionary =
+ createConfigurationDictionaryInstance(SOME_CN, SOME_PID, null);
+ try
+ {
+ configuration.update(configurationDictionary);
+ }
+ catch ( IOException e )
+ {
+ fail(e.toString());
+ }
+ catch (Exception e)
+ {
+ fail(e.toString());
+ }
+
+ //Wait for the update async event to be sent
+ try
+ {
+ listenerReceivedEventBarrier.await( 3, TimeUnit.SECONDS );
+ }
+ catch ( InterruptedException e )
+ {
+ fail(e.toString());
+ }
+ catch ( BrokenBarrierException e )
+ {
+ fail(e.toString());
+ }
+ catch ( TimeoutException e )
+ {
+ fail(e.toString());
+ }
+ assertNotNull(event);
+ assertNotNull(updatedManagedServiceDictionary);
+ assertNull(updatedManagedServiceFactoryDictionary);
+
+
+ //null the updated ManagedServiceDictionary
+ registrationReceivedEventBarrier = new CyclicBarrier(2);
+ updatedManagedServiceDictionary=null;
+ managedServiceTrackerCustomizer.addingService( mockServiceReference );
+
+ try
+ {
+ registrationReceivedEventBarrier.await( 3, TimeUnit.SECONDS );
+ }
+ catch ( InterruptedException e )
+ {
+ fail(e.toString());
+ }
+ catch ( BrokenBarrierException e )
+ {
+ fail(e.toString());
+ }
+ catch ( TimeoutException e )
+ {
+ fail("Failed to update the service.");
+ }
+
+ assertNotNull(updatedManagedServiceDictionary);
+ }
+
+
+ /**
+ *
+ * Register a ManagedService by adding a ServiceReference
+ * to the managedServiceTrackerCustomizer.
+ *
+ * The serviceReference must be in the MockBundleContext and it
+ * must reference the
+ *
+ * The mockBundleContext must be able to resolve:
+ * ManagedService managedService = (ManagedService) bundleContext.getService( serviceReference );
+
+ * addingService( final ServiceReference serviceReference )
+ *
+ */
+ public void testRegisterManagedServiceFactory(){
+ ConfigurationAdmin configurationAdmin = getConfigAdmin();
+ Configuration configuration = null;
+ try
+ {
+ configuration =configurationAdmin.createFactoryConfiguration( SOME_FACTORY );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to getConfiguration.",e );
+ fail(e.toString());
+ }
+ assertNotNull(configuration);
+ ConfigurationDictionary configurationDictionary =
+ createConfigurationDictionaryInstance(SOME_CN, SOME_PID, SOME_FACTORY);
+ try
+ {
+ configuration.update(configurationDictionary);
+ }
+ catch ( IOException e )
+ {
+ fail(e.toString());
+ }
+ catch (Exception e)
+ {
+ fail(e.toString());
+ }
+
+ //Wait for the async event to be sent
+ try
+ {
+ listenerReceivedEventBarrier.await( 3, TimeUnit.SECONDS );
+ }
+ catch ( InterruptedException e )
+ {
+ fail(e.toString());
+ }
+ catch ( BrokenBarrierException e )
+ {
+ fail(e.toString());
+ }
+ catch ( TimeoutException e )
+ {
+ fail("Failed to update the ManagedServiceFactory.");
+ }
+ assertNotNull(event);
+ assertNotNull(updatedManagedServiceFactoryDictionary);
+ assertNull(updatedManagedServiceDictionary);
+
+ //null the updated ManagedServiceDictionary
+ registrationReceivedEventBarrier = new CyclicBarrier(2);
+ updatedManagedServiceFactoryDictionary=null;
+ managedServiceFactoryTrackerCustomizer.addingService( mockServiceFactoryReference );
+
+ try
+ {
+ registrationReceivedEventBarrier.await( 3, TimeUnit.SECONDS );
+ }
+ catch ( InterruptedException e )
+ {
+ fail(e.toString());
+ }
+ catch ( BrokenBarrierException e )
+ {
+ fail(e.toString());
+ }
+ catch ( TimeoutException e )
+ {
+ fail("Failed to update the service.");
+ }
+
+ assertNotNull(updatedManagedServiceFactoryDictionary);
+ }
+
+
+
+
+
+
+
+ /**
+ * A utility method for building a configAdmin.
+ *
+ * @return
+ */
+ private ConfigurationAdmin getConfigAdmin()
+ {
+ MockBundle bundle = new MockBundle();
+ MockServiceRegistration serviceRegistration = new MockServiceRegistration();
+ Object o = configurationAdminServiceFactory.getService( bundle, serviceRegistration );
+ assertNotNull(o);
+ assertTrue(o instanceof ConfigurationAdmin);
+ ConfigurationAdmin configurationAdmin = (ConfigurationAdmin)o;
+ return configurationAdmin;
+ }
+
+ private ConfigurationDictionary createConfigurationDictionaryInstance(String cn, String pid, String factory)
+ {
+ Vector<String> objectclass = new Vector<String>();
+ objectclass.add( "top" );
+ objectclass.add( ContextMapping.APACHEDS_SERVICE_CONFIGURATION_OBJECTCLASS );
+ Dictionary<String,Object> dictionary = new Hashtable<String,Object>();
+ dictionary.put( Constants.SERVICE_PID, pid );
+ if(factory !=null){
+ dictionary.put( ConfigurationAdmin.SERVICE_FACTORYPID , factory );
+ }
+ dictionary.put( "objectclass", objectclass );
+ dictionary.put( "cn", cn );
+
+
+ ConfigurationDictionary configurationDictionary = new ConfigurationDictionary(dictionary);
+
+ return configurationDictionary;
+ }
+
+ /**
+ * Implements ConfigurationListener to receive configuration events
+ * coming from the executor.
+ */
+ public void configurationEvent( ConfigurationEvent event )
+ {
+ this.event=event;
+ try
+ {
+ listenerReceivedEventBarrier.await();
+ }
+ catch ( InterruptedException e )
+ {
+ log.error( "Barrier exception.",e );
+ }
+ catch ( BrokenBarrierException e )
+ {
+ log.error( "Barrier exception.",e );
+ }
+
+ }
+
+ class MyManagedService implements ManagedService {
+
+ public void updated( Dictionary properties ) throws ConfigurationException
+ {
+
+ updatedManagedServiceDictionary=properties;
+ if(registrationReceivedEventBarrier!=null){
+ try
+ {
+ registrationReceivedEventBarrier.await();
+ }
+ catch ( InterruptedException e )
+ {
+ //ignore
+ }
+ catch ( BrokenBarrierException e )
+ {
+ //ignore
+ }
+ }
+
+ }
+
+ }
+
+ class MyManagedServiceFactory implements ManagedServiceFactory {
+ public void deleted( String pid )
+ {
+ if(updatedManagedServiceFactoryDictionary.get( Constants.SERVICE_PID ).equals( pid )){
+ updatedManagedServiceFactoryDictionary=null;
+ }else{
+ log.error( "Wrong deletion pid received "+pid );
+ }
+
+ }
+
+ public String getName()
+ {
+// ignore
+ return null;
+ }
+
+ public void updated( String pid, Dictionary properties ) throws ConfigurationException
+ {
+ updatedManagedServiceFactoryDictionary=properties;
+ if(registrationReceivedEventBarrier!=null){
+ try
+ {
+ registrationReceivedEventBarrier.await();
+ }
+ catch ( InterruptedException e )
+ {
+ //ignore
+ }
+ catch ( BrokenBarrierException e )
+ {
+ //ignore
+ }
+ }
+
+ }
+
+ }
+}
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/ConfigurationStoreImplTest.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/ConfigurationStoreImplTest.java?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/ConfigurationStoreImplTest.java (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/ConfigurationStoreImplTest.java Mon Jan 29 12:38:25 2007
@@ -0,0 +1,734 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.configuration.impl;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+
+import org.apache.configuration.dao.ConfigurationDao;
+import org.apache.configuration.dao.ConfigurationDaoException;
+import org.apache.configuration.dao.ConfigurationDaoListener;
+import org.apache.configuration.dao.jndi.ContextMapping;
+import org.apache.configuration.impl.ConfigurationDictionary;
+import org.apache.configuration.impl.ConfigurationStore;
+import org.apache.configuration.util.ApacheDSUtil;
+import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+
+/**
+ *
+ * ConfigurationStoreImplTest tests the ConfigurationImpl with an embeded JNDI ConfigurationDao infrastructure.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConfigurationStoreImplTest extends TestCase implements ConfigurationDaoListener
+{
+
+ private static final String START_TEST = "Start test ======================================================";
+ private static final String FILTER = "(service.factoryPid=some*)";
+ private static final String SOME_PID_3 = "some.pid.3";
+ private static final String SOME_PID_2 = "some.pid.2";
+ private static final String SOME_FACTORY_PID_2 = "someReplaced.factory";
+ private static final String SOME_CN = "mytestConfiguration2";
+ private static final String SOME_PID = "some.pid";
+ private static final String SOME_FACTORY_PID = "someFactoryPid";
+ private static final String SOME_BUNDLE_LOCATION = "someBundleLocation";
+ /** the log for this class */
+ private static final Logger log = LoggerFactory.getLogger( ConfigurationStoreImplTest.class );
+
+ static
+ {
+ File file = new File( "server-work" );
+ if ( file.exists() )
+ {
+ log.debug( "Removing the server-work directory. " );
+ ApacheDSUtil.deleteDir( file );
+ }
+ }
+
+ private ConfigurationStore configurationStore;
+ private ConfigurationDao configurationDao;
+ private ConfigurationDictionary changedConfigurationDictionary;
+ private ChangeType changeType;
+
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ ApplicationContext ctx = new ClassPathXmlApplicationContext( new String[]
+ { "mockInitialContextFactory.xml",
+ "mockConfigurationDaoEventListener.xml",
+ "META-INF/spring/daoJndi.xml",
+ "META-INF/spring/configuration.xml" } );
+
+ configurationStore = ( ConfigurationStore ) ctx.getBean( "configurationStore" );
+ configurationDao = ( ConfigurationDao ) ctx.getBean( "configurationDao" );
+ configurationStore.setConfigurationDaoListener( this );
+ //TODO Use this method for cleaning the directory in the setUp of other tests.
+ Set<String> pids = configurationStore.listPids();
+ for ( String pid : pids )
+ {
+ configurationStore.delete( pid );
+ }
+
+ }
+
+
+ protected void tearDown() throws Exception
+ {
+ configurationDao = null;
+ configurationStore = null;
+ changedConfigurationDictionary = null;
+ changeType = null;
+
+ super.tearDown();
+ }
+
+
+ public void testWithACleanEnvironment()
+ {
+ List<ConfigurationDictionary> configs = configurationDao.findAll();
+ if ( configs == null || configs.isEmpty() )
+ {
+ return;
+ }
+
+ log.debug( "Deleting {} configurationDictionary entries {}.", configs.size(), configs );
+ for ( ConfigurationDictionary configurationDictionary : configs )
+ {
+
+ log.debug( "Deleting configurationDictionary entry {}.", configurationDictionary );
+ configurationDao.delete( configurationDictionary );
+ }
+ }
+
+
+ public void testSpringConstructedConfiguationStore()
+ {
+ assertNotNull( "Setup construction failed", configurationStore );
+ }
+
+
+ public void testGetNewConfiguration_Location_Fpid_Spid()
+ {
+ Configuration configuration = configurationStore.getNewConfiguration( SOME_BUNDLE_LOCATION, SOME_FACTORY_PID,
+ SOME_PID );
+ assertNotNull( configuration );
+ assertEquals( SOME_PID, configuration.getPid() );
+ assertEquals( SOME_FACTORY_PID, configuration.getFactoryPid() );
+ assertEquals( SOME_BUNDLE_LOCATION, configuration.getBundleLocation() );
+ assertNull( configuration.getProperties() );
+ }
+
+
+ public void testGetNewConfiguration_Location_Fpid_Spid_Props()
+ {
+ ConfigurationDictionary properties = null;
+ Configuration configuration = configurationStore.getNewConfiguration( SOME_BUNDLE_LOCATION, SOME_FACTORY_PID,
+ SOME_PID, properties );
+ assertNotNull( configuration );
+ assertEquals( SOME_PID, configuration.getPid() );
+ assertEquals( SOME_FACTORY_PID, configuration.getFactoryPid() );
+ assertEquals( SOME_BUNDLE_LOCATION, configuration.getBundleLocation() );
+ assertNull( configuration.getProperties() );
+ }
+
+
+ public void testUpdate()
+ {
+ log.debug( START_TEST );
+
+ //Create an initial configuration.
+ ConfigurationDictionary configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+ assertNotNull( "Listener failed send a changedConfigurationDictionary.", changedConfigurationDictionary );
+ assertNotNull( "Listener failed send a changeType.", changeType );
+ assertEquals( ChangeType.CREATED, changeType );
+ assertEquals( SOME_PID_2, changedConfigurationDictionary.getServicePid() );
+ //Should not modify my copy of the dictionary adversly
+ assertNull( "Should not find key " + ContextMapping.APACHEDS_SERVICE_PID + " in " + configurationDictionary,
+ configurationDictionary.get( ContextMapping.APACHEDS_SERVICE_PID ) );
+
+ assertNotNull( "Could not find key " + Constants.SERVICE_PID + " in " + configurationDictionary,
+ configurationDictionary.get( Constants.SERVICE_PID ) );
+
+ configurationDictionary = configurationDao.read( SOME_PID_2 );
+ assertNotNull( "Failed to Create an initial configuration.", configurationDictionary );
+ assertNull( "Should not find key " + ContextMapping.APACHEDS_SERVICE_PID + " in " + configurationDictionary,
+ configurationDictionary.get( ContextMapping.APACHEDS_SERVICE_PID ) );
+
+ assertNotNull( "Could not find key " + Constants.SERVICE_PID + " in " + configurationDictionary,
+ configurationDictionary.get( Constants.SERVICE_PID ) );
+
+ assertEquals( "Failed to Create an initial configuration.", SOME_PID_2, configurationDictionary
+ .get( Constants.SERVICE_PID ) );
+ assertEquals( "Failed to Create an initial configuration.", SOME_FACTORY_PID, configurationDictionary
+ .get( ConfigurationAdmin.SERVICE_FACTORYPID ) );
+
+ //Update configuration FactoryPid Prop
+ configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2, SOME_FACTORY_PID_2 );
+
+ try
+ {
+ configurationStore.update( configurationDictionary );
+
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Update configuration FactoryPid Prop in dao. Because: " + e.toString() );
+
+ }
+ configurationDictionary = configurationDao.read( SOME_PID_2 );
+
+ assertNotNull( "Failed to Update configuration FactoryPid Prop in dao.", configurationDictionary );
+ assertEquals( "Failed to Update configuration FactoryPid Prop in dao.", SOME_PID_2, configurationDictionary
+ .get( Constants.SERVICE_PID ) );
+ assertEquals( "Failed to Update configuration FactoryPid Prop in dao.", SOME_FACTORY_PID_2,
+ configurationDictionary.get( ConfigurationAdmin.SERVICE_FACTORYPID ) );
+
+ //Should be able to get one from the store
+ try
+ {
+ configurationDictionary = configurationStore.retrieve( SOME_PID_2 );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Update configuration FactoryPid Prop in store. Because: " + e.toString() );
+ }
+
+ assertNotNull( "Failed to Update configuration FactoryPid Prop in store.", configurationDictionary );
+ assertEquals( "Failed to Update configuration FactoryPid Prop in store.", SOME_PID_2, configurationDictionary
+ .get( Constants.SERVICE_PID ) );
+ assertEquals( "Failed to Update configuration FactoryPid Prop in store.", SOME_FACTORY_PID_2,
+ configurationDictionary.get( ConfigurationAdmin.SERVICE_FACTORYPID ) );
+
+ //Only one in the store right?
+ assertEquals( "Failed to only one configuration in the store.", 1, configurationStore.listPids().size() );
+
+ assertNotNull( "Listener failed send a changedConfigurationDictionary.", changedConfigurationDictionary );
+ assertNotNull( "Listener failed send a changeType.", changeType );
+ assertEquals( ChangeType.UPDATED, changeType );
+ assertEquals( SOME_PID_2, changedConfigurationDictionary.getServicePid() );
+ assertEquals( SOME_FACTORY_PID_2, changedConfigurationDictionary.getFactoryPid() );
+
+ }
+
+
+ public void testListPids()
+ {
+ log.debug( START_TEST );
+ ConfigurationDictionary configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+ Set<String> pids = configurationStore.listPids();
+ assertNotNull( pids );
+ assertEquals( "Should be one pid from previous test", 1, pids.size() );
+ assertTrue( "Failed to only one configuration in the store.", pids.contains( SOME_PID_2 ) );
+ }
+
+
+ public void testAddingToCache()
+ {
+ log.debug( START_TEST );
+
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ //Add second configuration to the store
+ ConfigurationDictionary configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_3,
+ SOME_FACTORY_PID );
+
+ try
+ {
+ configurationStore.update( configurationDictionary );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Add second configuration to the store. Because: " + e.toString() );
+
+ }
+
+ Set<String> pids = configurationStore.listPids();
+ assertEquals( "Should be two configurations one from this and one from previous test", 2, configurationStore
+ .listPids().size() );
+ assertTrue( pids.contains( SOME_PID_2 ) );
+ assertTrue( pids.contains( SOME_PID_3 ) );
+
+ }
+
+
+ public void testRetrieve()
+ {
+ log.debug( START_TEST );
+
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ ConfigurationDictionary config = null;
+ try
+ {
+ config = configurationStore.retrieve( SOME_PID_2 );
+
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+ assertNotNull( config );
+ assertEquals( SOME_PID_2, config.getServicePid() );
+
+ try
+ {
+ config = configurationStore.retrieve( "bogus" );
+
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+ assertNull( config );
+ }
+
+
+ public void testRetrieveAndBind()
+ {
+ log.debug( START_TEST );
+
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ ConfigurationDictionary config = null;
+ try
+ {
+ config = configurationStore.retrieveAndBind( SOME_PID_2,SOME_BUNDLE_LOCATION );
+
+ }
+ catch ( ConfigurationException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+ assertNotNull( config );
+ assertEquals( SOME_PID_2, config.getServicePid() );
+ assertEquals( SOME_BUNDLE_LOCATION, config.getBundleLocation() );
+
+ config=null;
+ try
+ {
+ config = configurationStore.retrieveAndBind( SOME_PID_2,"bogus" );
+ fail( "Should have thrown a ConfigurationException after trying to get a bundle that was already bound.");
+ }
+ catch ( ConfigurationException e )
+ {
+ //expected
+
+ }
+ assertNull( config );
+ }
+
+
+ public void testLoadAll()
+ {
+ log.debug( START_TEST );
+
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID_2 );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ ConfigurationDictionary[] configs = null;
+ try
+ {
+ configs = configurationStore.retrieveAll( SOME_FACTORY_PID_2 );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+ assertNotNull( configs );
+ assertEquals( 1, configs.length );
+ ConfigurationDictionary config = configs[0];
+
+ assertEquals( SOME_PID_2, config.getServicePid() );
+ }
+
+
+ public void testListConfigurationsWithNullFilter()
+ {
+ log.debug( START_TEST );
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ //Add second configuration to the store
+ ConfigurationDictionary configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_3,
+ SOME_FACTORY_PID );
+
+ try
+ {
+ configurationStore.update( configurationDictionary );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Add second configuration to the store. Because: " + e.toString() );
+
+ }
+
+ String filter = null;
+ try
+ {
+ Configuration[] configs = configurationStore.listConfigurations( filter );
+ assertNotNull( configs );
+ assertEquals( 2, configs.length );
+ }
+ catch ( IOException e )
+ {
+ fail( e.toString() );
+ }
+ catch ( InvalidSyntaxException e )
+ {
+ fail( e.toString() );
+ }
+ }
+
+
+ /**
+ *
+ * testListConfigurationsWithFilter
+ *
+ * Example filter: "(&(size=42)(service.factoryPid=*osgi*))"
+ *
+ */
+ public void testListConfigurationsWithFilter()
+ {
+ log.debug( START_TEST );
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ //Add second configuration to the store
+ ConfigurationDictionary configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_3,
+ SOME_FACTORY_PID );
+
+ try
+ {
+ configurationStore.update( configurationDictionary );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Add second configuration to the store. Because: " + e.toString() );
+
+ }
+ try
+ {
+ Configuration[] configs = configurationStore.listConfigurations( FILTER );
+ assertNotNull( configs );
+ assertEquals( 2, configs.length );
+ }
+ catch ( IOException e )
+ {
+ fail( e.toString() );
+ }
+ catch ( InvalidSyntaxException e )
+ {
+ fail( e.toString() );
+ }
+ }
+
+
+ public void testListConfigurationsWithBogusFilter()
+ {
+ log.debug( START_TEST );
+ String filter = "somebogusfilter";
+ try
+ {
+ configurationStore.listConfigurations( filter );
+ fail( "Expected an InvalidSytaxException." );
+ }
+ catch ( IOException e )
+ {
+ fail( e.toString() );
+ }
+ catch ( InvalidSyntaxException e )
+ {
+ //expected
+ }
+ }
+
+
+ public void testConfigurationStoreDelete()
+ {
+ log.debug( START_TEST );
+ ConfigurationDictionary configurationDictionary0 = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_2,
+ SOME_FACTORY_PID );
+ try
+ {
+ configurationStore.update( configurationDictionary0 );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Failed to update a configuration.", e );
+ fail( "Failed to Create an initial configuration. Because: " + e.toString() );
+
+ }
+
+ //Add second configuration to the store
+ ConfigurationDictionary configurationDictionary = createConfigurationDictionaryInstance( SOME_CN, SOME_PID_3,
+ SOME_FACTORY_PID );
+
+ try
+ {
+ configurationStore.update( configurationDictionary );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( "Failed to Add second configuration to the store. Because: " + e.toString() );
+
+ }
+
+ ConfigurationDictionary dictionary = configurationDao.read( SOME_PID_2 );
+ assertNotNull( "missing entry", dictionary );
+
+ try
+ {
+ configurationStore.delete( SOME_PID_2 );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+
+ dictionary = null;
+ try
+ {
+ dictionary = configurationDao.read( SOME_PID_2 );
+ fail( "Did not throw an exception." );
+ }
+ catch ( ConfigurationDaoException e )
+ {
+ //expected
+ }
+ assertNull( dictionary );
+ Set<String> pids = configurationStore.listPids();
+ assertNotNull( pids );
+ assertEquals( "Should be one pid from previous test", 1, pids.size() );
+ assertFalse( "Found deleted configuration in the store.", pids.contains( SOME_PID_2 ) );
+
+ }
+
+
+ public void testDeleteUnknown()
+ {
+ log.debug( START_TEST );
+ String servicePid = SOME_PID;
+ try
+ {
+ configurationStore.delete( servicePid );
+ fail( "Expected a IOException because the pid should be unknown." );
+ }
+ catch ( IOException e )
+ {
+ //expected
+ }
+
+ }
+
+
+ public void testGeneratePid()
+ {
+ log.debug( START_TEST );
+ String factoryPid = SOME_FACTORY_PID;
+ String servicePid = null;
+ try
+ {
+ servicePid = configurationStore.generatePid( factoryPid );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+ assertNotNull( servicePid );
+ assertTrue( servicePid.startsWith( factoryPid ) );
+ log.debug( "Generated servicePid {} ", servicePid );
+ }
+
+
+ public void testDeleteAll()
+ {
+ log.debug( START_TEST );
+
+ try
+ {
+ configurationStore.deleteAll( SOME_FACTORY_PID );
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+
+ ConfigurationDictionary[] configs = null;
+ try
+ {
+ configs = configurationStore.retrieveAll( SOME_FACTORY_PID );
+ }
+ catch ( IOException e )
+ {
+
+ e.printStackTrace();
+ fail( e.toString() );
+ }
+ assertNotNull( configs );
+ assertTrue( "Should be empty", configs.length == 0 );
+ }
+
+
+ public void configurationChanged( ChangeType changeType, ConfigurationDictionary configurationDictionary )
+ {
+ this.changeType = changeType;
+ this.changedConfigurationDictionary = configurationDictionary;
+
+ }
+
+
+ private ConfigurationDictionary createConfigurationDictionaryInstance( String cn, String pid, String factory )
+ {
+ Vector<String> objectclass = new Vector<String>();
+ objectclass.add( "top" );
+ objectclass.add( ContextMapping.APACHEDS_SERVICE_CONFIGURATION_OBJECTCLASS );
+ Dictionary<String, Object> dictionary = new Hashtable<String, Object>();
+ dictionary.put( Constants.SERVICE_PID, pid );
+ if ( factory != null )
+ {
+ dictionary.put( ConfigurationAdmin.SERVICE_FACTORYPID, factory );
+ }
+ dictionary.put( "objectclass", objectclass );
+ dictionary.put( "cn", cn );
+
+
+ ConfigurationDictionary configurationDictionary = new ConfigurationDictionary( dictionary );
+
+ return configurationDictionary;
+ }
+}
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/MockConfigurationTransformer.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/MockConfigurationTransformer.java?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/MockConfigurationTransformer.java (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/MockConfigurationTransformer.java Mon Jan 29 12:38:25 2007
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.configuration.impl;
+
+
+import java.util.Dictionary;
+
+import org.apache.configuration.impl.ConfigurationDictionary;
+import org.apache.configuration.impl.ConfigurationTransformer;
+import org.osgi.framework.ServiceReference;
+
+
+/**
+ * MockConfigurationTransformer.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class MockConfigurationTransformer implements ConfigurationTransformer
+
+{
+ /**
+ *
+ * Return the same dictionary
+ *
+ * @param serviceReference
+ * @param dictionary
+ * @return same dictionary
+ */
+ public Dictionary transform( ServiceReference serviceReference, ConfigurationDictionary dictionary )
+ {
+
+ return dictionary;
+ }
+
+}
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/util/ApacheDSUtil.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/util/ApacheDSUtil.java?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/util/ApacheDSUtil.java (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/util/ApacheDSUtil.java Mon Jan 29 12:38:25 2007
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.configuration.util;
+
+import java.io.File;
+
+/**
+ * ApacheDSUtil.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ApacheDSUtil
+{
+
+ public static boolean deleteDir(File dir) {
+ if (dir.isDirectory()) {
+ String[] children = dir.list();
+ for (int i=0; i<children.length; i++) {
+ boolean success = deleteDir(new File(dir, children[i]));
+ if (!success) {
+ return false;
+ }
+ }
+ }
+ // The directory is now empty so delete it
+ return dir.delete();
+ }
+
+}
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/event.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/event.xml?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/event.xml (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/event.xml Mon Jan 29 12:38:25 2007
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:osgi="http://www.springframework.org/schema/osgi"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+
+ <bean id="configListeners"
+ class="org.springframework.beans.factory.config.ListFactoryBean">
+ <property name="sourceList">
+ <list>
+ <bean
+ class="org.apache.configuration.event.MockConfigurationListener" />
+ </list>
+ </property>
+ </bean>
+
+ <bean id="configurationTransformer"
+ class="org.apache.configuration.impl.MockConfigurationTransformer" />
+
+
+ <bean id="bundleContextFactory"
+ class="org.apache.configuration.springosgi.BundleContextFactory">
+ <property name="bundleContext">
+ <bean
+ class="org.springframework.osgi.mock.MockBundleContext">
+ </bean>
+ </property>
+ </bean>
+
+
+ <bean id="mockServiceReference"
+ class="org.springframework.osgi.mock.MockServiceReference">
+ <property name="properties">
+ <props>
+ <prop key="service.pid">some.pid</prop>
+ </props>
+ </property>
+ </bean>
+
+ <bean id="mockManagedServiceTrackingDelegate"
+ class="org.apache.configuration.event.MockManagedServiceTrackingDelegate">
+ <property name="serviceReference" ref="mockServiceReference" />
+ </bean>
+
+ <bean id="managedServiceTrackingAdapter"
+ class="org.apache.configuration.event.ManagedServiceTrackingAdapter"
+ init-method="init" destroy-method="destroy">
+ <property name="delegate" ref="mockManagedServiceTrackingDelegate"/>
+ <property name="serviceTrackerCustomizer" ref="managedServiceTrackerCustomizer"/>
+ </bean>
+
+
+
+ <!-- Set up ManagedServiceFactory dependents -->
+ <bean id="mockServiceFactoryReference"
+ class="org.springframework.osgi.mock.MockServiceReference">
+ <property name="properties">
+ <props>
+ <prop key="service.factoryPid">some.factory.pid</prop>
+
+ </props>
+ </property>
+ </bean>
+
+ <bean id="mockManagedServiceFactoryTrackingDelegate"
+ class="org.apache.configuration.event.MockManagedServiceFactoryTrackingDelegate">
+ <property name="serviceReference"
+ ref="mockServiceFactoryReference" />
+ </bean>
+
+ <bean id="managedServiceFactoryTrackingAdapter"
+ class="org.apache.configuration.event.ManagedServiceFactoryTrackingAdapter"
+ init-method="init" destroy-method="destroy">
+ <property name="delegate" ref="mockManagedServiceFactoryTrackingDelegate"/>
+ </bean>
+
+</beans>
\ No newline at end of file
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/log4j.properties?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/log4j.properties (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/log4j.properties Mon Jan 29 12:38:25 2007
@@ -0,0 +1,33 @@
+#log4j.properties file
+# to debug this file add the vm argument
+# -Dlog4j.debug=true
+
+# RootCategory all other categories inherit from this
+log4j.rootCategory=ERROR,console
+
+# Test infrastructure classes that use logging
+log4j.category.org.apache.directory.server.core.partition.impl.btree=ERROR
+#log4j.category.org.apache.directory.osgi.backend=DEBUG
+log4j.category.org.apache.directory.server.core=ERROR
+log4j.category.org.apache.directory.server.core.schema.bootstrap=ERROR
+#log4j.category.org.apache.directory.server.protocol.shared.store=DEBUG
+
+
+# Production classes that use logging
+log4j.category.org.apache.configuration.osgi.impl.ConfigurationAdminImpl=DEBUG
+log4j.category.org.apache.configuration.osgi.impl.ConfigurationAdminImplTest=DEBUG
+log4j.category.org.apache.configuration.osgi.impl.ConfigurationImplTest=INFO
+
+log4j.category.org.apache.configuration.dao.DaoConfigurationStore=DEBUG
+log4j.category.org.apache.configuration.dao.DaoConfigurationStoreTest=INFO
+
+log4j.category.org.apache.configuration.dao.jndi.impl.JndiConfigurationDaoNotifierImpl=ERROR
+#log4j.category.org.apache.configuration.dao.jndi.impl.IntegrationTest=ERROR
+#log4j.category.org.apache.configuration.dao.jndi.impl.UpdateDirCommand=ERROR
+#log4j.category.org.apache.configuration.dao.jndi.impl.ListDirCommand=ERROR
+
+# Console Appender
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.out
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n
\ No newline at end of file
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/logback.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/logback.xml?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/logback.xml (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/logback.xml Mon Jan 29 12:38:25 2007
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+ <appender name="console"
+ class="ch.qos.logback.core.ConsoleAppender">
+ <target>System.out</target>
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <pattern>%-5p %l - %m%n</pattern>
+ </layout>
+ </appender>
+ <logger name="org.apache.directory.server.core.schema.bootstrap">
+ <level value="ERROR" />
+ </logger>
+ <logger
+ name="org.apache.configuration.dao.DaoConfigurationStoreTest">
+ <level value="INFO" />
+ </logger>
+ <logger
+ name="org.apache.directory.server.core.partition.impl.btree">
+ <level value="ERROR" />
+ </logger>
+ <logger
+ name="org.apache.configuration.osgi.impl.ConfigurationAdminImplTest">
+ <level value="DEBUG" />
+ </logger>
+ <logger name="org.apache.configuration.dao.DaoConfigurationStore">
+ <level value="DEBUG" />
+ </logger>
+ <logger
+ name="org.apache.configuration.dao.jndi.impl.JndiConfigurationDaoNotifierImpl">
+ <level value="ERROR" />
+ </logger>
+ <logger
+ name="org.apache.configuration.osgi.impl.ConfigurationAdminImpl">
+ <level value="DEBUG" />
+ </logger>
+ <logger
+ name="org.apache.configuration.osgi.impl.ConfigurationImplTest">
+ <level value="INFO" />
+ </logger>
+ <logger name="org.apache.directory.server.core">
+ <level value="ERROR" />
+ </logger>
+ <root>
+ <level value="ERROR" />
+ <appender-ref ref="console" />
+ </root>
+</configuration>
\ No newline at end of file
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockBundleContextFactory.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockBundleContextFactory.xml?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockBundleContextFactory.xml (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockBundleContextFactory.xml Mon Jan 29 12:38:25 2007
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+
+ <bean id="bundleContextFactory" class="org.apache.configuration.spring.BundleContextFactory">
+ <property name="bundleContext">
+ <bean class="org.springframework.osgi.mock.MockBundleContext">
+ </bean>
+ </property>
+ </bean>
+
+</beans>
+
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockConfigurationDaoEventListener.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockConfigurationDaoEventListener.xml?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockConfigurationDaoEventListener.xml (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockConfigurationDaoEventListener.xml Mon Jan 29 12:38:25 2007
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+
+
+ <bean id="configurationDaoEventListener"
+ class="org.apache.configuration.event.MockConfigurationDaoListener"/>
+
+
+</beans>
+
Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockInitialContextFactory.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockInitialContextFactory.xml?view=auto&rev=501176
==============================================================================
--- directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockInitialContextFactory.xml (added)
+++ directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockInitialContextFactory.xml Mon Jan 29 12:38:25 2007
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+
+ <bean id="initialContextFactory"
+ class="org.apache.configuration.dao.jndi.impl.MockInitialContextFactory" destroy-method="cleanup"/>
+
+ <!-- <bean id="configurationDaoEventListener" class="org.apache.configuration.event.MockConfigurationDaoListener"/>-->
+
+
+</beans>
+