From c22c764d08265937c3256e3dedf14b22e1737a8d Mon Sep 17 00:00:00 2001 From: kaloyane <kaloyane> Date: Mon, 30 May 2011 16:19:56 +0000 Subject: [PATCH] [LMS-2285] added unit test SVN: 21512 --- .../api/v1/impl/DataSetUpdatable.java | 5 ++ .../JythonTopLevelDataSetRegistratorTest.java | 88 +++++++++++++++++++ .../transaction-with-dataset-update.py | 15 ++++ 3 files changed, 108 insertions(+) create mode 100644 datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java index a4eaa09b699..5a665bdf963 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java @@ -24,6 +24,7 @@ import ch.systemsx.cisd.etlserver.registrator.api.v1.IExperimentImmutable; import ch.systemsx.cisd.etlserver.registrator.api.v1.ISampleImmutable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper; /** @@ -37,6 +38,10 @@ public class DataSetUpdatable extends DataSetImmutable implements IDataSetUpdata public DataSetUpdatable(ExternalData dataSet) { super(dataSet); + if (dataSet.getProperties() == null) + { + dataSet.setDataSetProperties(new ArrayList<IEntityProperty>()); + } } public void setExperiment(IExperimentImmutable experiment) diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java index 7196edafb2b..c686923c74a 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java @@ -62,14 +62,18 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.AtomicEntityOperationDetails; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DatasetLocationUtil; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentBuilder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.PropertyBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty; import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat; @@ -85,6 +89,8 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractFileSystemTest private static final String DATA_SET_CODE = "data-set-code"; + private static final String CONTAINER_DATA_SET_CODE = "container-data-set-code"; + private static final String DATABASE_INSTANCE_UUID = "db-uuid"; private static final DataSetType DATA_SET_TYPE = new DataSetType("O1"); @@ -527,6 +533,88 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractFileSystemTest context.assertIsSatisfied(); } + // TODO KE: make me work ! + @Test + public void testTransactionWithDataSetUpdate() + { + setUpHomeDataBaseExpectations(); + Properties properties = + createThreadProperties(SCRIPTS_FOLDER + "transaction-with-dataset-update.py"); + final File stagingDir = new File(workingDirectory, "staging"); + properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath()); + createHandler(properties, false, true); + createData(); + + ExperimentBuilder builder = new ExperimentBuilder().identifier(EXPERIMENT_IDENTIFIER); + final Experiment experiment = builder.getExperiment(); + + final ContainerDataSet containerDataSet = new ContainerDataSet(); + containerDataSet.setId(1L); + + final RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails> atomicOperationDetails = + new RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails>(); + context.checking(new Expectations() + { + { + one(openBisService).createDataSetCode(); + will(returnValue(DATA_SET_CODE)); + + exactly(2).of(openBisService).tryToGetExperiment( + new ExperimentIdentifierFactory(experiment.getIdentifier()) + .createIdentifier()); + will(returnValue(experiment)); + + one(openBisService).tryGetDataSet(CONTAINER_DATA_SET_CODE); + will(returnValue(containerDataSet)); + + one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE, + new File(new File(stagingDir, DATA_SET_CODE), "data_set")); + + one(openBisService).performEntityOperations(with(atomicOperationDetails)); + will(returnValue(new AtomicEntityOperationResult())); + } + }); + + handler.handle(markerFile); + + assertEquals(1, MockStorageProcessor.instance.incomingDirs.size()); + ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails operations = + atomicOperationDetails.recordedObject(); + + assertEquals(1, operations.getDataSetRegistrations().size()); + assertEquals(0, operations.getExperimentUpdates().size()); + assertEquals(0, operations.getSampleUpdates().size()); + assertEquals(0, operations.getSampleRegistrations().size()); + assertEquals(0, operations.getExperimentRegistrations().size()); + assertEquals(1, operations.getDataSetUpdates().size()); + + NewExternalData dataSet = operations.getDataSetRegistrations().get(0); + assertEquals(DATA_SET_CODE, dataSet.getCode()); + assertEquals(DATA_SET_TYPE, dataSet.getDataSetType()); + + DataSetUpdatesDTO dataSetUpdate = operations.getDataSetUpdates().get(0); + assertEquals(Arrays.asList(DATA_SET_CODE), + Arrays.asList(dataSetUpdate.getModifiedContainedDatasetCodesOrNull())); + + EntityProperty propertyChanged = + new PropertyBuilder("newProp").value("newValue").getProperty(); + assertEquals(Arrays.asList(propertyChanged).toString(), dataSetUpdate.getProperties() + .toString()); + + File datasetLocation = + DatasetLocationUtil.getDatasetLocationPath(workingDirectory, DATA_SET_CODE, + ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID, + DATABASE_INSTANCE_UUID); + assertEquals(FileUtilities.getRelativeFilePath(new File(workingDirectory, + ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID), + datasetLocation), + + dataSet.getLocation()); + assertEquals(1, MockStorageProcessor.instance.calledCommitCount); + assertEquals(datasetLocation, MockStorageProcessor.instance.rootDirs.get(0)); + context.assertIsSatisfied(); + } + @Test public void testScriptDies() { diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py new file mode 100644 index 00000000000..08212defd1b --- /dev/null +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py @@ -0,0 +1,15 @@ +transaction = service.transaction(incoming, factory) +dataSet = transaction.createNewDataSet() +dataSet.setPropertyValue('dataSetProp', 'dataSetPropValue') +dataSet.setDataSetType('O1') + +experiment = transaction.getExperiment('/SPACE/PROJECT/EXP') +dataSet.setExperiment(experiment) +transaction.moveFile(incoming.getPath(), dataSet) + +container = transaction.getDataSetForUpdate("container-data-set-code") +newContents = list(container.containedDataSetCodes) +newContents.append(dataSet.dataSetCode) +container.setContainedDataSetCodes(newContents) +container.setPropertyValue("newProp", "newValue") + -- GitLab