package co.codewizards.cloudstore.local.persistence; import static co.codewizards.cloudstore.core.objectfactory.ObjectFactoryUtil.createObject; import static org.assertj.core.api.Assertions.assertThat; import java.util.Collection; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import co.codewizards.cloudstore.core.oio.File; import co.codewizards.cloudstore.core.repo.local.LocalRepoManager; import co.codewizards.cloudstore.core.repo.local.LocalRepoTransaction; import co.codewizards.cloudstore.local.AbstractTest; public class PersistenceTest extends AbstractTest { private static final int modificationCount = 10000; @BeforeClass public static void beforeClass() { System.setProperty(LocalRepoManager.SYSTEM_PROPERTY_CLOSE_DEFERRED_MILLIS, "0"); } @AfterClass public static void afterClass() { System.clearProperty(LocalRepoManager.SYSTEM_PROPERTY_CLOSE_DEFERRED_MILLIS); } @Test public void getModifications() throws Exception { final File remoteRoot = newTestRepositoryLocalRoot("remote"); remoteRoot.mkdirs(); LocalRepoManager localRepoManager = localRepoManagerFactory.createLocalRepoManagerForNewRepository(remoteRoot); assertThat(localRepoManager).isNotNull(); LocalRepoTransaction transaction = localRepoManager.beginWriteTransaction(); try { RemoteRepository remoteRepository = createObject(RemoteRepository.class); remoteRepository.setLocalPathPrefix(""); remoteRepository.setPublicKey(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }); remoteRepository = transaction.getDao(RemoteRepositoryDao.class).makePersistent(remoteRepository); final CopyModificationDao copyModificationDao = transaction.getDao(CopyModificationDao.class); for (int i = 0; i < modificationCount; ++i) { final CopyModification copyModification = new CopyModification(); copyModification.setRemoteRepository(remoteRepository); copyModification.setFromPath("/from/" + i); copyModification.setToPath("/to/" + i); copyModification.setLength(100000); copyModification.setSha1("TEST" + i); copyModificationDao.makePersistent(copyModification); } transaction.commit(); } finally { transaction.rollbackIfActive(); } localRepoManager.close(); localRepoManager = localRepoManagerFactory.createLocalRepoManagerForExistingRepository(remoteRoot); transaction = localRepoManager.beginReadTransaction(); try { final RemoteRepository remoteRepository = transaction.getDao(RemoteRepositoryDao.class).getObjects().iterator().next(); final ModificationDao modificationDao = transaction.getDao(ModificationDao.class); final Collection<Modification> modifications = modificationDao.getModifications(remoteRepository); assertThat(modifications).hasSize(modificationCount); System.out.println("*** Accessing fromPath and toPath ***"); for (final Modification modification : modifications) { if (modification instanceof CopyModification) { final CopyModification copyModification = (CopyModification)modification; System.out.println(String.format("%s => %s", copyModification.getFromPath(), copyModification.getToPath())); } } transaction.commit(); } finally { transaction.rollbackIfActive(); } localRepoManager.close(); } }