001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.test;
017    
018    import java.util.ArrayList;
019    import java.util.List;
020    
021    import javax.xml.namespace.QName;
022    
023    import org.junit.Test;
024    import org.junit.runner.RunWith;
025    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
026    import org.kuali.rice.core.api.lifecycle.BaseLifecycle;
027    import org.kuali.rice.core.api.lifecycle.Lifecycle;
028    import org.kuali.rice.core.framework.resourceloader.SpringResourceLoader;
029    import org.kuali.rice.core.impl.services.CoreImplServiceLocator;
030    import org.kuali.rice.krad.data.platform.MaxValueIncrementerFactory;
031    import org.kuali.rice.test.BaselineTestCase;
032    import org.kuali.rice.test.BaselineTestCase.BaselineMode;
033    import org.kuali.rice.test.BaselineTestCase.Mode;
034    import org.kuali.rice.test.SQLDataLoader;
035    import org.kuali.rice.test.TestHarnessServiceLocator;
036    import org.kuali.rice.test.lifecycles.KEWXmlDataLoaderLifecycle;
037    import org.kuali.rice.test.runners.BootstrapTest;
038    import org.kuali.rice.test.runners.LoadTimeWeavableTestRunner;
039    import org.springframework.cache.Cache;
040    import org.springframework.cache.CacheManager;
041    
042    /**
043     * This is test base that should be used for all KIM unit tests. All non-web unit tests for KIM should extend this base
044     * class.
045     *
046     * @author Kuali Rice Team (rice.collab@kuali.org)
047     */
048    @BaselineMode(Mode.ROLLBACK_CLEAR_DB)
049    @RunWith(LoadTimeWeavableTestRunner.class)
050    @BootstrapTest(KIMTestCase.BootstrapTest.class)
051    public abstract class KIMTestCase extends BaselineTestCase {
052    
053            private static final String KIM_MODULE_NAME = "kim";
054    
055            public KIMTestCase() {
056                    super(KIM_MODULE_NAME);
057            }
058    
059            @Override
060            protected List<Lifecycle> getSuiteLifecycles() {
061                    List<Lifecycle> suiteLifecycles = super.getSuiteLifecycles();
062                    suiteLifecycles.add(new KEWXmlDataLoaderLifecycle("classpath:org/kuali/rice/kim/test/DefaultSuiteTestData.xml"));
063                    return suiteLifecycles;
064            }
065    
066            @Override
067            protected void loadSuiteTestData() throws Exception {
068                    super.loadSuiteTestData();
069                    new SQLDataLoader("classpath:org/kuali/rice/kim/test/DefaultSuiteTestData.sql", "/").runSql();
070                    new SQLDataLoader("classpath:org/kuali/rice/kim/test/CircularRolesTestData.sql", "/").runSql();
071                    new SQLDataLoader("classpath:org/kuali/rice/kim/test/CircularGroupsTestData.sql", "/").runSql();
072            new SQLDataLoader("classpath:org/kuali/rice/kim/test/DefaultSuiteLDAPTestData.sql", "/").runSql();
073            }
074    
075            @Override
076            protected Lifecycle getLoadApplicationLifecycle() {
077            SpringResourceLoader springResourceLoader = new SpringResourceLoader(new QName("KIMTestHarnessApplicationResourceLoader"), "classpath:KIMTestHarnessSpringBeans.xml", null);
078            springResourceLoader.setParentSpringResourceLoader(getTestHarnessSpringResourceLoader());
079            return springResourceLoader;
080            }
081    
082            /**
083             * Override the standard per-test lifecycles to prepend ClearDatabaseLifecycle and ClearCacheLifecycle
084             * @see org.kuali.rice.test.RiceTestCase#getPerTestLifecycles()
085             */
086            @Override
087            protected List<Lifecycle> getPerTestLifecycles() {
088                    List<Lifecycle> lifecycles = super.getPerTestLifecycles();
089                    lifecycles.add(new ClearCacheLifecycle());
090                    return lifecycles;
091            }
092    
093            public class ClearCacheLifecycle extends BaseLifecycle {
094                    @Override
095                    public void stop() throws Exception {
096                            //KimApiServiceLocator.getIdentityManagementService().flushAllCaches();
097                            //KimApiServiceLocator.getRoleService().flushRoleCaches();
098                            super.stop();
099                    }
100    
101            }
102    
103            @Override
104        protected List<String> getPerTestTablesNotToClear() {
105                    List<String> tablesNotToClear = new ArrayList<String>();
106                    tablesNotToClear.add("KRIM_.*");
107                    tablesNotToClear.add("KRNS_.*");
108            tablesNotToClear.add("KRCR_.*");
109            tablesNotToClear.add("KREW_.*");
110                    return tablesNotToClear;
111            }
112    
113    
114            /**
115         * @see org.kuali.rice.test.RiceTestCase#getModuleName()
116         */
117            @Override
118            protected String getModuleName() {
119                    return KIM_MODULE_NAME;
120            }
121    
122        protected String getNextSequenceStringValue(String sequenceName) {
123            return MaxValueIncrementerFactory.getIncrementer(TestHarnessServiceLocator.getDataSource(), sequenceName).nextStringValue();
124        }
125    
126        public static final class BootstrapTest extends KIMTestCase {
127            @Test
128            public void bootstrapTest() {};
129        }
130    
131        public void clearNamedCache(String cacheName) {
132    
133            try {
134                CacheManager cm = CoreImplServiceLocator.getCacheManagerRegistry().getCacheManagerByCacheName(cacheName);
135                if ( cm != null ) {
136                    Cache cache = cm.getCache(cacheName);
137                    if (cache != null) {
138                        cache.clear();
139                        if ( LOG.isDebugEnabled() ) {
140                            LOG.debug( "Cleared " + cacheName + " cache." );
141                        }
142                    } else {
143                        // this is at debug level intentionally, since not all BOs have caches
144                        LOG.debug( "Unable to find cache for " + cacheName + ".");
145                    }
146                } else {
147                    LOG.info( "Unable to find cache manager when attempting to clear " + cacheName );
148                }
149            } catch (RiceIllegalArgumentException e) {
150                LOG.info( "Cache manager not found when attempting to clear " + cacheName );
151            }
152    
153        }
154    }