/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/search/trunk/search-impl/impl/src/test/org/sakaiproject/search/indexer/impl/test/DbJournalManagerTest.java $ * $Id: DbJournalManagerTest.java 105078 2012-02-24 23:00:38Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.search.indexer.impl.test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.search.journal.api.JournalExhausetedException; import org.sakaiproject.search.journal.api.JournalManagerState; import org.sakaiproject.search.journal.impl.DbJournalManager; import org.sakaiproject.search.mock.MockServerConfigurationService; /** * @author ieb * */ public class DbJournalManagerTest extends TestCase { private static final Log log = LogFactory.getLog(DbJournalManagerTest.class); private TDataSource tds; /** * @param name */ public DbJournalManagerTest(String name) { super(name); } /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); tds = new TDataSource(10,false); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); tds.close(); } /** * Test method for {@link org.sakaiproject.search.journal.impl.DbJournalManager#getNextSavePoint(long)}. * @throws Exception */ public final void testGetNextSavePoint() throws Exception { log.info("================================== "+this.getClass().getName()+".testGetNextSavePoint"); DbJournalManager dbJournalManager = new DbJournalManager(); dbJournalManager.setServerConfigurationService(new MockServerConfigurationService()); dbJournalManager.setDatasource(tds.getDataSource()); dbJournalManager.init(); for ( int i = 0; i < 10; i++ ) { JournalManagerState jmstate = dbJournalManager.prepareSave(i); dbJournalManager.commitSave(jmstate); } for ( int i = 0; i < 9; i++ ) { assertEquals("Incorrect Journal Number returned",i+1, dbJournalManager.getNextSavePoint(i)); } try { dbJournalManager.getNextSavePoint(9); fail("Should have exhausted the journal"); } catch ( JournalExhausetedException jex ) { log.debug(jex); } log.info("==PASSED========================== "+this.getClass().getName()+".testGetNextSavePoint"); } /** * Test method for {@link org.sakaiproject.search.journal.impl.DbJournalManager#prepareSave(long)}. * @throws Exception */ public final void testPrepareSave() throws Exception { log.info("================================== "+this.getClass().getName()+".testPrepareSave"); DbJournalManager dbJournalManager = new DbJournalManager(); dbJournalManager.setServerConfigurationService(new MockServerConfigurationService()); dbJournalManager.setDatasource(tds.getDataSource()); dbJournalManager.init(); JournalManagerState[] jms = new JournalManagerState[10]; for ( int i = 0; i < 10; i++ ) { jms[i] = dbJournalManager.prepareSave(i); assertNotNull("Journal State was null ",jms); } for ( int i = 0; i < 10; i++ ) { dbJournalManager.rollbackSave(jms[i]); } log.info("==PASSED========================== "+this.getClass().getName()+".testPrepareSave"); } /** * Test method for {@link org.sakaiproject.search.journal.impl.DbJournalManager#commitSave(org.sakaiproject.search.journal.api.JournalManagerState)}. * @throws Exception */ public final void testCommitSave() throws Exception { log.info("================================== "+this.getClass().getName()+".testCommitSave"); DbJournalManager dbJournalManager = new DbJournalManager(); dbJournalManager.setServerConfigurationService(new MockServerConfigurationService()); dbJournalManager.setDatasource(tds.getDataSource()); dbJournalManager.init(); for ( int i = 0; i < 10; i++ ) { JournalManagerState jmstate = dbJournalManager.prepareSave(i); dbJournalManager.commitSave(jmstate); } for ( int i = 0; i < 9; i++ ) { assertEquals("Incorrect Journal Number returned",i+1, dbJournalManager.getNextSavePoint(i)); } try { dbJournalManager.getNextSavePoint(9); fail("Should have exhausted the journal"); } catch ( JournalExhausetedException jex ) { log.debug(jex); } log.info("==PASSED========================== "+this.getClass().getName()+".testCommitSave"); } /** * Test method for {@link org.sakaiproject.search.journal.impl.DbJournalManager#rollbackSave(org.sakaiproject.search.journal.api.JournalManagerState)}. * @throws Exception */ public final void testRollbackSave() throws Exception { log.info("================================== "+this.getClass().getName()+".testRollbackSave"); DbJournalManager dbJournalManager = new DbJournalManager(); dbJournalManager.setServerConfigurationService(new MockServerConfigurationService()); dbJournalManager.setDatasource(tds.getDataSource()); dbJournalManager.init(); for ( int i = 0; i < 100; i++ ) { JournalManagerState jmstate = dbJournalManager.prepareSave(i); dbJournalManager.rollbackSave(jmstate); } try { long i = dbJournalManager.getNextSavePoint(20); fail("Should have exhausted the journal got "+i); } catch ( JournalExhausetedException jex ) { log.debug(jex); } log.info("==PASSED========================== "+this.getClass().getName()+".testRollbackSave"); } /** * @throws Exception * */ private void listAll() throws Exception { Connection connection = tds.getDataSource().getConnection(); Statement s = connection.createStatement(); ResultSet rs = s.executeQuery("select txid, txts,indexwriter from search_journal"); log.info("Record ++++++++++"); while (rs.next()) { log.info("Record:" + rs.getString(1) + ":" + rs.getLong(2)+":"+rs.getString(3)); } log.info("Record ----------"); s.close(); s.close(); rs.close(); connection.close(); } }