package hk.hku.cecid.edi.as2.dao.test; import java.io.InputStream; import java.util.Date; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import hk.hku.cecid.edi.as2.dao.RepositoryDVO; import hk.hku.cecid.edi.as2.dao.RepositoryDataSourceDAO; import hk.hku.cecid.edi.as2.pkg.AS2Message; import hk.hku.cecid.piazza.commons.dao.DAOException; import hk.hku.cecid.piazza.commons.io.IOHandler; import hk.hku.cecid.piazza.commons.test.DAOTest; import hk.hku.cecid.piazza.commons.test.utils.FixtureStore; @Ignore public class RepositoryDataSourceDAOTest extends DAOTest<RepositoryDataSourceDAO> { private static final String originalMessageId = "TestPaylodMessage@RepositoryDataSourceDAOTest"; private static final String msgBox = "inbox"; private static final String ori_binary_content = "test.bin"; // 55MB binary file to insert to database private static final String diff_binary_content = "test_diff.bin"; // 55MB binary file to insert to database // Fixture loader private static ClassLoader FIXTURE_LOADER = FixtureStore.createFixtureLoader(false, RepositoryDataSourceDAOTest.class); @Override public String getTableName() { return "repository"; } @Override public void setUp() throws Exception { super.setUp(); System.out.println("Preparing Database Data * * *"); logger.info("Preparing Database Data * * *"); for(int i =0; i < 100000; i++){ RepositoryDataSourceDAO dao = super.getTestingTarget(); RepositoryDVO dvo = (RepositoryDVO) dao.createDVO(); dvo.setMessageBox(msgBox); dvo.setMessageId(AS2Message.generateID()); dao.persist(dvo); } }; @Before public void initialTest() throws Exception{ System.out.println("Init Test Data."); RepositoryDataSourceDAO dao = super.getTestingTarget(); RepositoryDVO dvo = (RepositoryDVO) dao.createDVO(); InputStream ins = FIXTURE_LOADER.getResourceAsStream(ori_binary_content); logger.info("Preparing Database Data * * *"); dvo.setMessageBox(msgBox); dvo.setMessageId(originalMessageId); // Check if the record is already exists boolean result = dao.retrieve(dvo); logger.info("Record Found: " + result); dvo.setContent(IOHandler.readBytes(ins)); long start = System.currentTimeMillis(); logger.info("* * * Begin Presist Data: " + new Date(start)); dao.persist(dvo); long end = System.currentTimeMillis(); logger.info("* * * Finished Presist Data: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); } @After public void dropRecord() throws Exception{ System.out.println("Clean test data."); RepositoryDataSourceDAO dao = super.getTestingTarget(); RepositoryDVO dvo = (RepositoryDVO) dao.createDVO(); InputStream ins = FIXTURE_LOADER.getResourceAsStream(ori_binary_content); logger.info("Dispose Database Data * * *"); dvo.setMessageBox(msgBox); dvo.setMessageId(originalMessageId); // Check if the record is already exists dao.remove(dvo); } @Test public void updateRepositoryRecord() throws DAOException, Exception{ RepositoryDataSourceDAO dao = super.getTestingTarget(); RepositoryDVO dvo = (RepositoryDVO) dao.createDVO(); dvo.setMessageId(originalMessageId); dvo.setMessageBox(msgBox); //Retreive Original Record from database long start = System.currentTimeMillis(); logger.info("* * * Begin Query Data: " + new Date(start)); dao.retrieve(dvo); long end = System.currentTimeMillis(); logger.info("* * * Finished Query Data: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); //Update Record by another binary content InputStream ins = FIXTURE_LOADER.getResourceAsStream(diff_binary_content); dvo.setContent(IOHandler.readBytes(ins)); start = System.currentTimeMillis(); logger.info("* * * Begin Update: " + new Date(start)); dao.persist(dvo); end = System.currentTimeMillis(); logger.info("* * * Finished Updare: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); System.out.println("* * * Finished testUpdateRepositoryRecord: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); } @Test public void insertRepositoryRecord() throws DAOException, Exception{ RepositoryDataSourceDAO dao = super.getTestingTarget(); RepositoryDVO dvo = (RepositoryDVO) dao.createDVO(); dvo.setMessageId(originalMessageId); dvo.setMessageBox(msgBox); //Retreive Original Record from database long start = System.currentTimeMillis(); logger.info("* * * Begin Query Data: " + new Date(start)); dao.retrieve(dvo); long end = System.currentTimeMillis(); logger.info("* * * Finished Query Data: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); //Delete from databse logger.info("# # # Begin Remove: " + new Date(start)); dao.remove(dvo); end = System.currentTimeMillis(); logger.info("# # # Finished Remove: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); //Insert Record by another binary content InputStream ins = FIXTURE_LOADER.getResourceAsStream(diff_binary_content); RepositoryDVO newDvo = (RepositoryDVO) dao.createDVO(); newDvo.setContent(IOHandler.readBytes(ins)); newDvo.setMessageId(ori_binary_content); newDvo.setMessageBox(msgBox); start = System.currentTimeMillis(); logger.info("* * * Begin Update: " + new Date(start)); dao.persist(newDvo); end = System.currentTimeMillis(); logger.info("* * * Finished Updare: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); System.out.println("Finished testInsertRepositoryRecord: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); } /* calling sql update is not as good as just using presist method @Test public void testUpdateContentBySQL() throws Exception{ RepositoryDataSourceDAO dao = super.getTestingTarget(); //Update Record by another binary content InputStream ins = FIXTURE_LOADER.getResourceAsStream(diff_binary_content); long start = System.currentTimeMillis(); logger.info("* * * Begin Update: " + new Date(start)); dao.updateContent(IOHandler.readBytes(ins), originalMessageId, msgBox); long end = System.currentTimeMillis(); logger.info("* * * Finished Updare: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); System.out.println("* * * Finished testUpdateRepositoryRecord: " + new Date(end) + " Spent: "+ (end-start) +" ms" ); }*/ }