diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/ContainerDataSetStorageAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/ContainerDataSetStorageAlgorithm.java index 86890aa7565ae8761062a42e507947526750da14..a6e9d090377d1601053be2c0fc530780065a939b 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/ContainerDataSetStorageAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/ContainerDataSetStorageAlgorithm.java @@ -25,6 +25,9 @@ import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional.IStorageProcessorTransaction; import ch.systemsx.cisd.etlserver.NullStorageProcessorTransaction; import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.ConversionUtils; +import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStoragePrecommitRecoveryAlgorithm; +import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageRecoveryAlgorithm; +import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageStoredRecoveryAlgorithm; import ch.systemsx.cisd.etlserver.validation.IDataSetValidator; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; @@ -63,6 +66,16 @@ public class ContainerDataSetStorageAlgorithm<T extends DataSetInformation> exte precommitDirectory); } + /** + * Creates algorithm from a recovery algorithm. + */ + public ContainerDataSetStorageAlgorithm(IDataStoreStrategy dataStoreStrategy, + IStorageProcessorTransactional storageProcessor, IFileOperations fileOperations, + IMailClient mailClient, DataSetStorageRecoveryAlgorithm<T> recoveryAlgorithm) + { + super(dataStoreStrategy, storageProcessor, fileOperations, mailClient, recoveryAlgorithm); + } + @Override public IStorageProcessorTransaction prepare(IRollbackStack rollbackStack) { @@ -100,6 +113,12 @@ public class ContainerDataSetStorageAlgorithm<T extends DataSetInformation> exte // assert precommitted state - return in committed state } + @Override + public void cleanPrecommitDirectory() + { + // do nothing + } + @Override public NewExternalData createExternalData() { @@ -121,4 +140,21 @@ public class ContainerDataSetStorageAlgorithm<T extends DataSetInformation> exte return "Error trying to register container data set '" + getDataSetInformation().toString() + "'."; } + + @Override + public DataSetStoragePrecommitRecoveryAlgorithm<T> getPrecommitRecoveryAlgorithm() + { + return new DataSetStoragePrecommitRecoveryAlgorithm<T>(getDataSetInformation(), + getDataStoreStrategy().getKey(), getIncomingDataSetFile(), getStagingDirectory(), + getPreCommitDirectory(), getDataStoreCode()); + } + + @Override + public DataSetStorageStoredRecoveryAlgorithm<T> getStoredRecoveryAlgorithm() + { + return new DataSetStorageStoredRecoveryAlgorithm<T>(getDataSetInformation(), + getDataStoreStrategy().getKey(), getIncomingDataSetFile(), getStagingDirectory(), + getPreCommitDirectory(), getDataStoreCode()); + } + } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java index 19131e2fe0bd4665cac907ea52f2e112ffe34056..27ad989e489e584632b42bdd4e91dd27d664a19f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithm.java @@ -44,6 +44,7 @@ import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.MkdirsCommand; import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.MoveFileCommand; import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.NewFileCommand; import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStoragePrecommitRecoveryAlgorithm; +import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageRecoveryAlgorithm; import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageStoredRecoveryAlgorithm; import ch.systemsx.cisd.etlserver.validation.IDataSetValidator; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; @@ -177,20 +178,8 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation> IMailClient mailClient, DataSetStoragePrecommitRecoveryAlgorithm<T> precommitRecoveryAlgorithm) { - this.incomingDataSetFile = precommitRecoveryAlgorithm.getIncomingDataSetFile(); - this.registrationDetails = null; - this.dataSetInformation = precommitRecoveryAlgorithm.getDataSetInformation(); - - this.dataStoreStrategy = dataStoreStrategy; - this.storageProcessor = storageProcessor; - this.dataStoreCode = precommitRecoveryAlgorithm.getDataStoreCode(); - this.fileOperations = fileOperations; - this.mailClient = mailClient; - this.stagingDirectory = precommitRecoveryAlgorithm.getStagingDirectory(); - this.preCommitDirectory = precommitRecoveryAlgorithm.getPreCommitDirectory(); - - this.storeRoot = storageProcessor.getStoreRootDirectory(); - this.dataSetType = null; + this(dataStoreStrategy, storageProcessor, fileOperations, mailClient, + precommitRecoveryAlgorithm.getRecoveryAlgorithm()); state = new PrecommittedState<T>(this, precommitRecoveryAlgorithm); } @@ -203,6 +192,16 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation> IFileOperations fileOperations, IMailClient mailClient, DataSetStorageStoredRecoveryAlgorithm<T> storedRecoveryAlgorithm) + { + this(dataStoreStrategy, storageProcessor, fileOperations, mailClient, + storedRecoveryAlgorithm.getRecoveryAlgorithm()); + + state = new StoredState<T>(this, storedRecoveryAlgorithm); + } + + public DataSetStorageAlgorithm(IDataStoreStrategy dataStoreStrategy, + IStorageProcessorTransactional storageProcessor, IFileOperations fileOperations, + IMailClient mailClient, DataSetStorageRecoveryAlgorithm<T> storedRecoveryAlgorithm) { this.incomingDataSetFile = storedRecoveryAlgorithm.getIncomingDataSetFile(); this.registrationDetails = null; @@ -218,8 +217,6 @@ public class DataSetStorageAlgorithm<T extends DataSetInformation> this.storeRoot = storageProcessor.getStoreRootDirectory(); this.dataSetType = null; - - state = new StoredState<T>(this, storedRecoveryAlgorithm); } public DataSetStoragePrecommitRecoveryAlgorithm<T> getPrecommitRecoveryAlgorithm() diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/ContainerRecoveryAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/ContainerRecoveryAlgorithm.java new file mode 100644 index 0000000000000000000000000000000000000000..d89d17a578f224d26305b36373081c9d9470b7bc --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/ContainerRecoveryAlgorithm.java @@ -0,0 +1,27 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.etlserver.registrator.recovery; + +/** + * + * + * @author jakubs + */ +public class ContainerRecoveryAlgorithm +{ + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java index b87d41bd5f64c72724e95d1e7f4406688c0e8baf..d07b77d512de958de610ce8f7988e5f2e606e92c 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStoragePrecommitRecoveryAlgorithm.java @@ -26,6 +26,7 @@ import ch.systemsx.cisd.etlserver.IDataStoreStrategy; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional.IStorageProcessorTransaction; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; +import ch.systemsx.cisd.etlserver.registrator.ContainerDataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; @@ -45,31 +46,67 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati private final File markerFile; + private boolean isContainer; + + /** + * simplified constructor for container algorithm + * + * @param dataSetInformation + * @param dataStoreStrategyKey + * @param incomingDataSetFile + * @param stagingDirectory + * @param preCommitDirectory + * @param dataStoreCode + */ + public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation, + DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, + File stagingDirectory, File preCommitDirectory, String dataStoreCode) + { + this.recoveryAlgorithm = + new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, + incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, + null); + this.markerFile = null; + this.transaction = null; + this.isContainer = true; + } + public DataSetStoragePrecommitRecoveryAlgorithm(T dataSetInformation, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, File stagingDirectory, File preCommitDirectory, String dataStoreCode, DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths, File markerFile, IStorageProcessorTransaction transaction) { - this.recoveryAlgorithm = new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, incomingDataSetFile, stagingDirectory, - preCommitDirectory, dataStoreCode, dataSetStoragePaths); + this.recoveryAlgorithm = + new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, + incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, + dataSetStoragePaths); this.transaction = transaction; this.markerFile = markerFile; + this.isContainer = false; } public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( OmniscientTopLevelDataSetRegistratorState state) { IDataStoreStrategy dataStoreStrategy = - state.getDataStrategyStore().getDataStoreStrategy(recoveryAlgorithm.getDataStoreStrategyKey()); + state.getDataStrategyStore().getDataStoreStrategy( + recoveryAlgorithm.getDataStoreStrategyKey()); IMailClient mailClient = state.getGlobalState().getMailClient(); IFileOperations fileOperations = state.getFileOperations(); IStorageProcessorTransactional storageProcessor = state.getStorageProcessor(); - return new DataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, fileOperations, - mailClient, this); + if (isContainer) + { + return new ContainerDataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, + fileOperations, mailClient, recoveryAlgorithm); + } else + { + return new DataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, + fileOperations, mailClient, this); + } } public IStorageProcessorTransaction getTransaction() @@ -146,6 +183,9 @@ public class DataSetStoragePrecommitRecoveryAlgorithm<T extends DataSetInformati return recoveryAlgorithm.getDataSetStoragePaths(); } - - + public DataSetStorageRecoveryAlgorithm<T> getRecoveryAlgorithm() + { + return recoveryAlgorithm; + } + } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java index 7385b7f4b7a7f988ffb3ba4527b938d3979669b0..663587ba0289390267b1fa0fb5cf65728d53e7bb 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/recovery/DataSetStorageStoredRecoveryAlgorithm.java @@ -25,31 +25,51 @@ import ch.systemsx.cisd.etlserver.DataStoreStrategyKey; import ch.systemsx.cisd.etlserver.IDataStoreStrategy; import ch.systemsx.cisd.etlserver.IStorageProcessorTransactional; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; +import ch.systemsx.cisd.etlserver.registrator.ContainerDataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm; import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithm.DataSetStoragePaths; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; /** - * - * * @author jakubs */ -public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation>implements -Serializable +public class DataSetStorageStoredRecoveryAlgorithm<T extends DataSetInformation> implements + Serializable { private static final long serialVersionUID = 1L; private DataSetStorageRecoveryAlgorithm<T> recoveryAlgorithm; - + + private boolean isContainer; + + public boolean isContainer() + { + return isContainer; + } + public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation, DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, File stagingDirectory, File preCommitDirectory, String dataStoreCode, DataSetStorageAlgorithm.DataSetStoragePaths dataSetStoragePaths) { - recoveryAlgorithm = new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, incomingDataSetFile, stagingDirectory, - preCommitDirectory, dataStoreCode, dataSetStoragePaths); + recoveryAlgorithm = + new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, + incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, + dataSetStoragePaths); + isContainer = false; } - + + public DataSetStorageStoredRecoveryAlgorithm(T dataSetInformation, + DataStoreStrategyKey dataStoreStrategyKey, File incomingDataSetFile, + File stagingDirectory, File preCommitDirectory, String dataStoreCode) + { + recoveryAlgorithm = + new DataSetStorageRecoveryAlgorithm<T>(dataSetInformation, dataStoreStrategyKey, + incomingDataSetFile, stagingDirectory, preCommitDirectory, dataStoreCode, + null); + isContainer = true; + } + public DataSetStorageAlgorithm<T> recoverDataSetStorageAlgorithm( OmniscientTopLevelDataSetRegistratorState state) { @@ -61,8 +81,20 @@ Serializable IStorageProcessorTransactional storageProcessor = state.getStorageProcessor(); - return new DataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, fileOperations, - mailClient, this); + if (isContainer) + { + return new ContainerDataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, + fileOperations, mailClient, recoveryAlgorithm); + } else + { + return new DataSetStorageAlgorithm<T>(dataStoreStrategy, storageProcessor, + fileOperations, mailClient, this); + } + } + + public DataSetStorageRecoveryAlgorithm<T> getRecoveryAlgorithm() + { + return recoveryAlgorithm; } /** diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java index cde0cf806b14df48c3b330a20007fc6466e5b9d4..ef6dc9258f238b521d3ec54111dc06cffb843937 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java @@ -111,6 +111,8 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste protected static final DataSetType DATA_SET_TYPE = new DataSetType("O1"); + protected static final DataSetType CONTAINER_DATA_SET_TYPE = new DataSetType("CONTAINER_TYPE"); + protected static final String EXPERIMENT_PERM_ID = "experiment-perm-id"; protected static final String EXPERIMENT_IDENTIFIER = "/SPACE/PROJECT/EXP"; @@ -411,9 +413,9 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste } protected void assertStorageProcess(AtomicEntityOperationDetails recordedObject, - String dataSetCode, String dataSetDirectory, int testId) + String dataSetCode, String dataSetDirectory, int testId, boolean withContainer) { - assertEquals(1, recordedObject.getDataSetRegistrations().size()); + assertEquals(1 + (withContainer ? 1 : 0), recordedObject.getDataSetRegistrations().size()); NewExternalData dataSet = recordedObject.getDataSetRegistrations().get(0); @@ -443,6 +445,13 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste .trim()); } + protected void assertStorageProcess(AtomicEntityOperationDetails recordedObject, + String dataSetCode, String dataSetDirectory, int testId) + { + assertStorageProcess(recordedObject, dataSetCode, dataSetDirectory, testId, false); + assertEquals(1, recordedObject.getDataSetRegistrations().size()); + } + protected void assertDataSetNotStoredProcess(String dataSetCode) { File datasetLocation = @@ -462,7 +471,6 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste */ protected static void makeFileSystemUnavailable(File storeRootDirectory) { - System.out.println("Make stuff anavailabl!!!!!!!!!!!!!!!!!!!e"); for (String regDir : registrationDirectories) { new File(storeRootDirectory, regDir).renameTo(new File(storeRootDirectory, regDir diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java index 7ed7c23cfe0f3d7bbd9f69d223833e865d75a089..2cf58156d0f275f101fb8f62db29f9f5211f2b67 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java @@ -527,12 +527,21 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest } + @DataProvider(name = "multipleCheckpointsDataProvider") + public Object[][] multipleCheckpointsData() + { + return new Object[][] + { + { "v2-simple-testcase.py", false }, + { "v2-container-testcase.py", true } }; + } + /** * This tests the registration with adventure, where the failure and recovery happens at every * possible step. */ - @Test - public void testRecoveryAtMultipleCheckpoints() + @Test(dataProvider = "multipleCheckpointsDataProvider") + public void testRecoveryAtMultipleCheckpoints(String script, boolean includeContainer) { RecoveryTestCase testCase = new RecoveryTestCase("No name"); setUpHomeDataBaseExpectations(); @@ -540,8 +549,7 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest createData(); Properties properties = - createThreadPropertiesRelativeToScriptsFolder(testCase.dropboxScriptPath, - testCase.overrideProperties); + createThreadPropertiesRelativeToScriptsFolder(script, testCase.overrideProperties); createHandler(properties, true, false); @@ -549,7 +557,7 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest new RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails>(); // create expectations - context.checking(new MultipleErrorsExpectations(atomicatOperationDetails)); + context.checking(new MultipleErrorsExpectations(atomicatOperationDetails, includeContainer)); handler.handle(markerFile); setTheRecoveryInfo(testCase.recoveryRertyCount, testCase.recoveryLastTry); @@ -573,10 +581,10 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest // now the storage has succeeded, but storage confirmation has not. handler.handle(markerFile); -// setTheRecoveryInfo(testCase.recoveryRertyCount, testCase.recoveryLastTry); + // setTheRecoveryInfo(testCase.recoveryRertyCount, testCase.recoveryLastTry); // now the storage confirmation has succeeded assertStorageProcess(atomicatOperationDetails.recordedObject(), DATA_SET_CODE, - "sub_data_set_1", 0); + "sub_data_set_1", 0, includeContainer); assertNoOriginalMarkerFileExists(); assertNoRecoveryMarkerFile(); @@ -592,15 +600,20 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest class MultipleErrorsExpectations extends AbstractExpectations { public MultipleErrorsExpectations( - final RecordingMatcher<AtomicEntityOperationDetails> atomicatOperationDetails) + final RecordingMatcher<AtomicEntityOperationDetails> atomicatOperationDetails, + boolean withContainer) { super(atomicatOperationDetails); - prepareExpectations(); + prepareExpectations(withContainer); } - private void prepareExpectations() + private void prepareExpectations(boolean withContainer) { initialExpectations(); + if (withContainer) + { + initialContainerExpectations(); + } // first try - fail at registration registerDataSetsAndThrow(true); @@ -613,6 +626,10 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest // fourth try - success setStorageConfirmed(false); + if (withContainer) + { + setStorageConfirmed(CONTAINER_DATA_SET_CODE, false); + } } } @@ -736,6 +753,17 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest new File(new File(stagingDirectory, DATA_SET_CODE), "sub_data_set_1")); } + protected void initialContainerExpectations() + { + + // create dataset + one(openBisService).createDataSetCode(); + will(returnValue(CONTAINER_DATA_SET_CODE)); + + // validate dataset + one(dataSetValidator).assertValidDataSet(CONTAINER_DATA_SET_TYPE, null); + } + protected CustomAction makeFileSystemUnavailableAction() { return new CustomAction("makeSystemUnavailable") @@ -794,7 +822,16 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest */ protected void setStorageConfirmed(boolean shouldFail) { - one(openBisService).setStorageConfirmed(DATA_SET_CODE); + setStorageConfirmed(DATA_SET_CODE, shouldFail); + } + + /** + * @param dataSetCode - the dataset to be confirmed + * @param shouldFail - if true the call to as should throw an exception + */ + protected void setStorageConfirmed(String dataSetCode, boolean shouldFail) + { + one(openBisService).setStorageConfirmed(dataSetCode); if (shouldFail) { will(throwException(new EnvironmentFailureException( diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/v2-container-testcase.py b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/v2-container-testcase.py new file mode 100644 index 0000000000000000000000000000000000000000..1b1b1d9613f80cfee9059338b7c77ccb71f3026d --- /dev/null +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/v2-container-testcase.py @@ -0,0 +1,9 @@ +execfile("sourceTest/java/ch/systemsx/cisd/etlserver/registrator/all-hooks.py") +def process(): + dataSet = transaction.createNewDataSet() + transaction.moveFile(incoming.getPath() + '/sub_data_set_1', dataSet) + dataSet.setDataSetType('O1') + dataSet.setExperiment(transaction.getExperiment('/SPACE/PROJECT/EXP')) + container = transaction.createNewDataSet("CONTAINER_TYPE") + container.setExperiment(transaction.getExperiment("/SPACE/PROJECT/EXP")) + container.setContainedDataSetCodes([dataSet.getDataSetCode()]) \ No newline at end of file