diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/Cache.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/Cache.java index c415c009016d17127b5641ed68eeb37961b8f7ec..07a0a27d2c55c91bd34a58ee7883614ed11a286b 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/Cache.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/Cache.java @@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; */ public class Cache { - private static final long LIVE_TIME = 1000; + static final long LIVE_TIME = 1000; private static final class TimeStampedObject<T> { @@ -71,7 +71,7 @@ public class Cache return getObject(externalData, code); } - void putDataSet(ExternalData dataSet) + void putExternalData(ExternalData dataSet) { externalData.put(dataSet.getCode(), timestamp(dataSet)); } @@ -81,7 +81,7 @@ public class Cache return getObject(experiments, experimentId); } - void putDataSet(Experiment experiment) + void putExperiment(Experiment experiment) { experiments.put(experiment.getIdentifier(), timestamp(experiment)); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverContext.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverContext.java index 20cb0b0899f71900d0ce498dd28cfb1e34cb5aeb..80bb9c6e8c7a21826266e10ee3d08f52be263791 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverContext.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/FtpPathResolverContext.java @@ -111,7 +111,7 @@ public class FtpPathResolverContext service.listDataSetsByCode(sessionToken, codesToAskFor); for (ExternalData newDataSet : newDataSets) { - cache.putDataSet(newDataSet); + cache.putExternalData(newDataSet); dataSets.add(newDataSet); } } @@ -131,7 +131,7 @@ public class FtpPathResolverContext Collections.singletonList(experimentIdentifier), new ExperimentFetchOptions()); experiment = result.isEmpty() ? null : result.get(0); - cache.putDataSet(experiment); + cache.putExperiment(experiment); } return experiment; } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/CacheTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/CacheTest.java new file mode 100644 index 0000000000000000000000000000000000000000..618e77786f96241c3369c7a09569c29f19439da7 --- /dev/null +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/CacheTest.java @@ -0,0 +1,95 @@ +/* + * 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.openbis.dss.generic.server.ftp; + +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.common.utilities.ITimeProvider; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.DataSetInitializer; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityRegistrationDetails; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityRegistrationDetails.EntityRegistrationDetailsInitializer; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class CacheTest extends AssertJUnit +{ + @Test + public void testGetDataSet() + { + DataSetInitializer initializer = new DataSetInitializer(); + initializer.setCode("ds1"); + initializer.setDataSetTypeCode("A"); + initializer.setExperimentIdentifier("E"); + EntityRegistrationDetailsInitializer initializer2 = new EntityRegistrationDetailsInitializer(); + initializer.setRegistrationDetails(new EntityRegistrationDetails(initializer2)); + DataSet dataSet = new DataSet(initializer); + Cache cache = cache(0, Cache.LIVE_TIME / 2, Cache.LIVE_TIME + 1); + + cache.putDataSet(dataSet); + + assertSame(dataSet, cache.getDataSet(dataSet.getCode())); + assertEquals(null, cache.getDataSet(dataSet.getCode())); + } + + @Test + public void testGetExternalData() + { + ExternalData dataSet = new ContainerDataSet(); + dataSet.setCode("ds1"); + Cache cache = cache(0, Cache.LIVE_TIME / 2, Cache.LIVE_TIME + 1); + + cache.putExternalData(dataSet); + + assertSame(dataSet, cache.getExternalData(dataSet.getCode())); + assertEquals(null, cache.getExternalData(dataSet.getCode())); + } + + @Test + public void testGetExperiment() + { + Experiment experiment = new Experiment(); + experiment.setIdentifier("e1"); + Cache cache = cache(0, Cache.LIVE_TIME / 2, Cache.LIVE_TIME + 1); + + cache.putExperiment(experiment); + + assertSame(experiment, cache.getExperiment(experiment.getIdentifier())); + assertEquals(null, cache.getExperiment(experiment.getIdentifier())); + } + + private Cache cache(final long... timestamps) + { + return new Cache(new ITimeProvider() + { + private int index; + + public long getTimeInMilliseconds() + { + return timestamps[Math.min(index++, timestamps.length - 1)]; + } + }); + } + +}