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 }