Package org.apache.felix.metatype.internal

Source Code of org.apache.felix.metatype.internal.MetaTypeServiceImplTest$MockManagedServiceFactory

/*
* 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.felix.metatype.internal;


import java.util.Dictionary;
import java.util.Hashtable;

import junit.framework.TestCase;

import org.apache.felix.metatype.MockBundleContext;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.cm.ManagedService;
import org.osgi.service.cm.ManagedServiceFactory;
import org.osgi.service.metatype.MetaTypeInformation;
import org.osgi.service.metatype.MetaTypeProvider;
import org.osgi.service.metatype.MetaTypeService;
import org.osgi.service.metatype.ObjectClassDefinition;


/**
* The <code>MetaTypeServiceImplTest</code> class tests the
* {@link MetaTypeServiceImpl}.
*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class MetaTypeServiceImplTest extends TestCase
{

    BundleContext bundleContext;


    protected void setUp() throws Exception
    {
        super.setUp();
        bundleContext = new MockBundleContext( 10, "org.apache.felix.metatype.Mock" );
        bundleContext.getBundle().start();
    }


    protected void tearDown() throws Exception
    {
        bundleContext.getBundle().stop();
        bundleContext = null;

        super.tearDown();
    }


    public void testEmpty()
    {
        MetaTypeService mts = new MetaTypeServiceImpl( bundleContext );
        MetaTypeInformation mti = mts.getMetaTypeInformation( bundleContext.getBundle() );
        checkEmpty( mti );
    }


    public void testAfterCretionManagedService()
    {
        MetaTypeService mts = new MetaTypeServiceImpl( bundleContext );
        MetaTypeInformation mti = mts.getMetaTypeInformation( bundleContext.getBundle() );

        // assert still empty
        checkEmpty( mti );

        // register a service with PID
        String pid = "testAfterCreation";
        MockManagedService service = new MockManagedService();
        Dictionary props = new Hashtable();
        props.put( Constants.SERVICE_PID, pid );
        ServiceRegistration sr = bundleContext.registerService( ManagedService.class.getName(), service, props );

        // locales should contain MockMetaTypeProvider.LOCALES
        assertNotNull( mti.getLocales() );
        assertTrue( mti.getLocales().length == 1 );
        assertEquals( MockMetaTypeProvider.LOCALES[0], mti.getLocales()[0] );

        // pids must contain pid
        assertNotNull( mti.getPids() );
        assertTrue( mti.getPids().length == 1 );
        assertEquals( pid, mti.getPids()[0] );

        // change the service PID
        String pid2 = "testAfterCreation2";
        Dictionary props2 = new Hashtable();
        props2.put( Constants.SERVICE_PID, pid2 );
        sr.setProperties( props2 );

        // pids must contain pid2
        assertNotNull( mti.getPids() );
        assertTrue( mti.getPids().length == 1 );
        assertEquals( pid2, mti.getPids()[0] );

        // factoryPids must be empty
        assertTrue( mti.getFactoryPids() == null || mti.getFactoryPids().length == 0 );

        // unregister the service
        sr.unregister();

        // ensure everything is clear now again
        checkEmpty( mti );
    }


    public void testAfterCretionManagedServiceFactory()
    {
        MetaTypeService mts = new MetaTypeServiceImpl( bundleContext );
        MetaTypeInformation mti = mts.getMetaTypeInformation( bundleContext.getBundle() );

        // assert still empty
        checkEmpty( mti );

        // register a service with PID
        String factoryPid = "testAfterCreation_factory";
        MockManagedServiceFactory service = new MockManagedServiceFactory();
        Dictionary props = new Hashtable();
        props.put( Constants.SERVICE_PID, factoryPid );
        ServiceRegistration sr = bundleContext.registerService( ManagedServiceFactory.class.getName(), service, props );

        // locales should contain MockMetaTypeProvider.LOCALES
        assertNotNull( mti.getLocales() );
        assertTrue( mti.getLocales().length == 1 );
        assertEquals( MockMetaTypeProvider.LOCALES[0], mti.getLocales()[0] );

        // pids must be empty
        assertTrue( mti.getPids() == null || mti.getPids().length == 0 );

        // pids must contain pid
        assertNotNull( mti.getFactoryPids() );
        assertTrue( mti.getFactoryPids().length == 1 );
        assertEquals( factoryPid, mti.getFactoryPids()[0] );

        // change the service PID
        String factoryPid2 = "testAfterCreation2";
        Dictionary props2 = new Hashtable();
        props2.put( Constants.SERVICE_PID, factoryPid2 );
        sr.setProperties( props2 );

        // pids must contain pid2
        assertNotNull( mti.getFactoryPids() );
        assertTrue( mti.getFactoryPids().length == 1 );
        assertEquals( factoryPid2, mti.getFactoryPids()[0] );

        // unregister the service
        sr.unregister();

        // ensure everything is clear now again
        checkEmpty( mti );
    }


    private void checkEmpty( MetaTypeInformation mti )
    {
        assertEquals( bundleContext.getBundle().getBundleId(), mti.getBundle().getBundleId() );
        assertTrue( mti.getLocales() == null || mti.getLocales().length == 0 );
        assertTrue( mti.getPids() == null || mti.getPids().length == 0 );
        assertTrue( mti.getFactoryPids() == null || mti.getFactoryPids().length == 0 );
    }

    private static class MockMetaTypeProvider implements MetaTypeProvider
    {

        static String[] LOCALES =
            { "en_US" };


        public String[] getLocales()
        {
            return LOCALES;
        }


        public ObjectClassDefinition getObjectClassDefinition( String arg0, String arg1 )
        {
            return null;
        }
    }

    private static class MockManagedService extends MockMetaTypeProvider implements ManagedService
    {

        public void updated( Dictionary arg0 )
        {
        }

    }

    private static class MockManagedServiceFactory extends MockMetaTypeProvider implements ManagedServiceFactory
    {

        public void deleted( String arg0 )
        {
        }


        public String getName()
        {
            return null;
        }


        public void updated( String arg0, Dictionary arg1 )
        {
        }

    }
}
TOP

Related Classes of org.apache.felix.metatype.internal.MetaTypeServiceImplTest$MockManagedServiceFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.