/*************************************************************************** * Copyright 2001-2006 The eXo Platform SARL All rights reserved. * * Please look at license.txt in info directory for more license detail. * **************************************************************************/ package org.exoplatform.forum.test; import java.util.List; import javax.jcr.Node; import javax.jcr.Session; import org.exoplatform.container.ExoContainer; import org.exoplatform.container.ExoContainerContext; import org.exoplatform.container.RootContainer; import org.exoplatform.container.StandaloneContainer; import org.exoplatform.ks.common.jcr.JCRSessionManager; import org.exoplatform.ks.common.jcr.KSDataLocation; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.ext.app.SessionProviderService; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.security.ConversationState; import org.exoplatform.services.security.Identity; import org.exoplatform.test.BasicTestCase; /** * Created by The eXo Platform SAS * Author : Hung Nguyen * hung.nguyen@exoplatform.com * july 3, 2007 */ public abstract class ForumServiceTestCase extends BasicTestCase { protected static Log log = ExoLogger.getLogger("sample.services.test"); protected static RepositoryService repositoryService; protected static StandaloneContainer container; protected final static String REPO_NAME = "repository".intern(); protected final static String SYSTEM_WS = "system".intern(); protected final static String KNOWLEDGE_WS = "knowledge".intern(); protected static Node root_ = null; protected SessionProvider sProvider; private static SessionProviderService sessionProviderService = null; static { // we do this in static to save a few cycles initContainer(); initJCR(); } public ForumServiceTestCase() throws Exception { } public void setUp() throws Exception { startSystemSession(); } public void tearDown() throws Exception { } protected void startSystemSession() { sProvider = sessionProviderService.getSystemSessionProvider(null); } protected void startSessionAs(String user) { Identity identity = new Identity(user); ConversationState state = new ConversationState(identity); sessionProviderService.setSessionProvider(null, new SessionProvider(state)); sProvider = sessionProviderService.getSessionProvider(null); } protected void endSession() { sessionProviderService.removeSessionProvider(null); startSystemSession(); } /** * All elements of a list should be contained in the expected array of String * @param message * @param expected * @param actual */ public static void assertContainsAll(String message, List<String> expected, List<String> actual) { assertEquals(message, expected.size(), actual.size()); assertTrue(message, expected.containsAll(actual)); } /** * Assertion method on string arrays * @param message * @param expected * @param actual */ public static void assertEquals(String message, String[] expected, String[] actual) { assertEquals(message, expected.length, actual.length); for (int i = 0; i < expected.length; i++) { assertEquals(message, expected[i], actual[i]); } } private static void initContainer() { try { ExoContainer container_ = RootContainer.getInstance(); ; if (container_ != null) { container_.stop(); container_.dispose(); } String containerConf = ForumServiceTestCase.class.getResource("/conf/portal/test-configuration.xml").toString(); StandaloneContainer.addConfigurationURL(containerConf); container = StandaloneContainer.getInstance(); String loginConf = Thread.currentThread().getContextClassLoader().getResource("conf/portal/login.conf").toString(); if (System.getProperty("java.security.auth.login.config") == null) System.setProperty("java.security.auth.login.config", loginConf); ExoContainerContext.setCurrentContainer(container); } catch (Exception e) { log.error("Failed to initialize standalone container: ", e); } } private static void initJCR() { try { repositoryService = (RepositoryService) container.getComponentInstanceOfType(RepositoryService.class); // Initialize datas Session session = repositoryService.getRepository(REPO_NAME).getSystemSession(KNOWLEDGE_WS); root_ = session.getRootNode(); sessionProviderService = (SessionProviderService) container.getComponentInstanceOfType(SessionProviderService.class); JCRSessionManager sessionManager = new JCRSessionManager(KNOWLEDGE_WS, repositoryService); KSDataLocation ksDataLocation = (KSDataLocation) container.getComponentInstanceOfType(KSDataLocation.class); ksDataLocation.setSessionManager(sessionManager); } catch (Exception e) { throw new RuntimeException("Failed to initialize JCR: ", e); } } }