From 09d3562ff232359183e9fb45a31d29c7f50c0acf Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 20 Mar 2013 08:51:35 +0000 Subject: [PATCH] SP-526, BIS-342: ArchivingPostRegistrationTaskTest extended SVN: 28654 --- .../ArchivingPostRegistrationTaskTest.java | 119 +++++++++++++----- 1 file changed, 91 insertions(+), 28 deletions(-) diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTaskTest.java index fd09ac9d531..95f9a71d6ce 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTaskTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/ArchivingPostRegistrationTaskTest.java @@ -34,6 +34,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.logging.BufferedAppender; +import ch.systemsx.cisd.common.test.RecordingMatcher; import ch.systemsx.cisd.openbis.dss.generic.shared.ArchiverTaskContext; import ch.systemsx.cisd.openbis.dss.generic.shared.IArchiverPlugin; import ch.systemsx.cisd.openbis.dss.generic.shared.IDataSetDirectoryProvider; @@ -46,12 +47,15 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PhysicalDataSet; +import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; /** * @author Kaloyan Enimanev */ public class ArchivingPostRegistrationTaskTest extends AssertJUnit { + private BufferedAppender logRecorder; + private String DATASET_CODE = "ds1"; private String ARCHIVE_ERROR = "rsync: timeout in data send/receive (30)"; @@ -73,6 +77,7 @@ public class ArchivingPostRegistrationTaskTest extends AssertJUnit @BeforeMethod public void setUp() { + logRecorder = new BufferedAppender(null, Level.INFO); context = new Mockery(); service = context.mock(IEncapsulatedOpenBISService.class); dataStoreService = context.mock(IDataStoreServiceInternal.class); @@ -81,6 +86,22 @@ public class ArchivingPostRegistrationTaskTest extends AssertJUnit contentProvider = context.mock(IHierarchicalContentProvider.class); applicationContext = context.mock(BeanFactory.class); ServiceProviderTestWrapper.setApplicationContext(applicationContext); + context.checking(new Expectations() + { + { + allowing(applicationContext).getBean("data-store-service"); + will(returnValue(dataStoreService)); + + allowing(applicationContext).getBean("hierarchical-content-provider"); + will(returnValue(contentProvider)); + + allowing(dataStoreService).getArchiverPlugin(); + will(returnValue(archiver)); + + allowing(dataStoreService).getDataSetDirectoryProvider(); + will(returnValue(directoryProvider)); + } + }); } @AfterMethod @@ -92,10 +113,13 @@ public class ArchivingPostRegistrationTaskTest extends AssertJUnit @Test public void testEmailSendOnArchiveError() { - prepareExpectations(); + prepareListDataSets(); + prepareSetDataSetStatusToPending(true); + RecordingMatcher<List<DatasetDescription>> recordingMatcher = + prepareArchive(createFailedProcesingStatus()); + prepareSetDataSetStatusBackToAvailable(true); ArchivingPostRegistrationTask task = new ArchivingPostRegistrationTask(new Properties(), service); - BufferedAppender logRecorder = new BufferedAppender(null, Level.INFO, "NOTIFY"); task.createExecutor(DATASET_CODE, false).execute(); @@ -103,52 +127,91 @@ public class ArchivingPostRegistrationTaskTest extends AssertJUnit + "Error encountered : " + ARCHIVE_ERROR + "\n\n" + "If you wish to archive the dataset in the future, " + "you can configure an \'AutoArchiverTask\'.", logRecorder.getLogContent()); + assertEquals("[Dataset '" + DATASET_CODE + "']", recordingMatcher.recordedObject() + .toString()); context.assertIsSatisfied(); } - @SuppressWarnings("unchecked") - private final void prepareExpectations() + @Test + public void testHappyCase() { - context.checking(new Expectations() - { - { - allowing(applicationContext).getBean("data-store-service"); - will(returnValue(dataStoreService)); - - allowing(applicationContext).getBean("hierarchical-content-provider"); - will(returnValue(contentProvider)); + prepareListDataSets(); + prepareSetDataSetStatusToPending(true); + RecordingMatcher<List<DatasetDescription>> recordingMatcher = + prepareArchive(new ProcessingStatus()); + prepareSetDataSetStatusBackToAvailable(true); + ArchivingPostRegistrationTask task = + new ArchivingPostRegistrationTask(new Properties(), service); - allowing(dataStoreService).getArchiverPlugin(); - will(returnValue(archiver)); + task.createExecutor(DATASET_CODE, false).execute(); - allowing(dataStoreService).getDataSetDirectoryProvider(); - will(returnValue(directoryProvider)); + assertEquals("", logRecorder.getLogContent()); + assertEquals("[Dataset '" + DATASET_CODE + "']", recordingMatcher.recordedObject() + .toString()); + context.assertIsSatisfied(); + } - one(service).listDataSetsByCode(Arrays.asList(DATASET_CODE)); - List<AbstractExternalData> externalDatas = Arrays.asList(createDataSet()); - will(returnValue(externalDatas)); + private RecordingMatcher<List<DatasetDescription>> prepareArchive(final ProcessingStatus status) + { + final RecordingMatcher<List<DatasetDescription>> matcher = + new RecordingMatcher<List<DatasetDescription>>(); + context.checking(new Expectations() + { + { + one(archiver).archive(with(matcher), with(any(ArchiverTaskContext.class)), + with(false)); + will(returnValue(status)); + } + }); + return matcher; + } + private final void prepareSetDataSetStatusToPending(final boolean updated) + { + context.checking(new Expectations() + { + { one(service).compareAndSetDataSetStatus(DATASET_CODE, AVAILABLE, BACKUP_PENDING, false); - will(returnValue(true)); - - one(archiver).archive(with(any(List.class)), - with(any(ArchiverTaskContext.class)), with(any(boolean.class))); - will(returnValue(createFailedProcesingStatus())); + will(returnValue(updated)); + } + }); + } + private final void prepareSetDataSetStatusBackToAvailable(final boolean updated) + { + context.checking(new Expectations() + { + { one(service).compareAndSetDataSetStatus(DATASET_CODE, BACKUP_PENDING, AVAILABLE, true); - will(returnValue(true)); + will(returnValue(updated)); + } + }); + } + private final void prepareListDataSets() + { + context.checking(new Expectations() + { + { + one(service).listDataSetsByCode(Arrays.asList(DATASET_CODE)); + List<AbstractExternalData> externalDatas = Arrays.asList(createDataSet()); + will(returnValue(externalDatas)); } }); } private ProcessingStatus createFailedProcesingStatus() { - ProcessingStatus status = new ProcessingStatus(); - status.addDatasetStatus(DATASET_CODE, Status.createError(true, ARCHIVE_ERROR)); - return status; + return createProcessingStatus(Status.createError(true, ARCHIVE_ERROR)); + } + + private ProcessingStatus createProcessingStatus(Status status) + { + ProcessingStatus processingStatus = new ProcessingStatus(); + processingStatus.addDatasetStatus(DATASET_CODE, status); + return processingStatus; } private AbstractExternalData createDataSet() -- GitLab