001package org.apache.turbine.services;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import static org.junit.Assert.assertEquals;
023import static org.junit.Assert.assertNotNull;
024import static org.junit.Assert.fail;
025
026import java.util.Locale;
027
028import org.apache.fulcrum.cache.GlobalCacheService;
029import org.apache.fulcrum.crypto.CryptoService;
030import org.apache.fulcrum.factory.FactoryService;
031import org.apache.fulcrum.intake.IntakeService;
032import org.apache.fulcrum.localization.LocalizationService;
033import org.apache.fulcrum.mimetype.MimeTypeService;
034import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
035import org.apache.turbine.test.BaseTestCase;
036import org.apache.turbine.util.TurbineConfig;
037import org.junit.AfterClass;
038import org.junit.BeforeClass;
039import org.junit.Test;
040
041/**
042 * Unit test for verifing that we can load all the appropriate components from the
043 * appropriate Container.  For now that is just ECM (AvalonComponentService)
044 * but in the future with mixed containers there could be multiple.
045 *
046 * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
047 * @author <a href="mailto:sgoeschl@apache.org">Siegfried Goeschl</a>
048 * @version $Id: LoadingComponentsTest.java 1606111 2014-06-27 14:46:47Z gk $
049 */
050public class LoadingComponentsTest extends BaseTestCase
051{
052    private static TurbineConfig tc = null;
053
054
055    /**
056     * Test to load a couple of Avalon services directly by the
057     * AvalonComponentService.
058     *
059     * @throws Exception loading failed
060     */
061    @Test public void testLoadingByAvalonComponentService() throws Exception
062    {
063        AvalonComponentService avalonComponentService =
064            (AvalonComponentService) TurbineServices.getInstance().getService(
065                    AvalonComponentService.SERVICE_NAME);
066
067        assertNotNull(avalonComponentService);
068
069        GlobalCacheService dgcs = (GlobalCacheService)avalonComponentService.lookup(GlobalCacheService.ROLE);
070        assertNotNull(dgcs);
071        CryptoService cs = (CryptoService)avalonComponentService.lookup(CryptoService.ROLE);
072        assertNotNull(cs);
073        LocalizationService ls = (LocalizationService)avalonComponentService.lookup(LocalizationService.ROLE);
074        assertNotNull(ls);
075        IntakeService intake = (IntakeService)avalonComponentService.lookup(IntakeService.ROLE);
076        assertNotNull(intake);
077        FactoryService fs = (FactoryService)avalonComponentService.lookup(FactoryService.ROLE);
078        assertNotNull(fs);
079        MimeTypeService mimetype = (MimeTypeService)avalonComponentService.lookup(MimeTypeService.ROLE);
080        assertNotNull(mimetype);
081        //avalonComponentService.shutdown();
082    }
083
084    /**
085     * Test to load a couple of Avalon services by using the
086     * TurbineServices which delegate the service retrieval to
087     * the AvalonComponentService
088     *
089     * @throws Exception loading failed
090     */
091    @Test public void testLoadingByTurbineServices() throws Exception
092    {
093        ServiceManager serviceManager = TurbineServices.getInstance();
094
095        GlobalCacheService gcs = (GlobalCacheService)serviceManager.getService(GlobalCacheService.ROLE);
096        assertNotNull(gcs);
097        CryptoService cs = (CryptoService)serviceManager.getService(CryptoService.ROLE);
098        assertNotNull(cs);
099        LocalizationService ls = (LocalizationService)serviceManager.getService(LocalizationService.ROLE);
100        assertNotNull(ls);
101        IntakeService intake = (IntakeService)serviceManager.getService(IntakeService.ROLE);
102        assertNotNull(intake);
103        FactoryService fs = (FactoryService)serviceManager.getService(FactoryService.ROLE);
104        assertNotNull(fs);
105        MimeTypeService mimetype = (MimeTypeService)serviceManager.getService(MimeTypeService.ROLE);
106        assertNotNull(mimetype);
107    }
108
109    /**
110     * Lookup up an unknown servie
111     * @throws Exception
112     */
113    @Test public void testLookupUnknownService() throws Exception
114    {
115        ServiceManager serviceManager = TurbineServices.getInstance();
116
117        try
118        {
119            serviceManager.getService("foo");
120            fail("We expect an InstantiationException");
121        }
122        catch (InstantiationException e)
123        {
124            // that'w what we expect
125            return;
126        }
127        catch (Throwable t)
128        {
129            fail("We expect an InstantiationException");
130        }
131    }
132
133    /**
134     * Shutdown the AvalonComponentService where the MimeTypeService
135     * resides and lookup the MimeTypeService. This should trigger
136     * a late initialization of AvalonComponentService and returns
137     * a fully functional MimeTypeService.
138     */
139    @Test public void testAvalonComponentServiceShutdown() throws Exception
140    {
141        ServiceManager serviceManager = TurbineServices.getInstance();
142        serviceManager.shutdownService(AvalonComponentService.SERVICE_NAME);
143
144        MimeTypeService mimeTypeService = (MimeTypeService) serviceManager.getService(MimeTypeService.class.getName());
145        assertNotNull(mimeTypeService);
146
147        Locale locale = new Locale("en", "US");
148        String s = mimeTypeService.getCharSet(locale);
149        assertEquals("ISO-8859-1", s);
150    }
151
152    @BeforeClass
153    public static void setUp() throws Exception
154    {
155        tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties");
156        tc.initialize();
157    }
158    @AfterClass
159    public static void tearDown() throws Exception
160    {
161        if (tc != null)
162        {
163            tc.dispose();
164        }
165    }
166    
167}