package org.linagora.linshare.batches; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.cxf.helpers.IOUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.linagora.linshare.core.batches.GenericBatch; import org.linagora.linshare.core.domain.constants.FileSizeUnit; import org.linagora.linshare.core.domain.constants.LinShareTestConstants; import org.linagora.linshare.core.domain.constants.Policies; import org.linagora.linshare.core.domain.constants.TimeUnit; import org.linagora.linshare.core.domain.entities.Account; import org.linagora.linshare.core.domain.entities.Document; import org.linagora.linshare.core.domain.entities.DocumentEntry; import org.linagora.linshare.core.domain.entities.FileSizeUnitClass; import org.linagora.linshare.core.domain.entities.Functionality; import org.linagora.linshare.core.domain.entities.Policy; import org.linagora.linshare.core.domain.entities.StringValueFunctionality; import org.linagora.linshare.core.domain.entities.TimeUnitClass; import org.linagora.linshare.core.domain.entities.UnitValueFunctionality; import org.linagora.linshare.core.domain.entities.User; import org.linagora.linshare.core.exception.BusinessException; import org.linagora.linshare.core.job.quartz.Context; import org.linagora.linshare.core.job.quartz.LinShareJobBean; import org.linagora.linshare.core.repository.DocumentEntryRepository; import org.linagora.linshare.core.repository.DocumentRepository; import org.linagora.linshare.core.repository.FunctionalityRepository; import org.linagora.linshare.core.repository.UserRepository; import org.linagora.linshare.core.service.DocumentEntryService; import org.linagora.linshare.service.LoadingServiceTestDatas; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import com.google.common.collect.Lists; @ContextConfiguration(locations = { "classpath:springContext-datasource.xml", "classpath:springContext-dao.xml", "classpath:springContext-ldap.xml", "classpath:springContext-fongo.xml", "classpath:springContext-storage-jcloud.xml", "classpath:springContext-repository.xml", "classpath:springContext-business-service.xml", "classpath:springContext-rac.xml", "classpath:springContext-service-miscellaneous.xml", "classpath:springContext-service.xml", "classpath:springContext-batches.xml", "classpath:springContext-test.xml" }) public class ShaBatchImplTest extends AbstractTransactionalJUnit4SpringContextTests { private static Logger logger = LoggerFactory .getLogger(ShaBatchImplTest.class); @Qualifier("shaSumBatch") @Autowired private GenericBatch shaSumBatch; @Autowired private DocumentRepository documentRepository; @Qualifier("userRepository") @Autowired private UserRepository<User> userRepository; @Autowired private DocumentEntryService documentEntryService; @Autowired private DocumentEntryRepository documentEntryRepository; private LoadingServiceTestDatas datas; private DocumentEntry aDocumentEntry; private DocumentEntry bDocumentEntry; @Autowired private FunctionalityRepository functionalityRepository; private User jane; private final InputStream stream2 = Thread.currentThread().getContextClassLoader().getResourceAsStream("linshare-mailContainer.properties"); private final String fileName2 = "linshare-mailContainer.properties"; private final String comment2 = "file description sample"; private final InputStream stream1 = Thread.currentThread().getContextClassLoader().getResourceAsStream("linshare-default.properties"); private final String fileName1 = "linshare-default.properties"; private final String comment1 = "file description default"; @Before public void setUp() throws Exception { logger.debug(LinShareTestConstants.BEGIN_SETUP); this.executeSqlScript("import-tests-sha.sql", false); datas = new LoadingServiceTestDatas(userRepository); datas.loadUsers(); jane = datas.getUser2(); logger.debug(LinShareTestConstants.END_SETUP); } @After public void tearDown() throws Exception { logger.debug(LinShareTestConstants.BEGIN_TEARDOWN); logger.debug(LinShareTestConstants.END_TEARDOWN); } @Test public void testLaunch() throws BusinessException, JobExecutionException { logger.info(LinShareTestConstants.BEGIN_TEST); LinShareJobBean job = new LinShareJobBean(); List<GenericBatch> batches = Lists.newArrayList(); batches.add(shaSumBatch); job.setBatch(batches); Assert.assertTrue("At least one batch failed.", job.executeExternal()); logger.info(LinShareTestConstants.END_TEST); } @Test public void testShaGetAll() throws BusinessException, JobExecutionException, IOException { logger.info(LinShareTestConstants.BEGIN_TEST); Account actor = jane; createFunctionalities(); File tempFile1 = File.createTempFile("linshare-test-", ".tmp"); File tempFile2 = File.createTempFile("linshare-test-2", ".tmp"); List<String> l = Lists.newArrayList(); IOUtils.transferTo(stream1, tempFile1); IOUtils.transferTo(stream2, tempFile2); aDocumentEntry = documentEntryService.create(actor, actor, tempFile1, fileName1, comment1, false, null); bDocumentEntry = documentEntryService.create(actor, actor, tempFile2, fileName2, comment2, false, null); Assert.assertTrue(documentEntryRepository.findById(aDocumentEntry.getUuid()) != null); Assert.assertTrue(documentEntryRepository.findById(bDocumentEntry.getUuid()) != null); aDocumentEntry.getDocument().setSha256sum(null); bDocumentEntry.getDocument().setSha256sum(null); l = shaSumBatch.getAll(); Assert.assertEquals(l.size(), 2); } @Test public void testSha256Batch() throws BusinessException, JobExecutionException, IOException { logger.info(LinShareTestConstants.BEGIN_TEST); Account actor = jane; createFunctionalities(); File tempFile = File.createTempFile("linshare-test-", ".tmp"); File tempFile2 = File.createTempFile("linshare-test-up", ".tmp"); List<String> l = Lists.newArrayList(); IOUtils.transferTo(stream2, tempFile); IOUtils.transferTo(stream1, tempFile2); aDocumentEntry = documentEntryService.create(actor, actor, tempFile, fileName2, comment2, false, null); Assert.assertTrue(documentEntryRepository.findById(aDocumentEntry.getUuid()) != null); aDocumentEntry.getDocument().setSha256sum(null); documentRepository.update(aDocumentEntry.getDocument()); l = shaSumBatch.getAll(); int i; Context c; for (i = 0; i < l.size(); i++) { c = shaSumBatch.execute(l.get(i), l.size(), i); Assert.assertEquals(c.getIdentifier(), l.get(i)); Document doc = documentRepository.findByUuid(l.get(i)); Assert.assertEquals("0f2f3d281607dbcd3178bbf1a61a87c8b5267a3312f6309d1412ba7cdd9ca486", doc.getSha256sum()); Assert.assertEquals("727e25a63402ac496066df859ee029e48ffa902b", doc.getSha1sum()); } logger.info(LinShareTestConstants.END_TEST); } private void createFunctionalities() throws IllegalArgumentException, BusinessException { Integer value = 1; ArrayList<Functionality> functionalities = new ArrayList<Functionality>(); functionalities.add( new UnitValueFunctionality("MIME_TYPE", true, new Policy(Policies.ALLOWED, false), new Policy(Policies.ALLOWED, false), jane.getDomain(), value, new FileSizeUnitClass(FileSizeUnit.GIGA) ) ); functionalities.add( new UnitValueFunctionality("ANTIVIRUS", true, new Policy(Policies.ALLOWED, false), new Policy(Policies.ALLOWED, false), jane.getDomain(), value, new FileSizeUnitClass(FileSizeUnit.GIGA) ) ); functionalities.add( new UnitValueFunctionality("ENCIPHERMENT", true, new Policy(Policies.ALLOWED, true), new Policy(Policies.ALLOWED, true), jane.getDomain(), value, new FileSizeUnitClass(FileSizeUnit.GIGA) ) ); functionalities.add( new StringValueFunctionality("TIME_STAMPING", true, new Policy(Policies.ALLOWED, false), new Policy(Policies.ALLOWED, false), jane.getDomain(), "" ) ); functionalities.add( new UnitValueFunctionality("FILE_EXPIRATION", true, new Policy(Policies.ALLOWED, false), new Policy(Policies.ALLOWED, false), jane.getDomain(), value, new TimeUnitClass(TimeUnit.DAY) ) ); for (Functionality functionality : functionalities) { functionalityRepository.create(functionality); jane.getDomain().addFunctionality(functionality); } } }