/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.checker.dao.impl; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.sql.SQLException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.dspace.AbstractUnitTest; import org.dspace.checker.ChecksumResultCode; import org.dspace.content.Bitstream; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.BitstreamService; import org.dspace.core.CoreHelpers; import org.dspace.core.HibernateDBConnection; import org.hibernate.Query; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; /** * * @author mwood */ public class ChecksumHistoryDAOImplTest extends AbstractUnitTest { public ChecksumHistoryDAOImplTest() { } @BeforeClass public static void setUpClass() throws SQLException, ClassNotFoundException { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() throws SQLException { } /** * Test of deleteByDateAndCode method, of class ChecksumHistoryDAOImpl. */ @Test public void testDeleteByDateAndCode() throws Exception { System.out.println("deleteByDateAndCode"); GregorianCalendar cal = new GregorianCalendar(); Date retentionDate = cal.getTime(); ChecksumResultCode resultCode = ChecksumResultCode.CHECKSUM_MATCH; // Create two older rows HibernateDBConnection dbc = (HibernateDBConnection) CoreHelpers.getDBConnection(context); Query qry = dbc.getSession().createSQLQuery( "INSERT INTO checksum_history" + "(check_id, process_end_date, result, bitstream_id)" + " VALUES (:id, :date, :result, :bitstream)"); int checkId = 0; // Row with matching result code BitstreamService bss = ContentServiceFactory.getInstance().getBitstreamService(); InputStream is = new ByteArrayInputStream(new byte[0]); Bitstream bs = bss.create(context, is); context.turnOffAuthorisationSystem(); bss.update(context, bs); context.restoreAuthSystemState(); cal.add(Calendar.DATE, -1); Date matchDate = cal.getTime(); checkId++; qry.setInteger("id", checkId); qry.setDate("date", matchDate); qry.setString("result", ChecksumResultCode.CHECKSUM_MATCH.name()); qry.setString("bitstream", bs.getID().toString()); // FIXME identifier not being set??? qry.executeUpdate(); // Row with nonmatching result code cal.add(Calendar.DATE, -1); Date noMatchDate = cal.getTime(); checkId++; qry.setInteger("id", checkId); qry.setDate("date", noMatchDate); qry.setString("result", ChecksumResultCode.CHECKSUM_NO_MATCH.name()); qry.setString("bitstream", bs.getID().toString()); qry.executeUpdate(); // Create one newer row cal.add(Calendar.DATE, +3); Date futureDate = cal.getTime(); checkId++; qry.setInteger("id", checkId); qry.setDate("date", new java.sql.Date(futureDate.getTime())); qry.setString("result", ChecksumResultCode.CHECKSUM_MATCH.name()); qry.setString("bitstream", bs.getID().toString()); qry.executeUpdate(); // Test! ChecksumHistoryDAOImpl instance = new ChecksumHistoryDAOImpl(); int expResult = 1; int result = instance.deleteByDateAndCode(context, retentionDate, resultCode); assertEquals(expResult, result); // See if matching old row is gone. qry = dbc.getSession().createQuery( "SELECT COUNT(*) FROM ChecksumHistory WHERE process_end_date = :date"); long count; qry.setDate("date", matchDate); count = (Long) qry.uniqueResult(); assertEquals("Should find no row at matchDate", count, 0); // See if nonmatching old row is still present. qry.setDate("date", noMatchDate); count = (Long) qry.uniqueResult(); assertEquals("Should find one row at noMatchDate", count, 1); // See if new row is still present. qry.setDate("date", futureDate); count = (Long) qry.uniqueResult(); assertEquals("Should find one row at futureDate", count, 1); } /** * Test of deleteByBitstream method, of class ChecksumHistoryDAOImpl. */ /* @Test public void testDeleteByBitstream() throws Exception { System.out.println("deleteByBitstream"); Bitstream bitstream = null; ChecksumHistoryDAOImpl instance = new ChecksumHistoryDAOImpl(); instance.deleteByBitstream(context, bitstream); // TODO review the generated test code and remove the default call to fail. fail("The test case is a prototype."); } */ }